@webiny/lexical-editor 0.0.0-unstable.ecd8734205 → 5.35.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 (186) hide show
  1. package/commands/webiny-list.d.ts +7 -0
  2. package/commands/webiny-list.js +13 -0
  3. package/commands/webiny-list.js.map +1 -0
  4. package/commands/webiny-quote.d.ts +5 -0
  5. package/commands/webiny-quote.js +9 -0
  6. package/commands/webiny-quote.js.map +1 -0
  7. package/components/AddRichTextEditorNodeType.js.map +1 -1
  8. package/components/AddRichTextEditorPlugin.d.ts +2 -0
  9. package/components/AddRichTextEditorPlugin.js +4 -2
  10. package/components/AddRichTextEditorPlugin.js.map +1 -1
  11. package/components/AddToolbarAction.js.map +1 -1
  12. package/components/Editor/HeadingEditor.js +2 -1
  13. package/components/Editor/HeadingEditor.js.map +1 -1
  14. package/components/Editor/ParagraphEditor.js +3 -3
  15. package/components/Editor/ParagraphEditor.js.map +1 -1
  16. package/components/Editor/RichTextEditor.d.ts +4 -1
  17. package/components/Editor/RichTextEditor.js +37 -6
  18. package/components/Editor/RichTextEditor.js.map +1 -1
  19. package/components/LexicalEditorConfig/LexicalEditorConfig.d.ts +9 -0
  20. package/components/LexicalEditorConfig/LexicalEditorConfig.js +17 -0
  21. package/components/LexicalEditorConfig/LexicalEditorConfig.js.map +1 -0
  22. package/components/LexicalHtmlRenderer.d.ts +8 -1
  23. package/components/LexicalHtmlRenderer.js +29 -6
  24. package/components/LexicalHtmlRenderer.js.map +1 -1
  25. package/components/Toolbar/HeadingToolbar.js.map +1 -1
  26. package/components/Toolbar/ParagraphToolbar.js.map +1 -1
  27. package/components/Toolbar/Toolbar.css +9 -0
  28. package/components/Toolbar/Toolbar.js +25 -5
  29. package/components/Toolbar/Toolbar.js.map +1 -1
  30. package/components/ToolbarActions/BoldAction.d.ts +0 -3
  31. package/components/ToolbarActions/BoldAction.js +8 -3
  32. package/components/ToolbarActions/BoldAction.js.map +1 -1
  33. package/components/ToolbarActions/BulletListAction.d.ts +0 -3
  34. package/components/ToolbarActions/BulletListAction.js +17 -55
  35. package/components/ToolbarActions/BulletListAction.js.map +1 -1
  36. package/components/ToolbarActions/CodeHighlightAction.d.ts +0 -4
  37. package/components/ToolbarActions/CodeHighlightAction.js +8 -4
  38. package/components/ToolbarActions/CodeHighlightAction.js.map +1 -1
  39. package/components/ToolbarActions/FontColorAction.d.ts +11 -0
  40. package/components/ToolbarActions/FontColorAction.js +83 -0
  41. package/components/ToolbarActions/FontColorAction.js.map +1 -0
  42. package/components/ToolbarActions/FontSizeAction.js +0 -3
  43. package/components/ToolbarActions/FontSizeAction.js.map +1 -1
  44. package/components/ToolbarActions/ItalicAction.d.ts +0 -3
  45. package/components/ToolbarActions/ItalicAction.js +8 -3
  46. package/components/ToolbarActions/ItalicAction.js.map +1 -1
  47. package/components/ToolbarActions/LinkAction.d.ts +0 -5
  48. package/components/ToolbarActions/LinkAction.js +0 -5
  49. package/components/ToolbarActions/LinkAction.js.map +1 -1
  50. package/components/ToolbarActions/NumberedListAction.d.ts +0 -3
  51. package/components/ToolbarActions/NumberedListAction.js +17 -53
  52. package/components/ToolbarActions/NumberedListAction.js.map +1 -1
  53. package/components/ToolbarActions/QuoteAction.d.ts +0 -2
  54. package/components/ToolbarActions/QuoteAction.js +16 -29
  55. package/components/ToolbarActions/QuoteAction.js.map +1 -1
  56. package/components/ToolbarActions/TypographyAction.d.ts +11 -0
  57. package/components/ToolbarActions/TypographyAction.js +118 -0
  58. package/components/ToolbarActions/TypographyAction.js.map +1 -0
  59. package/components/ToolbarActions/UnderlineAction.d.ts +0 -3
  60. package/components/ToolbarActions/UnderlineAction.js +8 -3
  61. package/components/ToolbarActions/UnderlineAction.js.map +1 -1
  62. package/components/ToolbarPresets/HeadingToolbarPreset.js +8 -0
  63. package/components/ToolbarPresets/HeadingToolbarPreset.js.map +1 -1
  64. package/components/ToolbarPresets/ParagraphToolbarPreset.js +8 -0
  65. package/components/ToolbarPresets/ParagraphToolbarPreset.js.map +1 -1
  66. package/context/FontColorActionContext.d.ts +6 -0
  67. package/context/FontColorActionContext.js +10 -0
  68. package/context/FontColorActionContext.js.map +1 -0
  69. package/context/RichTextEditorContext.d.ts +10 -0
  70. package/context/RichTextEditorContext.js +28 -1
  71. package/context/RichTextEditorContext.js.map +1 -1
  72. package/context/SharedHistoryContext.d.ts +11 -0
  73. package/context/SharedHistoryContext.js +26 -0
  74. package/context/SharedHistoryContext.js.map +1 -0
  75. package/context/TypographyActionContext.d.ts +7 -0
  76. package/context/TypographyActionContext.js +10 -0
  77. package/context/TypographyActionContext.js.map +1 -0
  78. package/hooks/useFontColorPicker.d.ts +2 -0
  79. package/hooks/useFontColorPicker.js +15 -0
  80. package/hooks/useFontColorPicker.js.map +1 -0
  81. package/hooks/useRichTextEditor.js.map +1 -1
  82. package/hooks/useTypographyAction.d.ts +1 -0
  83. package/hooks/useTypographyAction.js +15 -0
  84. package/hooks/useTypographyAction.js.map +1 -0
  85. package/hooks/useWebinyList.d.ts +2 -0
  86. package/hooks/useWebinyList.js +39 -0
  87. package/hooks/useWebinyList.js.map +1 -0
  88. package/hooks/useWebinyQuote.d.ts +2 -0
  89. package/hooks/useWebinyQuote.js +20 -0
  90. package/hooks/useWebinyQuote.js.map +1 -0
  91. package/images/icons/font-color.svg +1 -0
  92. package/index.d.ts +7 -1
  93. package/index.js +44 -2
  94. package/index.js.map +1 -1
  95. package/nodes/FontColorNode.d.ts +43 -0
  96. package/nodes/FontColorNode.js +127 -0
  97. package/nodes/FontColorNode.js.map +1 -0
  98. package/nodes/TypographyElementNode.d.ts +42 -0
  99. package/nodes/TypographyElementNode.js +154 -0
  100. package/nodes/TypographyElementNode.js.map +1 -0
  101. package/nodes/WebinyQuoteNode.d.ts +29 -0
  102. package/nodes/WebinyQuoteNode.js +148 -0
  103. package/nodes/WebinyQuoteNode.js.map +1 -0
  104. package/nodes/list-node/WebinyListItemNode.d.ts +46 -0
  105. package/nodes/list-node/WebinyListItemNode.js +441 -0
  106. package/nodes/list-node/WebinyListItemNode.js.map +1 -0
  107. package/nodes/list-node/WebinyListNode.d.ts +38 -0
  108. package/nodes/list-node/WebinyListNode.js +253 -0
  109. package/nodes/list-node/WebinyListNode.js.map +1 -0
  110. package/nodes/list-node/formatList.d.ts +12 -0
  111. package/nodes/list-node/formatList.js +423 -0
  112. package/nodes/list-node/formatList.js.map +1 -0
  113. package/nodes/webinyNodes.d.ts +6 -1
  114. package/nodes/webinyNodes.js +8 -2
  115. package/nodes/webinyNodes.js.map +1 -1
  116. package/package.json +9 -6
  117. package/plugins/AutoLinkPlugin/AutoLinkPlugin.js.map +1 -1
  118. package/plugins/AutoLinkPlugin/index.js.map +1 -1
  119. package/plugins/BlurEventPlugin/BlurEventPlugin.js.map +1 -1
  120. package/plugins/ClickableLinkPlugin/ClickableLinkPlugin.js.map +1 -1
  121. package/plugins/ClickableLinkPlugin/index.js.map +1 -1
  122. package/plugins/CodeHighlightPlugin/CodeHighlightPlugin.js.map +1 -1
  123. package/plugins/CodeHighlightPlugin/index.js.map +1 -1
  124. package/plugins/FloatingLinkEditorPlugin/FloatingLinkEditorPlugin.js.map +1 -1
  125. package/plugins/FloatingLinkEditorPlugin/index.js.map +1 -1
  126. package/plugins/FontColorPlugin/FontColorPlugin.d.ts +2 -0
  127. package/plugins/FontColorPlugin/FontColorPlugin.js +38 -0
  128. package/plugins/FontColorPlugin/FontColorPlugin.js.map +1 -0
  129. package/plugins/LexicalUpdateStatePlugin/LexicalUpdateStatePlugin.js.map +1 -1
  130. package/plugins/LexicalUpdateStatePlugin/index.js.map +1 -1
  131. package/plugins/TypographyPlugin/TypographyPlugin.d.ts +2 -0
  132. package/plugins/TypographyPlugin/TypographyPlugin.js +31 -0
  133. package/plugins/TypographyPlugin/TypographyPlugin.js.map +1 -0
  134. package/plugins/WebinyListPLugin/WebinyListPlugin.d.ts +1 -0
  135. package/plugins/WebinyListPLugin/WebinyListPlugin.js +25 -0
  136. package/plugins/WebinyListPLugin/WebinyListPlugin.js.map +1 -0
  137. package/plugins/WebinyQuoteNodePlugin/WebinyQuoteNodePlugin.d.ts +1 -0
  138. package/plugins/WebinyQuoteNodePlugin/WebinyQuoteNodePlugin.js +24 -0
  139. package/plugins/WebinyQuoteNodePlugin/WebinyQuoteNodePlugin.js.map +1 -0
  140. package/themes/webinyLexicalTheme.css +0 -2
  141. package/themes/webinyLexicalTheme.d.ts +7 -8
  142. package/themes/webinyLexicalTheme.js +7 -27
  143. package/themes/webinyLexicalTheme.js.map +1 -1
  144. package/types.d.ts +59 -0
  145. package/types.js +8 -1
  146. package/types.js.map +1 -1
  147. package/ui/Divider.js.map +1 -1
  148. package/ui/DropDown.d.ts +2 -1
  149. package/ui/DropDown.js +7 -2
  150. package/ui/DropDown.js.map +1 -1
  151. package/ui/LinkPreview.js.map +1 -1
  152. package/ui/Placeholder.js.map +1 -1
  153. package/ui/TextInput.js.map +1 -1
  154. package/ui/ToolbarActionDialog.d.ts +12 -0
  155. package/ui/ToolbarActionDialog.js +106 -0
  156. package/ui/ToolbarActionDialog.js.map +1 -0
  157. package/utils/generateInitialLexicalValue.js.map +1 -1
  158. package/utils/getDOMRangeRect.js.map +1 -1
  159. package/utils/getLexicalTextSelectionState.d.ts +5 -0
  160. package/utils/getLexicalTextSelectionState.js +141 -0
  161. package/utils/getLexicalTextSelectionState.js.map +1 -0
  162. package/utils/getSelectedNode.js.map +1 -1
  163. package/utils/isValidJSON.js.map +1 -1
  164. package/utils/isValidLexicalData.js.map +1 -1
  165. package/utils/nodes/clearNodeFormating.d.ts +2 -0
  166. package/utils/nodes/clearNodeFormating.js +28 -0
  167. package/utils/nodes/clearNodeFormating.js.map +1 -0
  168. package/utils/nodes/formatToParagraph.d.ts +2 -0
  169. package/utils/nodes/formatToParagraph.js +19 -0
  170. package/utils/nodes/formatToParagraph.js.map +1 -0
  171. package/utils/nodes/formatToQuote.d.ts +2 -0
  172. package/utils/nodes/formatToQuote.js +20 -0
  173. package/utils/nodes/formatToQuote.js.map +1 -0
  174. package/utils/nodes/list-node.d.ts +11 -0
  175. package/utils/nodes/list-node.js +107 -0
  176. package/utils/nodes/list-node.js.map +1 -0
  177. package/utils/point.js.map +1 -1
  178. package/utils/rect.js.map +1 -1
  179. package/utils/sanitizeUrl.js.map +1 -1
  180. package/utils/setFloatingElemPosition.js.map +1 -1
  181. package/utils/styleObjectToString.d.ts +2 -0
  182. package/utils/styleObjectToString.js +22 -0
  183. package/utils/styleObjectToString.js.map +1 -0
  184. package/utils/toTypographyEmotionMap.d.ts +3 -0
  185. package/utils/toTypographyEmotionMap.js +36 -0
  186. package/utils/toTypographyEmotionMap.js.map +1 -0
