@webiny/lexical-editor 0.0.0-unstable.d65ec29d44
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/LICENSE +21 -0
- package/README.md +17 -0
- package/components/AddRichTextEditorNodeType.d.ts +6 -0
- package/components/AddRichTextEditorNodeType.js +28 -0
- package/components/AddRichTextEditorNodeType.js.map +1 -0
- package/components/AddRichTextEditorPlugin.d.ts +10 -0
- package/components/AddRichTextEditorPlugin.js +31 -0
- package/components/AddRichTextEditorPlugin.js.map +1 -0
- package/components/AddToolbarAction.d.ts +7 -0
- package/components/AddToolbarAction.js +33 -0
- package/components/AddToolbarAction.js.map +1 -0
- package/components/Editor/HeadingEditor.d.ts +7 -0
- package/components/Editor/HeadingEditor.js +28 -0
- package/components/Editor/HeadingEditor.js.map +1 -0
- package/components/Editor/ParagraphEditor.d.ts +7 -0
- package/components/Editor/ParagraphEditor.js +30 -0
- package/components/Editor/ParagraphEditor.js.map +1 -0
- package/components/Editor/RichTextEditor.d.ts +23 -0
- package/components/Editor/RichTextEditor.js +107 -0
- package/components/Editor/RichTextEditor.js.map +1 -0
- package/components/LexicalHtmlRenderer.d.ts +9 -0
- package/components/LexicalHtmlRenderer.js +44 -0
- package/components/LexicalHtmlRenderer.js.map +1 -0
- package/components/Toolbar/HeadingToolbar.d.ts +12 -0
- package/components/Toolbar/HeadingToolbar.js +23 -0
- package/components/Toolbar/HeadingToolbar.js.map +1 -0
- package/components/Toolbar/ParagraphToolbar.d.ts +12 -0
- package/components/Toolbar/ParagraphToolbar.js +23 -0
- package/components/Toolbar/ParagraphToolbar.js.map +1 -0
- package/components/Toolbar/Toolbar.css +414 -0
- package/components/Toolbar/Toolbar.d.ts +13 -0
- package/components/Toolbar/Toolbar.js +161 -0
- package/components/Toolbar/Toolbar.js.map +1 -0
- package/components/ToolbarActions/BoldAction.d.ts +5 -0
- package/components/ToolbarActions/BoldAction.js +38 -0
- package/components/ToolbarActions/BoldAction.js.map +1 -0
- package/components/ToolbarActions/BulletListAction.d.ts +5 -0
- package/components/ToolbarActions/BulletListAction.js +89 -0
- package/components/ToolbarActions/BulletListAction.js.map +1 -0
- package/components/ToolbarActions/CodeHighlightAction.d.ts +6 -0
- package/components/ToolbarActions/CodeHighlightAction.js +39 -0
- package/components/ToolbarActions/CodeHighlightAction.js.map +1 -0
- package/components/ToolbarActions/FontSizeAction.d.ts +2 -0
- package/components/ToolbarActions/FontSizeAction.js +104 -0
- package/components/ToolbarActions/FontSizeAction.js.map +1 -0
- package/components/ToolbarActions/ItalicAction.d.ts +5 -0
- package/components/ToolbarActions/ItalicAction.js +38 -0
- package/components/ToolbarActions/ItalicAction.js.map +1 -0
- package/components/ToolbarActions/LinkAction.d.ts +7 -0
- package/components/ToolbarActions/LinkAction.js +69 -0
- package/components/ToolbarActions/LinkAction.js.map +1 -0
- package/components/ToolbarActions/NumberedListAction.d.ts +5 -0
- package/components/ToolbarActions/NumberedListAction.js +89 -0
- package/components/ToolbarActions/NumberedListAction.js.map +1 -0
- package/components/ToolbarActions/QuoteAction.d.ts +4 -0
- package/components/ToolbarActions/QuoteAction.js +66 -0
- package/components/ToolbarActions/QuoteAction.js.map +1 -0
- package/components/ToolbarActions/UnderlineAction.d.ts +5 -0
- package/components/ToolbarActions/UnderlineAction.js +38 -0
- package/components/ToolbarActions/UnderlineAction.js.map +1 -0
- package/components/ToolbarPresets/HeadingToolbarPreset.d.ts +2 -0
- package/components/ToolbarPresets/HeadingToolbarPreset.js +44 -0
- package/components/ToolbarPresets/HeadingToolbarPreset.js.map +1 -0
- package/components/ToolbarPresets/ParagraphToolbarPreset.d.ts +2 -0
- package/components/ToolbarPresets/ParagraphToolbarPreset.js +59 -0
- package/components/ToolbarPresets/ParagraphToolbarPreset.js.map +1 -0
- package/context/RichTextEditorContext.d.ts +11 -0
- package/context/RichTextEditorContext.js +29 -0
- package/context/RichTextEditorContext.js.map +1 -0
- package/hooks/useRichTextEditor.d.ts +2 -0
- package/hooks/useRichTextEditor.js +15 -0
- package/hooks/useRichTextEditor.js.map +1 -0
- package/images/icons/LICENSE.md +5 -0
- package/images/icons/chat-square-quote.svg +1 -0
- package/images/icons/chevron-down.svg +1 -0
- package/images/icons/code.svg +1 -0
- package/images/icons/link.svg +1 -0
- package/images/icons/list-ol.svg +1 -0
- package/images/icons/list-ul.svg +1 -0
- package/images/icons/pencil-fill.svg +1 -0
- package/images/icons/text-center.svg +1 -0
- package/images/icons/text-left.svg +1 -0
- package/images/icons/text-paragraph.svg +1 -0
- package/images/icons/text-right.svg +1 -0
- package/images/icons/type-bold.svg +1 -0
- package/images/icons/type-h1.svg +1 -0
- package/images/icons/type-h2.svg +1 -0
- package/images/icons/type-h3.svg +1 -0
- package/images/icons/type-h4.svg +1 -0
- package/images/icons/type-h5.svg +1 -0
- package/images/icons/type-h6.svg +1 -0
- package/images/icons/type-italic.svg +1 -0
- package/images/icons/type-strikethrough.svg +1 -0
- package/images/icons/type-underline.svg +1 -0
- package/images/icons/unlink_icon.svg +1 -0
- package/index.d.ts +34 -0
- package/index.js +239 -0
- package/index.js.map +1 -0
- package/nodes/webinyNodes.d.ts +2 -0
- package/nodes/webinyNodes.js +15 -0
- package/nodes/webinyNodes.js.map +1 -0
- package/package.json +38 -0
- package/plugins/AutoLinkPlugin/AutoLinkPlugin.d.ts +11 -0
- package/plugins/AutoLinkPlugin/AutoLinkPlugin.js +46 -0
- package/plugins/AutoLinkPlugin/AutoLinkPlugin.js.map +1 -0
- package/plugins/AutoLinkPlugin/index.d.ts +1 -0
- package/plugins/AutoLinkPlugin/index.js +16 -0
- package/plugins/AutoLinkPlugin/index.js.map +1 -0
- package/plugins/BlurEventPlugin/BlurEventPlugin.d.ts +7 -0
- package/plugins/BlurEventPlugin/BlurEventPlugin.js +28 -0
- package/plugins/BlurEventPlugin/BlurEventPlugin.js.map +1 -0
- package/plugins/ClickableLinkPlugin/ClickableLinkPlugin.d.ts +17 -0
- package/plugins/ClickableLinkPlugin/ClickableLinkPlugin.js +88 -0
- package/plugins/ClickableLinkPlugin/ClickableLinkPlugin.js.map +1 -0
- package/plugins/ClickableLinkPlugin/index.d.ts +1 -0
- package/plugins/ClickableLinkPlugin/index.js +16 -0
- package/plugins/ClickableLinkPlugin/index.js.map +1 -0
- package/plugins/CodeHighlightPlugin/CodeHighlightPlugin.d.ts +1 -0
- package/plugins/CodeHighlightPlugin/CodeHighlightPlugin.js +20 -0
- package/plugins/CodeHighlightPlugin/CodeHighlightPlugin.js.map +1 -0
- package/plugins/CodeHighlightPlugin/index.d.ts +1 -0
- package/plugins/CodeHighlightPlugin/index.js +16 -0
- package/plugins/CodeHighlightPlugin/index.js.map +1 -0
- package/plugins/FloatingLinkEditorPlugin/FloatingLinkEditorPlugin.css +118 -0
- package/plugins/FloatingLinkEditorPlugin/FloatingLinkEditorPlugin.d.ts +7 -0
- package/plugins/FloatingLinkEditorPlugin/FloatingLinkEditorPlugin.js +222 -0
- package/plugins/FloatingLinkEditorPlugin/FloatingLinkEditorPlugin.js.map +1 -0
- package/plugins/FloatingLinkEditorPlugin/index.d.ts +1 -0
- package/plugins/FloatingLinkEditorPlugin/index.js +16 -0
- package/plugins/FloatingLinkEditorPlugin/index.js.map +1 -0
- package/plugins/LexicalUpdateStatePlugin/LexicalUpdateStatePlugin.d.ts +8 -0
- package/plugins/LexicalUpdateStatePlugin/LexicalUpdateStatePlugin.js +34 -0
- package/plugins/LexicalUpdateStatePlugin/LexicalUpdateStatePlugin.js.map +1 -0
- package/plugins/LexicalUpdateStatePlugin/index.d.ts +1 -0
- package/plugins/LexicalUpdateStatePlugin/index.js +16 -0
- package/plugins/LexicalUpdateStatePlugin/index.js.map +1 -0
- package/themes/webinyLexicalTheme.css +422 -0
- package/themes/webinyLexicalTheme.d.ts +10 -0
- package/themes/webinyLexicalTheme.js +107 -0
- package/themes/webinyLexicalTheme.js.map +1 -0
- package/types.d.ts +2 -0
- package/types.js +5 -0
- package/types.js.map +1 -0
- package/ui/Divider.d.ts +2 -0
- package/ui/Divider.js +13 -0
- package/ui/Divider.js.map +1 -0
- package/ui/DropDown.d.ts +25 -0
- package/ui/DropDown.js +168 -0
- package/ui/DropDown.js.map +1 -0
- package/ui/Input.css +32 -0
- package/ui/LinkPreview.css +69 -0
- package/ui/LinkPreview.d.ts +12 -0
- package/ui/LinkPreview.js +101 -0
- package/ui/LinkPreview.js.map +1 -0
- package/ui/Placeholder.css +23 -0
- package/ui/Placeholder.d.ts +13 -0
- package/ui/Placeholder.js +24 -0
- package/ui/Placeholder.js.map +1 -0
- package/ui/TextInput.d.ts +18 -0
- package/ui/TextInput.js +39 -0
- package/ui/TextInput.js.map +1 -0
- package/utils/generateInitialLexicalValue.d.ts +5 -0
- package/utils/generateInitialLexicalValue.js +29 -0
- package/utils/generateInitialLexicalValue.js.map +1 -0
- package/utils/getDOMRangeRect.d.ts +10 -0
- package/utils/getDOMRangeRect.js +27 -0
- package/utils/getDOMRangeRect.js.map +1 -0
- package/utils/getSelectedNode.d.ts +2 -0
- package/utils/getSelectedNode.js +30 -0
- package/utils/getSelectedNode.js.map +1 -0
- package/utils/isValidJSON.d.ts +1 -0
- package/utils/isValidJSON.js +18 -0
- package/utils/isValidJSON.js.map +1 -0
- package/utils/isValidLexicalData.d.ts +2 -0
- package/utils/isValidLexicalData.js +24 -0
- package/utils/isValidLexicalData.js.map +1 -0
- package/utils/point.d.ts +21 -0
- package/utils/point.js +77 -0
- package/utils/point.js.map +1 -0
- package/utils/rect.d.ts +47 -0
- package/utils/rect.js +169 -0
- package/utils/rect.js.map +1 -0
- package/utils/sanitizeUrl.d.ts +8 -0
- package/utils/sanitizeUrl.js +27 -0
- package/utils/sanitizeUrl.js.map +1 -0
- package/utils/setFloatingElemPosition.d.ts +3 -0
- package/utils/setFloatingElemPosition.js +40 -0
- package/utils/setFloatingElemPosition.js.map +1 -0
|
@@ -0,0 +1,414 @@
|
|
|
1
|
+
.floating-text-format-popup {
|
|
2
|
+
display: flex;
|
|
3
|
+
padding: 4px;
|
|
4
|
+
vertical-align: middle;
|
|
5
|
+
position: absolute;
|
|
6
|
+
top: 0;
|
|
7
|
+
left: 0;
|
|
8
|
+
z-index: 30;
|
|
9
|
+
opacity: 0;
|
|
10
|
+
background-color: #fff;
|
|
11
|
+
box-shadow: 0px 5px 10px rgba(0, 0, 0, 0.3);
|
|
12
|
+
border-radius: 8px;
|
|
13
|
+
transition: opacity 0.5s;
|
|
14
|
+
height: 35px;
|
|
15
|
+
will-change: transform;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.floating-text-format-popup button.popup-item {
|
|
19
|
+
border: 0;
|
|
20
|
+
display: flex;
|
|
21
|
+
background: none;
|
|
22
|
+
border-radius: 10px;
|
|
23
|
+
padding: 8px;
|
|
24
|
+
cursor: pointer;
|
|
25
|
+
vertical-align: middle;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.floating-text-format-popup button.popup-item:disabled {
|
|
29
|
+
cursor: not-allowed;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
.floating-text-format-popup button.popup-item.spaced {
|
|
33
|
+
margin-right: 2px;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.floating-text-format-popup button.popup-item i.format {
|
|
37
|
+
background-size: contain;
|
|
38
|
+
display: inline-block;
|
|
39
|
+
height: 18px;
|
|
40
|
+
width: 18px;
|
|
41
|
+
margin-top: 2px;
|
|
42
|
+
vertical-align: -0.25em;
|
|
43
|
+
display: flex;
|
|
44
|
+
opacity: 0.6;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.floating-text-format-popup button.popup-item:disabled i.format {
|
|
48
|
+
opacity: 0.2;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.floating-text-format-popup button.popup-item.active {
|
|
52
|
+
background-color: rgba(223, 232, 250, 0.3);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.floating-text-format-popup button.popup-item.active i {
|
|
56
|
+
opacity: 1;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.floating-text-format-popup .popup-item:hover:not([disabled]) {
|
|
60
|
+
background-color: #eee;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.floating-text-format-popup select.popup-item {
|
|
64
|
+
border: 0;
|
|
65
|
+
display: flex;
|
|
66
|
+
background: none;
|
|
67
|
+
border-radius: 10px;
|
|
68
|
+
padding: 8px;
|
|
69
|
+
vertical-align: middle;
|
|
70
|
+
-webkit-appearance: none;
|
|
71
|
+
-moz-appearance: none;
|
|
72
|
+
width: 70px;
|
|
73
|
+
font-size: 14px;
|
|
74
|
+
color: #777;
|
|
75
|
+
text-overflow: ellipsis;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.floating-text-format-popup select.code-language {
|
|
79
|
+
text-transform: capitalize;
|
|
80
|
+
width: 130px;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.floating-text-format-popup .popup-item .text {
|
|
84
|
+
display: flex;
|
|
85
|
+
line-height: 20px;
|
|
86
|
+
width: 200px;
|
|
87
|
+
vertical-align: middle;
|
|
88
|
+
font-size: 14px;
|
|
89
|
+
color: #777;
|
|
90
|
+
text-overflow: ellipsis;
|
|
91
|
+
width: 70px;
|
|
92
|
+
overflow: hidden;
|
|
93
|
+
height: 20px;
|
|
94
|
+
text-align: left;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.floating-text-format-popup .popup-item .icon {
|
|
98
|
+
display: flex;
|
|
99
|
+
width: 20px;
|
|
100
|
+
height: 20px;
|
|
101
|
+
user-select: none;
|
|
102
|
+
margin-right: 8px;
|
|
103
|
+
line-height: 16px;
|
|
104
|
+
background-size: contain;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
.floating-text-format-popup i.chevron-down {
|
|
108
|
+
margin-top: 3px;
|
|
109
|
+
width: 16px;
|
|
110
|
+
height: 16px;
|
|
111
|
+
display: flex;
|
|
112
|
+
user-select: none;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
.floating-text-format-popup i.chevron-down.inside {
|
|
116
|
+
width: 16px;
|
|
117
|
+
height: 16px;
|
|
118
|
+
display: flex;
|
|
119
|
+
margin-left: -25px;
|
|
120
|
+
margin-top: 11px;
|
|
121
|
+
margin-right: 10px;
|
|
122
|
+
pointer-events: none;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
.floating-text-format-popup .divider {
|
|
126
|
+
width: 1px;
|
|
127
|
+
background-color: #eee;
|
|
128
|
+
margin: 0 4px;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
i.bold {
|
|
132
|
+
background-image: url("../../images/icons/type-bold.svg");
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
i.italic {
|
|
136
|
+
background-image: url("../../images/icons/type-italic.svg");
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
i.code {
|
|
140
|
+
background-image: url("../../images/icons/code.svg");
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
i.underline {
|
|
144
|
+
background-image: url("../../images/icons/type-underline.svg");
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
i.strikethrough {
|
|
148
|
+
background-image: url("../../images/icons/type-strikethrough.svg");
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
i.link {
|
|
152
|
+
background-image: url("../../images/icons/link.svg");
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
i.quote {
|
|
156
|
+
background-image: url("../../images/icons/chat-square-quote.svg");
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
.icon.left-align,
|
|
160
|
+
i.left-align {
|
|
161
|
+
background-image: url("../../images/icons/text-left.svg");
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
i.center-align {
|
|
165
|
+
background-image: url("../../images/icons/text-center.svg");
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
i.right-align {
|
|
169
|
+
background-image: url("../../images/icons/text-right.svg");
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
i.chevron-down {
|
|
173
|
+
background-color: transparent;
|
|
174
|
+
background-size: contain;
|
|
175
|
+
display: inline-block;
|
|
176
|
+
height: 8px;
|
|
177
|
+
width: 8px;
|
|
178
|
+
background-image: url("../../images/icons/chevron-down.svg");
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
.icon.bullet-list,
|
|
183
|
+
.icon.bullet {
|
|
184
|
+
background-image: url("../../images/icons/list-ul.svg");
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
.icon.numbered-list,
|
|
188
|
+
.icon.number {
|
|
189
|
+
background-image: url("../../images/icons/list-ol.svg");
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
.link-editor .button.active,
|
|
193
|
+
.toolbar .button.active {
|
|
194
|
+
background-color: rgb(223, 232, 250);
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
.floating-text-format-popup button.toolbar-item {
|
|
199
|
+
border: 0;
|
|
200
|
+
display: flex;
|
|
201
|
+
background: none;
|
|
202
|
+
border-radius: 10px;
|
|
203
|
+
padding: 8px;
|
|
204
|
+
cursor: pointer;
|
|
205
|
+
vertical-align: middle;
|
|
206
|
+
flex-shrink: 0;
|
|
207
|
+
align-items: center;
|
|
208
|
+
justify-content: space-between;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
.floating-text-format-popup button.toolbar-item:disabled {
|
|
212
|
+
cursor: not-allowed;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
.floating-text-format-popup button.toolbar-item.spaced {
|
|
216
|
+
margin-right: 2px;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
.floating-text-format-popup button.toolbar-item i.format {
|
|
220
|
+
background-size: contain;
|
|
221
|
+
display: inline-block;
|
|
222
|
+
height: 18px;
|
|
223
|
+
width: 18px;
|
|
224
|
+
vertical-align: -0.25em;
|
|
225
|
+
display: flex;
|
|
226
|
+
opacity: 0.6;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
.floating-text-format-popup button.toolbar-item:disabled .icon,
|
|
230
|
+
.floating-text-format-popup button.toolbar-item:disabled .text,
|
|
231
|
+
.floating-text-format-popup button.toolbar-item:disabled i.format,
|
|
232
|
+
.floating-text-format-popup button.toolbar-item:disabled .chevron-down {
|
|
233
|
+
opacity: 0.2;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
.floating-text-format-popup button.toolbar-item.active {
|
|
237
|
+
background-color: rgba(223, 232, 250, 0.3);
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
.floating-text-format-popup button.toolbar-item.active i {
|
|
241
|
+
opacity: 1;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
.floating-text-format-popup .toolbar-item:hover:not([disabled]) {
|
|
245
|
+
background-color: #eee;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
.floating-text-format-popup .toolbar-item.font-family .text {
|
|
249
|
+
display: block;
|
|
250
|
+
max-width: 40px;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
.floating-text-format-popup .code-language {
|
|
254
|
+
width: 150px;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
.floating-text-format-popup .toolbar-item .text {
|
|
258
|
+
display: flex;
|
|
259
|
+
line-height: 20px;
|
|
260
|
+
vertical-align: middle;
|
|
261
|
+
font-size: 14px;
|
|
262
|
+
color: #777;
|
|
263
|
+
text-overflow: ellipsis;
|
|
264
|
+
overflow: hidden;
|
|
265
|
+
height: 20px;
|
|
266
|
+
text-align: left;
|
|
267
|
+
padding-right: 10px;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
.floating-text-format-popup .toolbar-item .icon {
|
|
271
|
+
display: flex;
|
|
272
|
+
width: 20px;
|
|
273
|
+
height: 20px;
|
|
274
|
+
user-select: none;
|
|
275
|
+
margin-right: 8px;
|
|
276
|
+
line-height: 16px;
|
|
277
|
+
background-size: contain;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
.floating-text-format-popup i.chevron-down {
|
|
281
|
+
margin-top: 3px;
|
|
282
|
+
width: 16px;
|
|
283
|
+
height: 16px;
|
|
284
|
+
display: flex;
|
|
285
|
+
user-select: none;
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
.floating-text-format-popup i.chevron-down.inside {
|
|
289
|
+
width: 16px;
|
|
290
|
+
height: 16px;
|
|
291
|
+
display: flex;
|
|
292
|
+
margin-left: -25px;
|
|
293
|
+
margin-top: 11px;
|
|
294
|
+
margin-right: 10px;
|
|
295
|
+
pointer-events: none;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
.toolbar .divider {
|
|
299
|
+
width: 1px;
|
|
300
|
+
background-color: #eee;
|
|
301
|
+
margin: 0 4px;
|
|
302
|
+
}
|
|
303
|
+
.lexical-dropdown-container {
|
|
304
|
+
position: absolute;
|
|
305
|
+
bottom: -5px;
|
|
306
|
+
left: 0;
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
.lexical-dropdown {
|
|
310
|
+
z-index: 10;
|
|
311
|
+
display: block;
|
|
312
|
+
position: fixed;
|
|
313
|
+
box-shadow: 0 12px 28px 0 rgba(0, 0, 0, 0.2), 0 2px 4px 0 rgba(0, 0, 0, 0.1),
|
|
314
|
+
inset 0 0 0 1px rgba(255, 255, 255, 0.5);
|
|
315
|
+
border-radius: 8px;
|
|
316
|
+
min-height: 40px;
|
|
317
|
+
background-color: #fff;
|
|
318
|
+
max-height: 250px;
|
|
319
|
+
overflow: hidden;
|
|
320
|
+
overflow-y: auto;
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
.lexical-dropdown .item {
|
|
324
|
+
margin: 0 8px 0 8px;
|
|
325
|
+
padding: 8px;
|
|
326
|
+
color: #050505;
|
|
327
|
+
cursor: pointer;
|
|
328
|
+
line-height: 16px;
|
|
329
|
+
font-size: 15px;
|
|
330
|
+
display: flex;
|
|
331
|
+
align-content: center;
|
|
332
|
+
flex-direction: row;
|
|
333
|
+
flex-shrink: 0;
|
|
334
|
+
justify-content: space-between;
|
|
335
|
+
background-color: #fff;
|
|
336
|
+
border-radius: 8px;
|
|
337
|
+
border: 0;
|
|
338
|
+
max-width: 250px;
|
|
339
|
+
min-width: 100px;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
.lexical-dropdown .item.fontsize-item,
|
|
343
|
+
.lexical-dropdown .item.fontsize-item .text {
|
|
344
|
+
min-width: unset;
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
.lexical-dropdown .item .active {
|
|
348
|
+
display: flex;
|
|
349
|
+
width: 20px;
|
|
350
|
+
height: 20px;
|
|
351
|
+
background-size: contain;
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
.lexical-dropdown .item:first-child {
|
|
355
|
+
margin-top: 8px;
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
.lexical-dropdown .item:last-child {
|
|
359
|
+
margin-bottom: 8px;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
.lexical-dropdown .item:hover {
|
|
363
|
+
background-color: #eee;
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
.lexical-dropdown .item .text {
|
|
367
|
+
display: flex;
|
|
368
|
+
line-height: 20px;
|
|
369
|
+
flex-grow: 1;
|
|
370
|
+
min-width: 150px;
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
.lexical-dropdown .item .icon {
|
|
374
|
+
display: flex;
|
|
375
|
+
width: 20px;
|
|
376
|
+
height: 20px;
|
|
377
|
+
user-select: none;
|
|
378
|
+
margin-right: 12px;
|
|
379
|
+
line-height: 16px;
|
|
380
|
+
background-size: contain;
|
|
381
|
+
background-position: center;
|
|
382
|
+
background-repeat: no-repeat;
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
.lexical-dropdown .divider {
|
|
386
|
+
width: auto;
|
|
387
|
+
background-color: #eee;
|
|
388
|
+
margin: 4px 8px;
|
|
389
|
+
height: 1px;
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
@media screen and (max-width: 1100px) {
|
|
393
|
+
.dropdown-button-text {
|
|
394
|
+
display: none !important;
|
|
395
|
+
}
|
|
396
|
+
.font-size .dropdown-button-text {
|
|
397
|
+
display: flex !important;
|
|
398
|
+
}
|
|
399
|
+
.code-language .dropdown-button-text {
|
|
400
|
+
display: flex !important;
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
button.item i {
|
|
405
|
+
opacity: 0.6;
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
button.item.dropdown-item-active {
|
|
409
|
+
background-color: rgba(223, 232, 250, 0.3);
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
button.item.dropdown-item-active i {
|
|
413
|
+
opacity: 1;
|
|
414
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/// <reference types="web" />
|
|
2
|
+
import React from "react";
|
|
3
|
+
import "./Toolbar.css";
|
|
4
|
+
import { ToolbarType } from "../../types";
|
|
5
|
+
export interface ToolbarProps {
|
|
6
|
+
type: ToolbarType;
|
|
7
|
+
anchorElem: HTMLElement;
|
|
8
|
+
children?: React.ReactNode;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* @description Main toolbar container
|
|
12
|
+
*/
|
|
13
|
+
export declare const Toolbar: import("@webiny/react-composition").ComposableFC<ToolbarProps>;
|
|
@@ -0,0 +1,161 @@
|
|
|
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 _link = require("@lexical/link");
|
|
14
|
+
var _reactDom = require("react-dom");
|
|
15
|
+
var _utils = require("@lexical/utils");
|
|
16
|
+
var _code = require("@lexical/code");
|
|
17
|
+
var _LexicalComposerContext = require("@lexical/react/LexicalComposerContext");
|
|
18
|
+
require("./Toolbar.css");
|
|
19
|
+
var _getDOMRangeRect = require("../../utils/getDOMRangeRect");
|
|
20
|
+
var _setFloatingElemPosition = require("../../utils/setFloatingElemPosition");
|
|
21
|
+
var _getSelectedNode = require("../../utils/getSelectedNode");
|
|
22
|
+
var _useRichTextEditor2 = require("../../hooks/useRichTextEditor");
|
|
23
|
+
var FloatingToolbar = function FloatingToolbar(_ref) {
|
|
24
|
+
var children = _ref.children,
|
|
25
|
+
anchorElem = _ref.anchorElem,
|
|
26
|
+
editor = _ref.editor;
|
|
27
|
+
var popupCharStylesEditorRef = (0, _react.useRef)(null);
|
|
28
|
+
var updateTextFormatFloatingToolbar = (0, _react.useCallback)(function () {
|
|
29
|
+
var selection = (0, _lexical.$getSelection)();
|
|
30
|
+
var popupCharStylesEditorElem = popupCharStylesEditorRef.current;
|
|
31
|
+
var nativeSelection = window.getSelection();
|
|
32
|
+
if (popupCharStylesEditorElem === null) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
var isLink = false;
|
|
36
|
+
if ((0, _lexical.$isRangeSelection)(selection)) {
|
|
37
|
+
var node = (0, _getSelectedNode.getSelectedNode)(selection);
|
|
38
|
+
// Update links
|
|
39
|
+
var parent = node.getParent();
|
|
40
|
+
if ((0, _link.$isLinkNode)(parent) || (0, _link.$isLinkNode)(node)) {
|
|
41
|
+
isLink = true;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
var rootElement = editor.getRootElement();
|
|
45
|
+
if (selection !== null && nativeSelection !== null && !nativeSelection.isCollapsed && rootElement !== null && rootElement.contains(nativeSelection.anchorNode) && !isLink) {
|
|
46
|
+
var rangeRect = (0, _getDOMRangeRect.getDOMRangeRect)(nativeSelection, rootElement);
|
|
47
|
+
(0, _setFloatingElemPosition.setFloatingElemPosition)(rangeRect, popupCharStylesEditorElem, anchorElem);
|
|
48
|
+
}
|
|
49
|
+
}, [editor, anchorElem]);
|
|
50
|
+
(0, _react.useEffect)(function () {
|
|
51
|
+
var scrollerElem = anchorElem.parentElement;
|
|
52
|
+
var update = function update() {
|
|
53
|
+
editor.getEditorState().read(function () {
|
|
54
|
+
updateTextFormatFloatingToolbar();
|
|
55
|
+
});
|
|
56
|
+
};
|
|
57
|
+
window.addEventListener("resize", update);
|
|
58
|
+
if (scrollerElem) {
|
|
59
|
+
scrollerElem.addEventListener("scroll", update);
|
|
60
|
+
}
|
|
61
|
+
return function () {
|
|
62
|
+
window.removeEventListener("resize", update);
|
|
63
|
+
if (scrollerElem) {
|
|
64
|
+
scrollerElem.removeEventListener("scroll", update);
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
}, [editor, updateTextFormatFloatingToolbar, anchorElem]);
|
|
68
|
+
(0, _react.useEffect)(function () {
|
|
69
|
+
editor.getEditorState().read(function () {
|
|
70
|
+
updateTextFormatFloatingToolbar();
|
|
71
|
+
});
|
|
72
|
+
return (0, _utils.mergeRegister)(editor.registerUpdateListener(function (_ref2) {
|
|
73
|
+
var editorState = _ref2.editorState;
|
|
74
|
+
editorState.read(function () {
|
|
75
|
+
updateTextFormatFloatingToolbar();
|
|
76
|
+
});
|
|
77
|
+
}), editor.registerCommand(_lexical.SELECTION_CHANGE_COMMAND, function () {
|
|
78
|
+
updateTextFormatFloatingToolbar();
|
|
79
|
+
return false;
|
|
80
|
+
}, _lexical.COMMAND_PRIORITY_LOW));
|
|
81
|
+
}, [editor, updateTextFormatFloatingToolbar]);
|
|
82
|
+
return /*#__PURE__*/_react.default.createElement("div", {
|
|
83
|
+
ref: popupCharStylesEditorRef,
|
|
84
|
+
className: "floating-text-format-popup"
|
|
85
|
+
}, editor.isEditable() && children);
|
|
86
|
+
};
|
|
87
|
+
var useToolbar = function useToolbar(_ref3) {
|
|
88
|
+
var editor = _ref3.editor,
|
|
89
|
+
_ref3$anchorElem = _ref3.anchorElem,
|
|
90
|
+
anchorElem = _ref3$anchorElem === void 0 ? document.body : _ref3$anchorElem,
|
|
91
|
+
type = _ref3.type,
|
|
92
|
+
children = _ref3.children;
|
|
93
|
+
var _useRichTextEditor = (0, _useRichTextEditor2.useRichTextEditor)(),
|
|
94
|
+
nodeIsText = _useRichTextEditor.nodeIsText,
|
|
95
|
+
setNodeIsText = _useRichTextEditor.setNodeIsText;
|
|
96
|
+
var updatePopup = (0, _react.useCallback)(function () {
|
|
97
|
+
editor.getEditorState().read(function () {
|
|
98
|
+
// Should not to pop up the floating toolbar when using IME input
|
|
99
|
+
if (editor.isComposing()) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
var selection = (0, _lexical.$getSelection)();
|
|
103
|
+
var nativeSelection = window.getSelection();
|
|
104
|
+
var rootElement = editor.getRootElement();
|
|
105
|
+
if (nativeSelection !== null && (!(0, _lexical.$isRangeSelection)(selection) || rootElement === null || !rootElement.contains(nativeSelection.anchorNode))) {
|
|
106
|
+
setNodeIsText(false);
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
if (!(0, _lexical.$isRangeSelection)(selection)) {
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
var node = (0, _getSelectedNode.getSelectedNode)(selection);
|
|
113
|
+
if (!(0, _code.$isCodeHighlightNode)(selection.anchor.getNode()) && selection.getTextContent() !== "") {
|
|
114
|
+
setNodeIsText((0, _lexical.$isTextNode)(node));
|
|
115
|
+
} else {
|
|
116
|
+
setNodeIsText(false);
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
}, [editor]);
|
|
120
|
+
(0, _react.useEffect)(function () {
|
|
121
|
+
document.addEventListener("selectionchange", updatePopup);
|
|
122
|
+
return function () {
|
|
123
|
+
document.removeEventListener("selectionchange", updatePopup);
|
|
124
|
+
};
|
|
125
|
+
}, [updatePopup]);
|
|
126
|
+
(0, _react.useEffect)(function () {
|
|
127
|
+
return (0, _utils.mergeRegister)(editor.registerUpdateListener(function () {
|
|
128
|
+
updatePopup();
|
|
129
|
+
}), editor.registerRootListener(function () {
|
|
130
|
+
if (editor.getRootElement() === null) {
|
|
131
|
+
setNodeIsText(false);
|
|
132
|
+
}
|
|
133
|
+
}));
|
|
134
|
+
}, [editor, updatePopup]);
|
|
135
|
+
if (!nodeIsText) {
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
return /*#__PURE__*/(0, _reactDom.createPortal)( /*#__PURE__*/_react.default.createElement(FloatingToolbar, {
|
|
139
|
+
type: type,
|
|
140
|
+
anchorElem: anchorElem,
|
|
141
|
+
editor: editor
|
|
142
|
+
}, children), anchorElem);
|
|
143
|
+
};
|
|
144
|
+
/**
|
|
145
|
+
* @description Main toolbar container
|
|
146
|
+
*/
|
|
147
|
+
var Toolbar = (0, _reactComposition.makeComposable)("Toolbar", function (_ref4) {
|
|
148
|
+
var anchorElem = _ref4.anchorElem,
|
|
149
|
+
type = _ref4.type,
|
|
150
|
+
children = _ref4.children;
|
|
151
|
+
var _useLexicalComposerCo = (0, _LexicalComposerContext.useLexicalComposerContext)(),
|
|
152
|
+
_useLexicalComposerCo2 = (0, _slicedToArray2.default)(_useLexicalComposerCo, 1),
|
|
153
|
+
editor = _useLexicalComposerCo2[0];
|
|
154
|
+
return useToolbar({
|
|
155
|
+
editor: editor,
|
|
156
|
+
anchorElem: anchorElem,
|
|
157
|
+
type: type,
|
|
158
|
+
children: children
|
|
159
|
+
});
|
|
160
|
+
});
|
|
161
|
+
exports.Toolbar = Toolbar;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_lexical","_reactComposition","_link","_reactDom","_utils","_code","_LexicalComposerContext","_getDOMRangeRect","_setFloatingElemPosition","_getSelectedNode","_useRichTextEditor2","FloatingToolbar","_ref","children","anchorElem","editor","popupCharStylesEditorRef","useRef","updateTextFormatFloatingToolbar","useCallback","selection","$getSelection","popupCharStylesEditorElem","current","nativeSelection","window","getSelection","isLink","$isRangeSelection","node","getSelectedNode","parent","getParent","$isLinkNode","rootElement","getRootElement","isCollapsed","contains","anchorNode","rangeRect","getDOMRangeRect","setFloatingElemPosition","useEffect","scrollerElem","parentElement","update","getEditorState","read","addEventListener","removeEventListener","mergeRegister","registerUpdateListener","_ref2","editorState","registerCommand","SELECTION_CHANGE_COMMAND","COMMAND_PRIORITY_LOW","default","createElement","ref","className","isEditable","useToolbar","_ref3","_ref3$anchorElem","document","body","type","_useRichTextEditor","useRichTextEditor","nodeIsText","setNodeIsText","updatePopup","isComposing","$isCodeHighlightNode","anchor","getNode","getTextContent","$isTextNode","registerRootListener","createPortal","Toolbar","makeComposable","_ref4","_useLexicalComposerCo","useLexicalComposerContext","_useLexicalComposerCo2","_slicedToArray2","exports"],"sources":["Toolbar.tsx"],"sourcesContent":["import React, { FC, useCallback, useEffect, useRef } from \"react\";\nimport {\n $getSelection,\n $isRangeSelection,\n $isTextNode,\n COMMAND_PRIORITY_LOW,\n LexicalEditor,\n SELECTION_CHANGE_COMMAND\n} from \"lexical\";\nimport { makeComposable } from \"@webiny/react-composition\";\nimport { $isLinkNode } from \"@lexical/link\";\nimport { createPortal } from \"react-dom\";\nimport { mergeRegister } from \"@lexical/utils\";\nimport { $isCodeHighlightNode } from \"@lexical/code\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport \"./Toolbar.css\";\nimport { ToolbarType } from \"~/types\";\nimport { getDOMRangeRect } from \"~/utils/getDOMRangeRect\";\nimport { setFloatingElemPosition } from \"~/utils/setFloatingElemPosition\";\nimport { getSelectedNode } from \"~/utils/getSelectedNode\";\nimport { useRichTextEditor } from \"~/hooks/useRichTextEditor\";\n\ninterface FloatingToolbarProps {\n type: ToolbarType;\n anchorElem: HTMLElement;\n children?: React.ReactNode;\n editor: LexicalEditor;\n}\n\nconst FloatingToolbar: FC<FloatingToolbarProps> = ({ children, anchorElem, editor }) => {\n const popupCharStylesEditorRef = useRef<HTMLDivElement | null>(null);\n\n const updateTextFormatFloatingToolbar = useCallback(() => {\n const selection = $getSelection();\n\n const popupCharStylesEditorElem = popupCharStylesEditorRef.current;\n const nativeSelection = window.getSelection();\n\n if (popupCharStylesEditorElem === null) {\n return;\n }\n\n let isLink = false;\n if ($isRangeSelection(selection)) {\n const node = getSelectedNode(selection);\n // Update links\n const parent = node.getParent();\n\n if ($isLinkNode(parent) || $isLinkNode(node)) {\n isLink = true;\n }\n }\n\n const rootElement = editor.getRootElement();\n if (\n selection !== null &&\n nativeSelection !== null &&\n !nativeSelection.isCollapsed &&\n rootElement !== null &&\n rootElement.contains(nativeSelection.anchorNode) &&\n !isLink\n ) {\n const rangeRect = getDOMRangeRect(nativeSelection, rootElement);\n setFloatingElemPosition(rangeRect, popupCharStylesEditorElem, anchorElem);\n }\n }, [editor, anchorElem]);\n\n useEffect(() => {\n const scrollerElem = anchorElem.parentElement;\n\n const update = () => {\n editor.getEditorState().read(() => {\n updateTextFormatFloatingToolbar();\n });\n };\n\n window.addEventListener(\"resize\", update);\n if (scrollerElem) {\n scrollerElem.addEventListener(\"scroll\", update);\n }\n\n return () => {\n window.removeEventListener(\"resize\", update);\n if (scrollerElem) {\n scrollerElem.removeEventListener(\"scroll\", update);\n }\n };\n }, [editor, updateTextFormatFloatingToolbar, anchorElem]);\n\n useEffect(() => {\n editor.getEditorState().read(() => {\n updateTextFormatFloatingToolbar();\n });\n return mergeRegister(\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n updateTextFormatFloatingToolbar();\n });\n }),\n\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n () => {\n updateTextFormatFloatingToolbar();\n return false;\n },\n COMMAND_PRIORITY_LOW\n )\n );\n }, [editor, updateTextFormatFloatingToolbar]);\n\n return (\n <div ref={popupCharStylesEditorRef} className=\"floating-text-format-popup\">\n {editor.isEditable() && children}\n </div>\n );\n};\n\ninterface useToolbarProps {\n editor: LexicalEditor;\n type: ToolbarType;\n anchorElem: HTMLElement;\n children?: React.ReactNode;\n}\n\nconst useToolbar: FC<useToolbarProps> = ({\n editor,\n anchorElem = document.body,\n type,\n children\n}): JSX.Element | null => {\n const { nodeIsText, setNodeIsText } = useRichTextEditor();\n\n const updatePopup = useCallback(() => {\n editor.getEditorState().read(() => {\n // Should not to pop up the floating toolbar when using IME input\n if (editor.isComposing()) {\n return;\n }\n const selection = $getSelection();\n const nativeSelection = window.getSelection();\n const rootElement = editor.getRootElement();\n\n if (\n nativeSelection !== null &&\n (!$isRangeSelection(selection) ||\n rootElement === null ||\n !rootElement.contains(nativeSelection.anchorNode))\n ) {\n setNodeIsText(false);\n return;\n }\n\n if (!$isRangeSelection(selection)) {\n return;\n }\n\n const node = getSelectedNode(selection);\n\n if (\n !$isCodeHighlightNode(selection.anchor.getNode()) &&\n selection.getTextContent() !== \"\"\n ) {\n setNodeIsText($isTextNode(node));\n } else {\n setNodeIsText(false);\n }\n });\n }, [editor]);\n\n useEffect(() => {\n document.addEventListener(\"selectionchange\", updatePopup);\n return () => {\n document.removeEventListener(\"selectionchange\", updatePopup);\n };\n }, [updatePopup]);\n\n useEffect(() => {\n return mergeRegister(\n editor.registerUpdateListener(() => {\n updatePopup();\n }),\n editor.registerRootListener(() => {\n if (editor.getRootElement() === null) {\n setNodeIsText(false);\n }\n })\n );\n }, [editor, updatePopup]);\n\n if (!nodeIsText) {\n return null;\n }\n\n return createPortal(\n <FloatingToolbar type={type} anchorElem={anchorElem} editor={editor}>\n {children}\n </FloatingToolbar>,\n anchorElem\n );\n};\n\nexport interface ToolbarProps {\n type: ToolbarType;\n anchorElem: HTMLElement;\n children?: React.ReactNode;\n}\n\n/**\n * @description Main toolbar container\n */\nexport const Toolbar = makeComposable<ToolbarProps>(\n \"Toolbar\",\n ({ anchorElem, type, children }): JSX.Element | null => {\n const [editor] = useLexicalComposerContext();\n return useToolbar({ editor, anchorElem, type, children });\n }\n);\n"],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
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
|
+
/**
|
|
14
|
+
* Toolbar action. On toolbar, you can see as button that is bold.
|
|
15
|
+
*/
|
|
16
|
+
var BoldAction = function BoldAction() {
|
|
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
|
+
isBold = _useState2[0],
|
|
23
|
+
setIsBold = _useState2[1];
|
|
24
|
+
var handleClick = function handleClick() {
|
|
25
|
+
editor.dispatchCommand(_lexical.FORMAT_TEXT_COMMAND, "bold");
|
|
26
|
+
setIsBold(!isBold);
|
|
27
|
+
};
|
|
28
|
+
return /*#__PURE__*/_react.default.createElement("button", {
|
|
29
|
+
onClick: function onClick() {
|
|
30
|
+
return handleClick();
|
|
31
|
+
},
|
|
32
|
+
className: "popup-item spaced " + (isBold ? "active" : ""),
|
|
33
|
+
"aria-label": "Format text as bold"
|
|
34
|
+
}, /*#__PURE__*/_react.default.createElement("i", {
|
|
35
|
+
className: "format bold"
|
|
36
|
+
}));
|
|
37
|
+
};
|
|
38
|
+
exports.BoldAction = BoldAction;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_LexicalComposerContext","_lexical","BoldAction","_useLexicalComposerCo","useLexicalComposerContext","_useLexicalComposerCo2","_slicedToArray2","default","editor","_useState","useState","_useState2","isBold","setIsBold","handleClick","dispatchCommand","FORMAT_TEXT_COMMAND","createElement","onClick","className","exports"],"sources":["BoldAction.tsx"],"sourcesContent":["import React, { useState } from \"react\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { FORMAT_TEXT_COMMAND } from \"lexical\";\n\n/**\n * Toolbar action. On toolbar, you can see as button that is bold.\n */\nexport const BoldAction = () => {\n const [editor] = useLexicalComposerContext();\n const [isBold, setIsBold] = useState(false);\n const handleClick = () => {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"bold\");\n setIsBold(!isBold);\n };\n\n return (\n <button\n onClick={() => handleClick()}\n className={\"popup-item spaced \" + (isBold ? \"active\" : \"\")}\n aria-label=\"Format text as bold\"\n >\n <i className=\"format bold\" />\n </button>\n );\n};\n"],"mappings":";;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,uBAAA,GAAAD,OAAA;AACA,IAAAE,QAAA,GAAAF,OAAA;AAEA;AACA;AACA;AACO,IAAMG,UAAU,GAAG,SAAbA,UAAUA,CAAA,EAAS;EAC5B,IAAAC,qBAAA,GAAiB,IAAAC,iDAAyB,GAAE;IAAAC,sBAAA,OAAAC,eAAA,CAAAC,OAAA,EAAAJ,qBAAA;IAArCK,MAAM,GAAAH,sBAAA;EACb,IAAAI,SAAA,GAA4B,IAAAC,eAAQ,EAAC,KAAK,CAAC;IAAAC,UAAA,OAAAL,eAAA,CAAAC,OAAA,EAAAE,SAAA;IAApCG,MAAM,GAAAD,UAAA;IAAEE,SAAS,GAAAF,UAAA;EACxB,IAAMG,WAAW,GAAG,SAAdA,WAAWA,CAAA,EAAS;IACtBN,MAAM,CAACO,eAAe,CAACC,4BAAmB,EAAE,MAAM,CAAC;IACnDH,SAAS,CAAC,CAACD,MAAM,CAAC;EACtB,CAAC;EAED,oBACIf,MAAA,CAAAU,OAAA,CAAAU,aAAA;IACIC,OAAO,EAAE,SAAAA,QAAA;MAAA,OAAMJ,WAAW,EAAE;IAAA,CAAC;IAC7BK,SAAS,EAAE,oBAAoB,IAAIP,MAAM,GAAG,QAAQ,GAAG,EAAE,CAAE;IAC3D,cAAW;EAAqB,gBAEhCf,MAAA,CAAAU,OAAA,CAAAU,aAAA;IAAGE,SAAS,EAAC;EAAa,EAAG,CACxB;AAEjB,CAAC;AAACC,OAAA,CAAAlB,UAAA,GAAAA,UAAA"}
|