@webiny/lexical-editor 0.0.0-unstable.06b2ede40f

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 (308) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +17 -0
  3. package/commands/image.d.ts +6 -0
  4. package/commands/image.js +4 -0
  5. package/commands/image.js.map +1 -0
  6. package/commands/index.d.ts +5 -0
  7. package/commands/index.js +7 -0
  8. package/commands/index.js.map +1 -0
  9. package/commands/list.d.ts +7 -0
  10. package/commands/list.js +6 -0
  11. package/commands/list.js.map +1 -0
  12. package/commands/quote.d.ts +5 -0
  13. package/commands/quote.js +4 -0
  14. package/commands/quote.js.map +1 -0
  15. package/commands/toolbar.d.ts +1 -0
  16. package/commands/toolbar.js +4 -0
  17. package/commands/toolbar.js.map +1 -0
  18. package/commands/typography.d.ts +8 -0
  19. package/commands/typography.js +4 -0
  20. package/commands/typography.js.map +1 -0
  21. package/components/Editor/EnsureHeadingTagPlugin.d.ts +6 -0
  22. package/components/Editor/EnsureHeadingTagPlugin.js +20 -0
  23. package/components/Editor/EnsureHeadingTagPlugin.js.map +1 -0
  24. package/components/Editor/HeadingEditor.d.ts +7 -0
  25. package/components/Editor/HeadingEditor.js +22 -0
  26. package/components/Editor/HeadingEditor.js.map +1 -0
  27. package/components/Editor/ParagraphEditor.d.ts +7 -0
  28. package/components/Editor/ParagraphEditor.js +22 -0
  29. package/components/Editor/ParagraphEditor.js.map +1 -0
  30. package/components/Editor/RichTextEditor.d.ts +49 -0
  31. package/components/Editor/RichTextEditor.js +133 -0
  32. package/components/Editor/RichTextEditor.js.map +1 -0
  33. package/components/Editor/normalizeInputValue.d.ts +6 -0
  34. package/components/Editor/normalizeInputValue.js +16 -0
  35. package/components/Editor/normalizeInputValue.js.map +1 -0
  36. package/components/LexicalEditorConfig/LexicalEditorConfig.d.ts +20 -0
  37. package/components/LexicalEditorConfig/LexicalEditorConfig.js +63 -0
  38. package/components/LexicalEditorConfig/LexicalEditorConfig.js.map +1 -0
  39. package/components/LexicalEditorConfig/components/Node.d.ts +14 -0
  40. package/components/LexicalEditorConfig/components/Node.js +30 -0
  41. package/components/LexicalEditorConfig/components/Node.js.map +1 -0
  42. package/components/LexicalEditorConfig/components/Plugin.d.ts +13 -0
  43. package/components/LexicalEditorConfig/components/Plugin.js +30 -0
  44. package/components/LexicalEditorConfig/components/Plugin.js.map +1 -0
  45. package/components/LexicalEditorConfig/components/ToolbarElement.d.ts +13 -0
  46. package/components/LexicalEditorConfig/components/ToolbarElement.js +30 -0
  47. package/components/LexicalEditorConfig/components/ToolbarElement.js.map +1 -0
  48. package/components/LexicalHtmlRenderer.d.ts +14 -0
  49. package/components/LexicalHtmlRenderer.js +55 -0
  50. package/components/LexicalHtmlRenderer.js.map +1 -0
  51. package/components/Toolbar/StaticToolbar.css +260 -0
  52. package/components/Toolbar/StaticToolbar.d.ts +5 -0
  53. package/components/Toolbar/StaticToolbar.js +22 -0
  54. package/components/Toolbar/StaticToolbar.js.map +1 -0
  55. package/components/Toolbar/Toolbar.css +643 -0
  56. package/components/Toolbar/Toolbar.d.ts +6 -0
  57. package/components/Toolbar/Toolbar.js +148 -0
  58. package/components/Toolbar/Toolbar.js.map +1 -0
  59. package/components/ToolbarActions/BoldAction.d.ts +2 -0
  60. package/components/ToolbarActions/BoldAction.js +25 -0
  61. package/components/ToolbarActions/BoldAction.js.map +1 -0
  62. package/components/ToolbarActions/BulletListAction.d.ts +2 -0
  63. package/components/ToolbarActions/BulletListAction.js +40 -0
  64. package/components/ToolbarActions/BulletListAction.js.map +1 -0
  65. package/components/ToolbarActions/CodeHighlightAction.d.ts +2 -0
  66. package/components/ToolbarActions/CodeHighlightAction.js +25 -0
  67. package/components/ToolbarActions/CodeHighlightAction.js.map +1 -0
  68. package/components/ToolbarActions/FontColorAction.d.ts +29 -0
  69. package/components/ToolbarActions/FontColorAction.js +50 -0
  70. package/components/ToolbarActions/FontColorAction.js.map +1 -0
  71. package/components/ToolbarActions/FontSizeAction.d.ts +14 -0
  72. package/components/ToolbarActions/FontSizeAction.js +91 -0
  73. package/components/ToolbarActions/FontSizeAction.js.map +1 -0
  74. package/components/ToolbarActions/ImageAction.d.ts +2 -0
  75. package/components/ToolbarActions/ImageAction.js +37 -0
  76. package/components/ToolbarActions/ImageAction.js.map +1 -0
  77. package/components/ToolbarActions/ItalicAction.d.ts +2 -0
  78. package/components/ToolbarActions/ItalicAction.js +25 -0
  79. package/components/ToolbarActions/ItalicAction.js.map +1 -0
  80. package/components/ToolbarActions/LinkAction.d.ts +2 -0
  81. package/components/ToolbarActions/LinkAction.js +37 -0
  82. package/components/ToolbarActions/LinkAction.js.map +1 -0
  83. package/components/ToolbarActions/NumberedListAction.d.ts +2 -0
  84. package/components/ToolbarActions/NumberedListAction.js +48 -0
  85. package/components/ToolbarActions/NumberedListAction.js.map +1 -0
  86. package/components/ToolbarActions/QuoteAction.d.ts +2 -0
  87. package/components/ToolbarActions/QuoteAction.js +33 -0
  88. package/components/ToolbarActions/QuoteAction.js.map +1 -0
  89. package/components/ToolbarActions/TextAlignmentAction.d.ts +29 -0
  90. package/components/ToolbarActions/TextAlignmentAction.js +61 -0
  91. package/components/ToolbarActions/TextAlignmentAction.js.map +1 -0
  92. package/components/ToolbarActions/TypographyAction.d.ts +29 -0
  93. package/components/ToolbarActions/TypographyAction.js +108 -0
  94. package/components/ToolbarActions/TypographyAction.js.map +1 -0
  95. package/components/ToolbarActions/UnderlineAction.d.ts +2 -0
  96. package/components/ToolbarActions/UnderlineAction.js +24 -0
  97. package/components/ToolbarActions/UnderlineAction.js.map +1 -0
  98. package/context/FontColorActionContext.d.ts +6 -0
  99. package/context/FontColorActionContext.js +4 -0
  100. package/context/FontColorActionContext.js.map +1 -0
  101. package/context/RichTextEditorContext.d.ts +19 -0
  102. package/context/RichTextEditorContext.js +21 -0
  103. package/context/RichTextEditorContext.js.map +1 -0
  104. package/context/SharedHistoryContext.d.ts +10 -0
  105. package/context/SharedHistoryContext.js +19 -0
  106. package/context/SharedHistoryContext.js.map +1 -0
  107. package/context/TextAlignmentActionContextProps.d.ts +9 -0
  108. package/context/TextAlignmentActionContextProps.js +4 -0
  109. package/context/TextAlignmentActionContextProps.js.map +1 -0
  110. package/context/TypographyActionContext.d.ts +8 -0
  111. package/context/TypographyActionContext.js +4 -0
  112. package/context/TypographyActionContext.js.map +1 -0
  113. package/hooks/index.d.ts +8 -0
  114. package/hooks/index.js +10 -0
  115. package/hooks/index.js.map +1 -0
  116. package/hooks/useCurrentElement.d.ts +7 -0
  117. package/hooks/useCurrentElement.js +27 -0
  118. package/hooks/useCurrentElement.js.map +1 -0
  119. package/hooks/useCurrentSelection.d.ts +13 -0
  120. package/hooks/useCurrentSelection.js +57 -0
  121. package/hooks/useCurrentSelection.js.map +1 -0
  122. package/hooks/useFontColorPicker.d.ts +2 -0
  123. package/hooks/useFontColorPicker.js +11 -0
  124. package/hooks/useFontColorPicker.js.map +1 -0
  125. package/hooks/useIsMounted.d.ts +1 -0
  126. package/hooks/useIsMounted.js +12 -0
  127. package/hooks/useIsMounted.js.map +1 -0
  128. package/hooks/useList.d.ts +2 -0
  129. package/hooks/useList.js +50 -0
  130. package/hooks/useList.js.map +1 -0
  131. package/hooks/useQuote.d.ts +2 -0
  132. package/hooks/useQuote.js +17 -0
  133. package/hooks/useQuote.js.map +1 -0
  134. package/hooks/useRichTextEditor.d.ts +2 -0
  135. package/hooks/useRichTextEditor.js +11 -0
  136. package/hooks/useRichTextEditor.js.map +1 -0
  137. package/hooks/useTextAlignmentAction.d.ts +1 -0
  138. package/hooks/useTextAlignmentAction.js +11 -0
  139. package/hooks/useTextAlignmentAction.js.map +1 -0
  140. package/hooks/useTypographyAction.d.ts +1 -0
  141. package/hooks/useTypographyAction.js +11 -0
  142. package/hooks/useTypographyAction.js.map +1 -0
  143. package/images/icons/LICENSE.md +5 -0
  144. package/images/icons/chat-square-quote.svg +1 -0
  145. package/images/icons/chevron-down.svg +1 -0
  146. package/images/icons/code.svg +1 -0
  147. package/images/icons/font-color.svg +1 -0
  148. package/images/icons/indent.svg +3 -0
  149. package/images/icons/insert-image.svg +4 -0
  150. package/images/icons/justify.svg +3 -0
  151. package/images/icons/link.svg +1 -0
  152. package/images/icons/list-ol.svg +1 -0
  153. package/images/icons/list-ul.svg +1 -0
  154. package/images/icons/outdent.svg +3 -0
  155. package/images/icons/pencil-fill.svg +1 -0
  156. package/images/icons/text-center.svg +1 -0
  157. package/images/icons/text-left.svg +1 -0
  158. package/images/icons/text-paragraph.svg +1 -0
  159. package/images/icons/text-right.svg +1 -0
  160. package/images/icons/type-bold.svg +1 -0
  161. package/images/icons/type-h1.svg +1 -0
  162. package/images/icons/type-h2.svg +1 -0
  163. package/images/icons/type-h3.svg +1 -0
  164. package/images/icons/type-h4.svg +1 -0
  165. package/images/icons/type-h5.svg +1 -0
  166. package/images/icons/type-h6.svg +1 -0
  167. package/images/icons/type-italic.svg +1 -0
  168. package/images/icons/type-strikethrough.svg +1 -0
  169. package/images/icons/type-underline.svg +1 -0
  170. package/images/icons/unlink_icon.svg +1 -0
  171. package/index.d.ts +37 -0
  172. package/index.js +50 -0
  173. package/index.js.map +1 -0
  174. package/package.json +40 -0
  175. package/plugins/BlurEventPlugin/BlurEventPlugin.d.ts +7 -0
  176. package/plugins/BlurEventPlugin/BlurEventPlugin.js +20 -0
  177. package/plugins/BlurEventPlugin/BlurEventPlugin.js.map +1 -0
  178. package/plugins/CodeHighlightPlugin/CodeHighlightPlugin.d.ts +1 -0
  179. package/plugins/CodeHighlightPlugin/CodeHighlightPlugin.js +14 -0
  180. package/plugins/CodeHighlightPlugin/CodeHighlightPlugin.js.map +1 -0
  181. package/plugins/CodeHighlightPlugin/index.d.ts +1 -0
  182. package/plugins/CodeHighlightPlugin/index.js +3 -0
  183. package/plugins/CodeHighlightPlugin/index.js.map +1 -0
  184. package/plugins/FloatingLinkEditorPlugin/FloatingLinkEditor.d.ts +16 -0
  185. package/plugins/FloatingLinkEditorPlugin/FloatingLinkEditor.js +158 -0
  186. package/plugins/FloatingLinkEditorPlugin/FloatingLinkEditor.js.map +1 -0
  187. package/plugins/FloatingLinkEditorPlugin/FloatingLinkEditorController.d.ts +8 -0
  188. package/plugins/FloatingLinkEditorPlugin/FloatingLinkEditorController.js +62 -0
  189. package/plugins/FloatingLinkEditorPlugin/FloatingLinkEditorController.js.map +1 -0
  190. package/plugins/FloatingLinkEditorPlugin/FloatingLinkEditorPlugin.css +176 -0
  191. package/plugins/FloatingLinkEditorPlugin/FloatingLinkEditorPlugin.d.ts +7 -0
  192. package/plugins/FloatingLinkEditorPlugin/FloatingLinkEditorPlugin.js +14 -0
  193. package/plugins/FloatingLinkEditorPlugin/FloatingLinkEditorPlugin.js.map +1 -0
  194. package/plugins/FloatingLinkEditorPlugin/LinkEditForm.d.ts +8 -0
  195. package/plugins/FloatingLinkEditorPlugin/LinkEditForm.js +104 -0
  196. package/plugins/FloatingLinkEditorPlugin/LinkEditForm.js.map +1 -0
  197. package/plugins/FloatingLinkEditorPlugin/LinkPreviewForm.d.ts +9 -0
  198. package/plugins/FloatingLinkEditorPlugin/LinkPreviewForm.js +34 -0
  199. package/plugins/FloatingLinkEditorPlugin/LinkPreviewForm.js.map +1 -0
  200. package/plugins/FloatingLinkEditorPlugin/index.d.ts +1 -0
  201. package/plugins/FloatingLinkEditorPlugin/index.js +3 -0
  202. package/plugins/FloatingLinkEditorPlugin/index.js.map +1 -0
  203. package/plugins/FloatingLinkEditorPlugin/isChildOfLinkEditor.d.ts +1 -0
  204. package/plugins/FloatingLinkEditorPlugin/isChildOfLinkEditor.js +12 -0
  205. package/plugins/FloatingLinkEditorPlugin/isChildOfLinkEditor.js.map +1 -0
  206. package/plugins/FontColorPlugin/FontColorPlugin.d.ts +1 -0
  207. package/plugins/FontColorPlugin/FontColorPlugin.js +27 -0
  208. package/plugins/FontColorPlugin/FontColorPlugin.js.map +1 -0
  209. package/plugins/FontColorPlugin/applyColorToNode.d.ts +3 -0
  210. package/plugins/FontColorPlugin/applyColorToNode.js +8 -0
  211. package/plugins/FontColorPlugin/applyColorToNode.js.map +1 -0
  212. package/plugins/FontColorPlugin/applyColorToSelection.d.ts +3 -0
  213. package/plugins/FontColorPlugin/applyColorToSelection.js +66 -0
  214. package/plugins/FontColorPlugin/applyColorToSelection.js.map +1 -0
  215. package/plugins/ImagesPlugin/ImagesPlugin.d.ts +12 -0
  216. package/plugins/ImagesPlugin/ImagesPlugin.js +151 -0
  217. package/plugins/ImagesPlugin/ImagesPlugin.js.map +1 -0
  218. package/plugins/LinkPlugin/LinkPlugin.d.ts +5 -0
  219. package/plugins/LinkPlugin/LinkPlugin.js +59 -0
  220. package/plugins/LinkPlugin/LinkPlugin.js.map +1 -0
  221. package/plugins/ListPLugin/ListPlugin.d.ts +1 -0
  222. package/plugins/ListPLugin/ListPlugin.js +17 -0
  223. package/plugins/ListPLugin/ListPlugin.js.map +1 -0
  224. package/plugins/QuoteNodePlugin/QuoteNodePlugin.d.ts +1 -0
  225. package/plugins/QuoteNodePlugin/QuoteNodePlugin.js +18 -0
  226. package/plugins/QuoteNodePlugin/QuoteNodePlugin.js.map +1 -0
  227. package/plugins/StateHandlingPlugin.d.ts +8 -0
  228. package/plugins/StateHandlingPlugin.js +75 -0
  229. package/plugins/StateHandlingPlugin.js.map +1 -0
  230. package/plugins/TypographyPlugin/TypographyPlugin.d.ts +1 -0
  231. package/plugins/TypographyPlugin/TypographyPlugin.js +27 -0
  232. package/plugins/TypographyPlugin/TypographyPlugin.js.map +1 -0
  233. package/types.d.ts +12 -0
  234. package/types.js +9 -0
  235. package/types.js.map +1 -0
  236. package/ui/ContentEditable.css +22 -0
  237. package/ui/ContentEditable.d.ts +12 -0
  238. package/ui/ContentEditable.js +19 -0
  239. package/ui/ContentEditable.js.map +1 -0
  240. package/ui/Divider.d.ts +2 -0
  241. package/ui/Divider.js +8 -0
  242. package/ui/Divider.js.map +1 -0
  243. package/ui/DropDown.d.ts +25 -0
  244. package/ui/DropDown.js +182 -0
  245. package/ui/DropDown.js.map +1 -0
  246. package/ui/ImageResizer.d.ts +24 -0
  247. package/ui/ImageResizer.js +211 -0
  248. package/ui/ImageResizer.js.map +1 -0
  249. package/ui/Input.css +32 -0
  250. package/ui/LinkPreview.css +69 -0
  251. package/ui/LinkPreview.d.ts +12 -0
  252. package/ui/LinkPreview.js +97 -0
  253. package/ui/LinkPreview.js.map +1 -0
  254. package/ui/Placeholder.css +20 -0
  255. package/ui/Placeholder.d.ts +15 -0
  256. package/ui/Placeholder.js +24 -0
  257. package/ui/Placeholder.js.map +1 -0
  258. package/ui/TextInput.d.ts +18 -0
  259. package/ui/TextInput.js +34 -0
  260. package/ui/TextInput.js.map +1 -0
  261. package/ui/ToolbarActionDialog.d.ts +11 -0
  262. package/ui/ToolbarActionDialog.js +77 -0
  263. package/ui/ToolbarActionDialog.js.map +1 -0
  264. package/utils/canUseDOM.d.ts +1 -0
  265. package/utils/canUseDOM.js +3 -0
  266. package/utils/canUseDOM.js.map +1 -0
  267. package/utils/files.d.ts +11 -0
  268. package/utils/files.js +21 -0
  269. package/utils/files.js.map +1 -0
  270. package/utils/getDOMRangeRect.d.ts +8 -0
  271. package/utils/getDOMRangeRect.js +23 -0
  272. package/utils/getDOMRangeRect.js.map +1 -0
  273. package/utils/getSelectedNode.d.ts +2 -0
  274. package/utils/getSelectedNode.js +25 -0
  275. package/utils/getSelectedNode.js.map +1 -0
  276. package/utils/getTransparentImage.d.ts +1 -0
  277. package/utils/getTransparentImage.js +5 -0
  278. package/utils/getTransparentImage.js.map +1 -0
  279. package/utils/insertImage.d.ts +2 -0
  280. package/utils/insertImage.js +16 -0
  281. package/utils/insertImage.js.map +1 -0
  282. package/utils/isAnchorLink.d.ts +1 -0
  283. package/utils/isAnchorLink.js +5 -0
  284. package/utils/isAnchorLink.js.map +1 -0
  285. package/utils/isChildOfFloatingToolbar.d.ts +1 -0
  286. package/utils/isChildOfFloatingToolbar.js +12 -0
  287. package/utils/isChildOfFloatingToolbar.js.map +1 -0
  288. package/utils/isHTMLElement.d.ts +8 -0
  289. package/utils/isHTMLElement.js +12 -0
  290. package/utils/isHTMLElement.js.map +1 -0
  291. package/utils/isValidJSON.d.ts +1 -0
  292. package/utils/isValidJSON.js +13 -0
  293. package/utils/isValidJSON.js.map +1 -0
  294. package/utils/isValidLexicalData.d.ts +4 -0
  295. package/utils/isValidLexicalData.js +24 -0
  296. package/utils/isValidLexicalData.js.map +1 -0
  297. package/utils/point.d.ts +21 -0
  298. package/utils/point.js +49 -0
  299. package/utils/point.js.map +1 -0
  300. package/utils/rect.d.ts +45 -0
  301. package/utils/rect.js +130 -0
  302. package/utils/rect.js.map +1 -0
  303. package/utils/sanitizeUrl.d.ts +1 -0
  304. package/utils/sanitizeUrl.js +25 -0
  305. package/utils/sanitizeUrl.js.map +1 -0
  306. package/utils/setFloatingElemPosition.d.ts +1 -0
  307. package/utils/setFloatingElemPosition.js +30 -0
  308. package/utils/setFloatingElemPosition.js.map +1 -0
