@webiny/lexical-editor 0.0.0-unstable.085ff6572f

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 (306) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +17 -0
  3. package/commands/webiny-list.d.ts +7 -0
  4. package/commands/webiny-list.js +13 -0
  5. package/commands/webiny-list.js.map +1 -0
  6. package/commands/webiny-quote.d.ts +5 -0
  7. package/commands/webiny-quote.js +9 -0
  8. package/commands/webiny-quote.js.map +1 -0
  9. package/components/AddRichTextEditorNodeType.d.ts +6 -0
  10. package/components/AddRichTextEditorNodeType.js +28 -0
  11. package/components/AddRichTextEditorNodeType.js.map +1 -0
  12. package/components/AddRichTextEditorPlugin.d.ts +12 -0
  13. package/components/AddRichTextEditorPlugin.js +33 -0
  14. package/components/AddRichTextEditorPlugin.js.map +1 -0
  15. package/components/AddToolbarAction.d.ts +7 -0
  16. package/components/AddToolbarAction.js +33 -0
  17. package/components/AddToolbarAction.js.map +1 -0
  18. package/components/Editor/HeadingEditor.d.ts +7 -0
  19. package/components/Editor/HeadingEditor.js +29 -0
  20. package/components/Editor/HeadingEditor.js.map +1 -0
  21. package/components/Editor/ParagraphEditor.d.ts +7 -0
  22. package/components/Editor/ParagraphEditor.js +30 -0
  23. package/components/Editor/ParagraphEditor.js.map +1 -0
  24. package/components/Editor/RichTextEditor.d.ts +26 -0
  25. package/components/Editor/RichTextEditor.js +138 -0
  26. package/components/Editor/RichTextEditor.js.map +1 -0
  27. package/components/LexicalEditorConfig/LexicalEditorConfig.d.ts +11 -0
  28. package/components/LexicalEditorConfig/LexicalEditorConfig.js +19 -0
  29. package/components/LexicalEditorConfig/LexicalEditorConfig.js.map +1 -0
  30. package/components/LexicalHtmlRenderer.d.ts +16 -0
  31. package/components/LexicalHtmlRenderer.js +67 -0
  32. package/components/LexicalHtmlRenderer.js.map +1 -0
  33. package/components/Toolbar/HeadingToolbar.d.ts +12 -0
  34. package/components/Toolbar/HeadingToolbar.js +23 -0
  35. package/components/Toolbar/HeadingToolbar.js.map +1 -0
  36. package/components/Toolbar/ParagraphToolbar.d.ts +12 -0
  37. package/components/Toolbar/ParagraphToolbar.js +23 -0
  38. package/components/Toolbar/ParagraphToolbar.js.map +1 -0
  39. package/components/Toolbar/Toolbar.css +435 -0
  40. package/components/Toolbar/Toolbar.d.ts +13 -0
  41. package/components/Toolbar/Toolbar.js +215 -0
  42. package/components/Toolbar/Toolbar.js.map +1 -0
  43. package/components/ToolbarActions/BoldAction.d.ts +2 -0
  44. package/components/ToolbarActions/BoldAction.js +43 -0
  45. package/components/ToolbarActions/BoldAction.js.map +1 -0
  46. package/components/ToolbarActions/BulletListAction.d.ts +2 -0
  47. package/components/ToolbarActions/BulletListAction.js +56 -0
  48. package/components/ToolbarActions/BulletListAction.js.map +1 -0
  49. package/components/ToolbarActions/CodeHighlightAction.d.ts +2 -0
  50. package/components/ToolbarActions/CodeHighlightAction.js +43 -0
  51. package/components/ToolbarActions/CodeHighlightAction.js.map +1 -0
  52. package/components/ToolbarActions/FontColorAction.d.ts +11 -0
  53. package/components/ToolbarActions/FontColorAction.js +83 -0
  54. package/components/ToolbarActions/FontColorAction.js.map +1 -0
  55. package/components/ToolbarActions/FontSizeAction.d.ts +2 -0
  56. package/components/ToolbarActions/FontSizeAction.js +101 -0
  57. package/components/ToolbarActions/FontSizeAction.js.map +1 -0
  58. package/components/ToolbarActions/ItalicAction.d.ts +2 -0
  59. package/components/ToolbarActions/ItalicAction.js +43 -0
  60. package/components/ToolbarActions/ItalicAction.js.map +1 -0
  61. package/components/ToolbarActions/LinkAction.d.ts +2 -0
  62. package/components/ToolbarActions/LinkAction.js +64 -0
  63. package/components/ToolbarActions/LinkAction.js.map +1 -0
  64. package/components/ToolbarActions/NumberedListAction.d.ts +2 -0
  65. package/components/ToolbarActions/NumberedListAction.js +58 -0
  66. package/components/ToolbarActions/NumberedListAction.js.map +1 -0
  67. package/components/ToolbarActions/QuoteAction.d.ts +2 -0
  68. package/components/ToolbarActions/QuoteAction.js +52 -0
  69. package/components/ToolbarActions/QuoteAction.js.map +1 -0
  70. package/components/ToolbarActions/TextAlignmentAction.d.ts +11 -0
  71. package/components/ToolbarActions/TextAlignmentAction.js +70 -0
  72. package/components/ToolbarActions/TextAlignmentAction.js.map +1 -0
  73. package/components/ToolbarActions/TypographyAction.d.ts +11 -0
  74. package/components/ToolbarActions/TypographyAction.js +145 -0
  75. package/components/ToolbarActions/TypographyAction.js.map +1 -0
  76. package/components/ToolbarActions/UnderlineAction.d.ts +2 -0
  77. package/components/ToolbarActions/UnderlineAction.js +43 -0
  78. package/components/ToolbarActions/UnderlineAction.js.map +1 -0
  79. package/components/ToolbarPresets/HeadingToolbarPreset.d.ts +2 -0
  80. package/components/ToolbarPresets/HeadingToolbarPreset.js +56 -0
  81. package/components/ToolbarPresets/HeadingToolbarPreset.js.map +1 -0
  82. package/components/ToolbarPresets/ParagraphToolbarPreset.d.ts +2 -0
  83. package/components/ToolbarPresets/ParagraphToolbarPreset.js +71 -0
  84. package/components/ToolbarPresets/ParagraphToolbarPreset.js.map +1 -0
  85. package/context/FontColorActionContext.d.ts +6 -0
  86. package/context/FontColorActionContext.js +10 -0
  87. package/context/FontColorActionContext.js.map +1 -0
  88. package/context/RichTextEditorContext.d.ts +26 -0
  89. package/context/RichTextEditorContext.js +68 -0
  90. package/context/RichTextEditorContext.js.map +1 -0
  91. package/context/SharedHistoryContext.d.ts +11 -0
  92. package/context/SharedHistoryContext.js +26 -0
  93. package/context/SharedHistoryContext.js.map +1 -0
  94. package/context/TextAlignmentActionContextProps.d.ts +9 -0
  95. package/context/TextAlignmentActionContextProps.js +10 -0
  96. package/context/TextAlignmentActionContextProps.js.map +1 -0
  97. package/context/TypographyActionContext.d.ts +7 -0
  98. package/context/TypographyActionContext.js +10 -0
  99. package/context/TypographyActionContext.js.map +1 -0
  100. package/hooks/useFontColorPicker.d.ts +2 -0
  101. package/hooks/useFontColorPicker.js +15 -0
  102. package/hooks/useFontColorPicker.js.map +1 -0
  103. package/hooks/useList.d.ts +2 -0
  104. package/hooks/useList.js +39 -0
  105. package/hooks/useList.js.map +1 -0
  106. package/hooks/useQuote.d.ts +2 -0
  107. package/hooks/useQuote.js +20 -0
  108. package/hooks/useQuote.js.map +1 -0
  109. package/hooks/useRichTextEditor.d.ts +2 -0
  110. package/hooks/useRichTextEditor.js +15 -0
  111. package/hooks/useRichTextEditor.js.map +1 -0
  112. package/hooks/useTextAlignmentAction.d.ts +1 -0
  113. package/hooks/useTextAlignmentAction.js +15 -0
  114. package/hooks/useTextAlignmentAction.js.map +1 -0
  115. package/hooks/useTypographyAction.d.ts +1 -0
  116. package/hooks/useTypographyAction.js +15 -0
  117. package/hooks/useTypographyAction.js.map +1 -0
  118. package/images/icons/LICENSE.md +5 -0
  119. package/images/icons/chat-square-quote.svg +1 -0
  120. package/images/icons/chevron-down.svg +1 -0
  121. package/images/icons/code.svg +1 -0
  122. package/images/icons/font-color.svg +1 -0
  123. package/images/icons/indent.svg +3 -0
  124. package/images/icons/justify.svg +3 -0
  125. package/images/icons/link.svg +1 -0
  126. package/images/icons/list-ol.svg +1 -0
  127. package/images/icons/list-ul.svg +1 -0
  128. package/images/icons/outdent.svg +3 -0
  129. package/images/icons/pencil-fill.svg +1 -0
  130. package/images/icons/text-center.svg +1 -0
  131. package/images/icons/text-left.svg +1 -0
  132. package/images/icons/text-paragraph.svg +1 -0
  133. package/images/icons/text-right.svg +1 -0
  134. package/images/icons/type-bold.svg +1 -0
  135. package/images/icons/type-h1.svg +1 -0
  136. package/images/icons/type-h2.svg +1 -0
  137. package/images/icons/type-h3.svg +1 -0
  138. package/images/icons/type-h4.svg +1 -0
  139. package/images/icons/type-h5.svg +1 -0
  140. package/images/icons/type-h6.svg +1 -0
  141. package/images/icons/type-italic.svg +1 -0
  142. package/images/icons/type-strikethrough.svg +1 -0
  143. package/images/icons/type-underline.svg +1 -0
  144. package/images/icons/unlink_icon.svg +1 -0
  145. package/index.d.ts +42 -0
  146. package/index.js +295 -0
  147. package/index.js.map +1 -0
  148. package/nodes/FontColorNode.d.ts +43 -0
  149. package/nodes/FontColorNode.js +127 -0
  150. package/nodes/FontColorNode.js.map +1 -0
  151. package/nodes/HeadingNode.d.ts +34 -0
  152. package/nodes/HeadingNode.js +192 -0
  153. package/nodes/HeadingNode.js.map +1 -0
  154. package/nodes/ListItemNode.d.ts +46 -0
  155. package/nodes/ListItemNode.js +441 -0
  156. package/nodes/ListItemNode.js.map +1 -0
  157. package/nodes/ListNode/formatList.d.ts +12 -0
  158. package/nodes/ListNode/formatList.js +424 -0
  159. package/nodes/ListNode/formatList.js.map +1 -0
  160. package/nodes/ListNode.d.ts +42 -0
  161. package/nodes/ListNode.js +294 -0
  162. package/nodes/ListNode.js.map +1 -0
  163. package/nodes/ParagraphNode.d.ts +32 -0
  164. package/nodes/ParagraphNode.js +218 -0
  165. package/nodes/ParagraphNode.js.map +1 -0
  166. package/nodes/QuoteNode.d.ts +34 -0
  167. package/nodes/QuoteNode.js +225 -0
  168. package/nodes/QuoteNode.js.map +1 -0
  169. package/nodes/TypographyElementNode.d.ts +42 -0
  170. package/nodes/TypographyElementNode.js +155 -0
  171. package/nodes/TypographyElementNode.js.map +1 -0
  172. package/nodes/types.d.ts +15 -0
  173. package/nodes/types.js +5 -0
  174. package/nodes/types.js.map +1 -0
  175. package/nodes/webinyNodes.d.ts +7 -0
  176. package/nodes/webinyNodes.js +45 -0
  177. package/nodes/webinyNodes.js.map +1 -0
  178. package/package.json +41 -0
  179. package/plugins/AutoLinkPlugin/AutoLinkPlugin.d.ts +11 -0
  180. package/plugins/AutoLinkPlugin/AutoLinkPlugin.js +46 -0
  181. package/plugins/AutoLinkPlugin/AutoLinkPlugin.js.map +1 -0
  182. package/plugins/AutoLinkPlugin/index.d.ts +1 -0
  183. package/plugins/AutoLinkPlugin/index.js +16 -0
  184. package/plugins/AutoLinkPlugin/index.js.map +1 -0
  185. package/plugins/BlurEventPlugin/BlurEventPlugin.d.ts +7 -0
  186. package/plugins/BlurEventPlugin/BlurEventPlugin.js +28 -0
  187. package/plugins/BlurEventPlugin/BlurEventPlugin.js.map +1 -0
  188. package/plugins/ClickableLinkPlugin/ClickableLinkPlugin.d.ts +17 -0
  189. package/plugins/ClickableLinkPlugin/ClickableLinkPlugin.js +88 -0
  190. package/plugins/ClickableLinkPlugin/ClickableLinkPlugin.js.map +1 -0
  191. package/plugins/ClickableLinkPlugin/index.d.ts +1 -0
  192. package/plugins/ClickableLinkPlugin/index.js +16 -0
  193. package/plugins/ClickableLinkPlugin/index.js.map +1 -0
  194. package/plugins/CodeHighlightPlugin/CodeHighlightPlugin.d.ts +1 -0
  195. package/plugins/CodeHighlightPlugin/CodeHighlightPlugin.js +20 -0
  196. package/plugins/CodeHighlightPlugin/CodeHighlightPlugin.js.map +1 -0
  197. package/plugins/CodeHighlightPlugin/index.d.ts +1 -0
  198. package/plugins/CodeHighlightPlugin/index.js +16 -0
  199. package/plugins/CodeHighlightPlugin/index.js.map +1 -0
  200. package/plugins/FloatingLinkEditorPlugin/FloatingLinkEditorPlugin.css +118 -0
  201. package/plugins/FloatingLinkEditorPlugin/FloatingLinkEditorPlugin.d.ts +7 -0
  202. package/plugins/FloatingLinkEditorPlugin/FloatingLinkEditorPlugin.js +222 -0
  203. package/plugins/FloatingLinkEditorPlugin/FloatingLinkEditorPlugin.js.map +1 -0
  204. package/plugins/FloatingLinkEditorPlugin/index.d.ts +1 -0
  205. package/plugins/FloatingLinkEditorPlugin/index.js +16 -0
  206. package/plugins/FloatingLinkEditorPlugin/index.js.map +1 -0
  207. package/plugins/FontColorPlugin/FontColorPlugin.d.ts +2 -0
  208. package/plugins/FontColorPlugin/FontColorPlugin.js +39 -0
  209. package/plugins/FontColorPlugin/FontColorPlugin.js.map +1 -0
  210. package/plugins/LexicalUpdateStatePlugin/LexicalUpdateStatePlugin.d.ts +8 -0
  211. package/plugins/LexicalUpdateStatePlugin/LexicalUpdateStatePlugin.js +34 -0
  212. package/plugins/LexicalUpdateStatePlugin/LexicalUpdateStatePlugin.js.map +1 -0
  213. package/plugins/LexicalUpdateStatePlugin/index.d.ts +1 -0
  214. package/plugins/LexicalUpdateStatePlugin/index.js +16 -0
  215. package/plugins/LexicalUpdateStatePlugin/index.js.map +1 -0
  216. package/plugins/TypographyPlugin/TypographyPlugin.d.ts +2 -0
  217. package/plugins/TypographyPlugin/TypographyPlugin.js +35 -0
  218. package/plugins/TypographyPlugin/TypographyPlugin.js.map +1 -0
  219. package/plugins/WebinyListPLugin/WebinyListPlugin.d.ts +1 -0
  220. package/plugins/WebinyListPLugin/WebinyListPlugin.js +25 -0
  221. package/plugins/WebinyListPLugin/WebinyListPlugin.js.map +1 -0
  222. package/plugins/WebinyQuoteNodePlugin/WebinyQuoteNodePlugin.d.ts +1 -0
  223. package/plugins/WebinyQuoteNodePlugin/WebinyQuoteNodePlugin.js +24 -0
  224. package/plugins/WebinyQuoteNodePlugin/WebinyQuoteNodePlugin.js.map +1 -0
  225. package/themes/webinyLexicalTheme.css +429 -0
  226. package/themes/webinyLexicalTheme.d.ts +9 -0
  227. package/themes/webinyLexicalTheme.js +87 -0
  228. package/themes/webinyLexicalTheme.js.map +1 -0
  229. package/types.d.ts +63 -0
  230. package/types.js +25 -0
  231. package/types.js.map +1 -0
  232. package/ui/Divider.d.ts +2 -0
  233. package/ui/Divider.js +13 -0
  234. package/ui/Divider.js.map +1 -0
  235. package/ui/DropDown.d.ts +26 -0
  236. package/ui/DropDown.js +206 -0
  237. package/ui/DropDown.js.map +1 -0
  238. package/ui/Input.css +32 -0
  239. package/ui/LinkPreview.css +69 -0
  240. package/ui/LinkPreview.d.ts +12 -0
  241. package/ui/LinkPreview.js +101 -0
  242. package/ui/LinkPreview.js.map +1 -0
  243. package/ui/Placeholder.css +23 -0
  244. package/ui/Placeholder.d.ts +13 -0
  245. package/ui/Placeholder.js +24 -0
  246. package/ui/Placeholder.js.map +1 -0
  247. package/ui/TextInput.d.ts +18 -0
  248. package/ui/TextInput.js +39 -0
  249. package/ui/TextInput.js.map +1 -0
  250. package/ui/ToolbarActionDialog.d.ts +12 -0
  251. package/ui/ToolbarActionDialog.js +106 -0
  252. package/ui/ToolbarActionDialog.js.map +1 -0
  253. package/utils/findTypographyStyleByHtmlTag.d.ts +8 -0
  254. package/utils/findTypographyStyleByHtmlTag.js +16 -0
  255. package/utils/findTypographyStyleByHtmlTag.js.map +1 -0
  256. package/utils/generateInitialLexicalValue.d.ts +5 -0
  257. package/utils/generateInitialLexicalValue.js +30 -0
  258. package/utils/generateInitialLexicalValue.js.map +1 -0
  259. package/utils/getDOMRangeRect.d.ts +10 -0
  260. package/utils/getDOMRangeRect.js +27 -0
  261. package/utils/getDOMRangeRect.js.map +1 -0
  262. package/utils/getLexicalTextSelectionState.d.ts +5 -0
  263. package/utils/getLexicalTextSelectionState.js +163 -0
  264. package/utils/getLexicalTextSelectionState.js.map +1 -0
  265. package/utils/getSelectedNode.d.ts +2 -0
  266. package/utils/getSelectedNode.js +30 -0
  267. package/utils/getSelectedNode.js.map +1 -0
  268. package/utils/isValidJSON.d.ts +1 -0
  269. package/utils/isValidJSON.js +18 -0
  270. package/utils/isValidJSON.js.map +1 -0
  271. package/utils/isValidLexicalData.d.ts +2 -0
  272. package/utils/isValidLexicalData.js +24 -0
  273. package/utils/isValidLexicalData.js.map +1 -0
  274. package/utils/nodes/clearNodeFormating.d.ts +2 -0
  275. package/utils/nodes/clearNodeFormating.js +28 -0
  276. package/utils/nodes/clearNodeFormating.js.map +1 -0
  277. package/utils/nodes/formatToHeading.d.ts +3 -0
  278. package/utils/nodes/formatToHeading.js +25 -0
  279. package/utils/nodes/formatToHeading.js.map +1 -0
  280. package/utils/nodes/formatToParagraph.d.ts +2 -0
  281. package/utils/nodes/formatToParagraph.js +20 -0
  282. package/utils/nodes/formatToParagraph.js.map +1 -0
  283. package/utils/nodes/formatToQuote.d.ts +2 -0
  284. package/utils/nodes/formatToQuote.js +25 -0
  285. package/utils/nodes/formatToQuote.js.map +1 -0
  286. package/utils/nodes/listNode.d.ts +11 -0
  287. package/utils/nodes/listNode.js +107 -0
  288. package/utils/nodes/listNode.js.map +1 -0
  289. package/utils/point.d.ts +21 -0
  290. package/utils/point.js +77 -0
  291. package/utils/point.js.map +1 -0
  292. package/utils/rect.d.ts +47 -0
  293. package/utils/rect.js +169 -0
  294. package/utils/rect.js.map +1 -0
  295. package/utils/sanitizeUrl.d.ts +8 -0
  296. package/utils/sanitizeUrl.js +27 -0
  297. package/utils/sanitizeUrl.js.map +1 -0
  298. package/utils/setFloatingElemPosition.d.ts +3 -0
  299. package/utils/setFloatingElemPosition.js +40 -0
  300. package/utils/setFloatingElemPosition.js.map +1 -0
  301. package/utils/styleObjectToString.d.ts +2 -0
  302. package/utils/styleObjectToString.js +22 -0
  303. package/utils/styleObjectToString.js.map +1 -0
  304. package/utils/toTypographyEmotionMap.d.ts +3 -0
  305. package/utils/toTypographyEmotionMap.js +36 -0
  306. package/utils/toTypographyEmotionMap.js.map +1 -0