@@ -19,12 +19,27 @@ require("./Toolbar.css");
19
19
  var _getDOMRangeRect = require("../../utils/getDOMRangeRect");
20
20
  var _setFloatingElemPosition = require("../../utils/setFloatingElemPosition");
21
21
  var _getSelectedNode = require("../../utils/getSelectedNode");
22
- var _useRichTextEditor2 = require("../../hooks/useRichTextEditor");
22
+ var _useRichTextEditor3 = require("../../hooks/useRichTextEditor");
23
+ var _getLexicalTextSelectionState = require("../../utils/getLexicalTextSelectionState");
23
24
  var FloatingToolbar = function FloatingToolbar(_ref) {
24
25
  var children = _ref.children,
26
+ type = _ref.type,
25
27
  anchorElem = _ref.anchorElem,
26
28
  editor = _ref.editor;
27
29
  var popupCharStylesEditorRef = (0, _react.useRef)(null);
30
+ var _useRichTextEditor = (0, _useRichTextEditor3.useRichTextEditor)(),
31
+ toolbarType = _useRichTextEditor.toolbarType,
32
+ setToolbarType = _useRichTextEditor.setToolbarType,
33
+ setTextBlockSelection = _useRichTextEditor.setTextBlockSelection;
34
+ var _useState = (0, _react.useState)(editor),
35
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
36
+ activeEditor = _useState2[0],
37
+ setActiveEditor = _useState2[1];
38
+ (0, _react.useEffect)(function () {
39
+ if (toolbarType !== type) {
40
+ setToolbarType(type);
41
+ }
42
+ }, [type]);
28
43
  var updateTextFormatFloatingToolbar = (0, _react.useCallback)(function () {
29
44
  var selection = (0, _lexical.$getSelection)();
30
45
  var popupCharStylesEditorElem = popupCharStylesEditorRef.current;
@@ -34,6 +49,10 @@ var FloatingToolbar = function FloatingToolbar(_ref) {
34
49
  }
35
50
  var isLink = false;
36
51
  if ((0, _lexical.$isRangeSelection)(selection)) {
52
+ var selectionState = (0, _getLexicalTextSelectionState.getLexicalTextSelectionState)(activeEditor, selection);
53
+ if (selectionState) {
54
+ setTextBlockSelection(selectionState);
55
+ }
37
56
  var node = (0, _getSelectedNode.getSelectedNode)(selection);
38
57
  // Update links
39
58
  var parent = node.getParent();
@@ -74,8 +93,9 @@ var FloatingToolbar = function FloatingToolbar(_ref) {
74
93
  editorState.read(function () {
75
94
  updateTextFormatFloatingToolbar();
76
95
  });
77
- }), editor.registerCommand(_lexical.SELECTION_CHANGE_COMMAND, function () {
96
+ }), editor.registerCommand(_lexical.SELECTION_CHANGE_COMMAND, function (_payload, newEditor) {
78
97
  updateTextFormatFloatingToolbar();
98
+ setActiveEditor(newEditor);
79
99
  return false;
80
100
  }, _lexical.COMMAND_PRIORITY_LOW));
81
101
  }, [editor, updateTextFormatFloatingToolbar]);
