@webiny/lexical-editor 6.0.0-beta.0 → 6.0.0-rc.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.
- package/README.md +6 -12
- package/commands/image.d.ts +2 -2
- package/commands/image.js +2 -8
- package/commands/image.js.map +1 -1
- package/commands/index.d.ts +5 -3
- package/commands/index.js +5 -38
- package/commands/index.js.map +1 -1
- package/commands/list.d.ts +2 -2
- package/commands/list.js +4 -10
- package/commands/list.js.map +1 -1
- package/commands/quote.d.ts +2 -2
- package/commands/quote.js +2 -8
- package/commands/quote.js.map +1 -1
- package/commands/toolbar.d.ts +1 -0
- package/commands/toolbar.js +4 -0
- package/commands/toolbar.js.map +1 -0
- package/commands/typography.d.ts +8 -0
- package/commands/typography.js +4 -0
- package/commands/typography.js.map +1 -0
- package/components/Editor/EnsureHeadingTagPlugin.d.ts +6 -0
- package/components/Editor/EnsureHeadingTagPlugin.js +20 -0
- package/components/Editor/EnsureHeadingTagPlugin.js.map +1 -0
- package/components/Editor/RichTextEditor.d.ts +29 -12
- package/components/Editor/RichTextEditor.js +89 -110
- package/components/Editor/RichTextEditor.js.map +1 -1
- package/components/Editor/normalizeInputValue.d.ts +6 -0
- package/components/Editor/normalizeInputValue.js +16 -0
- package/components/Editor/normalizeInputValue.js.map +1 -0
- package/components/LexicalEditorConfig/LexicalEditorConfig.d.ts +14 -16
- package/components/LexicalEditorConfig/LexicalEditorConfig.js +21 -69
- package/components/LexicalEditorConfig/LexicalEditorConfig.js.map +1 -1
- package/components/LexicalEditorConfig/components/Node.d.ts +1 -1
- package/components/LexicalEditorConfig/components/Node.js +17 -26
- package/components/LexicalEditorConfig/components/Node.js.map +1 -1
- package/components/LexicalEditorConfig/components/Plugin.js +17 -26
- package/components/LexicalEditorConfig/components/Plugin.js.map +1 -1
- package/components/LexicalEditorConfig/components/ToolbarElement.js +17 -26
- package/components/LexicalEditorConfig/components/ToolbarElement.js.map +1 -1
- package/components/LexicalHtmlRenderer.d.ts +5 -8
- package/components/LexicalHtmlRenderer.js +35 -50
- package/components/LexicalHtmlRenderer.js.map +1 -1
- package/components/Toolbar/StaticToolbar.css +416 -0
- package/components/Toolbar/StaticToolbar.d.ts +3 -1
- package/components/Toolbar/StaticToolbar.js +19 -23
- package/components/Toolbar/StaticToolbar.js.map +1 -1
- package/components/ToolbarActions/BoldAction.js +16 -21
- package/components/ToolbarActions/BoldAction.js.map +1 -1
- package/components/ToolbarActions/BulletListAction.js +25 -31
- package/components/ToolbarActions/BulletListAction.js.map +1 -1
- package/components/ToolbarActions/CodeHighlightAction.js +16 -21
- package/components/ToolbarActions/CodeHighlightAction.js.map +1 -1
- package/components/ToolbarActions/FontColorAction.d.ts +16 -4
- package/components/ToolbarActions/FontColorAction.js +32 -43
- package/components/ToolbarActions/FontColorAction.js.map +1 -1
- package/components/ToolbarActions/ImageAction.js +19 -34
- package/components/ToolbarActions/ImageAction.js.map +1 -1
- package/components/ToolbarActions/ItalicAction.js +16 -21
- package/components/ToolbarActions/ItalicAction.js.map +1 -1
- package/components/ToolbarActions/LinkAction.js +19 -24
- package/components/ToolbarActions/LinkAction.js.map +1 -1
- package/components/ToolbarActions/NumberedListAction.js +25 -36
- package/components/ToolbarActions/NumberedListAction.js.map +1 -1
- package/components/ToolbarActions/QuoteAction.js +20 -25
- package/components/ToolbarActions/QuoteAction.js.map +1 -1
- package/components/ToolbarActions/TextAlignmentAction.d.ts +16 -4
- package/components/ToolbarActions/TextAlignmentAction.js +36 -45
- package/components/ToolbarActions/TextAlignmentAction.js.map +1 -1
- package/components/ToolbarActions/TypographyAction.d.ts +16 -4
- package/components/ToolbarActions/TypographyAction.js +57 -79
- package/components/ToolbarActions/TypographyAction.js.map +1 -1
- package/components/ToolbarActions/UnderlineAction.js +16 -21
- package/components/ToolbarActions/UnderlineAction.js.map +1 -1
- package/context/FontColorActionContext.js +2 -9
- package/context/FontColorActionContext.js.map +1 -1
- package/context/RichTextEditorContext.d.ts +7 -8
- package/context/RichTextEditorContext.js +28 -26
- package/context/RichTextEditorContext.js.map +1 -1
- package/context/SharedHistoryContext.d.ts +3 -3
- package/context/SharedHistoryContext.js +12 -20
- package/context/SharedHistoryContext.js.map +1 -1
- package/context/TextAlignmentActionContextProps.d.ts +1 -1
- package/context/TextAlignmentActionContextProps.js +2 -9
- package/context/TextAlignmentActionContextProps.js.map +1 -1
- package/context/TypographyActionContext.d.ts +3 -2
- package/context/TypographyActionContext.js +2 -9
- package/context/TypographyActionContext.js.map +1 -1
- package/exports/admin/lexical.d.ts +15 -0
- package/exports/admin/lexical.js +23 -0
- package/exports/admin/lexical.js.map +1 -0
- package/hooks/index.d.ts +7 -8
- package/hooks/index.js +7 -93
- package/hooks/index.js.map +1 -1
- package/hooks/useCurrentElement.d.ts +3 -3
- package/hooks/useCurrentElement.js +11 -18
- package/hooks/useCurrentElement.js.map +1 -1
- package/hooks/useCurrentSelection.d.ts +2 -1
- package/hooks/useCurrentSelection.js +27 -40
- package/hooks/useCurrentSelection.js.map +1 -1
- package/hooks/useFontColorPicker.d.ts +1 -1
- package/hooks/useFontColorPicker.js +5 -11
- package/hooks/useFontColorPicker.js.map +1 -1
- package/hooks/useIsMounted.js +6 -14
- package/hooks/useIsMounted.js.map +1 -1
- package/hooks/useRichTextEditor.d.ts +1 -1
- package/hooks/useRichTextEditor.js +5 -11
- package/hooks/useRichTextEditor.js.map +1 -1
- package/hooks/useTextAlignmentAction.d.ts +1 -1
- package/hooks/useTextAlignmentAction.js +5 -11
- package/hooks/useTextAlignmentAction.js.map +1 -1
- package/hooks/useTypographyAction.d.ts +1 -1
- package/hooks/useTypographyAction.js +5 -11
- package/hooks/useTypographyAction.js.map +1 -1
- package/index.d.ts +33 -38
- package/index.js +44 -322
- package/index.js.map +1 -1
- package/package.json +18 -22
- package/plugins/BlurEventPlugin/BlurEventPlugin.d.ts +2 -2
- package/plugins/BlurEventPlugin/BlurEventPlugin.js +16 -22
- package/plugins/BlurEventPlugin/BlurEventPlugin.js.map +1 -1
- package/plugins/CodeHighlightPlugin/CodeHighlightPlugin.js +9 -14
- package/plugins/CodeHighlightPlugin/CodeHighlightPlugin.js.map +1 -1
- package/plugins/CodeHighlightPlugin/index.d.ts +1 -1
- package/plugins/CodeHighlightPlugin/index.js +1 -16
- package/plugins/CodeHighlightPlugin/index.js.map +1 -1
- package/plugins/FloatingLinkEditorPlugin/FloatingLinkEditor.d.ts +10 -0
- package/plugins/FloatingLinkEditorPlugin/FloatingLinkEditor.js +28 -0
- package/plugins/FloatingLinkEditorPlugin/FloatingLinkEditor.js.map +1 -0
- package/plugins/FloatingLinkEditorPlugin/FloatingLinkEditorController.d.ts +7 -0
- package/plugins/FloatingLinkEditorPlugin/FloatingLinkEditorController.js +61 -0
- package/plugins/FloatingLinkEditorPlugin/FloatingLinkEditorController.js.map +1 -0
- package/plugins/FloatingLinkEditorPlugin/FloatingLinkEditorPlugin.css +2 -136
- package/plugins/FloatingLinkEditorPlugin/FloatingLinkEditorPlugin.d.ts +4 -16
- package/plugins/FloatingLinkEditorPlugin/FloatingLinkEditorPlugin.js +7 -180
- package/plugins/FloatingLinkEditorPlugin/FloatingLinkEditorPlugin.js.map +1 -1
- package/plugins/FloatingLinkEditorPlugin/index.d.ts +1 -1
- package/plugins/FloatingLinkEditorPlugin/index.js +1 -16
- package/plugins/FloatingLinkEditorPlugin/index.js.map +1 -1
- package/plugins/FloatingLinkEditorPlugin/isChildOfLinkEditor.js +2 -8
- package/plugins/FloatingLinkEditorPlugin/isChildOfLinkEditor.js.map +1 -1
- package/plugins/FloatingLinkEditorPlugin/types.d.ts +10 -0
- package/plugins/FloatingLinkEditorPlugin/types.js +3 -0
- package/plugins/FloatingLinkEditorPlugin/types.js.map +1 -0
- package/plugins/FloatingLinkEditorPlugin/useFloatingLinkEditor.d.ts +8 -2
- package/plugins/FloatingLinkEditorPlugin/useFloatingLinkEditor.js +119 -63
- package/plugins/FloatingLinkEditorPlugin/useFloatingLinkEditor.js.map +1 -1
- package/plugins/FontColorPlugin/FontColorPlugin.js +19 -28
- package/plugins/FontColorPlugin/FontColorPlugin.js.map +1 -1
- package/plugins/FontColorPlugin/applyColorToNode.d.ts +3 -0
- package/plugins/FontColorPlugin/applyColorToNode.js +8 -0
- package/plugins/FontColorPlugin/applyColorToNode.js.map +1 -0
- package/plugins/FontColorPlugin/applyColorToSelection.d.ts +3 -0
- package/plugins/FontColorPlugin/applyColorToSelection.js +66 -0
- package/plugins/FontColorPlugin/applyColorToSelection.js.map +1 -0
- package/plugins/ImagesPlugin/ImagesPlugin.d.ts +2 -3
- package/plugins/ImagesPlugin/ImagesPlugin.js +58 -60
- package/plugins/ImagesPlugin/ImagesPlugin.js.map +1 -1
- package/plugins/LinkPlugin/LinkPlugin.d.ts +1 -1
- package/plugins/LinkPlugin/LinkPlugin.js +29 -37
- package/plugins/LinkPlugin/LinkPlugin.js.map +1 -1
- package/plugins/ListPLugin/ListPlugin.js +52 -15
- package/plugins/ListPLugin/ListPlugin.js.map +1 -1
- package/plugins/QuoteNodePlugin/QuoteNodePlugin.js +19 -16
- package/plugins/QuoteNodePlugin/QuoteNodePlugin.js.map +1 -1
- package/plugins/StateHandlingPlugin.d.ts +8 -0
- package/plugins/StateHandlingPlugin.js +75 -0
- package/plugins/StateHandlingPlugin.js.map +1 -0
- package/plugins/TypographyPlugin/TypographyPlugin.js +17 -21
- package/plugins/TypographyPlugin/TypographyPlugin.js.map +1 -1
- package/types.d.ts +8 -8
- package/types.js +6 -38
- package/types.js.map +1 -1
- package/ui/ContentEditable.d.ts +0 -1
- package/ui/ContentEditable.js +7 -14
- package/ui/ContentEditable.js.map +1 -1
- package/ui/Divider.d.ts +0 -1
- package/ui/Divider.js +3 -10
- package/ui/Divider.js.map +1 -1
- package/ui/DropDown.d.ts +1 -1
- package/ui/DropDown.js +64 -90
- package/ui/DropDown.js.map +1 -1
- package/ui/ImageResizer.d.ts +0 -1
- package/ui/ImageResizer.js +84 -89
- package/ui/ImageResizer.js.map +1 -1
- package/ui/LinkPreview.d.ts +0 -1
- package/ui/LinkPreview.js +22 -29
- package/ui/LinkPreview.js.map +1 -1
- package/ui/Placeholder.d.ts +1 -1
- package/ui/Placeholder.js +10 -16
- package/ui/Placeholder.js.map +1 -1
- package/ui/TextInput.d.ts +1 -2
- package/ui/TextInput.js +11 -18
- package/ui/TextInput.js.map +1 -1
- package/ui/ToolbarActionDialog.js +30 -42
- package/ui/ToolbarActionDialog.js.map +1 -1
- package/utils/canUseDOM.js +1 -7
- package/utils/canUseDOM.js.map +1 -1
- package/utils/files.d.ts +6 -7
- package/utils/files.js +5 -56
- package/utils/files.js.map +1 -1
- package/utils/getDOMRangeRect.js +4 -10
- package/utils/getDOMRangeRect.js.map +1 -1
- package/utils/getSelectedNode.d.ts +1 -1
- package/utils/getSelectedNode.js +9 -16
- package/utils/getSelectedNode.js.map +1 -1
- package/utils/getTransparentImage.js +1 -7
- package/utils/getTransparentImage.js.map +1 -1
- package/utils/insertImage.d.ts +1 -1
- package/utils/insertImage.js +8 -14
- package/utils/insertImage.js.map +1 -1
- package/utils/isAnchorLink.js +1 -7
- package/utils/isAnchorLink.js.map +1 -1
- package/utils/isChildOfFloatingToolbar.js +2 -8
- package/utils/isChildOfFloatingToolbar.js.map +1 -1
- package/utils/isHTMLElement.js +1 -7
- package/utils/isHTMLElement.js.map +1 -1
- package/utils/isValidJSON.js +3 -9
- package/utils/isValidJSON.js.map +1 -1
- package/utils/isValidLexicalData.d.ts +3 -3
- package/utils/isValidLexicalData.js +6 -12
- package/utils/isValidLexicalData.js.map +1 -1
- package/utils/point.js +35 -60
- package/utils/point.js.map +1 -1
- package/utils/rect.d.ts +2 -2
- package/utils/rect.js +115 -149
- package/utils/rect.js.map +1 -1
- package/utils/sanitizeUrl.js +6 -13
- package/utils/sanitizeUrl.js.map +1 -1
- package/utils/setFloatingElemPosition.d.ts +1 -1
- package/utils/setFloatingElemPosition.js +29 -39
- package/utils/setFloatingElemPosition.js.map +1 -1
- package/components/Editor/HeadingEditor.d.ts +0 -7
- package/components/Editor/HeadingEditor.js +0 -29
- package/components/Editor/HeadingEditor.js.map +0 -1
- package/components/Editor/ParagraphEditor.d.ts +0 -7
- package/components/Editor/ParagraphEditor.js +0 -29
- package/components/Editor/ParagraphEditor.js.map +0 -1
- package/components/Toolbar/Toolbar.css +0 -647
- package/components/Toolbar/Toolbar.d.ts +0 -6
- package/components/Toolbar/Toolbar.js +0 -162
- package/components/Toolbar/Toolbar.js.map +0 -1
- package/components/ToolbarActions/FontSizeAction.d.ts +0 -2
- package/components/ToolbarActions/FontSizeAction.js +0 -88
- package/components/ToolbarActions/FontSizeAction.js.map +0 -1
- package/hooks/useList.d.ts +0 -2
- package/hooks/useList.js +0 -54
- package/hooks/useList.js.map +0 -1
- package/hooks/useQuote.d.ts +0 -2
- package/hooks/useQuote.js +0 -22
- package/hooks/useQuote.js.map +0 -1
- package/plugins/FloatingLinkEditorPlugin/LinkEditForm.d.ts +0 -9
- package/plugins/FloatingLinkEditorPlugin/LinkEditForm.js +0 -118
- package/plugins/FloatingLinkEditorPlugin/LinkEditForm.js.map +0 -1
- package/plugins/FloatingLinkEditorPlugin/LinkPreviewForm.d.ts +0 -9
- package/plugins/FloatingLinkEditorPlugin/LinkPreviewForm.js +0 -44
- package/plugins/FloatingLinkEditorPlugin/LinkPreviewForm.js.map +0 -1
- package/plugins/LexicalUpdateStatePlugin/UpdateStatePlugin.d.ts +0 -9
- package/plugins/LexicalUpdateStatePlugin/UpdateStatePlugin.js +0 -45
- package/plugins/LexicalUpdateStatePlugin/UpdateStatePlugin.js.map +0 -1
- package/plugins/LexicalUpdateStatePlugin/index.d.ts +0 -1
- package/plugins/LexicalUpdateStatePlugin/index.js +0 -18
- package/plugins/LexicalUpdateStatePlugin/index.js.map +0 -1
- package/utils/generateInitialLexicalValue.d.ts +0 -5
- package/utils/generateInitialLexicalValue.js +0 -33
- package/utils/generateInitialLexicalValue.js.map +0 -1
|
@@ -1,53 +1,42 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
var _useRichTextEditor = (0, _useRichTextEditor2.useRichTextEditor)(),
|
|
18
|
-
editor = _useRichTextEditor.editor,
|
|
19
|
-
themeEmotionMap = _useRichTextEditor.themeEmotionMap;
|
|
20
|
-
var isList = (0, _lexicalNodes.$isListNode)(element);
|
|
21
|
-
var isNumbered = isList && element.getListType() === "number";
|
|
22
|
-
var getStyleId = function getStyleId() {
|
|
23
|
-
if (!themeEmotionMap) {
|
|
24
|
-
return undefined;
|
|
25
|
-
}
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { $isListNode } from "@webiny/lexical-nodes";
|
|
3
|
+
import { INSERT_ORDERED_LIST_COMMAND, REMOVE_LIST_COMMAND } from "../../commands/index.js";
|
|
4
|
+
import { useRichTextEditor } from "../../hooks/useRichTextEditor.js";
|
|
5
|
+
import { useCurrentElement } from "../../hooks/useCurrentElement.js";
|
|
6
|
+
export const NumberedListAction = () => {
|
|
7
|
+
const {
|
|
8
|
+
element
|
|
9
|
+
} = useCurrentElement();
|
|
10
|
+
const {
|
|
11
|
+
editor,
|
|
12
|
+
theme
|
|
13
|
+
} = useRichTextEditor();
|
|
14
|
+
const isList = $isListNode(element);
|
|
15
|
+
const isNumbered = isList && element.getListType() === "number";
|
|
16
|
+
const getStyleId = () => {
|
|
26
17
|
// check default style for numbered list
|
|
27
|
-
|
|
18
|
+
const id = theme.getTypographyByTag("ol")?.id;
|
|
28
19
|
if (id) {
|
|
29
20
|
return id;
|
|
30
21
|
}
|
|
31
22
|
// fallback to ul list styles
|
|
32
|
-
return
|
|
23
|
+
return theme.getTypographyByTag("ul")?.id;
|
|
33
24
|
};
|
|
34
|
-
|
|
25
|
+
const formatNumberedList = () => {
|
|
35
26
|
if (!isNumbered) {
|
|
36
|
-
|
|
37
|
-
editor.dispatchCommand(
|
|
27
|
+
const styleId = getStyleId();
|
|
28
|
+
editor.dispatchCommand(INSERT_ORDERED_LIST_COMMAND, {
|
|
38
29
|
themeStyleId: styleId
|
|
39
30
|
});
|
|
40
31
|
} else {
|
|
41
|
-
editor.dispatchCommand(
|
|
32
|
+
editor.dispatchCommand(REMOVE_LIST_COMMAND, undefined);
|
|
42
33
|
}
|
|
43
34
|
};
|
|
44
|
-
return /*#__PURE__*/
|
|
45
|
-
onClick:
|
|
46
|
-
return formatNumberedList();
|
|
47
|
-
},
|
|
35
|
+
return /*#__PURE__*/React.createElement("button", {
|
|
36
|
+
onClick: () => formatNumberedList(),
|
|
48
37
|
className: "popup-item spaced " + (isNumbered ? "active" : ""),
|
|
49
38
|
"aria-label": "Format text as numbered list"
|
|
50
|
-
}, /*#__PURE__*/
|
|
39
|
+
}, /*#__PURE__*/React.createElement("i", {
|
|
51
40
|
className: "icon numbered-list"
|
|
52
41
|
}));
|
|
53
42
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["React","$isListNode","INSERT_ORDERED_LIST_COMMAND","REMOVE_LIST_COMMAND","useRichTextEditor","useCurrentElement","NumberedListAction","element","editor","theme","isList","isNumbered","getListType","getStyleId","id","getTypographyByTag","formatNumberedList","styleId","dispatchCommand","themeStyleId","undefined","createElement","onClick","className"],"sources":["NumberedListAction.tsx"],"sourcesContent":["import React from \"react\";\nimport type { ListNode } from \"@webiny/lexical-nodes\";\nimport { $isListNode } from \"@webiny/lexical-nodes\";\nimport { INSERT_ORDERED_LIST_COMMAND, REMOVE_LIST_COMMAND } from \"~/commands/index.js\";\nimport { useRichTextEditor } from \"~/hooks/useRichTextEditor.js\";\nimport { useCurrentElement } from \"~/hooks/useCurrentElement.js\";\n\nexport const NumberedListAction = () => {\n const { element } = useCurrentElement();\n const { editor, theme } = useRichTextEditor();\n const isList = $isListNode(element);\n const isNumbered = isList && (element as ListNode).getListType() === \"number\";\n\n const getStyleId = (): string | undefined => {\n // check default style for numbered list\n const id = theme.getTypographyByTag(\"ol\")?.id;\n if (id) {\n return id;\n }\n // fallback to ul list styles\n return theme.getTypographyByTag(\"ul\")?.id;\n };\n\n const formatNumberedList = () => {\n if (!isNumbered) {\n const styleId = getStyleId();\n editor.dispatchCommand(INSERT_ORDERED_LIST_COMMAND, { themeStyleId: styleId });\n } else {\n editor.dispatchCommand(REMOVE_LIST_COMMAND, undefined);\n }\n };\n\n return (\n <button\n onClick={() => formatNumberedList()}\n className={\"popup-item spaced \" + (isNumbered ? \"active\" : \"\")}\n aria-label=\"Format text as numbered list\"\n >\n <i className=\"icon numbered-list\" />\n </button>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AAEzB,SAASC,WAAW,QAAQ,uBAAuB;AACnD,SAASC,2BAA2B,EAAEC,mBAAmB;AACzD,SAASC,iBAAiB;AAC1B,SAASC,iBAAiB;AAE1B,OAAO,MAAMC,kBAAkB,GAAGA,CAAA,KAAM;EACpC,MAAM;IAAEC;EAAQ,CAAC,GAAGF,iBAAiB,CAAC,CAAC;EACvC,MAAM;IAAEG,MAAM;IAAEC;EAAM,CAAC,GAAGL,iBAAiB,CAAC,CAAC;EAC7C,MAAMM,MAAM,GAAGT,WAAW,CAACM,OAAO,CAAC;EACnC,MAAMI,UAAU,GAAGD,MAAM,IAAKH,OAAO,CAAcK,WAAW,CAAC,CAAC,KAAK,QAAQ;EAE7E,MAAMC,UAAU,GAAGA,CAAA,KAA0B;IACzC;IACA,MAAMC,EAAE,GAAGL,KAAK,CAACM,kBAAkB,CAAC,IAAI,CAAC,EAAED,EAAE;IAC7C,IAAIA,EAAE,EAAE;MACJ,OAAOA,EAAE;IACb;IACA;IACA,OAAOL,KAAK,CAACM,kBAAkB,CAAC,IAAI,CAAC,EAAED,EAAE;EAC7C,CAAC;EAED,MAAME,kBAAkB,GAAGA,CAAA,KAAM;IAC7B,IAAI,CAACL,UAAU,EAAE;MACb,MAAMM,OAAO,GAAGJ,UAAU,CAAC,CAAC;MAC5BL,MAAM,CAACU,eAAe,CAAChB,2BAA2B,EAAE;QAAEiB,YAAY,EAAEF;MAAQ,CAAC,CAAC;IAClF,CAAC,MAAM;MACHT,MAAM,CAACU,eAAe,CAACf,mBAAmB,EAAEiB,SAAS,CAAC;IAC1D;EACJ,CAAC;EAED,oBACIpB,KAAA,CAAAqB,aAAA;IACIC,OAAO,EAAEA,CAAA,KAAMN,kBAAkB,CAAC,CAAE;IACpCO,SAAS,EAAE,oBAAoB,IAAIZ,UAAU,GAAG,QAAQ,GAAG,EAAE,CAAE;IAC/D,cAAW;EAA8B,gBAEzCX,KAAA,CAAAqB,aAAA;IAAGE,SAAS,EAAC;EAAoB,CAAE,CAC/B,CAAC;AAEjB,CAAC","ignoreList":[]}
|
|
@@ -1,36 +1,31 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
var _useCurrentElement = (0, _useCurrentElement2.useCurrentElement)(),
|
|
17
|
-
element = _useCurrentElement.element;
|
|
18
|
-
var isQuote = (0, _lexicalNodes.$isQuoteNode)(element);
|
|
19
|
-
var formatText = function formatText() {
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { $isQuoteNode, formatToQuote, formatToParagraph } from "@webiny/lexical-nodes";
|
|
3
|
+
import { useRichTextEditor } from "../../hooks/useRichTextEditor.js";
|
|
4
|
+
import { useCurrentElement } from "../../hooks/useCurrentElement.js";
|
|
5
|
+
const QUOTE_TAG = "quote";
|
|
6
|
+
export const QuoteAction = () => {
|
|
7
|
+
const {
|
|
8
|
+
editor,
|
|
9
|
+
theme
|
|
10
|
+
} = useRichTextEditor();
|
|
11
|
+
const {
|
|
12
|
+
element
|
|
13
|
+
} = useCurrentElement();
|
|
14
|
+
const isQuote = $isQuoteNode(element);
|
|
15
|
+
const formatText = () => {
|
|
20
16
|
if (!isQuote) {
|
|
21
17
|
// Try to set default quote style, when the action button is clicked for first time
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
(0, _lexicalNodes.formatToQuote)(editor, hasQuoteStyles ? DEFAULT_QUOTE_ID : undefined);
|
|
18
|
+
const hasQuoteStyles = theme.getTypographyByTag(QUOTE_TAG);
|
|
19
|
+
formatToQuote(editor, hasQuoteStyles ? QUOTE_TAG : undefined);
|
|
25
20
|
return;
|
|
26
21
|
}
|
|
27
|
-
|
|
22
|
+
formatToParagraph(editor);
|
|
28
23
|
};
|
|
29
|
-
return /*#__PURE__*/
|
|
24
|
+
return /*#__PURE__*/React.createElement("button", {
|
|
30
25
|
onClick: formatText,
|
|
31
26
|
className: "popup-item " + (isQuote ? "active" : ""),
|
|
32
27
|
"aria-label": "Format text as quote"
|
|
33
|
-
}, /*#__PURE__*/
|
|
28
|
+
}, /*#__PURE__*/React.createElement("i", {
|
|
34
29
|
className: "icon quote"
|
|
35
30
|
}));
|
|
36
31
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["React","$isQuoteNode","formatToQuote","formatToParagraph","useRichTextEditor","useCurrentElement","QUOTE_TAG","QuoteAction","editor","theme","element","isQuote","formatText","hasQuoteStyles","getTypographyByTag","undefined","createElement","onClick","className"],"sources":["QuoteAction.tsx"],"sourcesContent":["import React from \"react\";\nimport { $isQuoteNode, formatToQuote, formatToParagraph } from \"@webiny/lexical-nodes\";\nimport { useRichTextEditor } from \"~/hooks/useRichTextEditor.js\";\nimport { useCurrentElement } from \"~/hooks/useCurrentElement.js\";\n\nconst QUOTE_TAG = \"quote\";\n\nexport const QuoteAction = () => {\n const { editor, theme } = useRichTextEditor();\n const { element } = useCurrentElement();\n const isQuote = $isQuoteNode(element);\n\n const formatText = () => {\n if (!isQuote) {\n // Try to set default quote style, when the action button is clicked for first time\n const hasQuoteStyles = theme.getTypographyByTag(QUOTE_TAG);\n formatToQuote(editor, hasQuoteStyles ? QUOTE_TAG : undefined);\n return;\n }\n formatToParagraph(editor);\n };\n\n return (\n <button\n onClick={formatText}\n className={\"popup-item \" + (isQuote ? \"active\" : \"\")}\n aria-label=\"Format text as quote\"\n >\n <i className=\"icon quote\" />\n </button>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,YAAY,EAAEC,aAAa,EAAEC,iBAAiB,QAAQ,uBAAuB;AACtF,SAASC,iBAAiB;AAC1B,SAASC,iBAAiB;AAE1B,MAAMC,SAAS,GAAG,OAAO;AAEzB,OAAO,MAAMC,WAAW,GAAGA,CAAA,KAAM;EAC7B,MAAM;IAAEC,MAAM;IAAEC;EAAM,CAAC,GAAGL,iBAAiB,CAAC,CAAC;EAC7C,MAAM;IAAEM;EAAQ,CAAC,GAAGL,iBAAiB,CAAC,CAAC;EACvC,MAAMM,OAAO,GAAGV,YAAY,CAACS,OAAO,CAAC;EAErC,MAAME,UAAU,GAAGA,CAAA,KAAM;IACrB,IAAI,CAACD,OAAO,EAAE;MACV;MACA,MAAME,cAAc,GAAGJ,KAAK,CAACK,kBAAkB,CAACR,SAAS,CAAC;MAC1DJ,aAAa,CAACM,MAAM,EAAEK,cAAc,GAAGP,SAAS,GAAGS,SAAS,CAAC;MAC7D;IACJ;IACAZ,iBAAiB,CAACK,MAAM,CAAC;EAC7B,CAAC;EAED,oBACIR,KAAA,CAAAgB,aAAA;IACIC,OAAO,EAAEL,UAAW;IACpBM,SAAS,EAAE,aAAa,IAAIP,OAAO,GAAG,QAAQ,GAAG,EAAE,CAAE;IACrD,cAAW;EAAsB,gBAEjCX,KAAA,CAAAgB,aAAA;IAAGE,SAAS,EAAC;EAAY,CAAE,CACvB,CAAC;AAEjB,CAAC","ignoreList":[]}
|
|
@@ -1,16 +1,28 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
export declare const BaseTextAlignmentDropDown:
|
|
3
|
-
original:
|
|
2
|
+
export declare const BaseTextAlignmentDropDown: (() => JSX.Element | null) & {
|
|
3
|
+
original: () => JSX.Element | null;
|
|
4
4
|
originalName: string;
|
|
5
5
|
displayName: string;
|
|
6
6
|
} & {
|
|
7
|
-
|
|
7
|
+
original: (() => JSX.Element | null) & {
|
|
8
|
+
original: () => JSX.Element | null;
|
|
9
|
+
originalName: string;
|
|
10
|
+
displayName: string;
|
|
11
|
+
};
|
|
12
|
+
originalName: string;
|
|
13
|
+
displayName: string;
|
|
14
|
+
} & {
|
|
15
|
+
createDecorator: (decorator: import("@webiny/react-composition").ComponentDecorator<(() => JSX.Element | null) & {
|
|
16
|
+
original: () => JSX.Element | null;
|
|
17
|
+
originalName: string;
|
|
18
|
+
displayName: string;
|
|
19
|
+
}>) => (props: unknown) => React.JSX.Element;
|
|
8
20
|
};
|
|
9
21
|
interface TextAlignmentActionDropdownProps {
|
|
10
22
|
element: JSX.Element;
|
|
11
23
|
}
|
|
12
24
|
declare const TextAlignmentActionDropDown: ({ element }: TextAlignmentActionDropdownProps) => JSX.Element;
|
|
13
|
-
export
|
|
25
|
+
export type TextAlignmentAction = React.ComponentType<unknown> & {
|
|
14
26
|
TextAlignmentDropDown: typeof TextAlignmentActionDropDown;
|
|
15
27
|
};
|
|
16
28
|
export declare const TextAlignmentAction: TextAlignmentAction;
|
|
@@ -1,69 +1,60 @@
|
|
|
1
|
-
|
|
1
|
+
import React, { useEffect, useMemo } from "react";
|
|
2
|
+
import { FORMAT_ELEMENT_COMMAND, INDENT_CONTENT_COMMAND, OUTDENT_CONTENT_COMMAND } from "lexical";
|
|
3
|
+
import { Compose, makeDecoratable } from "@webiny/react-composition";
|
|
4
|
+
import { TextAlignmentActionContext } from "../../context/TextAlignmentActionContextProps.js";
|
|
5
|
+
import { useDeriveValueFromSelection } from "../../hooks/useCurrentSelection.js";
|
|
6
|
+
import { getSelectedNode } from "../../utils/getSelectedNode.js";
|
|
7
|
+
import { useRichTextEditor } from "../../hooks/index.js";
|
|
2
8
|
|
|
3
|
-
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
4
|
-
Object.defineProperty(exports, "__esModule", {
|
|
5
|
-
value: true
|
|
6
|
-
});
|
|
7
|
-
exports.TextAlignmentAction = exports.BaseTextAlignmentDropDown = void 0;
|
|
8
|
-
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
-
var _lexical = require("lexical");
|
|
10
|
-
var _reactComposition = require("@webiny/react-composition");
|
|
11
|
-
var _TextAlignmentActionContextProps = require("../../context/TextAlignmentActionContextProps");
|
|
12
|
-
var _useCurrentSelection = require("../../hooks/useCurrentSelection");
|
|
13
|
-
var _getSelectedNode = require("../../utils/getSelectedNode");
|
|
14
|
-
var _hooks = require("../../hooks");
|
|
15
9
|
/*
|
|
16
10
|
* Base text alignment dropdown composable component.
|
|
17
11
|
* Note: To add a custom dropdown component use @see LexicalEditorConfig API.
|
|
18
12
|
*/
|
|
19
|
-
|
|
20
|
-
|
|
13
|
+
export const BaseTextAlignmentDropDown = makeDecoratable("BaseTextAlignmentDropDown", () => {
|
|
14
|
+
useEffect(() => {
|
|
21
15
|
console.log("Default BaseTextAlignmentDropDown, please add your own component");
|
|
22
16
|
}, []);
|
|
23
17
|
return null;
|
|
24
18
|
});
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
19
|
+
const TextAlignmentActionDropDown = ({
|
|
20
|
+
element
|
|
21
|
+
}) => {
|
|
22
|
+
return /*#__PURE__*/React.createElement(Compose, {
|
|
28
23
|
component: BaseTextAlignmentDropDown,
|
|
29
|
-
with:
|
|
30
|
-
return function () {
|
|
31
|
-
return element;
|
|
32
|
-
};
|
|
33
|
-
}
|
|
24
|
+
with: () => () => element
|
|
34
25
|
});
|
|
35
26
|
};
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
editor
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
27
|
+
export const TextAlignmentAction = () => {
|
|
28
|
+
const {
|
|
29
|
+
editor
|
|
30
|
+
} = useRichTextEditor();
|
|
31
|
+
const alignmentValue = useDeriveValueFromSelection(({
|
|
32
|
+
rangeSelection
|
|
33
|
+
}) => {
|
|
34
|
+
const node = rangeSelection ? getSelectedNode(rangeSelection) : null;
|
|
42
35
|
if (node) {
|
|
43
36
|
return node.getParent()?.getFormatType() || "";
|
|
44
37
|
}
|
|
45
38
|
return "";
|
|
46
39
|
});
|
|
47
|
-
|
|
48
|
-
editor.dispatchCommand(
|
|
40
|
+
const applyTextAlignment = value => {
|
|
41
|
+
editor.dispatchCommand(FORMAT_ELEMENT_COMMAND, value);
|
|
49
42
|
};
|
|
50
|
-
|
|
51
|
-
editor.dispatchCommand(
|
|
43
|
+
const outdentText = () => {
|
|
44
|
+
editor.dispatchCommand(OUTDENT_CONTENT_COMMAND, undefined);
|
|
52
45
|
};
|
|
53
|
-
|
|
54
|
-
editor.dispatchCommand(
|
|
46
|
+
const indentText = () => {
|
|
47
|
+
editor.dispatchCommand(INDENT_CONTENT_COMMAND, undefined);
|
|
55
48
|
};
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
}, [alignmentValue]);
|
|
64
|
-
return /*#__PURE__*/_react.default.createElement(_TextAlignmentActionContextProps.TextAlignmentActionContext.Provider, {
|
|
49
|
+
const context = useMemo(() => ({
|
|
50
|
+
value: alignmentValue,
|
|
51
|
+
applyTextAlignment,
|
|
52
|
+
outdentText,
|
|
53
|
+
indentText
|
|
54
|
+
}), [alignmentValue]);
|
|
55
|
+
return /*#__PURE__*/React.createElement(TextAlignmentActionContext.Provider, {
|
|
65
56
|
value: context
|
|
66
|
-
}, /*#__PURE__*/
|
|
57
|
+
}, /*#__PURE__*/React.createElement(BaseTextAlignmentDropDown, null));
|
|
67
58
|
};
|
|
68
59
|
TextAlignmentAction.TextAlignmentDropDown = TextAlignmentActionDropDown;
|
|
69
60
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["React","useEffect","useMemo","FORMAT_ELEMENT_COMMAND","INDENT_CONTENT_COMMAND","OUTDENT_CONTENT_COMMAND","Compose","makeDecoratable","TextAlignmentActionContext","useDeriveValueFromSelection","getSelectedNode","useRichTextEditor","BaseTextAlignmentDropDown","console","log","TextAlignmentActionDropDown","element","createElement","component","with","TextAlignmentAction","editor","alignmentValue","rangeSelection","node","getParent","getFormatType","applyTextAlignment","value","dispatchCommand","outdentText","undefined","indentText","context","Provider","TextAlignmentDropDown"],"sources":["TextAlignmentAction.tsx"],"sourcesContent":["import React, { useEffect, useMemo } from \"react\";\nimport type { ElementFormatType } from \"lexical\";\nimport { FORMAT_ELEMENT_COMMAND, INDENT_CONTENT_COMMAND, OUTDENT_CONTENT_COMMAND } from \"lexical\";\nimport { Compose, makeDecoratable } from \"@webiny/react-composition\";\nimport { TextAlignmentActionContext } from \"~/context/TextAlignmentActionContextProps.js\";\nimport { useDeriveValueFromSelection } from \"~/hooks/useCurrentSelection.js\";\nimport { getSelectedNode } from \"~/utils/getSelectedNode.js\";\nimport { useRichTextEditor } from \"~/hooks/index.js\";\n\n/*\n * Base text alignment dropdown composable component.\n * Note: To add a custom dropdown component use @see LexicalEditorConfig API.\n */\nexport const BaseTextAlignmentDropDown = makeDecoratable(\n \"BaseTextAlignmentDropDown\",\n (): JSX.Element | null => {\n useEffect(() => {\n console.log(\"Default BaseTextAlignmentDropDown, please add your own component\");\n }, []);\n return null;\n }\n);\n\ninterface TextAlignmentActionDropdownProps {\n element: JSX.Element;\n}\n\nconst TextAlignmentActionDropDown = ({\n element\n}: TextAlignmentActionDropdownProps): JSX.Element => {\n return <Compose component={BaseTextAlignmentDropDown} with={() => () => element} />;\n};\n\nexport type TextAlignmentAction = React.ComponentType<unknown> & {\n TextAlignmentDropDown: typeof TextAlignmentActionDropDown;\n};\n\nexport const TextAlignmentAction: TextAlignmentAction = () => {\n const { editor } = useRichTextEditor();\n const alignmentValue: ElementFormatType = useDeriveValueFromSelection(({ rangeSelection }) => {\n const node = rangeSelection ? getSelectedNode(rangeSelection) : null;\n if (node) {\n return node.getParent()?.getFormatType() || \"\";\n }\n return \"\";\n });\n\n const applyTextAlignment = (value: ElementFormatType) => {\n editor.dispatchCommand(FORMAT_ELEMENT_COMMAND, value);\n };\n\n const outdentText = () => {\n editor.dispatchCommand(OUTDENT_CONTENT_COMMAND, undefined);\n };\n\n const indentText = () => {\n editor.dispatchCommand(INDENT_CONTENT_COMMAND, undefined);\n };\n\n const context = useMemo(\n () => ({\n value: alignmentValue,\n applyTextAlignment,\n outdentText,\n indentText\n }),\n [alignmentValue]\n );\n\n return (\n <TextAlignmentActionContext.Provider value={context}>\n <BaseTextAlignmentDropDown />\n </TextAlignmentActionContext.Provider>\n );\n};\n\nTextAlignmentAction.TextAlignmentDropDown = TextAlignmentActionDropDown;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,SAAS,EAAEC,OAAO,QAAQ,OAAO;AAEjD,SAASC,sBAAsB,EAAEC,sBAAsB,EAAEC,uBAAuB,QAAQ,SAAS;AACjG,SAASC,OAAO,EAAEC,eAAe,QAAQ,2BAA2B;AACpE,SAASC,0BAA0B;AACnC,SAASC,2BAA2B;AACpC,SAASC,eAAe;AACxB,SAASC,iBAAiB;;AAE1B;AACA;AACA;AACA;AACA,OAAO,MAAMC,yBAAyB,GAAGL,eAAe,CACpD,2BAA2B,EAC3B,MAA0B;EACtBN,SAAS,CAAC,MAAM;IACZY,OAAO,CAACC,GAAG,CAAC,kEAAkE,CAAC;EACnF,CAAC,EAAE,EAAE,CAAC;EACN,OAAO,IAAI;AACf,CACJ,CAAC;AAMD,MAAMC,2BAA2B,GAAGA,CAAC;EACjCC;AAC8B,CAAC,KAAkB;EACjD,oBAAOhB,KAAA,CAAAiB,aAAA,CAACX,OAAO;IAACY,SAAS,EAAEN,yBAA0B;IAACO,IAAI,EAAEA,CAAA,KAAM,MAAMH;EAAQ,CAAE,CAAC;AACvF,CAAC;AAMD,OAAO,MAAMI,mBAAwC,GAAGA,CAAA,KAAM;EAC1D,MAAM;IAAEC;EAAO,CAAC,GAAGV,iBAAiB,CAAC,CAAC;EACtC,MAAMW,cAAiC,GAAGb,2BAA2B,CAAC,CAAC;IAAEc;EAAe,CAAC,KAAK;IAC1F,MAAMC,IAAI,GAAGD,cAAc,GAAGb,eAAe,CAACa,cAAc,CAAC,GAAG,IAAI;IACpE,IAAIC,IAAI,EAAE;MACN,OAAOA,IAAI,CAACC,SAAS,CAAC,CAAC,EAAEC,aAAa,CAAC,CAAC,IAAI,EAAE;IAClD;IACA,OAAO,EAAE;EACb,CAAC,CAAC;EAEF,MAAMC,kBAAkB,GAAIC,KAAwB,IAAK;IACrDP,MAAM,CAACQ,eAAe,CAAC1B,sBAAsB,EAAEyB,KAAK,CAAC;EACzD,CAAC;EAED,MAAME,WAAW,GAAGA,CAAA,KAAM;IACtBT,MAAM,CAACQ,eAAe,CAACxB,uBAAuB,EAAE0B,SAAS,CAAC;EAC9D,CAAC;EAED,MAAMC,UAAU,GAAGA,CAAA,KAAM;IACrBX,MAAM,CAACQ,eAAe,CAACzB,sBAAsB,EAAE2B,SAAS,CAAC;EAC7D,CAAC;EAED,MAAME,OAAO,GAAG/B,OAAO,CACnB,OAAO;IACH0B,KAAK,EAAEN,cAAc;IACrBK,kBAAkB;IAClBG,WAAW;IACXE;EACJ,CAAC,CAAC,EACF,CAACV,cAAc,CACnB,CAAC;EAED,oBACItB,KAAA,CAAAiB,aAAA,CAACT,0BAA0B,CAAC0B,QAAQ;IAACN,KAAK,EAAEK;EAAQ,gBAChDjC,KAAA,CAAAiB,aAAA,CAACL,yBAAyB,MAAE,CACK,CAAC;AAE9C,CAAC;AAEDQ,mBAAmB,CAACe,qBAAqB,GAAGpB,2BAA2B","ignoreList":[]}
|
|
@@ -1,16 +1,28 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
export declare const BaseTypographyActionDropDown:
|
|
3
|
-
original:
|
|
2
|
+
export declare const BaseTypographyActionDropDown: (() => JSX.Element | null) & {
|
|
3
|
+
original: () => JSX.Element | null;
|
|
4
4
|
originalName: string;
|
|
5
5
|
displayName: string;
|
|
6
6
|
} & {
|
|
7
|
-
|
|
7
|
+
original: (() => JSX.Element | null) & {
|
|
8
|
+
original: () => JSX.Element | null;
|
|
9
|
+
originalName: string;
|
|
10
|
+
displayName: string;
|
|
11
|
+
};
|
|
12
|
+
originalName: string;
|
|
13
|
+
displayName: string;
|
|
14
|
+
} & {
|
|
15
|
+
createDecorator: (decorator: import("@webiny/react-composition").ComponentDecorator<(() => JSX.Element | null) & {
|
|
16
|
+
original: () => JSX.Element | null;
|
|
17
|
+
originalName: string;
|
|
18
|
+
displayName: string;
|
|
19
|
+
}>) => (props: unknown) => React.JSX.Element;
|
|
8
20
|
};
|
|
9
21
|
interface TypographyActionDropdownProps {
|
|
10
22
|
element: JSX.Element;
|
|
11
23
|
}
|
|
12
24
|
declare const TypographyActionDropDown: ({ element }: TypographyActionDropdownProps) => JSX.Element;
|
|
13
|
-
export
|
|
25
|
+
export type TypographyAction = React.ComponentType<unknown> & {
|
|
14
26
|
TypographyDropDown: typeof TypographyActionDropDown;
|
|
15
27
|
};
|
|
16
28
|
export declare const TypographyAction: TypographyAction;
|
|
@@ -1,132 +1,110 @@
|
|
|
1
|
-
|
|
1
|
+
import React, { useCallback, useEffect, useState } from "react";
|
|
2
|
+
import { Compose, makeDecoratable } from "@webiny/react-composition";
|
|
3
|
+
import { TypographyActionContext } from "../../context/TypographyActionContext.js";
|
|
4
|
+
import { $isHeadingNode, $isListNode, $isParagraphNode, $isQuoteNode } from "@webiny/lexical-nodes";
|
|
5
|
+
import { useRichTextEditor } from "../../hooks/useRichTextEditor.js";
|
|
6
|
+
import { INSERT_ORDERED_LIST_COMMAND, INSERT_UNORDERED_LIST_COMMAND, INSERT_QUOTE_COMMAND, ADD_TYPOGRAPHY_COMMAND } from "../../commands/index.js";
|
|
7
|
+
import { useCurrentElement } from "../../hooks/useCurrentElement.js";
|
|
8
|
+
|
|
9
|
+
// Unfortunately, for some time in v5 we had `quoteblock` in our theme, so let's not break it.
|
|
10
|
+
const quoteTagNames = ["blockquote", "quoteblock"];
|
|
2
11
|
|
|
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.TypographyAction = exports.BaseTypographyActionDropDown = void 0;
|
|
9
|
-
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
10
|
-
var _react = _interopRequireWildcard(require("react"));
|
|
11
|
-
var _reactComposition = require("@webiny/react-composition");
|
|
12
|
-
var _TypographyActionContext = require("../../context/TypographyActionContext");
|
|
13
|
-
var _lexicalNodes = require("@webiny/lexical-nodes");
|
|
14
|
-
var _useRichTextEditor2 = require("../../hooks/useRichTextEditor");
|
|
15
|
-
var _commands = require("../../commands");
|
|
16
|
-
var _useCurrentElement2 = require("../../hooks/useCurrentElement");
|
|
17
12
|
/*
|
|
18
13
|
* Base composable action component that is mounted on toolbar action as a placeholder for the custom toolbar action.
|
|
19
14
|
* Note: Toa add custom component access trough @see LexicalEditorConfig API
|
|
20
15
|
* */
|
|
21
|
-
|
|
22
|
-
|
|
16
|
+
export const BaseTypographyActionDropDown = makeDecoratable("BaseTypographyActionDropDown", () => {
|
|
17
|
+
useEffect(() => {
|
|
23
18
|
console.log("Default BaseTypographyActionDropDown, please add your own component");
|
|
24
19
|
}, []);
|
|
25
20
|
return null;
|
|
26
21
|
});
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
22
|
+
const TypographyActionDropDown = ({
|
|
23
|
+
element
|
|
24
|
+
}) => {
|
|
25
|
+
return /*#__PURE__*/React.createElement(Compose, {
|
|
30
26
|
component: BaseTypographyActionDropDown,
|
|
31
|
-
with:
|
|
32
|
-
return function () {
|
|
33
|
-
return element;
|
|
34
|
-
};
|
|
35
|
-
}
|
|
27
|
+
with: () => () => element
|
|
36
28
|
});
|
|
37
29
|
};
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
var isQuoteSelected = (0, _lexicalNodes.$isQuoteNode)(element);
|
|
52
|
-
var setTypographySelect = (0, _react.useCallback)(function (value) {
|
|
30
|
+
export const TypographyAction = () => {
|
|
31
|
+
const [typography, setTypography] = useState();
|
|
32
|
+
const {
|
|
33
|
+
editor,
|
|
34
|
+
theme
|
|
35
|
+
} = useRichTextEditor();
|
|
36
|
+
const {
|
|
37
|
+
element
|
|
38
|
+
} = useCurrentElement();
|
|
39
|
+
const isParagraphSelected = $isParagraphNode(element);
|
|
40
|
+
const isHeadingSelected = $isHeadingNode(element);
|
|
41
|
+
const isQuoteSelected = $isQuoteNode(element);
|
|
42
|
+
const onTypographySelect = useCallback(value => {
|
|
53
43
|
setTypography(value);
|
|
54
|
-
}, [typography]);
|
|
55
|
-
var onTypographySelect = (0, _react.useCallback)(function (value) {
|
|
56
|
-
setTypographySelect(value);
|
|
57
44
|
if (value.tag.includes("h") || value.tag.includes("p")) {
|
|
58
|
-
editor.dispatchCommand(
|
|
59
|
-
value
|
|
45
|
+
editor.dispatchCommand(ADD_TYPOGRAPHY_COMMAND, {
|
|
46
|
+
value
|
|
60
47
|
});
|
|
48
|
+
return;
|
|
61
49
|
}
|
|
62
50
|
if (value.tag === "ol") {
|
|
63
|
-
editor.dispatchCommand(
|
|
51
|
+
editor.dispatchCommand(INSERT_ORDERED_LIST_COMMAND, {
|
|
64
52
|
themeStyleId: value.id
|
|
65
53
|
});
|
|
54
|
+
return;
|
|
66
55
|
}
|
|
67
56
|
if (value.tag === "ul") {
|
|
68
|
-
editor.dispatchCommand(
|
|
57
|
+
editor.dispatchCommand(INSERT_UNORDERED_LIST_COMMAND, {
|
|
69
58
|
themeStyleId: value.id
|
|
70
59
|
});
|
|
60
|
+
return;
|
|
71
61
|
}
|
|
72
|
-
if (value.tag
|
|
73
|
-
editor.dispatchCommand(
|
|
62
|
+
if (quoteTagNames.includes(value.tag)) {
|
|
63
|
+
editor.dispatchCommand(INSERT_QUOTE_COMMAND, {
|
|
74
64
|
themeStyleId: value.id
|
|
75
65
|
});
|
|
76
66
|
}
|
|
77
67
|
}, []);
|
|
78
|
-
|
|
68
|
+
useEffect(() => {
|
|
79
69
|
if (!element) {
|
|
80
70
|
return;
|
|
81
71
|
}
|
|
82
|
-
// header and paragraph elements inserted with typography node
|
|
83
|
-
if (isTypographySelected) {
|
|
84
|
-
var el = element;
|
|
85
|
-
setTypography(el.getTypographyValue());
|
|
86
|
-
return;
|
|
87
|
-
}
|
|
88
72
|
if (isParagraphSelected || isHeadingSelected || isQuoteSelected) {
|
|
89
|
-
|
|
73
|
+
const styleId = element.getStyleId();
|
|
90
74
|
if (!styleId) {
|
|
91
75
|
return;
|
|
92
76
|
}
|
|
93
|
-
|
|
94
|
-
return;
|
|
95
|
-
}
|
|
96
|
-
var style = themeEmotionMap[styleId];
|
|
77
|
+
const style = theme.getTypographyById(styleId);
|
|
97
78
|
if (style) {
|
|
98
79
|
setTypography({
|
|
99
|
-
name: style?.name,
|
|
100
80
|
id: style.id,
|
|
101
|
-
|
|
102
|
-
tag: style.tag
|
|
81
|
+
label: style.label
|
|
103
82
|
});
|
|
104
83
|
}
|
|
105
84
|
return;
|
|
106
85
|
}
|
|
107
86
|
|
|
108
87
|
// list and quote element
|
|
109
|
-
if (
|
|
110
|
-
|
|
111
|
-
if (
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
}
|
|
88
|
+
if ($isListNode(element)) {
|
|
89
|
+
const styleId = element.getStyleId();
|
|
90
|
+
if (!styleId) {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
const style = theme.getTypographyById(styleId);
|
|
94
|
+
if (style) {
|
|
95
|
+
setTypography({
|
|
96
|
+
id: style.id,
|
|
97
|
+
label: style.label
|
|
98
|
+
});
|
|
121
99
|
}
|
|
122
100
|
}
|
|
123
|
-
}, [element,
|
|
124
|
-
return /*#__PURE__*/
|
|
101
|
+
}, [element, isQuoteSelected, isParagraphSelected, isHeadingSelected]);
|
|
102
|
+
return /*#__PURE__*/React.createElement(TypographyActionContext.Provider, {
|
|
125
103
|
value: {
|
|
126
104
|
value: typography,
|
|
127
105
|
applyTypography: onTypographySelect
|
|
128
106
|
}
|
|
129
|
-
}, /*#__PURE__*/
|
|
107
|
+
}, /*#__PURE__*/React.createElement(BaseTypographyActionDropDown, null));
|
|
130
108
|
};
|
|
131
109
|
TypographyAction.TypographyDropDown = TypographyActionDropDown;
|
|
132
110
|
|