@@ -0,0 +1,215 @@
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.Toolbar = void 0;
9
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
+ var _react = _interopRequireWildcard(require("react"));
11
+ var _lexical = require("lexical");
12
+ var _reactComposition = require("@webiny/react-composition");
13
+ var _reactDom = require("react-dom");
14
+ var _utils = require("@lexical/utils");
15
+ var _LexicalComposerContext = require("@lexical/react/LexicalComposerContext");
16
+ require("./Toolbar.css");
17
+ var _getDOMRangeRect = require("../../utils/getDOMRangeRect");
18
+ var _setFloatingElemPosition = require("../../utils/setFloatingElemPosition");
19
+ var _useRichTextEditor3 = require("../../hooks/useRichTextEditor");
20
+ var _getLexicalTextSelectionState = require("../../utils/getLexicalTextSelectionState");
21
+ var FloatingToolbar = function FloatingToolbar(_ref) {
22
+ var children = _ref.children,
23
+ type = _ref.type,
24
+ anchorElem = _ref.anchorElem,
25
+ editor = _ref.editor;
26
+ var popupCharStylesEditorRef = (0, _react.useRef)(null);
27
+ var _useRichTextEditor = (0, _useRichTextEditor3.useRichTextEditor)(),
28
+ toolbarType = _useRichTextEditor.toolbarType,
29
+ setToolbarType = _useRichTextEditor.setToolbarType;
30
+ (0, _react.useEffect)(function () {
31
+ if (toolbarType !== type) {
32
+ setToolbarType(type);
33
+ }
34
+ }, [type]);
35
+ var mouseMoveListener = (0, _react.useCallback)(function (e) {
36
+ /* Indicates which mouse button(s) was pressed.
37
+ / 1 = mouse left button
38
+ / 3 = mouse left and right button in the same time
39
+ / More info: https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons
40
+ */
41
+ if (popupCharStylesEditorRef !== null && popupCharStylesEditorRef !== void 0 && popupCharStylesEditorRef.current && (e.buttons === 1 || e.buttons === 3)) {
42
+ if (popupCharStylesEditorRef.current.style.pointerEvents !== "none") {
43
+ var x = e.clientX;
44
+ var y = e.clientY;
45
+ var elementUnderMouse = document.elementFromPoint(x, y);
46
+ if (!popupCharStylesEditorRef.current.contains(elementUnderMouse)) {
47
+ // Mouse is not over the target element => not a normal click, but probably a drag
48
+ popupCharStylesEditorRef.current.style.pointerEvents = "none";
49
+ }
50
+ }
51
+ }
52
+ }, [popupCharStylesEditorRef]);
53
+ var mouseUpListener = (0, _react.useCallback)(function () {
54
+ if (popupCharStylesEditorRef !== null && popupCharStylesEditorRef !== void 0 && popupCharStylesEditorRef.current) {
55
+ if (popupCharStylesEditorRef.current.style.pointerEvents !== "auto") {
56
+ popupCharStylesEditorRef.current.style.pointerEvents = "auto";
57
+ }
58
+ }
59
+ }, [popupCharStylesEditorRef]);
60
+ (0, _react.useEffect)(function () {
61
+ if (popupCharStylesEditorRef !== null && popupCharStylesEditorRef !== void 0 && popupCharStylesEditorRef.current) {
62
+ document.addEventListener("mousemove", mouseMoveListener);
63
+ document.addEventListener("mouseup", mouseUpListener);
64
+ return function () {
65
+ document.removeEventListener("mousemove", mouseMoveListener);
66
+ document.removeEventListener("mouseup", mouseUpListener);
67
+ };
68
+ }
69
+ return;
70
+ }, [popupCharStylesEditorRef]);
71
+ var updateTextFormatFloatingToolbar = (0, _react.useCallback)(function () {
72
+ var selection = (0, _lexical.$getSelection)();
73
+ var popupCharStylesEditorElem = popupCharStylesEditorRef.current;
74
+ var nativeSelection = window.getSelection();
75
+ if (popupCharStylesEditorElem === null) {
76
+ return;
77
+ }
78
+ var rootElement = editor.getRootElement();
79
+ if (selection !== null && nativeSelection !== null && !nativeSelection.isCollapsed && rootElement !== null && rootElement.contains(nativeSelection.anchorNode)) {
80
+ var rangeRect = (0, _getDOMRangeRect.getDOMRangeRect)(nativeSelection, rootElement);
81
+ (0, _setFloatingElemPosition.setFloatingElemPosition)(rangeRect, popupCharStylesEditorElem, anchorElem);
82
+ }
83
+ }, [editor, anchorElem]);
84
+ (0, _react.useEffect)(function () {
85
+ var scrollerElem = anchorElem.parentElement;
86
+ var update = function update() {
87
+ editor.getEditorState().read(function () {
88
+ updateTextFormatFloatingToolbar();
89
+ });
90
+ };
91
+ window.addEventListener("resize", update);
92
+ if (scrollerElem) {
93
+ scrollerElem.addEventListener("scroll", update);
94
+ }
95
+ return function () {
96
+ window.removeEventListener("resize", update);
97
+ if (scrollerElem) {
98
+ scrollerElem.removeEventListener("scroll", update);
99
+ }
100
+ };
101
+ }, [editor, updateTextFormatFloatingToolbar, anchorElem]);
102
+ (0, _react.useEffect)(function () {
103
+ editor.getEditorState().read(function () {
104
+ updateTextFormatFloatingToolbar();
105
+ });
106
+ return (0, _utils.mergeRegister)(editor.registerUpdateListener(function (_ref2) {
107
+ var editorState = _ref2.editorState;
108
+ editorState.read(function () {
109
+ updateTextFormatFloatingToolbar();
110
+ });
111
+ }), editor.registerCommand(_lexical.SELECTION_CHANGE_COMMAND, function () {
112
+ updateTextFormatFloatingToolbar();
113
+ return false;
114
+ }, _lexical.COMMAND_PRIORITY_LOW));
115
+ }, [editor, updateTextFormatFloatingToolbar]);
116
+ return /*#__PURE__*/_react.default.createElement("div", {
117
+ ref: popupCharStylesEditorRef,
118
+ className: "floating-text-format-popup"
119
+ }, editor.isEditable() && children);
120
+ };
121
+ var useToolbar = function useToolbar(_ref3) {
122
+ var editor = _ref3.editor,
123
+ _ref3$anchorElem = _ref3.anchorElem,
124
+ anchorElem = _ref3$anchorElem === void 0 ? document.body : _ref3$anchorElem,
125
+ type = _ref3.type,
126
+ children = _ref3.children;
127
+ var _useRichTextEditor2 = (0, _useRichTextEditor3.useRichTextEditor)(),
128
+ nodeIsText = _useRichTextEditor2.nodeIsText,
129
+ setNodeIsText = _useRichTextEditor2.setNodeIsText,
130
+ setActiveEditor = _useRichTextEditor2.setActiveEditor,
131
+ setIsEditable = _useRichTextEditor2.setIsEditable,
132
+ setTextBlockSelection = _useRichTextEditor2.setTextBlockSelection;
133
+ var _useState = (0, _react.useState)(editor),
134
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
135
+ toolbarActiveEditor = _useState2[0],
136
+ setToolbarActiveEditor = _useState2[1];
137
+ var updateToolbar = (0, _react.useCallback)(function () {
138
+ editor.getEditorState().read(function () {
139
+ // Should not to pop up the floating toolbar when using IME input
140
+ if (editor.isComposing()) {
141
+ return;
142
+ }
143
+ var selection = (0, _lexical.$getSelection)();
144
+ if ((0, _lexical.$isRangeSelection)(selection)) {
145
+ var selectionState = (0, _getLexicalTextSelectionState.getLexicalTextSelectionState)(toolbarActiveEditor, selection);
146
+ if (selectionState) {
147
+ setTextBlockSelection(selectionState);
148
+ if (selectionState.selectedText !== "") {
149
+ setNodeIsText(true);
150
+ } else {
151
+ setNodeIsText(false);
152
+ }
153
+ }
154
+ }
155
+ if (!(0, _lexical.$isRangeSelection)(selection)) {
156
+ setNodeIsText(false);
157
+ return;
158
+ }
159
+ });
160
+ }, [toolbarActiveEditor]);
161
+ (0, _react.useEffect)(function () {
162
+ document.addEventListener("selectionchange", updateToolbar);
163
+ return function () {
164
+ document.removeEventListener("selectionchange", updateToolbar);
165
+ };
166
+ }, [updateToolbar]);
167
+ (0, _react.useEffect)(function () {
168
+ return editor.registerCommand(_lexical.SELECTION_CHANGE_COMMAND, function (_payload, newEditor) {
169
+ updateToolbar();
170
+ setToolbarActiveEditor(newEditor);
171
+ setActiveEditor(newEditor);
172
+ return false;
173
+ }, _lexical.COMMAND_PRIORITY_CRITICAL);
174
+ }, [editor, updateToolbar]);
175
+ (0, _react.useEffect)(function () {
176
+ return (0, _utils.mergeRegister)(editor.registerEditableListener(function (editable) {
177
+ setIsEditable(editable);
178
+ }), toolbarActiveEditor.registerUpdateListener(function (_ref4) {
179
+ var editorState = _ref4.editorState;
180
+ editorState.read(function () {
181
+ updateToolbar();
182
+ });
183
+ }), editor.registerRootListener(function () {
184
+ if (editor.getRootElement() === null) {
185
+ setNodeIsText(false);
186
+ }
187
+ }));
188
+ }, [updateToolbar, editor, toolbarActiveEditor]);
189
+ if (!nodeIsText) {
190
+ return null;
191
+ }
192
+ return /*#__PURE__*/(0, _reactDom.createPortal)( /*#__PURE__*/_react.default.createElement(FloatingToolbar, {
193
+ type: type,
194
+ anchorElem: anchorElem,
195
+ editor: editor
196
+ }, children), anchorElem);
197
+ };
198
+ /**
199
+ * @description Main toolbar container
200
+ */
201
+ var Toolbar = (0, _reactComposition.makeComposable)("Toolbar", function (_ref5) {
202
+ var anchorElem = _ref5.anchorElem,
203
+ type = _ref5.type,
204
+ children = _ref5.children;
205
+ var _useLexicalComposerCo = (0, _LexicalComposerContext.useLexicalComposerContext)(),
206
+ _useLexicalComposerCo2 = (0, _slicedToArray2.default)(_useLexicalComposerCo, 1),
207
+ editor = _useLexicalComposerCo2[0];
208
+ return useToolbar({
209
+ editor: editor,
210
+ anchorElem: anchorElem,
211
+ type: type,
212
+ children: children
213
+ });
214
+ });
215
+ exports.Toolbar = Toolbar;
@@ -0,0 +1 @@
1
+ {"version":3,"names":["FloatingToolbar","children","type","anchorElem","editor","popupCharStylesEditorRef","useRef","useRichTextEditor","toolbarType","setToolbarType","useEffect","mouseMoveListener","useCallback","e","current","buttons","style","pointerEvents","x","clientX","y","clientY","elementUnderMouse","document","elementFromPoint","contains","mouseUpListener","addEventListener","removeEventListener","updateTextFormatFloatingToolbar","selection","$getSelection","popupCharStylesEditorElem","nativeSelection","window","getSelection","rootElement","getRootElement","isCollapsed","anchorNode","rangeRect","getDOMRangeRect","setFloatingElemPosition","scrollerElem","parentElement","update","getEditorState","read","mergeRegister","registerUpdateListener","editorState","registerCommand","SELECTION_CHANGE_COMMAND","COMMAND_PRIORITY_LOW","isEditable","useToolbar","body","nodeIsText","setNodeIsText","setActiveEditor","setIsEditable","setTextBlockSelection","useState","toolbarActiveEditor","setToolbarActiveEditor","updateToolbar","isComposing","$isRangeSelection","selectionState","getLexicalTextSelectionState","selectedText","_payload","newEditor","COMMAND_PRIORITY_CRITICAL","registerEditableListener","editable","registerRootListener","createPortal","Toolbar","makeComposable","useLexicalComposerContext"],"sources":["Toolbar.tsx"],"sourcesContent":["import React, { FC, useCallback, useEffect, useRef, useState } from \"react\";\nimport {\n $getSelection,\n $isRangeSelection,\n COMMAND_PRIORITY_CRITICAL,\n COMMAND_PRIORITY_LOW,\n LexicalEditor,\n SELECTION_CHANGE_COMMAND\n} from \"lexical\";\nimport { makeComposable } from \"@webiny/react-composition\";\nimport { createPortal } from \"react-dom\";\nimport { mergeRegister } from \"@lexical/utils\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport \"./Toolbar.css\";\nimport { ToolbarType } from \"~/types\";\nimport { getDOMRangeRect } from \"~/utils/getDOMRangeRect\";\nimport { setFloatingElemPosition } from \"~/utils/setFloatingElemPosition\";\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 } = useRichTextEditor();\n\n useEffect(() => {\n if (toolbarType !== type) {\n setToolbarType(type);\n }\n }, [type]);\n\n const mouseMoveListener = useCallback(\n (e: MouseEvent) => {\n /* Indicates which mouse button(s) was pressed.\n / 1 = mouse left button\n / 3 = mouse left and right button in the same time\n / More info: https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons\n */\n if (popupCharStylesEditorRef?.current && (e.buttons === 1 || e.buttons === 3)) {\n if (popupCharStylesEditorRef.current.style.pointerEvents !== \"none\") {\n const x = e.clientX;\n const y = e.clientY;\n const elementUnderMouse = document.elementFromPoint(x, y);\n\n if (!popupCharStylesEditorRef.current.contains(elementUnderMouse)) {\n // Mouse is not over the target element => not a normal click, but probably a drag\n popupCharStylesEditorRef.current.style.pointerEvents = \"none\";\n }\n }\n }\n },\n [popupCharStylesEditorRef]\n );\n\n const mouseUpListener = useCallback(() => {\n if (popupCharStylesEditorRef?.current) {\n if (popupCharStylesEditorRef.current.style.pointerEvents !== \"auto\") {\n popupCharStylesEditorRef.current.style.pointerEvents = \"auto\";\n }\n }\n }, [popupCharStylesEditorRef]);\n\n useEffect(() => {\n if (popupCharStylesEditorRef?.current) {\n document.addEventListener(\"mousemove\", mouseMoveListener);\n document.addEventListener(\"mouseup\", mouseUpListener);\n\n return () => {\n document.removeEventListener(\"mousemove\", mouseMoveListener);\n document.removeEventListener(\"mouseup\", mouseUpListener);\n };\n }\n return;\n }, [popupCharStylesEditorRef]);\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 const rootElement = editor.getRootElement();\n if (\n selection !== null &&\n nativeSelection !== null &&\n !nativeSelection.isCollapsed &&\n rootElement !== null &&\n rootElement.contains(nativeSelection.anchorNode)\n ) {\n const rangeRect = getDOMRangeRect(nativeSelection, rootElement);\n\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, setActiveEditor, setIsEditable, setTextBlockSelection } =\n useRichTextEditor();\n\n const [toolbarActiveEditor, setToolbarActiveEditor] = useState<LexicalEditor>(editor);\n\n const updateToolbar = 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\n const selection = $getSelection();\n\n if ($isRangeSelection(selection)) {\n const selectionState = getLexicalTextSelectionState(toolbarActiveEditor, selection);\n if (selectionState) {\n setTextBlockSelection(selectionState);\n if (selectionState.selectedText !== \"\") {\n setNodeIsText(true);\n } else {\n setNodeIsText(false);\n }\n }\n }\n\n if (!$isRangeSelection(selection)) {\n setNodeIsText(false);\n return;\n }\n });\n }, [toolbarActiveEditor]);\n\n useEffect(() => {\n document.addEventListener(\"selectionchange\", updateToolbar);\n return () => {\n document.removeEventListener(\"selectionchange\", updateToolbar);\n };\n }, [updateToolbar]);\n\n useEffect(() => {\n return editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n (_payload, newEditor) => {\n updateToolbar();\n setToolbarActiveEditor(newEditor);\n setActiveEditor(newEditor);\n return false;\n },\n COMMAND_PRIORITY_CRITICAL\n );\n }, [editor, updateToolbar]);\n\n useEffect(() => {\n return mergeRegister(\n editor.registerEditableListener(editable => {\n setIsEditable(editable);\n }),\n toolbarActiveEditor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n updateToolbar();\n });\n }),\n editor.registerRootListener(() => {\n if (editor.getRootElement() === null) {\n setNodeIsText(false);\n }\n })\n );\n }, [updateToolbar, editor, toolbarActiveEditor]);\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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"}
@@ -0,0 +1,2 @@
1
+ /// <reference types="react" />
2
+ export declare const BoldAction: () => JSX.Element;
@@ -0,0 +1,43 @@
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.BoldAction = 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 _useRichTextEditor2 = require("../../hooks/useRichTextEditor");
14
+ var BoldAction = function BoldAction() {
15
+ var _textBlockSelection$s;
16
+ var _useLexicalComposerCo = (0, _LexicalComposerContext.useLexicalComposerContext)(),
17
+ _useLexicalComposerCo2 = (0, _slicedToArray2.default)(_useLexicalComposerCo, 1),
18
+ editor = _useLexicalComposerCo2[0];
19
+ var _useState = (0, _react.useState)(false),
20
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
21
+ isBold = _useState2[0],
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);
26
+ var handleClick = function handleClick() {
27
+ editor.dispatchCommand(_lexical.FORMAT_TEXT_COMMAND, "bold");
28
+ setIsBold(!isBold);
29
+ };
30
+ (0, _react.useEffect)(function () {
31
+ setIsBold(isBoldSelected);
32
+ }, [isBoldSelected]);
33
+ return /*#__PURE__*/_react.default.createElement("button", {
34
+ onClick: function onClick() {
35
+ return handleClick();
36
+ },
37
+ className: "popup-item spaced " + (isBold ? "active" : ""),
38
+ "aria-label": "Format text as bold"
39
+ }, /*#__PURE__*/_react.default.createElement("i", {
40
+ className: "format bold"
41
+ }));
42
+ };
43
+ exports.BoldAction = BoldAction;
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,2 @@
1
+ /// <reference types="react" />
2
+ export declare const BulletListAction: () => JSX.Element;
@@ -0,0 +1,56 @@
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.BulletListAction = 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 _webinyList = require("../../commands/webiny-list");
13
+ var _useRichTextEditor2 = require("../../hooks/useRichTextEditor");
14
+ var _findTypographyStyleByHtmlTag = require("../../utils/findTypographyStyleByHtmlTag");
15
+ var BulletListAction = function BulletListAction() {
16
+ var _textBlockSelection$s;
17
+ var _useLexicalComposerCo = (0, _LexicalComposerContext.useLexicalComposerContext)(),
18
+ _useLexicalComposerCo2 = (0, _slicedToArray2.default)(_useLexicalComposerCo, 1),
19
+ editor = _useLexicalComposerCo2[0];
20
+ var _useState = (0, _react.useState)(false),
21
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
22
+ isActive = _useState2[0],
23
+ setIsActive = _useState2[1];
24
+ var _useRichTextEditor = (0, _useRichTextEditor2.useRichTextEditor)(),
25
+ textBlockSelection = _useRichTextEditor.textBlockSelection,
26
+ themeEmotionMap = _useRichTextEditor.themeEmotionMap;
27
+ var isListSelected = textBlockSelection === null || textBlockSelection === void 0 ? void 0 : (_textBlockSelection$s = textBlockSelection.state) === null || _textBlockSelection$s === void 0 ? void 0 : _textBlockSelection$s.list.isSelected;
28
+ (0, _react.useEffect)(function () {
29
+ var _textBlockSelection$s2;
30
+ var isListBulletType = (textBlockSelection === null || textBlockSelection === void 0 ? void 0 : (_textBlockSelection$s2 = textBlockSelection.state) === null || _textBlockSelection$s2 === void 0 ? void 0 : _textBlockSelection$s2.textType) === "bullet";
31
+ setIsActive(isListBulletType);
32
+ }, [isListSelected]);
33
+ var formatBulletList = function formatBulletList() {
34
+ if (!isActive) {
35
+ var _findTypographyStyleB;
36
+ var styleId = themeEmotionMap ? (_findTypographyStyleB = (0, _findTypographyStyleByHtmlTag.findTypographyStyleByHtmlTag)("ul", themeEmotionMap)) === null || _findTypographyStyleB === void 0 ? void 0 : _findTypographyStyleB.id : undefined;
37
+ // will update the active state in the useEffect
38
+ editor.dispatchCommand(_webinyList.INSERT_UNORDERED_WEBINY_LIST_COMMAND, {
39
+ themeStyleId: styleId
40
+ });
41
+ setIsActive(true);
42
+ } else {
43
+ editor.dispatchCommand(_webinyList.REMOVE_WEBINY_LIST_COMMAND, undefined);
44
+ }
45
+ };
46
+ return /*#__PURE__*/_react.default.createElement("button", {
47
+ onClick: function onClick() {
48
+ return formatBulletList();
49
+ },
50
+ className: "popup-item spaced " + (isActive ? "active" : ""),
51
+ "aria-label": "Format text as bullet list"
52
+ }, /*#__PURE__*/_react.default.createElement("i", {
53
+ className: "icon bullet-list"
54
+ }));
55
+ };
56
+ exports.BulletListAction = BulletListAction;
@@ -0,0 +1 @@
1
+ {"version":3,"names":["BulletListAction","useLexicalComposerContext","editor","useState","isActive","setIsActive","useRichTextEditor","textBlockSelection","themeEmotionMap","isListSelected","state","list","isSelected","useEffect","isListBulletType","textType","formatBulletList","styleId","findTypographyStyleByHtmlTag","id","undefined","dispatchCommand","INSERT_UNORDERED_WEBINY_LIST_COMMAND","themeStyleId","REMOVE_WEBINY_LIST_COMMAND"],"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\";\nimport { findTypographyStyleByHtmlTag } from \"~/utils/findTypographyStyleByHtmlTag\";\n\nexport const BulletListAction = () => {\n const [editor] = useLexicalComposerContext();\n const [isActive, setIsActive] = useState<boolean>(false);\n const { textBlockSelection, themeEmotionMap } = 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 const styleId = themeEmotionMap\n ? findTypographyStyleByHtmlTag(\"ul\", themeEmotionMap)?.id\n : undefined;\n // will update the active state in the useEffect\n editor.dispatchCommand(INSERT_UNORDERED_WEBINY_LIST_COMMAND, { themeStyleId: styleId });\n setIsActive(true);\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;AACA;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,yBAAgD,IAAAC,qCAAiB,GAAE;IAA3DC,kBAAkB,sBAAlBA,kBAAkB;IAAEC,eAAe,sBAAfA,eAAe;EAC3C,IAAMC,cAAc,GAAGF,kBAAkB,aAAlBA,kBAAkB,gDAAlBA,kBAAkB,CAAEG,KAAK,0DAAzB,sBAA2BC,IAAI,CAACC,UAAU;EAEjE,IAAAC,gBAAS,EAAC,YAAM;IAAA;IACZ,IAAMC,gBAAgB,GAAG,CAAAP,kBAAkB,aAAlBA,kBAAkB,iDAAlBA,kBAAkB,CAAEG,KAAK,2DAAzB,uBAA2BK,QAAQ,MAAK,QAAQ;IACzEV,WAAW,CAACS,gBAAgB,CAAC;EACjC,CAAC,EAAE,CAACL,cAAc,CAAC,CAAC;EAEpB,IAAMO,gBAAgB,GAAG,SAAnBA,gBAAgB,GAAS;IAC3B,IAAI,CAACZ,QAAQ,EAAE;MAAA;MACX,IAAMa,OAAO,GAAGT,eAAe,4BACzB,IAAAU,0DAA4B,EAAC,IAAI,EAAEV,eAAe,CAAC,0DAAnD,sBAAqDW,EAAE,GACvDC,SAAS;MACf;MACAlB,MAAM,CAACmB,eAAe,CAACC,gDAAoC,EAAE;QAAEC,YAAY,EAAEN;MAAQ,CAAC,CAAC;MACvFZ,WAAW,CAAC,IAAI,CAAC;IACrB,CAAC,MAAM;MACHH,MAAM,CAACmB,eAAe,CAACG,sCAA0B,EAAEJ,SAAS,CAAC;IACjE;EACJ,CAAC;EAED,oBACI;IACI,OAAO,EAAE;MAAA,OAAMJ,gBAAgB,EAAE;IAAA,CAAC;IAClC,SAAS,EAAE,oBAAoB,IAAIZ,QAAQ,GAAG,QAAQ,GAAG,EAAE,CAAE;IAC7D,cAAW;EAA4B,gBAEvC;IAAG,SAAS,EAAC;EAAkB,EAAG,CAC7B;AAEjB,CAAC;AAAC"}
@@ -0,0 +1,2 @@
1
+ /// <reference types="react" />
2
+ export declare const CodeHighlightAction: () => JSX.Element;
@@ -0,0 +1,43 @@
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.CodeHighlightAction = 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 _useRichTextEditor2 = require("../../hooks/useRichTextEditor");
14
+ var CodeHighlightAction = function CodeHighlightAction() {
15
+ var _textBlockSelection$s;
16
+ var _useLexicalComposerCo = (0, _LexicalComposerContext.useLexicalComposerContext)(),
17
+ _useLexicalComposerCo2 = (0, _slicedToArray2.default)(_useLexicalComposerCo, 1),
18
+ editor = _useLexicalComposerCo2[0];
19
+ var _useState = (0, _react.useState)(false),
20
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
21
+ isCode = _useState2[0],
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]);
29
+ var handleClick = function handleClick() {
30
+ editor.dispatchCommand(_lexical.FORMAT_TEXT_COMMAND, "code");
31
+ setIsCode(!isCode);
32
+ };
33
+ return /*#__PURE__*/_react.default.createElement("button", {
34
+ onClick: function onClick() {
35
+ return handleClick();
36
+ },
37
+ className: "popup-item spaced " + (isCode ? "active" : ""),
38
+ "aria-label": "Text code highlight"
39
+ }, /*#__PURE__*/_react.default.createElement("i", {
40
+ className: "format code"
41
+ }));
42
+ };
43
+ exports.CodeHighlightAction = CodeHighlightAction;
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,2 @@
1
+ /// <reference types="react" />
2
+ export declare const FontSizeAction: () => JSX.Element;