@@ -90,9 +110,9 @@ var useToolbar = function useToolbar(_ref3) {
90
110
  anchorElem = _ref3$anchorElem === void 0 ? document.body : _ref3$anchorElem,
91
111
  type = _ref3.type,
92
112
  children = _ref3.children;
93
- var _useRichTextEditor = (0, _useRichTextEditor2.useRichTextEditor)(),
94
- nodeIsText = _useRichTextEditor.nodeIsText,
95
- setNodeIsText = _useRichTextEditor.setNodeIsText;
113
+ var _useRichTextEditor2 = (0, _useRichTextEditor3.useRichTextEditor)(),
114
+ nodeIsText = _useRichTextEditor2.nodeIsText,
115
+ setNodeIsText = _useRichTextEditor2.setNodeIsText;
96
116
  var updatePopup = (0, _react.useCallback)(function () {
97
117
  editor.getEditorState().read(function () {
98
118
  // Should not to pop up the floating toolbar when using IME input
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_lexical","_reactComposition","_link","_reactDom","_utils","_code","_LexicalComposerContext","_getDOMRangeRect","_setFloatingElemPosition","_getSelectedNode","_useRichTextEditor2","FloatingToolbar","_ref","children","anchorElem","editor","popupCharStylesEditorRef","useRef","updateTextFormatFloatingToolbar","useCallback","selection","$getSelection","popupCharStylesEditorElem","current","nativeSelection","window","getSelection","isLink","$isRangeSelection","node","getSelectedNode","parent","getParent","$isLinkNode","rootElement","getRootElement","isCollapsed","contains","anchorNode","rangeRect","getDOMRangeRect","setFloatingElemPosition","useEffect","scrollerElem","parentElement","update","getEditorState","read","addEventListener","removeEventListener","mergeRegister","registerUpdateListener","_ref2","editorState","registerCommand","SELECTION_CHANGE_COMMAND","COMMAND_PRIORITY_LOW","default","createElement","ref","className","isEditable","useToolbar","_ref3","_ref3$anchorElem","document","body","type","_useRichTextEditor","useRichTextEditor","nodeIsText","setNodeIsText","updatePopup","isComposing","$isCodeHighlightNode","anchor","getNode","getTextContent","$isTextNode","registerRootListener","createPortal","Toolbar","makeComposable","_ref4","_useLexicalComposerCo","useLexicalComposerContext","_useLexicalComposerCo2","_slicedToArray2","exports"],"sources":["Toolbar.tsx"],"sourcesContent":["import React, { FC, useCallback, useEffect, useRef } from \"react\";\nimport {\n $getSelection,\n $isRangeSelection,\n $isTextNode,\n COMMAND_PRIORITY_LOW,\n LexicalEditor,\n SELECTION_CHANGE_COMMAND\n} from \"lexical\";\nimport { makeComposable } from \"@webiny/react-composition\";\nimport { $isLinkNode } from \"@lexical/link\";\nimport { createPortal } from \"react-dom\";\nimport { mergeRegister } from \"@lexical/utils\";\nimport { $isCodeHighlightNode } from \"@lexical/code\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport \"./Toolbar.css\";\nimport { ToolbarType } from \"~/types\";\nimport { getDOMRangeRect } from \"~/utils/getDOMRangeRect\";\nimport { setFloatingElemPosition } from \"~/utils/setFloatingElemPosition\";\nimport { getSelectedNode } from \"~/utils/getSelectedNode\";\nimport { useRichTextEditor } from \"~/hooks/useRichTextEditor\";\n\ninterface FloatingToolbarProps {\n type: ToolbarType;\n anchorElem: HTMLElement;\n children?: React.ReactNode;\n editor: LexicalEditor;\n}\n\nconst FloatingToolbar: FC<FloatingToolbarProps> = ({ children, anchorElem, editor }) => {\n const popupCharStylesEditorRef = useRef<HTMLDivElement | null>(null);\n\n const updateTextFormatFloatingToolbar = useCallback(() => {\n const selection = $getSelection();\n\n const popupCharStylesEditorElem = popupCharStylesEditorRef.current;\n const nativeSelection = window.getSelection();\n\n if (popupCharStylesEditorElem === null) {\n return;\n }\n\n let isLink = false;\n if ($isRangeSelection(selection)) {\n const node = getSelectedNode(selection);\n // Update links\n const parent = node.getParent();\n\n if ($isLinkNode(parent) || $isLinkNode(node)) {\n isLink = true;\n }\n }\n\n const rootElement = editor.getRootElement();\n if (\n selection !== null &&\n nativeSelection !== null &&\n !nativeSelection.isCollapsed &&\n rootElement !== null &&\n rootElement.contains(nativeSelection.anchorNode) &&\n !isLink\n ) {\n const rangeRect = getDOMRangeRect(nativeSelection, rootElement);\n setFloatingElemPosition(rangeRect, popupCharStylesEditorElem, anchorElem);\n }\n }, [editor, anchorElem]);\n\n useEffect(() => {\n const scrollerElem = anchorElem.parentElement;\n\n const update = () => {\n editor.getEditorState().read(() => {\n updateTextFormatFloatingToolbar();\n });\n };\n\n window.addEventListener(\"resize\", update);\n if (scrollerElem) {\n scrollerElem.addEventListener(\"scroll\", update);\n }\n\n return () => {\n window.removeEventListener(\"resize\", update);\n if (scrollerElem) {\n scrollerElem.removeEventListener(\"scroll\", update);\n }\n };\n }, [editor, updateTextFormatFloatingToolbar, anchorElem]);\n\n useEffect(() => {\n editor.getEditorState().read(() => {\n updateTextFormatFloatingToolbar();\n });\n return mergeRegister(\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n updateTextFormatFloatingToolbar();\n });\n }),\n\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n () => {\n updateTextFormatFloatingToolbar();\n return false;\n },\n COMMAND_PRIORITY_LOW\n )\n );\n }, [editor, updateTextFormatFloatingToolbar]);\n\n return (\n <div ref={popupCharStylesEditorRef} className=\"floating-text-format-popup\">\n {editor.isEditable() && children}\n </div>\n );\n};\n\ninterface useToolbarProps {\n editor: LexicalEditor;\n type: ToolbarType;\n anchorElem: HTMLElement;\n children?: React.ReactNode;\n}\n\nconst useToolbar: FC<useToolbarProps> = ({\n editor,\n anchorElem = document.body,\n type,\n children\n}): JSX.Element | null => {\n const { nodeIsText, setNodeIsText } = useRichTextEditor();\n\n const updatePopup = useCallback(() => {\n editor.getEditorState().read(() => {\n // Should not to pop up the floating toolbar when using IME input\n if (editor.isComposing()) {\n return;\n }\n const selection = $getSelection();\n const nativeSelection = window.getSelection();\n const rootElement = editor.getRootElement();\n\n if (\n nativeSelection !== null &&\n (!$isRangeSelection(selection) ||\n rootElement === null ||\n !rootElement.contains(nativeSelection.anchorNode))\n ) {\n setNodeIsText(false);\n return;\n }\n\n if (!$isRangeSelection(selection)) {\n return;\n }\n\n const node = getSelectedNode(selection);\n\n if (\n !$isCodeHighlightNode(selection.anchor.getNode()) &&\n selection.getTextContent() !== \"\"\n ) {\n setNodeIsText($isTextNode(node));\n } else {\n setNodeIsText(false);\n }\n });\n }, [editor]);\n\n useEffect(() => {\n document.addEventListener(\"selectionchange\", updatePopup);\n return () => {\n document.removeEventListener(\"selectionchange\", updatePopup);\n };\n }, [updatePopup]);\n\n useEffect(() => {\n return mergeRegister(\n editor.registerUpdateListener(() => {\n updatePopup();\n }),\n editor.registerRootListener(() => {\n if (editor.getRootElement() === null) {\n setNodeIsText(false);\n }\n })\n );\n }, [editor, updatePopup]);\n\n if (!nodeIsText) {\n return null;\n }\n\n return createPortal(\n <FloatingToolbar type={type} anchorElem={anchorElem} editor={editor}>\n {children}\n </FloatingToolbar>,\n anchorElem\n );\n};\n\nexport interface ToolbarProps {\n type: ToolbarType;\n anchorElem: HTMLElement;\n children?: React.ReactNode;\n}\n\n/**\n * @description Main toolbar container\n */\nexport const Toolbar = makeComposable<ToolbarProps>(\n \"Toolbar\",\n ({ anchorElem, type, children }): JSX.Element | null => {\n const [editor] = useLexicalComposerContext();\n return useToolbar({ editor, anchorElem, type, children });\n }\n);\n"],"mappings":"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"}
1
+ {"version":3,"names":["FloatingToolbar","children","type","anchorElem","editor","popupCharStylesEditorRef","useRef","useRichTextEditor","toolbarType","setToolbarType","setTextBlockSelection","useState","activeEditor","setActiveEditor","useEffect","updateTextFormatFloatingToolbar","useCallback","selection","$getSelection","popupCharStylesEditorElem","current","nativeSelection","window","getSelection","isLink","$isRangeSelection","selectionState","getLexicalTextSelectionState","node","getSelectedNode","parent","getParent","$isLinkNode","rootElement","getRootElement","isCollapsed","contains","anchorNode","rangeRect","getDOMRangeRect","setFloatingElemPosition","scrollerElem","parentElement","update","getEditorState","read","addEventListener","removeEventListener","mergeRegister","registerUpdateListener","editorState","registerCommand","SELECTION_CHANGE_COMMAND","_payload","newEditor","COMMAND_PRIORITY_LOW","isEditable","useToolbar","document","body","nodeIsText","setNodeIsText","updatePopup","isComposing","$isCodeHighlightNode","anchor","getNode","getTextContent","$isTextNode","registerRootListener","createPortal","Toolbar","makeComposable","useLexicalComposerContext"],"sources":["Toolbar.tsx"],"sourcesContent":["import React, { FC, useCallback, useEffect, useRef, useState } from \"react\";\nimport {\n $getSelection,\n $isRangeSelection,\n $isTextNode,\n COMMAND_PRIORITY_LOW,\n LexicalEditor,\n SELECTION_CHANGE_COMMAND\n} from \"lexical\";\nimport { makeComposable } from \"@webiny/react-composition\";\nimport { $isLinkNode } from \"@lexical/link\";\nimport { createPortal } from \"react-dom\";\nimport { mergeRegister } from \"@lexical/utils\";\nimport { $isCodeHighlightNode } from \"@lexical/code\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport \"./Toolbar.css\";\nimport { ToolbarType } from \"~/types\";\nimport { getDOMRangeRect } from \"~/utils/getDOMRangeRect\";\nimport { setFloatingElemPosition } from \"~/utils/setFloatingElemPosition\";\nimport { getSelectedNode } from \"~/utils/getSelectedNode\";\nimport { useRichTextEditor } from \"~/hooks/useRichTextEditor\";\nimport { getLexicalTextSelectionState } from \"~/utils/getLexicalTextSelectionState\";\n\ninterface FloatingToolbarProps {\n type: ToolbarType;\n anchorElem: HTMLElement;\n children?: React.ReactNode;\n editor: LexicalEditor;\n}\n\nconst FloatingToolbar: FC<FloatingToolbarProps> = ({ children, type, anchorElem, editor }) => {\n const popupCharStylesEditorRef = useRef<HTMLDivElement | null>(null);\n const { toolbarType, setToolbarType, setTextBlockSelection } = useRichTextEditor();\n const [activeEditor, setActiveEditor] = useState(editor);\n\n useEffect(() => {\n if (toolbarType !== type) {\n setToolbarType(type);\n }\n }, [type]);\n\n const updateTextFormatFloatingToolbar = useCallback(() => {\n const selection = $getSelection();\n\n const popupCharStylesEditorElem = popupCharStylesEditorRef.current;\n const nativeSelection = window.getSelection();\n\n if (popupCharStylesEditorElem === null) {\n return;\n }\n\n let isLink = false;\n if ($isRangeSelection(selection)) {\n const selectionState = getLexicalTextSelectionState(activeEditor, selection);\n if (selectionState) {\n setTextBlockSelection(selectionState);\n }\n const node = getSelectedNode(selection);\n // Update links\n const parent = node.getParent();\n\n if ($isLinkNode(parent) || $isLinkNode(node)) {\n isLink = true;\n }\n }\n\n const rootElement = editor.getRootElement();\n if (\n selection !== null &&\n nativeSelection !== null &&\n !nativeSelection.isCollapsed &&\n rootElement !== null &&\n rootElement.contains(nativeSelection.anchorNode) &&\n !isLink\n ) {\n const rangeRect = getDOMRangeRect(nativeSelection, rootElement);\n setFloatingElemPosition(rangeRect, popupCharStylesEditorElem, anchorElem);\n }\n }, [editor, anchorElem]);\n\n useEffect(() => {\n const scrollerElem = anchorElem.parentElement;\n\n const update = () => {\n editor.getEditorState().read(() => {\n updateTextFormatFloatingToolbar();\n });\n };\n\n window.addEventListener(\"resize\", update);\n if (scrollerElem) {\n scrollerElem.addEventListener(\"scroll\", update);\n }\n\n return () => {\n window.removeEventListener(\"resize\", update);\n if (scrollerElem) {\n scrollerElem.removeEventListener(\"scroll\", update);\n }\n };\n }, [editor, updateTextFormatFloatingToolbar, anchorElem]);\n\n useEffect(() => {\n editor.getEditorState().read(() => {\n updateTextFormatFloatingToolbar();\n });\n return mergeRegister(\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n updateTextFormatFloatingToolbar();\n });\n }),\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n (_payload, newEditor) => {\n updateTextFormatFloatingToolbar();\n setActiveEditor(newEditor);\n return false;\n },\n COMMAND_PRIORITY_LOW\n )\n );\n }, [editor, updateTextFormatFloatingToolbar]);\n\n return (\n <div ref={popupCharStylesEditorRef} className=\"floating-text-format-popup\">\n {editor.isEditable() && children}\n </div>\n );\n};\n\ninterface useToolbarProps {\n editor: LexicalEditor;\n type: ToolbarType;\n anchorElem: HTMLElement;\n children?: React.ReactNode;\n}\n\nconst useToolbar: FC<useToolbarProps> = ({\n editor,\n anchorElem = document.body,\n type,\n children\n}): JSX.Element | null => {\n const { nodeIsText, setNodeIsText } = useRichTextEditor();\n\n const updatePopup = useCallback(() => {\n editor.getEditorState().read(() => {\n // Should not to pop up the floating toolbar when using IME input\n if (editor.isComposing()) {\n return;\n }\n const selection = $getSelection();\n const nativeSelection = window.getSelection();\n const rootElement = editor.getRootElement();\n\n if (\n nativeSelection !== null &&\n (!$isRangeSelection(selection) ||\n rootElement === null ||\n !rootElement.contains(nativeSelection.anchorNode))\n ) {\n setNodeIsText(false);\n return;\n }\n\n if (!$isRangeSelection(selection)) {\n return;\n }\n\n const node = getSelectedNode(selection);\n if (\n !$isCodeHighlightNode(selection.anchor.getNode()) &&\n selection.getTextContent() !== \"\"\n ) {\n setNodeIsText($isTextNode(node));\n } else {\n setNodeIsText(false);\n }\n });\n }, [editor]);\n\n useEffect(() => {\n document.addEventListener(\"selectionchange\", updatePopup);\n return () => {\n document.removeEventListener(\"selectionchange\", updatePopup);\n };\n }, [updatePopup]);\n\n useEffect(() => {\n return mergeRegister(\n editor.registerUpdateListener(() => {\n updatePopup();\n }),\n editor.registerRootListener(() => {\n if (editor.getRootElement() === null) {\n setNodeIsText(false);\n }\n })\n );\n }, [editor, updatePopup]);\n\n if (!nodeIsText) {\n return null;\n }\n\n return createPortal(\n <FloatingToolbar type={type} anchorElem={anchorElem} editor={editor}>\n {children}\n </FloatingToolbar>,\n anchorElem\n );\n};\n\nexport interface ToolbarProps {\n type: ToolbarType;\n anchorElem: HTMLElement;\n children?: React.ReactNode;\n}\n\n/**\n * @description Main toolbar container\n */\nexport const Toolbar = makeComposable<ToolbarProps>(\n \"Toolbar\",\n ({ anchorElem, type, children }): JSX.Element | null => {\n const [editor] = useLexicalComposerContext();\n return useToolbar({ editor, anchorElem, type, children });\n }\n);\n"],"mappings":"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"}
@@ -1,5 +1,2 @@
1
1
  /// <reference types="react" />
2
- /**
3
- * Toolbar action. On toolbar, you can see as button that is bold.
4
- */
5
2
  export declare const BoldAction: () => JSX.Element;
@@ -10,10 +10,9 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/sli
10
10
  var _react = _interopRequireWildcard(require("react"));
11
11
  var _LexicalComposerContext = require("@lexical/react/LexicalComposerContext");
12
12
  var _lexical = require("lexical");
13
- /**
14
- * Toolbar action. On toolbar, you can see as button that is bold.
15
- */
13
+ var _useRichTextEditor2 = require("../../hooks/useRichTextEditor");
16
14
  var BoldAction = function BoldAction() {
15
+ var _textBlockSelection$s;
17
16
  var _useLexicalComposerCo = (0, _LexicalComposerContext.useLexicalComposerContext)(),
18
17
  _useLexicalComposerCo2 = (0, _slicedToArray2.default)(_useLexicalComposerCo, 1),
19
18
  editor = _useLexicalComposerCo2[0];
@@ -21,10 +20,16 @@ var BoldAction = function BoldAction() {
21
20
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
22
21
  isBold = _useState2[0],
23
22
  setIsBold = _useState2[1];
23
+ var _useRichTextEditor = (0, _useRichTextEditor2.useRichTextEditor)(),
24
+ textBlockSelection = _useRichTextEditor.textBlockSelection;
25
+ var isBoldSelected = !!(textBlockSelection !== null && textBlockSelection !== void 0 && (_textBlockSelection$s = textBlockSelection.state) !== null && _textBlockSelection$s !== void 0 && _textBlockSelection$s.bold);
24
26
  var handleClick = function handleClick() {
25
27
  editor.dispatchCommand(_lexical.FORMAT_TEXT_COMMAND, "bold");
26
28
  setIsBold(!isBold);
27
29
  };
30
+ (0, _react.useEffect)(function () {
31
+ setIsBold(isBoldSelected);
32
+ }, [isBoldSelected]);
28
33
  return /*#__PURE__*/_react.default.createElement("button", {
29
34
  onClick: function onClick() {
30
35
  return handleClick();
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_LexicalComposerContext","_lexical","BoldAction","_useLexicalComposerCo","useLexicalComposerContext","_useLexicalComposerCo2","_slicedToArray2","default","editor","_useState","useState","_useState2","isBold","setIsBold","handleClick","dispatchCommand","FORMAT_TEXT_COMMAND","createElement","onClick","className","exports"],"sources":["BoldAction.tsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { FORMAT_TEXT_COMMAND } from \"lexical\";\n\n/**\n * Toolbar action. On toolbar, you can see as button that is bold.\n */\nexport const BoldAction = () => {\n const [editor] = useLexicalComposerContext();\n const [isBold, setIsBold] = useState(false);\n const handleClick = () => {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"bold\");\n setIsBold(!isBold);\n };\n\n return (\n <button\n onClick={() => handleClick()}\n className={\"popup-item spaced \" + (isBold ? \"active\" : \"\")}\n aria-label=\"Format text as bold\"\n >\n <i className=\"format bold\" />\n </button>\n );\n};\n"],"mappings":";;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,uBAAA,GAAAD,OAAA;AACA,IAAAE,QAAA,GAAAF,OAAA;AAEA;AACA;AACA;AACO,IAAMG,UAAU,GAAG,SAAbA,UAAUA,CAAA,EAAS;EAC5B,IAAAC,qBAAA,GAAiB,IAAAC,iDAAyB,GAAE;IAAAC,sBAAA,OAAAC,eAAA,CAAAC,OAAA,EAAAJ,qBAAA;IAArCK,MAAM,GAAAH,sBAAA;EACb,IAAAI,SAAA,GAA4B,IAAAC,eAAQ,EAAC,KAAK,CAAC;IAAAC,UAAA,OAAAL,eAAA,CAAAC,OAAA,EAAAE,SAAA;IAApCG,MAAM,GAAAD,UAAA;IAAEE,SAAS,GAAAF,UAAA;EACxB,IAAMG,WAAW,GAAG,SAAdA,WAAWA,CAAA,EAAS;IACtBN,MAAM,CAACO,eAAe,CAACC,4BAAmB,EAAE,MAAM,CAAC;IACnDH,SAAS,CAAC,CAACD,MAAM,CAAC;EACtB,CAAC;EAED,oBACIf,MAAA,CAAAU,OAAA,CAAAU,aAAA;IACIC,OAAO,EAAE,SAAAA,QAAA;MAAA,OAAMJ,WAAW,EAAE;IAAA,CAAC;IAC7BK,SAAS,EAAE,oBAAoB,IAAIP,MAAM,GAAG,QAAQ,GAAG,EAAE,CAAE;IAC3D,cAAW;EAAqB,gBAEhCf,MAAA,CAAAU,OAAA,CAAAU,aAAA;IAAGE,SAAS,EAAC;EAAa,EAAG,CACxB;AAEjB,CAAC;AAACC,OAAA,CAAAlB,UAAA,GAAAA,UAAA"}
1
+ {"version":3,"names":["BoldAction","useLexicalComposerContext","editor","useState","isBold","setIsBold","useRichTextEditor","textBlockSelection","isBoldSelected","state","bold","handleClick","dispatchCommand","FORMAT_TEXT_COMMAND","useEffect"],"sources":["BoldAction.tsx"],"sourcesContent":["import React, { useEffect, useState } from \"react\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { FORMAT_TEXT_COMMAND } from \"lexical\";\nimport { useRichTextEditor } from \"~/hooks/useRichTextEditor\";\n\nexport const BoldAction = () => {\n const [editor] = useLexicalComposerContext();\n const [isBold, setIsBold] = useState(false);\n const { textBlockSelection } = useRichTextEditor();\n const isBoldSelected = !!textBlockSelection?.state?.bold;\n\n const handleClick = () => {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"bold\");\n setIsBold(!isBold);\n };\n\n useEffect(() => {\n setIsBold(isBoldSelected);\n }, [isBoldSelected]);\n\n return (\n <button\n onClick={() => handleClick()}\n className={\"popup-item spaced \" + (isBold ? \"active\" : \"\")}\n aria-label=\"Format text as bold\"\n >\n <i className=\"format bold\" />\n </button>\n );\n};\n"],"mappings":";;;;;;;;;AAAA;AACA;AACA;AACA;AAEO,IAAMA,UAAU,GAAG,SAAbA,UAAU,GAAS;EAAA;EAC5B,4BAAiB,IAAAC,iDAAyB,GAAE;IAAA;IAArCC,MAAM;EACb,gBAA4B,IAAAC,eAAQ,EAAC,KAAK,CAAC;IAAA;IAApCC,MAAM;IAAEC,SAAS;EACxB,yBAA+B,IAAAC,qCAAiB,GAAE;IAA1CC,kBAAkB,sBAAlBA,kBAAkB;EAC1B,IAAMC,cAAc,GAAG,CAAC,EAACD,kBAAkB,aAAlBA,kBAAkB,wCAAlBA,kBAAkB,CAAEE,KAAK,kDAAzB,sBAA2BC,IAAI;EAExD,IAAMC,WAAW,GAAG,SAAdA,WAAW,GAAS;IACtBT,MAAM,CAACU,eAAe,CAACC,4BAAmB,EAAE,MAAM,CAAC;IACnDR,SAAS,CAAC,CAACD,MAAM,CAAC;EACtB,CAAC;EAED,IAAAU,gBAAS,EAAC,YAAM;IACZT,SAAS,CAACG,cAAc,CAAC;EAC7B,CAAC,EAAE,CAACA,cAAc,CAAC,CAAC;EAEpB,oBACI;IACI,OAAO,EAAE;MAAA,OAAMG,WAAW,EAAE;IAAA,CAAC;IAC7B,SAAS,EAAE,oBAAoB,IAAIP,MAAM,GAAG,QAAQ,GAAG,EAAE,CAAE;IAC3D,cAAW;EAAqB,gBAEhC;IAAG,SAAS,EAAC;EAAa,EAAG,CACxB;AAEjB,CAAC;AAAC"}
@@ -1,5 +1,2 @@
1
1
  /// <reference types="react" />
2
- /**
3
- * Toolbar button action. On click will wrap the content in bullet list style.
4
- */
5
2
  export declare const BulletListAction: () => JSX.Element;
@@ -9,71 +9,33 @@ exports.BulletListAction = void 0;
9
9
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
10
  var _react = _interopRequireWildcard(require("react"));
11
11
  var _LexicalComposerContext = require("@lexical/react/LexicalComposerContext");
12
- var _list = require("@lexical/list");
13
- var _lexical = require("lexical");
14
- var _utils = require("@lexical/utils");
15
- /**
16
- * Toolbar button action. On click will wrap the content in bullet list style.
17
- */
12
+ var _webinyList = require("../../commands/webiny-list");
13
+ var _useRichTextEditor2 = require("../../hooks/useRichTextEditor");
18
14
  var BulletListAction = function BulletListAction() {
15
+ var _textBlockSelection$s;
19
16
  var _useLexicalComposerCo = (0, _LexicalComposerContext.useLexicalComposerContext)(),
20
17
  _useLexicalComposerCo2 = (0, _slicedToArray2.default)(_useLexicalComposerCo, 1),
21
18
  editor = _useLexicalComposerCo2[0];
22
- var _useState = (0, _react.useState)(editor),
19
+ var _useState = (0, _react.useState)(false),
23
20
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
24
- activeEditor = _useState2[0],
25
- setActiveEditor = _useState2[1];
26
- var _useState3 = (0, _react.useState)(false),
27
- _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
28
- isActive = _useState4[0],
29
- setIsActive = _useState4[1];
30
- var updateToolbar = (0, _react.useCallback)(function () {
31
- var selection = (0, _lexical.$getSelection)();
32
- if ((0, _lexical.$isRangeSelection)(selection)) {
33
- var anchorNode = selection.anchor.getNode();
34
- var element = anchorNode.getKey() === "root" ? anchorNode : (0, _utils.$findMatchingParent)(anchorNode, function (e) {
35
- var parent = e.getParent();
36
- return parent !== null && (0, _lexical.$isRootOrShadowRoot)(parent);
37
- });
38
- if (element === null) {
39
- element = anchorNode.getTopLevelElementOrThrow();
40
- }
41
- if ((0, _list.$isListNode)(element)) {
42
- var parentList = (0, _utils.$getNearestNodeOfType)(anchorNode, _list.ListNode);
43
- // get the type of the list that is selected with the cursor
44
- var type = parentList ? parentList.getListType() : element.getListType();
45
- // set the button as active for numbered list
46
- if (type === "bullet") {
47
- setIsActive(true);
48
- } else {
49
- setIsActive(false);
50
- }
51
- }
52
- }
53
- }, [activeEditor]);
21
+ isActive = _useState2[0],
22
+ setIsActive = _useState2[1];
23
+ var _useRichTextEditor = (0, _useRichTextEditor2.useRichTextEditor)(),
24
+ textBlockSelection = _useRichTextEditor.textBlockSelection;
25
+ var isListSelected = textBlockSelection === null || textBlockSelection === void 0 ? void 0 : (_textBlockSelection$s = textBlockSelection.state) === null || _textBlockSelection$s === void 0 ? void 0 : _textBlockSelection$s.list.isSelected;
54
26
  (0, _react.useEffect)(function () {
55
- return (0, _utils.mergeRegister)(activeEditor.registerUpdateListener(function (_ref) {
56
- var editorState = _ref.editorState;
57
- editorState.read(function () {
58
- updateToolbar();
59
- });
60
- }));
61
- }, [activeEditor, editor, updateToolbar]);
62
- (0, _react.useEffect)(function () {
63
- return editor.registerCommand(_lexical.SELECTION_CHANGE_COMMAND, function (_payload, newEditor) {
64
- updateToolbar();
65
- setActiveEditor(newEditor);
66
- return false;
67
- }, _lexical.COMMAND_PRIORITY_CRITICAL);
68
- }, [editor, updateToolbar]);
27
+ var _textBlockSelection$s2;
28
+ var isListBulletType = (textBlockSelection === null || textBlockSelection === void 0 ? void 0 : (_textBlockSelection$s2 = textBlockSelection.state) === null || _textBlockSelection$s2 === void 0 ? void 0 : _textBlockSelection$s2.textType) === "bullet";
29
+ setIsActive(isListBulletType);
30
+ }, [isListSelected]);
69
31
  var formatBulletList = function formatBulletList() {
70
32
  if (!isActive) {
71
33
  // will update the active state in the useEffect
72
- editor.dispatchCommand(_list.INSERT_UNORDERED_LIST_COMMAND, undefined);
34
+ editor.dispatchCommand(_webinyList.INSERT_UNORDERED_WEBINY_LIST_COMMAND, {
35
+ themeStyleId: "list"
36
+ });
73
37
  } else {
74
- editor.dispatchCommand(_list.REMOVE_LIST_COMMAND, undefined);
75
- // removing will not update correctly the active state, so we need to set to false manually.
76
- setIsActive(false);
38
+ editor.dispatchCommand(_webinyList.REMOVE_WEBINY_LIST_COMMAND, undefined);
77
39
  }
78
40
  };
79
41
  return /*#__PURE__*/_react.default.createElement("button", {
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_LexicalComposerContext","_list","_lexical","_utils","BulletListAction","_useLexicalComposerCo","useLexicalComposerContext","_useLexicalComposerCo2","_slicedToArray2","default","editor","_useState","useState","_useState2","activeEditor","setActiveEditor","_useState3","_useState4","isActive","setIsActive","updateToolbar","useCallback","selection","$getSelection","$isRangeSelection","anchorNode","anchor","getNode","element","getKey","$findMatchingParent","e","parent","getParent","$isRootOrShadowRoot","getTopLevelElementOrThrow","$isListNode","parentList","$getNearestNodeOfType","ListNode","type","getListType","useEffect","mergeRegister","registerUpdateListener","_ref","editorState","read","registerCommand","SELECTION_CHANGE_COMMAND","_payload","newEditor","COMMAND_PRIORITY_CRITICAL","formatBulletList","dispatchCommand","INSERT_UNORDERED_LIST_COMMAND","undefined","REMOVE_LIST_COMMAND","createElement","onClick","className","exports"],"sources":["BulletListAction.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useState } from \"react\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport {\n $isListNode,\n INSERT_UNORDERED_LIST_COMMAND,\n ListNode,\n REMOVE_LIST_COMMAND\n} from \"@lexical/list\";\nimport {\n $getSelection,\n $isRangeSelection,\n $isRootOrShadowRoot,\n COMMAND_PRIORITY_CRITICAL,\n SELECTION_CHANGE_COMMAND\n} from \"lexical\";\nimport { $findMatchingParent, $getNearestNodeOfType, mergeRegister } from \"@lexical/utils\";\n\n/**\n * Toolbar button action. On click will wrap the content in bullet list style.\n */\nexport const BulletListAction = () => {\n const [editor] = useLexicalComposerContext();\n const [activeEditor, setActiveEditor] = useState(editor);\n const [isActive, setIsActive] = useState<boolean>(false);\n\n const updateToolbar = useCallback(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n const anchorNode = selection.anchor.getNode();\n let element =\n anchorNode.getKey() === \"root\"\n ? anchorNode\n : $findMatchingParent(anchorNode, e => {\n const parent = e.getParent();\n return parent !== null && $isRootOrShadowRoot(parent);\n });\n\n if (element === null) {\n element = anchorNode.getTopLevelElementOrThrow();\n }\n\n if ($isListNode(element)) {\n const parentList = $getNearestNodeOfType<ListNode>(anchorNode, ListNode);\n // get the type of the list that is selected with the cursor\n const type = parentList ? parentList.getListType() : element.getListType();\n // set the button as active for numbered list\n if (type === \"bullet\") {\n setIsActive(true);\n } else {\n setIsActive(false);\n }\n }\n }\n }, [activeEditor]);\n\n useEffect(() => {\n return mergeRegister(\n activeEditor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n updateToolbar();\n });\n })\n );\n }, [activeEditor, editor, updateToolbar]);\n\n useEffect(() => {\n return editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n (_payload, newEditor) => {\n updateToolbar();\n setActiveEditor(newEditor);\n return false;\n },\n COMMAND_PRIORITY_CRITICAL\n );\n }, [editor, updateToolbar]);\n\n const formatBulletList = () => {\n if (!isActive) {\n // will update the active state in the useEffect\n editor.dispatchCommand(INSERT_UNORDERED_LIST_COMMAND, undefined);\n } else {\n editor.dispatchCommand(REMOVE_LIST_COMMAND, undefined);\n // removing will not update correctly the active state, so we need to set to false manually.\n setIsActive(false);\n }\n };\n\n return (\n <button\n onClick={() => formatBulletList()}\n className={\"popup-item spaced \" + (isActive ? \"active\" : \"\")}\n aria-label=\"Format text as bullet list\"\n >\n <i className=\"icon bullet-list\" />\n </button>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["BulletListAction","useLexicalComposerContext","editor","useState","isActive","setIsActive","useRichTextEditor","textBlockSelection","isListSelected","state","list","isSelected","useEffect","isListBulletType","textType","formatBulletList","dispatchCommand","INSERT_UNORDERED_WEBINY_LIST_COMMAND","themeStyleId","REMOVE_WEBINY_LIST_COMMAND","undefined"],"sources":["BulletListAction.tsx"],"sourcesContent":["import React, { useEffect, useState } from \"react\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport {\n INSERT_UNORDERED_WEBINY_LIST_COMMAND,\n REMOVE_WEBINY_LIST_COMMAND\n} from \"~/commands/webiny-list\";\nimport { useRichTextEditor } from \"~/hooks/useRichTextEditor\";\n\nexport const BulletListAction = () => {\n const [editor] = useLexicalComposerContext();\n const [isActive, setIsActive] = useState<boolean>(false);\n const { textBlockSelection } = useRichTextEditor();\n const isListSelected = textBlockSelection?.state?.list.isSelected;\n\n useEffect(() => {\n const isListBulletType = textBlockSelection?.state?.textType === \"bullet\";\n setIsActive(isListBulletType);\n }, [isListSelected]);\n\n const formatBulletList = () => {\n if (!isActive) {\n // will update the active state in the useEffect\n editor.dispatchCommand(INSERT_UNORDERED_WEBINY_LIST_COMMAND, { themeStyleId: \"list\" });\n } else {\n editor.dispatchCommand(REMOVE_WEBINY_LIST_COMMAND, undefined);\n }\n };\n\n return (\n <button\n onClick={() => formatBulletList()}\n className={\"popup-item spaced \" + (isActive ? \"active\" : \"\")}\n aria-label=\"Format text as bullet list\"\n >\n <i className=\"icon bullet-list\" />\n </button>\n );\n};\n"],"mappings":";;;;;;;;;AAAA;AACA;AACA;AAIA;AAEO,IAAMA,gBAAgB,GAAG,SAAnBA,gBAAgB,GAAS;EAAA;EAClC,4BAAiB,IAAAC,iDAAyB,GAAE;IAAA;IAArCC,MAAM;EACb,gBAAgC,IAAAC,eAAQ,EAAU,KAAK,CAAC;IAAA;IAAjDC,QAAQ;IAAEC,WAAW;EAC5B,yBAA+B,IAAAC,qCAAiB,GAAE;IAA1CC,kBAAkB,sBAAlBA,kBAAkB;EAC1B,IAAMC,cAAc,GAAGD,kBAAkB,aAAlBA,kBAAkB,gDAAlBA,kBAAkB,CAAEE,KAAK,0DAAzB,sBAA2BC,IAAI,CAACC,UAAU;EAEjE,IAAAC,gBAAS,EAAC,YAAM;IAAA;IACZ,IAAMC,gBAAgB,GAAG,CAAAN,kBAAkB,aAAlBA,kBAAkB,iDAAlBA,kBAAkB,CAAEE,KAAK,2DAAzB,uBAA2BK,QAAQ,MAAK,QAAQ;IACzET,WAAW,CAACQ,gBAAgB,CAAC;EACjC,CAAC,EAAE,CAACL,cAAc,CAAC,CAAC;EAEpB,IAAMO,gBAAgB,GAAG,SAAnBA,gBAAgB,GAAS;IAC3B,IAAI,CAACX,QAAQ,EAAE;MACX;MACAF,MAAM,CAACc,eAAe,CAACC,gDAAoC,EAAE;QAAEC,YAAY,EAAE;MAAO,CAAC,CAAC;IAC1F,CAAC,MAAM;MACHhB,MAAM,CAACc,eAAe,CAACG,sCAA0B,EAAEC,SAAS,CAAC;IACjE;EACJ,CAAC;EAED,oBACI;IACI,OAAO,EAAE;MAAA,OAAML,gBAAgB,EAAE;IAAA,CAAC;IAClC,SAAS,EAAE,oBAAoB,IAAIX,QAAQ,GAAG,QAAQ,GAAG,EAAE,CAAE;IAC7D,cAAW;EAA4B,gBAEvC;IAAG,SAAS,EAAC;EAAkB,EAAG,CAC7B;AAEjB,CAAC;AAAC"}
@@ -1,6 +1,2 @@
1
1
  /// <reference types="react" />
2
- /**
3
- * Toolbar action. User can highlight the selected text.
4
- * - Gray background will be visible on selected text after clicking on the button.
5
- */
6
2
  export declare const CodeHighlightAction: () => JSX.Element;
@@ -10,11 +10,9 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/sli
10
10
  var _react = _interopRequireWildcard(require("react"));
11
11
  var _LexicalComposerContext = require("@lexical/react/LexicalComposerContext");
12
12
  var _lexical = require("lexical");
13
- /**
14
- * Toolbar action. User can highlight the selected text.
15
- * - Gray background will be visible on selected text after clicking on the button.
16
- */
13
+ var _useRichTextEditor2 = require("../../hooks/useRichTextEditor");
17
14
  var CodeHighlightAction = function CodeHighlightAction() {
15
+ var _textBlockSelection$s;
18
16
  var _useLexicalComposerCo = (0, _LexicalComposerContext.useLexicalComposerContext)(),
19
17
  _useLexicalComposerCo2 = (0, _slicedToArray2.default)(_useLexicalComposerCo, 1),
20
18
  editor = _useLexicalComposerCo2[0];
@@ -22,6 +20,12 @@ var CodeHighlightAction = function CodeHighlightAction() {
22
20
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
23
21
  isCode = _useState2[0],
24
22
  setIsCode = _useState2[1];
23
+ var _useRichTextEditor = (0, _useRichTextEditor2.useRichTextEditor)(),
24
+ textBlockSelection = _useRichTextEditor.textBlockSelection;
25
+ var isCodeSelected = !!(textBlockSelection !== null && textBlockSelection !== void 0 && (_textBlockSelection$s = textBlockSelection.state) !== null && _textBlockSelection$s !== void 0 && _textBlockSelection$s.code);
26
+ (0, _react.useEffect)(function () {
27
+ setIsCode(isCodeSelected);
28
+ }, [isCodeSelected]);
25
29
  var handleClick = function handleClick() {
26
30
  editor.dispatchCommand(_lexical.FORMAT_TEXT_COMMAND, "code");
27
31
  setIsCode(!isCode);
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_LexicalComposerContext","_lexical","CodeHighlightAction","_useLexicalComposerCo","useLexicalComposerContext","_useLexicalComposerCo2","_slicedToArray2","default","editor","_useState","useState","_useState2","isCode","setIsCode","handleClick","dispatchCommand","FORMAT_TEXT_COMMAND","createElement","onClick","className","exports"],"sources":["CodeHighlightAction.tsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { FORMAT_TEXT_COMMAND } from \"lexical\";\n\n/**\n * Toolbar action. User can highlight the selected text.\n * - Gray background will be visible on selected text after clicking on the button.\n */\nexport const CodeHighlightAction = () => {\n const [editor] = useLexicalComposerContext();\n const [isCode, setIsCode] = useState(false);\n const handleClick = () => {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"code\");\n setIsCode(!isCode);\n };\n\n return (\n <button\n onClick={() => handleClick()}\n className={\"popup-item spaced \" + (isCode ? \"active\" : \"\")}\n aria-label=\"Text code highlight\"\n >\n <i className=\"format code\" />\n </button>\n );\n};\n"],"mappings":";;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,uBAAA,GAAAD,OAAA;AACA,IAAAE,QAAA,GAAAF,OAAA;AAEA;AACA;AACA;AACA;AACO,IAAMG,mBAAmB,GAAG,SAAtBA,mBAAmBA,CAAA,EAAS;EACrC,IAAAC,qBAAA,GAAiB,IAAAC,iDAAyB,GAAE;IAAAC,sBAAA,OAAAC,eAAA,CAAAC,OAAA,EAAAJ,qBAAA;IAArCK,MAAM,GAAAH,sBAAA;EACb,IAAAI,SAAA,GAA4B,IAAAC,eAAQ,EAAC,KAAK,CAAC;IAAAC,UAAA,OAAAL,eAAA,CAAAC,OAAA,EAAAE,SAAA;IAApCG,MAAM,GAAAD,UAAA;IAAEE,SAAS,GAAAF,UAAA;EACxB,IAAMG,WAAW,GAAG,SAAdA,WAAWA,CAAA,EAAS;IACtBN,MAAM,CAACO,eAAe,CAACC,4BAAmB,EAAE,MAAM,CAAC;IACnDH,SAAS,CAAC,CAACD,MAAM,CAAC;EACtB,CAAC;EAED,oBACIf,MAAA,CAAAU,OAAA,CAAAU,aAAA;IACIC,OAAO,EAAE,SAAAA,QAAA;MAAA,OAAMJ,WAAW,EAAE;IAAA,CAAC;IAC7BK,SAAS,EAAE,oBAAoB,IAAIP,MAAM,GAAG,QAAQ,GAAG,EAAE,CAAE;IAC3D,cAAW;EAAqB,gBAEhCf,MAAA,CAAAU,OAAA,CAAAU,aAAA;IAAGE,SAAS,EAAC;EAAa,EAAG,CACxB;AAEjB,CAAC;AAACC,OAAA,CAAAlB,mBAAA,GAAAA,mBAAA"}
1
+ {"version":3,"names":["CodeHighlightAction","useLexicalComposerContext","editor","useState","isCode","setIsCode","useRichTextEditor","textBlockSelection","isCodeSelected","state","code","useEffect","handleClick","dispatchCommand","FORMAT_TEXT_COMMAND"],"sources":["CodeHighlightAction.tsx"],"sourcesContent":["import React, { useEffect, useState } from \"react\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { FORMAT_TEXT_COMMAND } from \"lexical\";\nimport { useRichTextEditor } from \"~/hooks/useRichTextEditor\";\n\nexport const CodeHighlightAction = () => {\n const [editor] = useLexicalComposerContext();\n const [isCode, setIsCode] = useState(false);\n const { textBlockSelection } = useRichTextEditor();\n const isCodeSelected = !!textBlockSelection?.state?.code;\n\n useEffect(() => {\n setIsCode(isCodeSelected);\n }, [isCodeSelected]);\n\n const handleClick = () => {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"code\");\n setIsCode(!isCode);\n };\n\n return (\n <button\n onClick={() => handleClick()}\n className={\"popup-item spaced \" + (isCode ? \"active\" : \"\")}\n aria-label=\"Text code highlight\"\n >\n <i className=\"format code\" />\n </button>\n );\n};\n"],"mappings":";;;;;;;;;AAAA;AACA;AACA;AACA;AAEO,IAAMA,mBAAmB,GAAG,SAAtBA,mBAAmB,GAAS;EAAA;EACrC,4BAAiB,IAAAC,iDAAyB,GAAE;IAAA;IAArCC,MAAM;EACb,gBAA4B,IAAAC,eAAQ,EAAC,KAAK,CAAC;IAAA;IAApCC,MAAM;IAAEC,SAAS;EACxB,yBAA+B,IAAAC,qCAAiB,GAAE;IAA1CC,kBAAkB,sBAAlBA,kBAAkB;EAC1B,IAAMC,cAAc,GAAG,CAAC,EAACD,kBAAkB,aAAlBA,kBAAkB,wCAAlBA,kBAAkB,CAAEE,KAAK,kDAAzB,sBAA2BC,IAAI;EAExD,IAAAC,gBAAS,EAAC,YAAM;IACZN,SAAS,CAACG,cAAc,CAAC;EAC7B,CAAC,EAAE,CAACA,cAAc,CAAC,CAAC;EAEpB,IAAMI,WAAW,GAAG,SAAdA,WAAW,GAAS;IACtBV,MAAM,CAACW,eAAe,CAACC,4BAAmB,EAAE,MAAM,CAAC;IACnDT,SAAS,CAAC,CAACD,MAAM,CAAC;EACtB,CAAC;EAED,oBACI;IACI,OAAO,EAAE;MAAA,OAAMQ,WAAW,EAAE;IAAA,CAAC;IAC7B,SAAS,EAAE,oBAAoB,IAAIR,MAAM,GAAG,QAAQ,GAAG,EAAE,CAAE;IAC3D,cAAW;EAAqB,gBAEhC;IAAG,SAAS,EAAC;EAAa,EAAG,CACxB;AAEjB,CAAC;AAAC"}
@@ -0,0 +1,11 @@
1
+ import React from "react";
2
+ export declare const FontColorPicker: import("@webiny/react-composition").ComposableFC<unknown>;
3
+ interface FontActionColorPicker {
4
+ element: JSX.Element;
5
+ }
6
+ declare const FontActionColorPicker: React.FC<FontActionColorPicker>;
7
+ export interface FontColorAction extends React.FC<unknown> {
8
+ ColorPicker: typeof FontActionColorPicker;
9
+ }
10
+ export declare const FontColorAction: FontColorAction;
11
+ export {};
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
4
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.FontColorPicker = exports.FontColorAction = void 0;
9
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
+ var _react = _interopRequireWildcard(require("react"));
11
+ var _LexicalComposerContext = require("@lexical/react/LexicalComposerContext");
12
+ var _lexical = require("lexical");
13
+ var _reactComposition = require("@webiny/react-composition");
14
+ var _FontColorActionContext = require("../../context/FontColorActionContext");
15
+ var _FontColorNode = require("../../nodes/FontColorNode");
16
+ var _getSelectedNode = require("../../utils/getSelectedNode");
17
+ var FontColorPicker = (0, _reactComposition.makeComposable)("FontColorPicker", function () {
18
+ (0, _react.useEffect)(function () {
19
+ console.log("Default FontColorPicker, please add your own component");
20
+ }, []);
21
+ return null;
22
+ });
23
+ exports.FontColorPicker = FontColorPicker;
24
+ var FontActionColorPicker = function FontActionColorPicker(_ref) {
25
+ var element = _ref.element;
26
+ return /*#__PURE__*/_react.default.createElement(_reactComposition.Compose, {
27
+ component: FontColorPicker,
28
+ with: function _with() {
29
+ return function () {
30
+ return element;
31
+ };
32
+ }
33
+ });
34
+ };
35
+ var FontColorAction = function FontColorAction() {
36
+ var _useLexicalComposerCo = (0, _LexicalComposerContext.useLexicalComposerContext)(),
37
+ _useLexicalComposerCo2 = (0, _slicedToArray2.default)(_useLexicalComposerCo, 1),
38
+ editor = _useLexicalComposerCo2[0];
39
+ var _useState = (0, _react.useState)("#000"),
40
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
41
+ fontColor = _useState2[0],
42
+ setFontColor = _useState2[1];
43
+ var setFontColorSelect = (0, _react.useCallback)(function (fontColorValue) {
44
+ setFontColor(fontColorValue);
45
+ }, [fontColor]);
46
+ var onFontColorSelect = (0, _react.useCallback)(function (colorValue, themeColorName) {
47
+ setFontColorSelect(colorValue);
48
+ editor.dispatchCommand(_FontColorNode.ADD_FONT_COLOR_COMMAND, {
49
+ color: colorValue,
50
+ themeColorName: themeColorName
51
+ });
52
+ }, []);
53
+ var updatePopup = (0, _react.useCallback)(function () {
54
+ editor.getEditorState().read(function () {
55
+ var selection = (0, _lexical.$getSelection)();
56
+ if (!(0, _lexical.$isRangeSelection)(selection)) {
57
+ return;
58
+ }
59
+ var node = (0, _getSelectedNode.getSelectedNode)(selection);
60
+ if ((0, _FontColorNode.$isFontColorNode)(node)) {
61
+ var colorStyle = node.getColorStyle();
62
+ setFontColor(colorStyle.color);
63
+ }
64
+ });
65
+ }, [editor]);
66
+ (0, _react.useEffect)(function () {
67
+ document.addEventListener("selectionchange", updatePopup);
68
+ return function () {
69
+ document.removeEventListener("selectionchange", updatePopup);
70
+ };
71
+ }, [updatePopup]);
72
+ return /*#__PURE__*/_react.default.createElement(_FontColorActionContext.FontColorActionContext.Provider, {
73
+ value: {
74
+ value: fontColor,
75
+ applyColor: onFontColorSelect
76
+ }
77
+ }, /*#__PURE__*/_react.default.createElement(FontColorPicker, null));
78
+ };
79
+ exports.FontColorAction = FontColorAction;
80
+ {
81
+ /* Color action settings */
82
+ }
83
+ FontColorAction.ColorPicker = FontActionColorPicker;
@@ -0,0 +1 @@
1
+ {"version":3,"names":["FontColorPicker","makeComposable","useEffect","console","log","FontActionColorPicker","element","FontColorAction","useLexicalComposerContext","editor","useState","fontColor","setFontColor","setFontColorSelect","useCallback","fontColorValue","onFontColorSelect","colorValue","themeColorName","dispatchCommand","ADD_FONT_COLOR_COMMAND","color","updatePopup","getEditorState","read","selection","$getSelection","$isRangeSelection","node","getSelectedNode","$isFontColorNode","colorStyle","getColorStyle","document","addEventListener","removeEventListener","value","applyColor","ColorPicker"],"sources":["FontColorAction.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useState } from \"react\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { $getSelection, $isRangeSelection, LexicalCommand } from \"lexical\";\nimport { Compose, makeComposable } from \"@webiny/react-composition\";\nimport { FontColorActionContext } from \"~/context/FontColorActionContext\";\nimport { $isFontColorNode, ADD_FONT_COLOR_COMMAND, FontColorPayload } from \"~/nodes/FontColorNode\";\nimport { getSelectedNode } from \"~/utils/getSelectedNode\";\n\nexport const FontColorPicker = makeComposable(\"FontColorPicker\", (): JSX.Element | null => {\n useEffect(() => {\n console.log(\"Default FontColorPicker, please add your own component\");\n }, []);\n return null;\n});\n\ninterface FontActionColorPicker {\n element: JSX.Element;\n}\n\nconst FontActionColorPicker: React.FC<FontActionColorPicker> = ({ element }): JSX.Element => {\n return <Compose component={FontColorPicker} with={() => () => element} />;\n};\n\nexport interface FontColorAction extends React.FC<unknown> {\n ColorPicker: typeof FontActionColorPicker;\n}\n\nexport const FontColorAction: FontColorAction = () => {\n const [editor] = useLexicalComposerContext();\n const [fontColor, setFontColor] = useState<string>(\"#000\");\n\n const setFontColorSelect = useCallback(\n (fontColorValue: string) => {\n setFontColor(fontColorValue);\n },\n [fontColor]\n );\n\n const onFontColorSelect = useCallback(\n (colorValue: string, themeColorName: string | undefined) => {\n setFontColorSelect(colorValue);\n editor.dispatchCommand<LexicalCommand<FontColorPayload>>(ADD_FONT_COLOR_COMMAND, {\n color: colorValue,\n themeColorName\n });\n },\n []\n );\n\n const updatePopup = useCallback(() => {\n editor.getEditorState().read(() => {\n const selection = $getSelection();\n if (!$isRangeSelection(selection)) {\n return;\n }\n const node = getSelectedNode(selection);\n if ($isFontColorNode(node)) {\n const colorStyle = node.getColorStyle();\n setFontColor(colorStyle.color);\n }\n });\n }, [editor]);\n\n useEffect(() => {\n document.addEventListener(\"selectionchange\", updatePopup);\n return () => {\n document.removeEventListener(\"selectionchange\", updatePopup);\n };\n }, [updatePopup]);\n\n return (\n <FontColorActionContext.Provider\n value={{\n value: fontColor,\n applyColor: onFontColorSelect\n }}\n >\n <FontColorPicker />\n </FontColorActionContext.Provider>\n );\n};\n\n{\n /* Color action settings */\n}\nFontColorAction.ColorPicker = FontActionColorPicker;\n"],"mappings":";;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEO,IAAMA,eAAe,GAAG,IAAAC,gCAAc,EAAC,iBAAiB,EAAE,YAA0B;EACvF,IAAAC,gBAAS,EAAC,YAAM;IACZC,OAAO,CAACC,GAAG,CAAC,wDAAwD,CAAC;EACzE,CAAC,EAAE,EAAE,CAAC;EACN,OAAO,IAAI;AACf,CAAC,CAAC;AAAC;AAMH,IAAMC,qBAAsD,GAAG,SAAzDA,qBAAsD,OAAiC;EAAA,IAA3BC,OAAO,QAAPA,OAAO;EACrE,oBAAO,6BAAC,yBAAO;IAAC,SAAS,EAAEN,eAAgB;IAAC,IAAI,EAAE;MAAA,OAAM;QAAA,OAAMM,OAAO;MAAA;IAAA;EAAC,EAAG;AAC7E,CAAC;AAMM,IAAMC,eAAgC,GAAG,SAAnCA,eAAgC,GAAS;EAClD,4BAAiB,IAAAC,iDAAyB,GAAE;IAAA;IAArCC,MAAM;EACb,gBAAkC,IAAAC,eAAQ,EAAS,MAAM,CAAC;IAAA;IAAnDC,SAAS;IAAEC,YAAY;EAE9B,IAAMC,kBAAkB,GAAG,IAAAC,kBAAW,EAClC,UAACC,cAAsB,EAAK;IACxBH,YAAY,CAACG,cAAc,CAAC;EAChC,CAAC,EACD,CAACJ,SAAS,CAAC,CACd;EAED,IAAMK,iBAAiB,GAAG,IAAAF,kBAAW,EACjC,UAACG,UAAkB,EAAEC,cAAkC,EAAK;IACxDL,kBAAkB,CAACI,UAAU,CAAC;IAC9BR,MAAM,CAACU,eAAe,CAAmCC,qCAAsB,EAAE;MAC7EC,KAAK,EAAEJ,UAAU;MACjBC,cAAc,EAAdA;IACJ,CAAC,CAAC;EACN,CAAC,EACD,EAAE,CACL;EAED,IAAMI,WAAW,GAAG,IAAAR,kBAAW,EAAC,YAAM;IAClCL,MAAM,CAACc,cAAc,EAAE,CAACC,IAAI,CAAC,YAAM;MAC/B,IAAMC,SAAS,GAAG,IAAAC,sBAAa,GAAE;MACjC,IAAI,CAAC,IAAAC,0BAAiB,EAACF,SAAS,CAAC,EAAE;QAC/B;MACJ;MACA,IAAMG,IAAI,GAAG,IAAAC,gCAAe,EAACJ,SAAS,CAAC;MACvC,IAAI,IAAAK,+BAAgB,EAACF,IAAI,CAAC,EAAE;QACxB,IAAMG,UAAU,GAAGH,IAAI,CAACI,aAAa,EAAE;QACvCpB,YAAY,CAACmB,UAAU,CAACV,KAAK,CAAC;MAClC;IACJ,CAAC,CAAC;EACN,CAAC,EAAE,CAACZ,MAAM,CAAC,CAAC;EAEZ,IAAAP,gBAAS,EAAC,YAAM;IACZ+B,QAAQ,CAACC,gBAAgB,CAAC,iBAAiB,EAAEZ,WAAW,CAAC;IACzD,OAAO,YAAM;MACTW,QAAQ,CAACE,mBAAmB,CAAC,iBAAiB,EAAEb,WAAW,CAAC;IAChE,CAAC;EACL,CAAC,EAAE,CAACA,WAAW,CAAC,CAAC;EAEjB,oBACI,6BAAC,8CAAsB,CAAC,QAAQ;IAC5B,KAAK,EAAE;MACHc,KAAK,EAAEzB,SAAS;MAChB0B,UAAU,EAAErB;IAChB;EAAE,gBAEF,6BAAC,eAAe,OAAG,CACW;AAE1C,CAAC;AAAC;AAEF;EACI;AAAA;AAEJT,eAAe,CAAC+B,WAAW,GAAGjC,qBAAqB"}
@@ -14,9 +14,6 @@ var _selection = require("@lexical/selection");
14
14
  var _utils = require("@lexical/utils");
15
15
  var _lexical = require("lexical");
16
16
  var _DropDown = require("../../ui/DropDown");
17
- /**
18
- * Toolbar action. Allow user to change font size for selected text.
19
- */
20
17
  var FONT_SIZE_OPTIONS = ["8px", "9px", "10px", "11px", "12px", "14px", "15px", "16px", "18px", "21px", "24px", "30px", "36px", "48px", "60px", "72px", "96px"];
21
18
  function dropDownActiveClass(active) {
22
19
  if (active) {
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_LexicalComposerContext","_selection","_utils","_lexical","_DropDown","FONT_SIZE_OPTIONS","dropDownActiveClass","active","FontSizeDropDown","props","editor","value","_props$disabled","disabled","handleClick","useCallback","option","update","selection","$getSelection","$isRangeSelection","$patchStyleText","_defineProperty2","default","createElement","DropDown","buttonClassName","buttonLabel","buttonAriaLabel","map","DropDownItem","className","concat","onClick","key","FontSizeAction","_useLexicalComposerCo","useLexicalComposerContext","_useLexicalComposerCo2","_slicedToArray2","_useState","useState","isEditable","_useState2","setIsEditable","_useState3","_useState4","activeEditor","setActiveEditor","_useState5","_useState6","fontSize","setFontSize","updateToolbar","$getSelectionStyleValueForProperty","useEffect","mergeRegister","registerEditableListener","editable","registerUpdateListener","_ref","editorState","read","registerCommand","SELECTION_CHANGE_COMMAND","_payload","newEditor","COMMAND_PRIORITY_CRITICAL","Fragment","exports"],"sources":["FontSizeAction.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useState } from \"react\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { $getSelectionStyleValueForProperty, $patchStyleText } from \"@lexical/selection\";\nimport { mergeRegister } from \"@lexical/utils\";\nimport {\n $getSelection,\n $isRangeSelection,\n COMMAND_PRIORITY_CRITICAL,\n LexicalEditor,\n SELECTION_CHANGE_COMMAND\n} from \"lexical\";\nimport { DropDown, DropDownItem } from \"../../ui/DropDown\";\n\n/**\n * Toolbar action. Allow user to change font size for selected text.\n */\nconst FONT_SIZE_OPTIONS: string[] = [\n \"8px\",\n \"9px\",\n \"10px\",\n \"11px\",\n \"12px\",\n \"14px\",\n \"15px\",\n \"16px\",\n \"18px\",\n \"21px\",\n \"24px\",\n \"30px\",\n \"36px\",\n \"48px\",\n \"60px\",\n \"72px\",\n \"96px\"\n];\n\nfunction dropDownActiveClass(active: boolean) {\n if (active) {\n return \"active dropdown-item-active\";\n }\n return \"\";\n}\n\ninterface FontSizeDropDownProps {\n editor: LexicalEditor;\n value: string;\n disabled?: boolean;\n}\n\nfunction FontSizeDropDown(props: FontSizeDropDownProps): JSX.Element {\n const { editor, value, disabled = false } = props;\n\n const handleClick = useCallback(\n (option: string) => {\n editor.update(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n $patchStyleText(selection, {\n [\"font-size\"]: option\n });\n }\n });\n },\n [editor]\n );\n\n return (\n <DropDown\n disabled={disabled}\n buttonClassName=\"toolbar-item font-size\"\n buttonLabel={value}\n buttonAriaLabel={\"Formatting options for font size\"}\n >\n {FONT_SIZE_OPTIONS.map(option => (\n <DropDownItem\n className={`item fontsize-item ${dropDownActiveClass(value === option)}`}\n onClick={() => handleClick(option)}\n key={option}\n >\n <span className=\"text\">{option}</span>\n </DropDownItem>\n ))}\n </DropDown>\n );\n}\n\nexport const FontSizeAction = () => {\n const [editor] = useLexicalComposerContext();\n const [isEditable, setIsEditable] = useState(() => editor.isEditable());\n const [activeEditor, setActiveEditor] = useState(editor);\n const [fontSize, setFontSize] = useState<string>(\"15px\");\n\n const updateToolbar = useCallback(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n setFontSize($getSelectionStyleValueForProperty(selection, \"font-size\", \"15px\"));\n }\n }, [activeEditor]);\n\n useEffect(() => {\n return mergeRegister(\n editor.registerEditableListener(editable => {\n setIsEditable(editable);\n }),\n activeEditor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n updateToolbar();\n });\n })\n );\n }, [activeEditor, editor, updateToolbar]);\n\n useEffect(() => {\n return editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n (_payload, newEditor) => {\n updateToolbar();\n setActiveEditor(newEditor);\n return false;\n },\n COMMAND_PRIORITY_CRITICAL\n );\n }, [editor, updateToolbar]);\n return (\n <>\n <FontSizeDropDown disabled={!isEditable} value={fontSize} editor={editor} />\n </>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["FONT_SIZE_OPTIONS","dropDownActiveClass","active","FontSizeDropDown","props","editor","value","disabled","handleClick","useCallback","option","update","selection","$getSelection","$isRangeSelection","$patchStyleText","map","FontSizeAction","useLexicalComposerContext","useState","isEditable","setIsEditable","activeEditor","setActiveEditor","fontSize","setFontSize","updateToolbar","$getSelectionStyleValueForProperty","useEffect","mergeRegister","registerEditableListener","editable","registerUpdateListener","editorState","read","registerCommand","SELECTION_CHANGE_COMMAND","_payload","newEditor","COMMAND_PRIORITY_CRITICAL"],"sources":["FontSizeAction.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useState } from \"react\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { $getSelectionStyleValueForProperty, $patchStyleText } from \"@lexical/selection\";\nimport { mergeRegister } from \"@lexical/utils\";\nimport {\n $getSelection,\n $isRangeSelection,\n COMMAND_PRIORITY_CRITICAL,\n LexicalEditor,\n SELECTION_CHANGE_COMMAND\n} from \"lexical\";\nimport { DropDown, DropDownItem } from \"../../ui/DropDown\";\n\nconst FONT_SIZE_OPTIONS: string[] = [\n \"8px\",\n \"9px\",\n \"10px\",\n \"11px\",\n \"12px\",\n \"14px\",\n \"15px\",\n \"16px\",\n \"18px\",\n \"21px\",\n \"24px\",\n \"30px\",\n \"36px\",\n \"48px\",\n \"60px\",\n \"72px\",\n \"96px\"\n];\n\nfunction dropDownActiveClass(active: boolean) {\n if (active) {\n return \"active dropdown-item-active\";\n }\n return \"\";\n}\n\ninterface FontSizeDropDownProps {\n editor: LexicalEditor;\n value: string;\n disabled?: boolean;\n}\n\nfunction FontSizeDropDown(props: FontSizeDropDownProps): JSX.Element {\n const { editor, value, disabled = false } = props;\n\n const handleClick = useCallback(\n (option: string) => {\n editor.update(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n $patchStyleText(selection, {\n [\"font-size\"]: option\n });\n }\n });\n },\n [editor]\n );\n\n return (\n <DropDown\n disabled={disabled}\n buttonClassName=\"toolbar-item font-size\"\n buttonLabel={value}\n buttonAriaLabel={\"Formatting options for font size\"}\n >\n {FONT_SIZE_OPTIONS.map(option => (\n <DropDownItem\n className={`item fontsize-item ${dropDownActiveClass(value === option)}`}\n onClick={() => handleClick(option)}\n key={option}\n >\n <span className=\"text\">{option}</span>\n </DropDownItem>\n ))}\n </DropDown>\n );\n}\n\nexport const FontSizeAction = () => {\n const [editor] = useLexicalComposerContext();\n const [isEditable, setIsEditable] = useState(() => editor.isEditable());\n const [activeEditor, setActiveEditor] = useState(editor);\n const [fontSize, setFontSize] = useState<string>(\"15px\");\n\n const updateToolbar = useCallback(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n setFontSize($getSelectionStyleValueForProperty(selection, \"font-size\", \"15px\"));\n }\n }, [activeEditor]);\n\n useEffect(() => {\n return mergeRegister(\n editor.registerEditableListener(editable => {\n setIsEditable(editable);\n }),\n activeEditor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n updateToolbar();\n });\n })\n );\n }, [activeEditor, editor, updateToolbar]);\n\n useEffect(() => {\n return editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n (_payload, newEditor) => {\n updateToolbar();\n setActiveEditor(newEditor);\n return false;\n },\n COMMAND_PRIORITY_CRITICAL\n );\n }, [editor, updateToolbar]);\n return (\n <>\n <FontSizeDropDown disabled={!isEditable} value={fontSize} editor={editor} />\n </>\n );\n};\n"],"mappings":"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"}
@@ -1,5 +1,2 @@
1
1
  /// <reference types="react" />
2
- /**
3
- * Toolbar action. On toolbar, you can see the button that is italic.
4
- */
5
2
  export declare const ItalicAction: () => JSX.Element;
@@ -10,10 +10,9 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/sli
10
10
  var _react = _interopRequireWildcard(require("react"));
11
11
  var _LexicalComposerContext = require("@lexical/react/LexicalComposerContext");
12
12
  var _lexical = require("lexical");
13
- /**
14
- * Toolbar action. On toolbar, you can see the button that is italic.
15
- */
13
+ var _useRichTextEditor2 = require("../../hooks/useRichTextEditor");
16
14
  var ItalicAction = function ItalicAction() {
15
+ var _textBlockSelection$s;
17
16
  var _useLexicalComposerCo = (0, _LexicalComposerContext.useLexicalComposerContext)(),
18
17
  _useLexicalComposerCo2 = (0, _slicedToArray2.default)(_useLexicalComposerCo, 1),
19
18
  editor = _useLexicalComposerCo2[0];
@@ -21,10 +20,16 @@ var ItalicAction = function ItalicAction() {
21
20
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
22
21
  isItalic = _useState2[0],
23
22
  setIsItalic = _useState2[1];
23
+ var _useRichTextEditor = (0, _useRichTextEditor2.useRichTextEditor)(),
24
+ textBlockSelection = _useRichTextEditor.textBlockSelection;
25
+ var isItalicSelected = !!(textBlockSelection !== null && textBlockSelection !== void 0 && (_textBlockSelection$s = textBlockSelection.state) !== null && _textBlockSelection$s !== void 0 && _textBlockSelection$s.italic);
24
26
  var handleClick = function handleClick() {
25
27
  editor.dispatchCommand(_lexical.FORMAT_TEXT_COMMAND, "italic");
26
28
  setIsItalic(!isItalic);
27
29
  };
30
+ (0, _react.useEffect)(function () {
31
+ setIsItalic(isItalicSelected);
32
+ }, [isItalicSelected]);
28
33
  return /*#__PURE__*/_react.default.createElement("button", {
29
34
  onClick: function onClick() {
30
35
  return handleClick();
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_LexicalComposerContext","_lexical","ItalicAction","_useLexicalComposerCo","useLexicalComposerContext","_useLexicalComposerCo2","_slicedToArray2","default","editor","_useState","useState","_useState2","isItalic","setIsItalic","handleClick","dispatchCommand","FORMAT_TEXT_COMMAND","createElement","onClick","className","exports"],"sources":["ItalicAction.tsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { FORMAT_TEXT_COMMAND } from \"lexical\";\n\n/**\n * Toolbar action. On toolbar, you can see the button that is italic.\n */\nexport const ItalicAction = () => {\n const [editor] = useLexicalComposerContext();\n const [isItalic, setIsItalic] = useState(false);\n const handleClick = () => {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"italic\");\n setIsItalic(!isItalic);\n };\n\n return (\n <button\n onClick={() => handleClick()}\n className={\"popup-item spaced \" + (isItalic ? \"active\" : \"\")}\n aria-label=\"Format text as italic\"\n >\n <i className=\"format italic\" />\n </button>\n );\n};\n"],"mappings":";;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,uBAAA,GAAAD,OAAA;AACA,IAAAE,QAAA,GAAAF,OAAA;AAEA;AACA;AACA;AACO,IAAMG,YAAY,GAAG,SAAfA,YAAYA,CAAA,EAAS;EAC9B,IAAAC,qBAAA,GAAiB,IAAAC,iDAAyB,GAAE;IAAAC,sBAAA,OAAAC,eAAA,CAAAC,OAAA,EAAAJ,qBAAA;IAArCK,MAAM,GAAAH,sBAAA;EACb,IAAAI,SAAA,GAAgC,IAAAC,eAAQ,EAAC,KAAK,CAAC;IAAAC,UAAA,OAAAL,eAAA,CAAAC,OAAA,EAAAE,SAAA;IAAxCG,QAAQ,GAAAD,UAAA;IAAEE,WAAW,GAAAF,UAAA;EAC5B,IAAMG,WAAW,GAAG,SAAdA,WAAWA,CAAA,EAAS;IACtBN,MAAM,CAACO,eAAe,CAACC,4BAAmB,EAAE,QAAQ,CAAC;IACrDH,WAAW,CAAC,CAACD,QAAQ,CAAC;EAC1B,CAAC;EAED,oBACIf,MAAA,CAAAU,OAAA,CAAAU,aAAA;IACIC,OAAO,EAAE,SAAAA,QAAA;MAAA,OAAMJ,WAAW,EAAE;IAAA,CAAC;IAC7BK,SAAS,EAAE,oBAAoB,IAAIP,QAAQ,GAAG,QAAQ,GAAG,EAAE,CAAE;IAC7D,cAAW;EAAuB,gBAElCf,MAAA,CAAAU,OAAA,CAAAU,aAAA;IAAGE,SAAS,EAAC;EAAe,EAAG,CAC1B;AAEjB,CAAC;AAACC,OAAA,CAAAlB,YAAA,GAAAA,YAAA"}
1
+ {"version":3,"names":["ItalicAction","useLexicalComposerContext","editor","useState","isItalic","setIsItalic","useRichTextEditor","textBlockSelection","isItalicSelected","state","italic","handleClick","dispatchCommand","FORMAT_TEXT_COMMAND","useEffect"],"sources":["ItalicAction.tsx"],"sourcesContent":["import React, { useEffect, useState } from \"react\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { FORMAT_TEXT_COMMAND } from \"lexical\";\nimport { useRichTextEditor } from \"~/hooks/useRichTextEditor\";\n\nexport const ItalicAction = () => {\n const [editor] = useLexicalComposerContext();\n const [isItalic, setIsItalic] = useState(false);\n const { textBlockSelection } = useRichTextEditor();\n const isItalicSelected = !!textBlockSelection?.state?.italic;\n\n const handleClick = () => {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"italic\");\n setIsItalic(!isItalic);\n };\n\n useEffect(() => {\n setIsItalic(isItalicSelected);\n }, [isItalicSelected]);\n\n return (\n <button\n onClick={() => handleClick()}\n className={\"popup-item spaced \" + (isItalic ? \"active\" : \"\")}\n aria-label=\"Format text as italic\"\n >\n <i className=\"format italic\" />\n </button>\n );\n};\n"],"mappings":";;;;;;;;;AAAA;AACA;AACA;AACA;AAEO,IAAMA,YAAY,GAAG,SAAfA,YAAY,GAAS;EAAA;EAC9B,4BAAiB,IAAAC,iDAAyB,GAAE;IAAA;IAArCC,MAAM;EACb,gBAAgC,IAAAC,eAAQ,EAAC,KAAK,CAAC;IAAA;IAAxCC,QAAQ;IAAEC,WAAW;EAC5B,yBAA+B,IAAAC,qCAAiB,GAAE;IAA1CC,kBAAkB,sBAAlBA,kBAAkB;EAC1B,IAAMC,gBAAgB,GAAG,CAAC,EAACD,kBAAkB,aAAlBA,kBAAkB,wCAAlBA,kBAAkB,CAAEE,KAAK,kDAAzB,sBAA2BC,MAAM;EAE5D,IAAMC,WAAW,GAAG,SAAdA,WAAW,GAAS;IACtBT,MAAM,CAACU,eAAe,CAACC,4BAAmB,EAAE,QAAQ,CAAC;IACrDR,WAAW,CAAC,CAACD,QAAQ,CAAC;EAC1B,CAAC;EAED,IAAAU,gBAAS,EAAC,YAAM;IACZT,WAAW,CAACG,gBAAgB,CAAC;EACjC,CAAC,EAAE,CAACA,gBAAgB,CAAC,CAAC;EAEtB,oBACI;IACI,OAAO,EAAE;MAAA,OAAMG,WAAW,EAAE;IAAA,CAAC;IAC7B,SAAS,EAAE,oBAAoB,IAAIP,QAAQ,GAAG,QAAQ,GAAG,EAAE,CAAE;IAC7D,cAAW;EAAuB,gBAElC;IAAG,SAAS,EAAC;EAAe,EAAG,CAC1B;AAEjB,CAAC;AAAC"}
@@ -1,7 +1,2 @@
1
1
  /// <reference types="react" />
2
- /**
3
- * Toolbar action. User can convert selected text in clickble link.
4
- * - Small size popup will be opened with input so user can enter the link.
5
- * - To remove the link, user need to select the already added link and click again in the action button.
6
- */
7
2
  export declare const LinkAction: () => JSX.Element;