@@ -0,0 +1,17 @@
1
+ import { useEffect } from "react";
2
+ import { ListNode, ListItemNode } from "@webiny/lexical-nodes";
3
+ import { useList, useRichTextEditor } from "../../hooks";
4
+ export function ListPlugin() {
5
+ const {
6
+ editor
7
+ } = useRichTextEditor();
8
+ useEffect(() => {
9
+ if (!editor.hasNodes([ListNode, ListItemNode])) {
10
+ throw new Error("ListPlugin: ListNode and/or ListItemNode not registered in the editor!");
11
+ }
12
+ }, [editor]);
13
+ useList(editor);
14
+ return null;
15
+ }
16
+
17
+ //# sourceMappingURL=ListPlugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useEffect","ListNode","ListItemNode","useList","useRichTextEditor","ListPlugin","editor","hasNodes","Error"],"sources":["ListPlugin.ts"],"sourcesContent":["import { useEffect } from \"react\";\nimport { ListNode, ListItemNode } from \"@webiny/lexical-nodes\";\nimport { useList, useRichTextEditor } from \"~/hooks\";\n\nexport function ListPlugin(): null {\n const { editor } = useRichTextEditor();\n\n useEffect(() => {\n if (!editor.hasNodes([ListNode, ListItemNode])) {\n throw new Error(\n \"ListPlugin: ListNode and/or ListItemNode not registered in the editor!\"\n );\n }\n }, [editor]);\n\n useList(editor);\n\n return null;\n}\n"],"mappings":"AAAA,SAASA,SAAS,QAAQ,OAAO;AACjC,SAASC,QAAQ,EAAEC,YAAY,QAAQ,uBAAuB;AAC9D,SAASC,OAAO,EAAEC,iBAAiB;AAEnC,OAAO,SAASC,UAAUA,CAAA,EAAS;EAC/B,MAAM;IAAEC;EAAO,CAAC,GAAGF,iBAAiB,CAAC,CAAC;EAEtCJ,SAAS,CAAC,MAAM;IACZ,IAAI,CAACM,MAAM,CAACC,QAAQ,CAAC,CAACN,QAAQ,EAAEC,YAAY,CAAC,CAAC,EAAE;MAC5C,MAAM,IAAIM,KAAK,CACX,wEACJ,CAAC;IACL;EACJ,CAAC,EAAE,CAACF,MAAM,CAAC,CAAC;EAEZH,OAAO,CAACG,MAAM,CAAC;EAEf,OAAO,IAAI;AACf","ignoreList":[]}
@@ -0,0 +1 @@
1
+ export declare function QuotePlugin(): null;
@@ -0,0 +1,18 @@
1
+ import { useEffect } from "react";
2
+ import { QuoteNode } from "@webiny/lexical-nodes";
3
+ import { useQuote } from "../../hooks/useQuote";
4
+ import { useRichTextEditor } from "../../hooks";
5
+ export function QuotePlugin() {
6
+ const {
7
+ editor
8
+ } = useRichTextEditor();
9
+ useQuote(editor);
10
+ useEffect(() => {
11
+ if (!editor.hasNodes([QuoteNode])) {
12
+ throw new Error("QuoteNodePlugin: QuoteNode is not registered in the editor!");
13
+ }
14
+ }, [editor]);
15
+ return null;
16
+ }
17
+
18
+ //# sourceMappingURL=QuoteNodePlugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useEffect","QuoteNode","useQuote","useRichTextEditor","QuotePlugin","editor","hasNodes","Error"],"sources":["QuoteNodePlugin.ts"],"sourcesContent":["import { useEffect } from \"react\";\nimport { QuoteNode } from \"@webiny/lexical-nodes\";\nimport { useQuote } from \"~/hooks/useQuote\";\nimport { useRichTextEditor } from \"~/hooks\";\n\nexport function QuotePlugin() {\n const { editor } = useRichTextEditor();\n useQuote(editor);\n\n useEffect(() => {\n if (!editor.hasNodes([QuoteNode])) {\n throw new Error(\"QuoteNodePlugin: QuoteNode is not registered in the editor!\");\n }\n }, [editor]);\n\n return null;\n}\n"],"mappings":"AAAA,SAASA,SAAS,QAAQ,OAAO;AACjC,SAASC,SAAS,QAAQ,uBAAuB;AACjD,SAASC,QAAQ;AACjB,SAASC,iBAAiB;AAE1B,OAAO,SAASC,WAAWA,CAAA,EAAG;EAC1B,MAAM;IAAEC;EAAO,CAAC,GAAGF,iBAAiB,CAAC,CAAC;EACtCD,QAAQ,CAACG,MAAM,CAAC;EAEhBL,SAAS,CAAC,MAAM;IACZ,IAAI,CAACK,MAAM,CAACC,QAAQ,CAAC,CAACL,SAAS,CAAC,CAAC,EAAE;MAC/B,MAAM,IAAIM,KAAK,CAAC,6DAA6D,CAAC;IAClF;EACJ,CAAC,EAAE,CAACF,MAAM,CAAC,CAAC;EAEZ,OAAO,IAAI;AACf","ignoreList":[]}
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ import type { LexicalValue } from "../types";
3
+ interface OnChangeProps {
4
+ value: string | null | undefined;
5
+ onChange?: (value: LexicalValue) => void;
6
+ }
7
+ export declare const StateHandlingPlugin: (props: OnChangeProps) => React.JSX.Element;
8
+ export {};
@@ -0,0 +1,75 @@
1
+ import React, { useEffect, useRef, useMemo } from "react";
2
+ import debounce from "lodash/debounce";
3
+ import { OnChangePlugin as BaseOnChangePlugin } from "@lexical/react/LexicalOnChangePlugin";
4
+ import { $isRootTextContentEmpty } from "@lexical/text";
5
+ import { generateInitialLexicalValue, prepareLexicalState } from "@webiny/lexical-nodes";
6
+ import { normalizeInputValue } from "../components/Editor/normalizeInputValue";
7
+ import { useRichTextEditor } from "../hooks";
8
+ import { parseLexicalState } from "../utils/isValidLexicalData";
9
+ export const StateHandlingPlugin = props => {
10
+ const {
11
+ editor
12
+ } = useRichTextEditor();
13
+ const lastEmittedRef = useRef("");
14
+ const lastOnChangeTimestampRef = useRef(0);
15
+ const value = normalizeInputValue(props.value);
16
+ const editorInputValue = prepareLexicalState(value);
17
+ const handleOnChange = useMemo(() => {
18
+ return debounce((editorState, editor) => {
19
+ editorState.read(() => {
20
+ if (typeof props.onChange === "function") {
21
+ const editorState = editor.getEditorState();
22
+ const isEditorEmpty = $isRootTextContentEmpty(editor.isComposing(), true);
23
+ const newValue = JSON.stringify(editorState.toJSON());
24
+ if (!value && isEditorEmpty) {
25
+ return;
26
+ }
27
+ if (newValue !== lastEmittedRef.current) {
28
+ lastEmittedRef.current = newValue;
29
+ lastOnChangeTimestampRef.current = Date.now();
30
+ props.onChange(newValue);
31
+ }
32
+ }
33
+ });
34
+ }, 300);
35
+ }, [props.onChange, editor]);
36
+ useEffect(() => {
37
+ if (!value || !editor || value === lastEmittedRef.current) {
38
+ return;
39
+ }
40
+ const now = Date.now();
41
+ if (now - lastOnChangeTimestampRef.current < 500) {
42
+ return;
43
+ }
44
+ const parsedState = parseLexicalState(editorInputValue);
45
+ let newState;
46
+ const currentSerialized = JSON.stringify(editor.getEditorState().toJSON());
47
+ if (currentSerialized === editorInputValue) {
48
+ return;
49
+ }
50
+ try {
51
+ newState = editor.parseEditorState(parsedState || generateInitialLexicalValue());
52
+ } catch (err) {
53
+ // Ignore errors
54
+ }
55
+
56
+ // We must set the state outside the `editor.update()` callback to prevent freezing.
57
+ // https://lexical.dev/docs/api/classes/lexical.LexicalEditor#seteditorstate
58
+ if (newState) {
59
+ const state = newState;
60
+ queueMicrotask(() => {
61
+ try {
62
+ editor.setEditorState(state);
63
+ } catch (e) {
64
+ console.error(e);
65
+ }
66
+ });
67
+ }
68
+ }, [value, editor, editorInputValue]);
69
+ return /*#__PURE__*/React.createElement(BaseOnChangePlugin, {
70
+ onChange: handleOnChange,
71
+ ignoreSelectionChange: true
72
+ });
73
+ };
74
+
75
+ //# sourceMappingURL=StateHandlingPlugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","useEffect","useRef","useMemo","debounce","OnChangePlugin","BaseOnChangePlugin","$isRootTextContentEmpty","generateInitialLexicalValue","prepareLexicalState","normalizeInputValue","useRichTextEditor","parseLexicalState","StateHandlingPlugin","props","editor","lastEmittedRef","lastOnChangeTimestampRef","value","editorInputValue","handleOnChange","editorState","read","onChange","getEditorState","isEditorEmpty","isComposing","newValue","JSON","stringify","toJSON","current","Date","now","parsedState","newState","currentSerialized","parseEditorState","err","state","queueMicrotask","setEditorState","e","console","error","createElement","ignoreSelectionChange"],"sources":["StateHandlingPlugin.tsx"],"sourcesContent":["import React, { useEffect, useRef, useMemo } from \"react\";\nimport debounce from \"lodash/debounce\";\nimport { OnChangePlugin as BaseOnChangePlugin } from \"@lexical/react/LexicalOnChangePlugin\";\nimport type { EditorState, LexicalEditor } from \"lexical\";\nimport { $isRootTextContentEmpty } from \"@lexical/text\";\nimport { generateInitialLexicalValue, prepareLexicalState } from \"@webiny/lexical-nodes\";\nimport { normalizeInputValue } from \"~/components/Editor/normalizeInputValue\";\nimport type { LexicalValue } from \"~/types\";\nimport { useRichTextEditor } from \"~/hooks\";\nimport { parseLexicalState } from \"~/utils/isValidLexicalData\";\n\ninterface OnChangeProps {\n value: string | null | undefined;\n onChange?: (value: LexicalValue) => void;\n}\n\nexport const StateHandlingPlugin = (props: OnChangeProps) => {\n const { editor } = useRichTextEditor();\n const lastEmittedRef = useRef(\"\");\n const lastOnChangeTimestampRef = useRef(0);\n\n const value = normalizeInputValue(props.value);\n const editorInputValue = prepareLexicalState(value);\n\n const handleOnChange = useMemo(() => {\n return debounce((editorState: EditorState, editor: LexicalEditor) => {\n editorState.read(() => {\n if (typeof props.onChange === \"function\") {\n const editorState = editor.getEditorState();\n const isEditorEmpty = $isRootTextContentEmpty(editor.isComposing(), true);\n const newValue = JSON.stringify(editorState.toJSON());\n\n if (!value && isEditorEmpty) {\n return;\n }\n\n if (newValue !== lastEmittedRef.current) {\n lastEmittedRef.current = newValue;\n lastOnChangeTimestampRef.current = Date.now();\n props.onChange(newValue);\n }\n }\n });\n }, 300);\n }, [props.onChange, editor]);\n\n useEffect(() => {\n if (!value || !editor || value === lastEmittedRef.current) {\n return;\n }\n\n const now = Date.now();\n if (now - lastOnChangeTimestampRef.current < 500) {\n return;\n }\n\n const parsedState = parseLexicalState(editorInputValue);\n\n let newState: EditorState | undefined;\n\n const currentSerialized = JSON.stringify(editor.getEditorState().toJSON());\n\n if (currentSerialized === editorInputValue) {\n return;\n }\n\n try {\n newState = editor.parseEditorState(parsedState || generateInitialLexicalValue());\n } catch (err) {\n // Ignore errors\n }\n\n // We must set the state outside the `editor.update()` callback to prevent freezing.\n // https://lexical.dev/docs/api/classes/lexical.LexicalEditor#seteditorstate\n if (newState) {\n const state = newState;\n queueMicrotask(() => {\n try {\n editor.setEditorState(state);\n } catch (e) {\n console.error(e);\n }\n });\n }\n }, [value, editor, editorInputValue]);\n\n return <BaseOnChangePlugin onChange={handleOnChange} ignoreSelectionChange={true} />;\n};\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,SAAS,EAAEC,MAAM,EAAEC,OAAO,QAAQ,OAAO;AACzD,OAAOC,QAAQ,MAAM,iBAAiB;AACtC,SAASC,cAAc,IAAIC,kBAAkB,QAAQ,sCAAsC;AAE3F,SAASC,uBAAuB,QAAQ,eAAe;AACvD,SAASC,2BAA2B,EAAEC,mBAAmB,QAAQ,uBAAuB;AACxF,SAASC,mBAAmB;AAE5B,SAASC,iBAAiB;AAC1B,SAASC,iBAAiB;AAO1B,OAAO,MAAMC,mBAAmB,GAAIC,KAAoB,IAAK;EACzD,MAAM;IAAEC;EAAO,CAAC,GAAGJ,iBAAiB,CAAC,CAAC;EACtC,MAAMK,cAAc,GAAGd,MAAM,CAAC,EAAE,CAAC;EACjC,MAAMe,wBAAwB,GAAGf,MAAM,CAAC,CAAC,CAAC;EAE1C,MAAMgB,KAAK,GAAGR,mBAAmB,CAACI,KAAK,CAACI,KAAK,CAAC;EAC9C,MAAMC,gBAAgB,GAAGV,mBAAmB,CAACS,KAAK,CAAC;EAEnD,MAAME,cAAc,GAAGjB,OAAO,CAAC,MAAM;IACjC,OAAOC,QAAQ,CAAC,CAACiB,WAAwB,EAAEN,MAAqB,KAAK;MACjEM,WAAW,CAACC,IAAI,CAAC,MAAM;QACnB,IAAI,OAAOR,KAAK,CAACS,QAAQ,KAAK,UAAU,EAAE;UACtC,MAAMF,WAAW,GAAGN,MAAM,CAACS,cAAc,CAAC,CAAC;UAC3C,MAAMC,aAAa,GAAGlB,uBAAuB,CAACQ,MAAM,CAACW,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC;UACzE,MAAMC,QAAQ,GAAGC,IAAI,CAACC,SAAS,CAACR,WAAW,CAACS,MAAM,CAAC,CAAC,CAAC;UAErD,IAAI,CAACZ,KAAK,IAAIO,aAAa,EAAE;YACzB;UACJ;UAEA,IAAIE,QAAQ,KAAKX,cAAc,CAACe,OAAO,EAAE;YACrCf,cAAc,CAACe,OAAO,GAAGJ,QAAQ;YACjCV,wBAAwB,CAACc,OAAO,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC;YAC7CnB,KAAK,CAACS,QAAQ,CAACI,QAAQ,CAAC;UAC5B;QACJ;MACJ,CAAC,CAAC;IACN,CAAC,EAAE,GAAG,CAAC;EACX,CAAC,EAAE,CAACb,KAAK,CAACS,QAAQ,EAAER,MAAM,CAAC,CAAC;EAE5Bd,SAAS,CAAC,MAAM;IACZ,IAAI,CAACiB,KAAK,IAAI,CAACH,MAAM,IAAIG,KAAK,KAAKF,cAAc,CAACe,OAAO,EAAE;MACvD;IACJ;IAEA,MAAME,GAAG,GAAGD,IAAI,CAACC,GAAG,CAAC,CAAC;IACtB,IAAIA,GAAG,GAAGhB,wBAAwB,CAACc,OAAO,GAAG,GAAG,EAAE;MAC9C;IACJ;IAEA,MAAMG,WAAW,GAAGtB,iBAAiB,CAACO,gBAAgB,CAAC;IAEvD,IAAIgB,QAAiC;IAErC,MAAMC,iBAAiB,GAAGR,IAAI,CAACC,SAAS,CAACd,MAAM,CAACS,cAAc,CAAC,CAAC,CAACM,MAAM,CAAC,CAAC,CAAC;IAE1E,IAAIM,iBAAiB,KAAKjB,gBAAgB,EAAE;MACxC;IACJ;IAEA,IAAI;MACAgB,QAAQ,GAAGpB,MAAM,CAACsB,gBAAgB,CAACH,WAAW,IAAI1B,2BAA2B,CAAC,CAAC,CAAC;IACpF,CAAC,CAAC,OAAO8B,GAAG,EAAE;MACV;IAAA;;IAGJ;IACA;IACA,IAAIH,QAAQ,EAAE;MACV,MAAMI,KAAK,GAAGJ,QAAQ;MACtBK,cAAc,CAAC,MAAM;QACjB,IAAI;UACAzB,MAAM,CAAC0B,cAAc,CAACF,KAAK,CAAC;QAChC,CAAC,CAAC,OAAOG,CAAC,EAAE;UACRC,OAAO,CAACC,KAAK,CAACF,CAAC,CAAC;QACpB;MACJ,CAAC,CAAC;IACN;EACJ,CAAC,EAAE,CAACxB,KAAK,EAAEH,MAAM,EAAEI,gBAAgB,CAAC,CAAC;EAErC,oBAAOnB,KAAA,CAAA6C,aAAA,CAACvC,kBAAkB;IAACiB,QAAQ,EAAEH,cAAe;IAAC0B,qBAAqB,EAAE;EAAK,CAAE,CAAC;AACxF,CAAC","ignoreList":[]}
@@ -0,0 +1 @@
1
+ export declare const TypographyPlugin: () => null;
@@ -0,0 +1,27 @@
1
+ import { useEffect } from "react";
2
+ import { $getSelection, $isRangeSelection, COMMAND_PRIORITY_EDITOR } from "lexical";
3
+ import { formatToParagraph, formatToHeading } from "@webiny/lexical-nodes";
4
+ import { useRichTextEditor } from "../../hooks";
5
+ import { ADD_TYPOGRAPHY_COMMAND } from "../../commands";
6
+ export const TypographyPlugin = () => {
7
+ const {
8
+ editor
9
+ } = useRichTextEditor();
10
+ useEffect(() => {
11
+ return editor.registerCommand(ADD_TYPOGRAPHY_COMMAND, payload => {
12
+ const selection = $getSelection();
13
+ // paragraph
14
+ if ($isRangeSelection(selection) && payload.value.id && payload.value.tag === "p") {
15
+ formatToParagraph(editor, payload.value.id);
16
+ }
17
+ // heading
18
+ if ($isRangeSelection(selection) && payload.value.id && payload.value.tag.includes("h")) {
19
+ formatToHeading(editor, payload.value.tag, payload.value.id);
20
+ }
21
+ return true;
22
+ }, COMMAND_PRIORITY_EDITOR);
23
+ }, [editor]);
24
+ return null;
25
+ };
26
+
27
+ //# sourceMappingURL=TypographyPlugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useEffect","$getSelection","$isRangeSelection","COMMAND_PRIORITY_EDITOR","formatToParagraph","formatToHeading","useRichTextEditor","ADD_TYPOGRAPHY_COMMAND","TypographyPlugin","editor","registerCommand","payload","selection","value","id","tag","includes"],"sources":["TypographyPlugin.tsx"],"sourcesContent":["import { useEffect } from \"react\";\nimport { $getSelection, $isRangeSelection, COMMAND_PRIORITY_EDITOR } from \"lexical\";\nimport { formatToParagraph, formatToHeading } from \"@webiny/lexical-nodes\";\nimport type { HeadingTagType } from \"@lexical/rich-text\";\nimport { useRichTextEditor } from \"~/hooks\";\nimport type { TypographyPayload } from \"~/commands\";\nimport { ADD_TYPOGRAPHY_COMMAND } from \"~/commands\";\n\nexport const TypographyPlugin = () => {\n const { editor } = useRichTextEditor();\n\n useEffect(() => {\n return editor.registerCommand<TypographyPayload>(\n ADD_TYPOGRAPHY_COMMAND,\n payload => {\n const selection = $getSelection();\n // paragraph\n if ($isRangeSelection(selection) && payload.value.id && payload.value.tag === \"p\") {\n formatToParagraph(editor, payload.value.id);\n }\n // heading\n if (\n $isRangeSelection(selection) &&\n payload.value.id &&\n payload.value.tag.includes(\"h\")\n ) {\n formatToHeading(editor, payload.value.tag as HeadingTagType, payload.value.id);\n }\n return true;\n },\n COMMAND_PRIORITY_EDITOR\n );\n }, [editor]);\n\n return null;\n};\n"],"mappings":"AAAA,SAASA,SAAS,QAAQ,OAAO;AACjC,SAASC,aAAa,EAAEC,iBAAiB,EAAEC,uBAAuB,QAAQ,SAAS;AACnF,SAASC,iBAAiB,EAAEC,eAAe,QAAQ,uBAAuB;AAE1E,SAASC,iBAAiB;AAE1B,SAASC,sBAAsB;AAE/B,OAAO,MAAMC,gBAAgB,GAAGA,CAAA,KAAM;EAClC,MAAM;IAAEC;EAAO,CAAC,GAAGH,iBAAiB,CAAC,CAAC;EAEtCN,SAAS,CAAC,MAAM;IACZ,OAAOS,MAAM,CAACC,eAAe,CACzBH,sBAAsB,EACtBI,OAAO,IAAI;MACP,MAAMC,SAAS,GAAGX,aAAa,CAAC,CAAC;MACjC;MACA,IAAIC,iBAAiB,CAACU,SAAS,CAAC,IAAID,OAAO,CAACE,KAAK,CAACC,EAAE,IAAIH,OAAO,CAACE,KAAK,CAACE,GAAG,KAAK,GAAG,EAAE;QAC/EX,iBAAiB,CAACK,MAAM,EAAEE,OAAO,CAACE,KAAK,CAACC,EAAE,CAAC;MAC/C;MACA;MACA,IACIZ,iBAAiB,CAACU,SAAS,CAAC,IAC5BD,OAAO,CAACE,KAAK,CAACC,EAAE,IAChBH,OAAO,CAACE,KAAK,CAACE,GAAG,CAACC,QAAQ,CAAC,GAAG,CAAC,EACjC;QACEX,eAAe,CAACI,MAAM,EAAEE,OAAO,CAACE,KAAK,CAACE,GAAG,EAAoBJ,OAAO,CAACE,KAAK,CAACC,EAAE,CAAC;MAClF;MACA,OAAO,IAAI;IACf,CAAC,EACDX,uBACJ,CAAC;EACL,CAAC,EAAE,CAACM,MAAM,CAAC,CAAC;EAEZ,OAAO,IAAI;AACf,CAAC","ignoreList":[]}
package/types.d.ts ADDED
@@ -0,0 +1,12 @@
1
+ export type LexicalValue = string;
2
+ export type NormalizedInputValue = LexicalValue | null;
3
+ export { FontColorPicker } from "./components/ToolbarActions/FontColorAction";
4
+ export type ImageActionType = "image-action";
5
+ export type ToolbarActionType = ImageActionType | string;
6
+ export interface ToolbarActionPlugin {
7
+ targetAction: ToolbarActionType;
8
+ plugin: Record<string, any> | ((cb: (value: any) => void) => any) | undefined;
9
+ }
10
+ export { type ImagePayload } from "./commands";
11
+ export { type RichTextEditorProps } from "./components/Editor/RichTextEditor";
12
+ export type { Klass, LexicalNode } from "lexical";
package/types.js ADDED
@@ -0,0 +1,9 @@
1
+ export { FontColorPicker } from "./components/ToolbarActions/FontColorAction";
2
+
3
+ /* Commands payload types */
4
+
5
+ /* Lexical editor interfaces */
6
+
7
+ // lexical types
8
+
9
+ //# sourceMappingURL=types.js.map
package/types.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"names":["FontColorPicker"],"sources":["types.ts"],"sourcesContent":["export type LexicalValue = string;\n\nexport type NormalizedInputValue = LexicalValue | null;\n\nexport { FontColorPicker } from \"~/components/ToolbarActions/FontColorAction\";\n\nexport type ImageActionType = \"image-action\";\nexport type ToolbarActionType = ImageActionType | string;\nexport interface ToolbarActionPlugin {\n targetAction: ToolbarActionType;\n plugin: Record<string, any> | ((cb: (value: any) => void) => any) | undefined;\n}\n\n/* Commands payload types */\nexport { type ImagePayload } from \"~/commands\";\n\n/* Lexical editor interfaces */\nexport { type RichTextEditorProps } from \"~/components/Editor/RichTextEditor\";\n\n// lexical types\nexport type { Klass, LexicalNode } from \"lexical\";\n"],"mappings":"AAIA,SAASA,eAAe;;AASxB;;AAGA;;AAGA","ignoreList":[]}
@@ -0,0 +1,22 @@
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
+ .ContentEditable__root {
10
+ border: 0;
11
+ font-size: 15px;
12
+ display: block;
13
+ position: relative;
14
+ outline: 0;
15
+ padding: 8px 28px 40px;
16
+ }
17
+ @media (max-width: 1025px) {
18
+ .ContentEditable__root {
19
+ padding-left: 8px;
20
+ padding-right: 8px;
21
+ }
22
+ }
@@ -0,0 +1,12 @@
1
+ /// <reference types="react" />
2
+ /**
3
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ *
8
+ */
9
+ import "./ContentEditable.css";
10
+ export declare function LexicalContentEditable({ className }: {
11
+ className?: string;
12
+ }): JSX.Element;
@@ -0,0 +1,19 @@
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
+ import "./ContentEditable.css";
9
+ import { ContentEditable } from "@lexical/react/LexicalContentEditable";
10
+ import * as React from "react";
11
+ export function LexicalContentEditable({
12
+ className
13
+ }) {
14
+ return /*#__PURE__*/React.createElement(ContentEditable, {
15
+ className: className || "ContentEditable__root"
16
+ });
17
+ }
18
+
19
+ //# sourceMappingURL=ContentEditable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ContentEditable","React","LexicalContentEditable","className","createElement"],"sources":["ContentEditable.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 */\nimport \"./ContentEditable.css\";\n\nimport { ContentEditable } from \"@lexical/react/LexicalContentEditable\";\nimport * as React from \"react\";\n\nexport function LexicalContentEditable({ className }: { className?: string }): JSX.Element {\n return <ContentEditable className={className || \"ContentEditable__root\"} />;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,SAASA,eAAe,QAAQ,uCAAuC;AACvE,OAAO,KAAKC,KAAK,MAAM,OAAO;AAE9B,OAAO,SAASC,sBAAsBA,CAAC;EAAEC;AAAkC,CAAC,EAAe;EACvF,oBAAOF,KAAA,CAAAG,aAAA,CAACJ,eAAe;IAACG,SAAS,EAAEA,SAAS,IAAI;EAAwB,CAAE,CAAC;AAC/E","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ /// <reference types="react" />
2
+ export declare function Divider(): JSX.Element;
package/ui/Divider.js ADDED
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ export function Divider() {
3
+ return /*#__PURE__*/React.createElement("div", {
4
+ className: "divider"
5
+ });
6
+ }
7
+
8
+ //# sourceMappingURL=Divider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","Divider","createElement","className"],"sources":["Divider.tsx"],"sourcesContent":["import React from \"react\";\n\nexport function Divider(): JSX.Element {\n return <div className=\"divider\"></div>;\n}\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AAEzB,OAAO,SAASC,OAAOA,CAAA,EAAgB;EACnC,oBAAOD,KAAA,CAAAE,aAAA;IAAKC,SAAS,EAAC;EAAS,CAAM,CAAC;AAC1C","ignoreList":[]}
@@ -0,0 +1,25 @@
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
+ import type { ReactNode } from "react";
9
+ import * as React from "react";
10
+ export declare function DropDownItem({ children, className, onClick, title }: {
11
+ children: React.ReactNode;
12
+ className: string;
13
+ onClick: (event: React.MouseEvent<HTMLButtonElement>) => void;
14
+ title?: string;
15
+ }): React.JSX.Element;
16
+ export declare function DropDown({ disabled, buttonLabel, buttonAriaLabel, buttonClassName, buttonIconClassName, children, stopCloseOnClickSelf, showScroll }: {
17
+ disabled?: boolean;
18
+ buttonAriaLabel?: string;
19
+ buttonClassName: string;
20
+ buttonIconClassName?: string;
21
+ buttonLabel?: string;
22
+ children: ReactNode;
23
+ stopCloseOnClickSelf?: boolean;
24
+ showScroll?: boolean;
25
+ }): JSX.Element;
package/ui/DropDown.js ADDED
@@ -0,0 +1,182 @@
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
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
10
+ import * as React from "react";
11
+ const DropDownContext = /*#__PURE__*/React.createContext(null);
12
+ export function DropDownItem({
13
+ children,
14
+ className,
15
+ onClick,
16
+ title
17
+ }) {
18
+ const ref = useRef(null);
19
+ const dropDownContext = React.useContext(DropDownContext);
20
+ if (dropDownContext === null) {
21
+ throw new Error("DropDownItem must be used within a DropDown");
22
+ }
23
+ const {
24
+ registerItem
25
+ } = dropDownContext;
26
+ useEffect(() => {
27
+ if (ref && ref.current) {
28
+ registerItem(ref);
29
+ }
30
+ }, [ref, registerItem]);
31
+ return /*#__PURE__*/React.createElement("button", {
32
+ className: className,
33
+ onClick: onClick,
34
+ ref: ref,
35
+ title: title,
36
+ type: "button"
37
+ }, children);
38
+ }
39
+ function DropDownItems({
40
+ children,
41
+ dropDownRef,
42
+ showScroll = true,
43
+ onClose
44
+ }) {
45
+ const [items, setItems] = useState();
46
+ const [highlightedItem, setHighlightedItem] = useState();
47
+ const registerItem = useCallback(itemRef => {
48
+ setItems(prev => prev ? [...prev, itemRef] : [itemRef]);
49
+ }, [setItems]);
50
+ const handleKeyDown = event => {
51
+ if (!items) {
52
+ return;
53
+ }
54
+ const key = event.key;
55
+ if (["Escape", "ArrowUp", "ArrowDown", "Tab"].includes(key)) {
56
+ event.preventDefault();
57
+ }
58
+ if (key === "Escape" || key === "Tab") {
59
+ onClose();
60
+ } else if (key === "ArrowUp") {
61
+ setHighlightedItem(prev => {
62
+ if (!prev) {
63
+ return items[0];
64
+ }
65
+ const index = items.indexOf(prev) - 1;
66
+ return items[index === -1 ? items.length - 1 : index];
67
+ });
68
+ } else if (key === "ArrowDown") {
69
+ setHighlightedItem(prev => {
70
+ if (!prev) {
71
+ return items[0];
72
+ }
73
+ return items[items.indexOf(prev) + 1];
74
+ });
75
+ }
76
+ };
77
+ const contextValue = useMemo(() => ({
78
+ registerItem
79
+ }), [registerItem]);
80
+ useEffect(() => {
81
+ if (items && !highlightedItem) {
82
+ setHighlightedItem(items[0]);
83
+ }
84
+ if (highlightedItem && highlightedItem.current) {
85
+ highlightedItem.current.focus();
86
+ }
87
+ }, [items, highlightedItem]);
88
+ return /*#__PURE__*/React.createElement(DropDownContext.Provider, {
89
+ value: contextValue
90
+ }, /*#__PURE__*/React.createElement("div", {
91
+ className: `lexical-dropdown ${showScroll ? "" : "no-scroll"}`,
92
+ ref: dropDownRef,
93
+ onKeyDown: handleKeyDown
94
+ }, children));
95
+ }
96
+ export function DropDown({
97
+ disabled = false,
98
+ buttonLabel,
99
+ buttonAriaLabel,
100
+ buttonClassName,
101
+ buttonIconClassName,
102
+ children,
103
+ stopCloseOnClickSelf,
104
+ showScroll = true
105
+ }) {
106
+ const dropDownRef = useRef(null);
107
+ const buttonRef = useRef(null);
108
+ // Used to prevent flickering of the dropdown while calculating the dropdown position.
109
+ const [positionIsCalculated, setPositionIsCalculated] = useState(false);
110
+ const [showDropDown, setShowDropDown] = useState(false);
111
+ const handleClose = () => {
112
+ setPositionIsCalculated(false);
113
+ setShowDropDown(false);
114
+ if (buttonRef && buttonRef.current) {
115
+ buttonRef.current.focus();
116
+ }
117
+ };
118
+ useEffect(() => {
119
+ const button = buttonRef.current;
120
+ const dropDown = dropDownRef.current;
121
+ if (showDropDown && button && dropDown) {
122
+ dropDown.style.top = "44px";
123
+ dropDown.style.left = `${button.offsetLeft}px`;
124
+ setPositionIsCalculated(true);
125
+ }
126
+ }, [dropDownRef, buttonRef, showDropDown]);
127
+ useEffect(() => {
128
+ const button = buttonRef.current;
129
+ if (button && showDropDown) {
130
+ const handle = event => {
131
+ const target = event.target;
132
+ if (stopCloseOnClickSelf) {
133
+ if (dropDownRef.current && dropDownRef.current.contains(target)) {
134
+ return;
135
+ }
136
+ }
137
+ if (!button.contains(target)) {
138
+ setShowDropDown(false);
139
+ }
140
+ };
141
+ document.addEventListener("click", handle);
142
+ return () => {
143
+ document.removeEventListener("click", handle);
144
+ };
145
+ }
146
+ return;
147
+ }, [dropDownRef, buttonRef, showDropDown, stopCloseOnClickSelf]);
148
+ const displayContainer = useMemo(() => {
149
+ // To prevent blinking, we show the container only when the dropdown position is calculated.
150
+ // Without this, window would be visible first on left (0px), and after a millisecond on the right side.
151
+ return positionIsCalculated ? {
152
+ display: "block"
153
+ } : {
154
+ display: "none"
155
+ };
156
+ }, [positionIsCalculated]);
157
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("button", {
158
+ style: {
159
+ position: "relative"
160
+ },
161
+ disabled: disabled,
162
+ "aria-label": buttonAriaLabel || buttonLabel,
163
+ className: buttonClassName,
164
+ onClick: () => setShowDropDown(!showDropDown),
165
+ ref: buttonRef
166
+ }, buttonIconClassName && /*#__PURE__*/React.createElement("span", {
167
+ className: buttonIconClassName
168
+ }), buttonLabel && /*#__PURE__*/React.createElement("span", {
169
+ className: "text dropdown-button-text"
170
+ }, buttonLabel), /*#__PURE__*/React.createElement("i", {
171
+ className: "chevron-down"
172
+ })), showDropDown && /*#__PURE__*/React.createElement("div", {
173
+ className: "lexical-dropdown-container",
174
+ style: displayContainer
175
+ }, /*#__PURE__*/React.createElement(DropDownItems, {
176
+ showScroll: showScroll,
177
+ dropDownRef: dropDownRef,
178
+ onClose: handleClose
179
+ }, children)));
180
+ }
181
+
182
+ //# sourceMappingURL=DropDown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useCallback","useEffect","useMemo","useRef","useState","React","DropDownContext","createContext","DropDownItem","children","className","onClick","title","ref","dropDownContext","useContext","Error","registerItem","current","createElement","type","DropDownItems","dropDownRef","showScroll","onClose","items","setItems","highlightedItem","setHighlightedItem","itemRef","prev","handleKeyDown","event","key","includes","preventDefault","index","indexOf","length","contextValue","focus","Provider","value","onKeyDown","DropDown","disabled","buttonLabel","buttonAriaLabel","buttonClassName","buttonIconClassName","stopCloseOnClickSelf","buttonRef","positionIsCalculated","setPositionIsCalculated","showDropDown","setShowDropDown","handleClose","button","dropDown","style","top","left","offsetLeft","handle","target","contains","document","addEventListener","removeEventListener","displayContainer","display","Fragment","position"],"sources":["DropDown.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 type { ReactNode } from \"react\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport * as React from \"react\";\n\ntype DropDownContextType = {\n registerItem: (ref: React.RefObject<HTMLButtonElement>) => void;\n};\n\nconst DropDownContext = React.createContext<DropDownContextType | null>(null);\n\nexport function DropDownItem({\n children,\n className,\n onClick,\n title\n}: {\n children: React.ReactNode;\n className: string;\n onClick: (event: React.MouseEvent<HTMLButtonElement>) => void;\n title?: string;\n}) {\n const ref = useRef<HTMLButtonElement>(null);\n\n const dropDownContext = React.useContext(DropDownContext);\n\n if (dropDownContext === null) {\n throw new Error(\"DropDownItem must be used within a DropDown\");\n }\n\n const { registerItem } = dropDownContext;\n\n useEffect(() => {\n if (ref && ref.current) {\n registerItem(ref);\n }\n }, [ref, registerItem]);\n\n return (\n <button className={className} onClick={onClick} ref={ref} title={title} type=\"button\">\n {children}\n </button>\n );\n}\n\nfunction DropDownItems({\n children,\n dropDownRef,\n showScroll = true,\n onClose\n}: {\n children: React.ReactNode;\n dropDownRef?: React.Ref<HTMLDivElement>;\n showScroll?: boolean;\n onClose: () => void;\n}) {\n const [items, setItems] = useState<React.RefObject<HTMLButtonElement>[]>();\n const [highlightedItem, setHighlightedItem] = useState<React.RefObject<HTMLButtonElement>>();\n\n const registerItem = useCallback(\n (itemRef: React.RefObject<HTMLButtonElement>) => {\n setItems(prev => (prev ? [...prev, itemRef] : [itemRef]));\n },\n [setItems]\n );\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (!items) {\n return;\n }\n\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 } else if (key === \"ArrowUp\") {\n setHighlightedItem(prev => {\n if (!prev) {\n return items[0];\n }\n const index = items.indexOf(prev) - 1;\n return items[index === -1 ? items.length - 1 : index];\n });\n } else if (key === \"ArrowDown\") {\n setHighlightedItem(prev => {\n if (!prev) {\n return items[0];\n }\n return items[items.indexOf(prev) + 1];\n });\n }\n };\n\n const contextValue = useMemo(\n () => ({\n registerItem\n }),\n [registerItem]\n );\n\n useEffect(() => {\n if (items && !highlightedItem) {\n setHighlightedItem(items[0]);\n }\n\n if (highlightedItem && highlightedItem.current) {\n highlightedItem.current.focus();\n }\n }, [items, highlightedItem]);\n\n return (\n <DropDownContext.Provider value={contextValue}>\n <div\n className={`lexical-dropdown ${showScroll ? \"\" : \"no-scroll\"}`}\n ref={dropDownRef}\n onKeyDown={handleKeyDown}\n >\n {children}\n </div>\n </DropDownContext.Provider>\n );\n}\n\nexport function DropDown({\n disabled = false,\n buttonLabel,\n buttonAriaLabel,\n buttonClassName,\n buttonIconClassName,\n children,\n stopCloseOnClickSelf,\n showScroll = true\n}: {\n disabled?: boolean;\n buttonAriaLabel?: string;\n buttonClassName: string;\n buttonIconClassName?: string;\n buttonLabel?: string;\n children: ReactNode;\n stopCloseOnClickSelf?: boolean;\n showScroll?: boolean;\n}): JSX.Element {\n const dropDownRef = useRef<HTMLDivElement>(null);\n const buttonRef = useRef<HTMLButtonElement>(null);\n // Used to prevent flickering of the dropdown while calculating the dropdown position.\n const [positionIsCalculated, setPositionIsCalculated] = useState(false);\n const [showDropDown, setShowDropDown] = useState(false);\n\n const handleClose = () => {\n setPositionIsCalculated(false);\n setShowDropDown(false);\n if (buttonRef && buttonRef.current) {\n buttonRef.current.focus();\n }\n };\n\n useEffect(() => {\n const button = buttonRef.current;\n const dropDown = dropDownRef.current;\n\n if (showDropDown && button && dropDown) {\n dropDown.style.top = \"44px\";\n dropDown.style.left = `${button.offsetLeft}px`;\n setPositionIsCalculated(true);\n }\n }, [dropDownRef, buttonRef, showDropDown]);\n\n useEffect(() => {\n const button = buttonRef.current;\n if (button && showDropDown) {\n const handle = (event: MouseEvent) => {\n const target = event.target;\n if (stopCloseOnClickSelf) {\n if (dropDownRef.current && dropDownRef.current.contains(target as Node)) {\n return;\n }\n }\n\n if (!button.contains(target as Node)) {\n setShowDropDown(false);\n }\n };\n document.addEventListener(\"click\", handle);\n return () => {\n document.removeEventListener(\"click\", handle);\n };\n }\n return;\n }, [dropDownRef, buttonRef, showDropDown, stopCloseOnClickSelf]);\n\n const displayContainer = useMemo(() => {\n // To prevent blinking, we show the container only when the dropdown position is calculated.\n // Without this, window would be visible first on left (0px), and after a millisecond on the right side.\n return positionIsCalculated ? { display: \"block\" } : { display: \"none\" };\n }, [positionIsCalculated]);\n\n return (\n <>\n <button\n style={{ position: \"relative\" }}\n disabled={disabled}\n aria-label={buttonAriaLabel || buttonLabel}\n className={buttonClassName}\n onClick={() => setShowDropDown(!showDropDown)}\n ref={buttonRef}\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 && (\n <div className={\"lexical-dropdown-container\"} style={displayContainer}>\n <DropDownItems\n showScroll={showScroll}\n dropDownRef={dropDownRef}\n onClose={handleClose}\n >\n {children}\n </DropDownItems>\n </div>\n )}\n </>\n );\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,24 @@
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
+ /// <reference types="react" />
9
+ import type { LexicalEditor } from "lexical";
10
+ export declare function ImageResizer({ onResizeStart, onResizeEnd, buttonRef, imageRef, maxWidth, editor, showCaption, setShowCaption, captionsEnabled }: {
11
+ editor: LexicalEditor;
12
+ buttonRef: {
13
+ current: null | HTMLButtonElement;
14
+ };
15
+ imageRef: {
16
+ current: null | HTMLElement;
17
+ };
18
+ maxWidth?: number;
19
+ onResizeEnd: (width: "inherit" | number, height: "inherit" | number) => void;
20
+ onResizeStart: () => void;
21
+ setShowCaption: (show: boolean) => void;
22
+ showCaption: boolean;
23
+ captionsEnabled: boolean;
24
+ }): JSX.Element;