@gravity-ui/markdown-editor 14.4.0 → 14.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/build/cjs/bundle/Editor.js +1 -0
  2. package/build/cjs/bundle/config/markup.d.ts +41 -17
  3. package/build/cjs/bundle/config/markup.js +413 -308
  4. package/build/cjs/bundle/config/wysiwyg.d.ts +29 -18
  5. package/build/cjs/bundle/config/wysiwyg.js +526 -310
  6. package/build/cjs/bundle/sticky/sticky.css +1 -1
  7. package/build/cjs/bundle/types.d.ts +2 -0
  8. package/build/cjs/extensions/behavior/Clipboard/utils.d.ts +1 -0
  9. package/build/cjs/extensions/behavior/Clipboard/utils.js +1 -0
  10. package/build/cjs/extensions/markdown/CodeBlock/handle-paste.js +5 -17
  11. package/build/cjs/extensions/yfm/YfmFile/YfmFileSpecs/const.d.ts +12 -0
  12. package/build/cjs/extensions/yfm/YfmFile/YfmFileSpecs/const.js +21 -2
  13. package/build/cjs/extensions/yfm/YfmFile/YfmFileSpecs/index.d.ts +8 -1
  14. package/build/cjs/extensions/yfm/YfmFile/YfmFileSpecs/index.js +29 -5
  15. package/build/cjs/markup/codemirror/create.d.ts +1 -0
  16. package/build/cjs/markup/codemirror/create.js +41 -4
  17. package/build/cjs/markup/codemirror/html-to-markdown/converters.d.ts +111 -0
  18. package/build/cjs/markup/codemirror/html-to-markdown/converters.js +214 -0
  19. package/build/cjs/markup/codemirror/html-to-markdown/handlers.d.ts +104 -0
  20. package/build/cjs/markup/codemirror/html-to-markdown/handlers.js +233 -0
  21. package/build/cjs/markup/codemirror/html-to-markdown/helpers.d.ts +1 -0
  22. package/build/cjs/markup/codemirror/html-to-markdown/helpers.js +21 -0
  23. package/build/cjs/markup/commands/inline.js +18 -8
  24. package/build/cjs/utils/clipboard.d.ts +14 -0
  25. package/build/cjs/utils/clipboard.js +36 -1
  26. package/build/cjs/version.js +1 -1
  27. package/build/esm/bundle/Editor.js +1 -0
  28. package/build/esm/bundle/config/markup.d.ts +41 -17
  29. package/build/esm/bundle/config/markup.js +411 -307
  30. package/build/esm/bundle/config/wysiwyg.d.ts +29 -18
  31. package/build/esm/bundle/config/wysiwyg.js +499 -284
  32. package/build/esm/bundle/sticky/sticky.css +1 -1
  33. package/build/esm/bundle/types.d.ts +2 -0
  34. package/build/esm/extensions/behavior/Clipboard/utils.d.ts +1 -0
  35. package/build/esm/extensions/behavior/Clipboard/utils.js +1 -0
  36. package/build/esm/extensions/markdown/CodeBlock/handle-paste.js +2 -14
  37. package/build/esm/extensions/yfm/YfmFile/YfmFileSpecs/const.d.ts +12 -0
  38. package/build/esm/extensions/yfm/YfmFile/YfmFileSpecs/const.js +21 -2
  39. package/build/esm/extensions/yfm/YfmFile/YfmFileSpecs/index.d.ts +8 -1
  40. package/build/esm/extensions/yfm/YfmFile/YfmFileSpecs/index.js +29 -6
  41. package/build/esm/markup/codemirror/create.d.ts +1 -0
  42. package/build/esm/markup/codemirror/create.js +40 -3
  43. package/build/esm/markup/codemirror/html-to-markdown/converters.d.ts +111 -0
  44. package/build/esm/markup/codemirror/html-to-markdown/converters.js +210 -0
  45. package/build/esm/markup/codemirror/html-to-markdown/handlers.d.ts +104 -0
  46. package/build/esm/markup/codemirror/html-to-markdown/handlers.js +215 -0
  47. package/build/esm/markup/codemirror/html-to-markdown/helpers.d.ts +1 -0
  48. package/build/esm/markup/codemirror/html-to-markdown/helpers.js +17 -0
  49. package/build/esm/markup/commands/inline.js +18 -8
  50. package/build/esm/utils/clipboard.d.ts +14 -0
  51. package/build/esm/utils/clipboard.js +32 -0
  52. package/build/esm/version.js +1 -1
  53. package/build/styles.css +1 -1
  54. package/package.json +9 -7
@@ -12,29 +12,26 @@ const noop = () => { };
12
12
  const inactive = () => false;
13
13
  const enable = () => true;
14
14
  const disable = () => false;
15
- export const mHistoryGroupConfig = [
16
- {
17
- id: ActionName.undo,
18
- type: ToolbarDataType.SingleButton,
19
- title: i18n.bind(null, 'undo'),
20
- icon: icons.undo,
21
- hotkey: f.toView(A.Undo),
22
- exec: (e) => undo(e.cm),
23
- isActive: inactive,
24
- isEnable: (e) => undoDepth(e.cm.state) > 0,
25
- },
26
- {
27
- id: ActionName.redo,
28
- type: ToolbarDataType.SingleButton,
29
- title: i18n.bind(null, 'redo'),
30
- icon: icons.redo,
31
- hotkey: f.toView(A.Redo),
32
- exec: (e) => redo(e.cm),
33
- isActive: inactive,
34
- isEnable: (e) => redoDepth(e.cm.state) > 0,
35
- },
36
- ];
37
- /** Bold, Italic, Underline, Strike buttons group */
15
+ export const mUndoItemData = {
16
+ id: ActionName.undo,
17
+ type: ToolbarDataType.SingleButton,
18
+ title: i18n.bind(null, 'undo'),
19
+ icon: icons.undo,
20
+ hotkey: f.toView(A.Undo),
21
+ exec: (e) => undo(e.cm),
22
+ isActive: inactive,
23
+ isEnable: (e) => undoDepth(e.cm.state) > 0,
24
+ };
25
+ export const mRedoItemData = {
26
+ id: ActionName.redo,
27
+ type: ToolbarDataType.SingleButton,
28
+ title: i18n.bind(null, 'redo'),
29
+ icon: icons.redo,
30
+ hotkey: f.toView(A.Redo),
31
+ exec: (e) => redo(e.cm),
32
+ isActive: inactive,
33
+ isEnable: (e) => redoDepth(e.cm.state) > 0,
34
+ };
38
35
  export const mBoldItemData = {
39
36
  id: ActionName.bold,
40
37
  type: ToolbarDataType.SingleButton,
@@ -93,132 +90,6 @@ export const mMarkedItemData = {
93
90
  isActive: inactive,
94
91
  isEnable: enable,
95
92
  };
96
- export const mBiusGroupConfig = [
97
- mBoldItemData,
98
- mItalicItemData,
99
- {
100
- id: ActionName.underline,
101
- type: ToolbarDataType.SingleButton,
102
- title: i18n.bind(null, 'underline'),
103
- icon: icons.underline,
104
- hotkey: f.toView(A.Underline),
105
- exec: (e) => toggleUnderline(e.cm),
106
- isActive: inactive,
107
- isEnable: enable,
108
- },
109
- {
110
- id: ActionName.strike,
111
- type: ToolbarDataType.SingleButton,
112
- title: i18n.bind(null, 'strike'),
113
- icon: icons.strikethrough,
114
- hotkey: f.toView(A.Strike),
115
- exec: (e) => toggleStrikethrough(e.cm),
116
- isActive: inactive,
117
- isEnable: enable,
118
- },
119
- {
120
- id: ActionName.mono,
121
- type: ToolbarDataType.SingleButton,
122
- title: i18n.bind(null, 'mono'),
123
- icon: icons.mono,
124
- exec: (e) => toggleMonospace(e.cm),
125
- isActive: inactive,
126
- isEnable: enable,
127
- },
128
- {
129
- id: ActionName.mark,
130
- type: ToolbarDataType.SingleButton,
131
- title: i18n.bind(null, 'mark'),
132
- icon: icons.mark,
133
- exec: (e) => toggleMarked(e.cm),
134
- isActive: inactive,
135
- isEnable: enable,
136
- },
137
- ];
138
- export const mHeadingListConfig = {
139
- icon: icons.headline,
140
- withArrow: true,
141
- title: i18n.bind(null, 'heading'),
142
- data: [
143
- {
144
- id: ActionName.heading1,
145
- title: i18n.bind(null, 'heading1'),
146
- icon: icons.h1,
147
- hotkey: f.toView(A.Heading1),
148
- exec: (e) => toH1(e.cm),
149
- isActive: inactive,
150
- isEnable: enable,
151
- },
152
- {
153
- id: ActionName.heading2,
154
- title: i18n.bind(null, 'heading2'),
155
- icon: icons.h2,
156
- hotkey: f.toView(A.Heading2),
157
- exec: (e) => toH2(e.cm),
158
- isActive: inactive,
159
- isEnable: enable,
160
- },
161
- {
162
- id: ActionName.heading3,
163
- title: i18n.bind(null, 'heading3'),
164
- icon: icons.h3,
165
- hotkey: f.toView(A.Heading3),
166
- exec: (e) => toH3(e.cm),
167
- isActive: inactive,
168
- isEnable: enable,
169
- },
170
- {
171
- id: ActionName.heading4,
172
- title: i18n.bind(null, 'heading4'),
173
- icon: icons.h4,
174
- hotkey: f.toView(A.Heading4),
175
- exec: (e) => toH4(e.cm),
176
- isActive: inactive,
177
- isEnable: enable,
178
- },
179
- {
180
- id: ActionName.heading5,
181
- title: i18n.bind(null, 'heading5'),
182
- icon: icons.h5,
183
- hotkey: f.toView(A.Heading5),
184
- exec: (e) => toH5(e.cm),
185
- isActive: inactive,
186
- isEnable: enable,
187
- },
188
- {
189
- id: ActionName.heading6,
190
- title: i18n.bind(null, 'heading6'),
191
- icon: icons.h6,
192
- hotkey: f.toView(A.Heading6),
193
- exec: (e) => toH6(e.cm),
194
- isActive: inactive,
195
- isEnable: enable,
196
- },
197
- ],
198
- };
199
- export const mListsListConfig = {
200
- icon: icons.bulletList,
201
- withArrow: true,
202
- title: i18n.bind(null, 'list'),
203
- data: [
204
- {
205
- id: ActionName.bulletList,
206
- title: i18n.bind(null, 'ulist'),
207
- icon: icons.bulletList,
208
- exec: (e) => toBulletList(e.cm),
209
- isActive: inactive,
210
- isEnable: enable,
211
- },
212
- {
213
- id: ActionName.orderedList,
214
- title: i18n.bind(null, 'olist'),
215
- icon: icons.orderedList,
216
- exec: (e) => toOrderedList(e.cm),
217
- isActive: inactive,
218
- isEnable: enable,
219
- },
220
- ],
221
- };
222
93
  export const mCheckboxButton = {
223
94
  id: ActionName.checkbox,
224
95
  type: ToolbarDataType.SingleButton,
@@ -228,29 +99,7 @@ export const mCheckboxButton = {
228
99
  isActive: inactive,
229
100
  isEnable: enable,
230
101
  };
231
- export const mListMoveListConfig = {
232
- icon: icons.lift,
233
- withArrow: true,
234
- title: 'Move list item',
235
- data: [
236
- {
237
- id: ActionName.sinkListItem,
238
- title: i18n.bind(null, 'list__action_sink'),
239
- icon: icons.sink,
240
- exec: (e) => sinkListItem(e.cm),
241
- isActive: inactive,
242
- isEnable: enable,
243
- },
244
- {
245
- id: ActionName.liftListItem,
246
- title: i18n.bind(null, 'list__action_lift'),
247
- icon: icons.lift,
248
- exec: (e) => liftListItem(e.cm),
249
- isActive: inactive,
250
- isEnable: enable,
251
- },
252
- ],
253
- };
102
+ export const mCheckboxItemData = mCheckboxButton;
254
103
  export const mLinkButton = {
255
104
  id: ActionName.link,
256
105
  type: ToolbarDataType.SingleButton,
@@ -260,16 +109,7 @@ export const mLinkButton = {
260
109
  isActive: inactive,
261
110
  isEnable: enable,
262
111
  };
263
- export const mNoteButton = {
264
- id: ActionName.yfm_note,
265
- type: ToolbarDataType.SingleButton,
266
- title: i18n.bind(null, 'note'),
267
- icon: icons.note,
268
- hotkey: f.toView(A.Note),
269
- exec: (e) => wrapToYfmNote(e.cm),
270
- isActive: inactive,
271
- isEnable: enable,
272
- };
112
+ export const mLinkItemData = mLinkButton;
273
113
  export const mQuoteButton = {
274
114
  id: ActionName.quote,
275
115
  type: ToolbarDataType.SingleButton,
@@ -279,6 +119,7 @@ export const mQuoteButton = {
279
119
  isActive: inactive,
280
120
  isEnable: enable,
281
121
  };
122
+ export const mQuoteItemData = mQuoteButton;
282
123
  export const mCutButton = {
283
124
  id: ActionName.yfm_cut,
284
125
  type: ToolbarDataType.SingleButton,
@@ -289,6 +130,18 @@ export const mCutButton = {
289
130
  isActive: inactive,
290
131
  isEnable: enable,
291
132
  };
133
+ export const mCutItemData = mCutButton;
134
+ export const mNoteButton = {
135
+ id: ActionName.yfm_note,
136
+ type: ToolbarDataType.SingleButton,
137
+ title: i18n.bind(null, 'note'),
138
+ icon: icons.note,
139
+ hotkey: f.toView(A.Note),
140
+ exec: (e) => wrapToYfmNote(e.cm),
141
+ isActive: inactive,
142
+ isEnable: enable,
143
+ };
144
+ export const mNoteItemData = mNoteButton;
292
145
  export const mTableButton = {
293
146
  id: ActionName.table,
294
147
  type: ToolbarDataType.SingleButton,
@@ -298,71 +151,13 @@ export const mTableButton = {
298
151
  isActive: inactive,
299
152
  isEnable: enable,
300
153
  };
301
- export const mCodeblockItemData = {
302
- id: ActionName.code_block,
303
- title: i18n.bind(null, 'codeblock'),
304
- icon: icons.codeBlock,
305
- hotkey: f.toView(A.CodeBlock),
306
- exec: (e) => wrapToCodeBlock(e.cm),
307
- isActive: inactive,
308
- isEnable: enable,
309
- };
310
- export const mCodeListConfig = {
154
+ export const mTableItemData = mTableButton;
155
+ export const mCodeItemData = {
156
+ id: ActionName.code_inline,
157
+ title: i18n.bind(null, 'code_inline'),
311
158
  icon: icons.code,
312
- withArrow: true,
313
- title: i18n.bind(null, 'code'),
314
- data: [
315
- {
316
- id: ActionName.code_inline,
317
- title: i18n.bind(null, 'code_inline'),
318
- icon: icons.code,
319
- hotkey: f.toView(A.Code),
320
- exec: (e) => wrapToInlineCode(e.cm),
321
- isActive: inactive,
322
- isEnable: enable,
323
- },
324
- mCodeblockItemData,
325
- ],
326
- };
327
- export const mMathListConfig = {
328
- icon: icons.functionInline,
329
- withArrow: true,
330
- title: i18n.bind(null, 'math'),
331
- data: [
332
- {
333
- id: ActionName.math_inline,
334
- title: i18n.bind(null, 'math_inline'),
335
- icon: icons.functionInline,
336
- exec: (e) => wrapToMathInline(e.cm),
337
- isActive: inactive,
338
- isEnable: enable,
339
- },
340
- {
341
- id: ActionName.math_block,
342
- title: i18n.bind(null, 'math_block'),
343
- icon: icons.functionBlock,
344
- exec: (e) => wrapToMathBlock(e.cm),
345
- isActive: inactive,
346
- isEnable: enable,
347
- },
348
- ],
349
- };
350
- export const mMathListItem = Object.assign({ id: 'math', type: ToolbarDataType.ListButton }, mMathListConfig);
351
- export const mMermaidButton = {
352
- id: ActionName.mermaid,
353
- type: ToolbarDataType.SingleButton,
354
- title: i18n.bind(null, 'mermaid'),
355
- icon: icons.mermaid,
356
- exec: (e) => insertMermaidDiagram(e.cm),
357
- isActive: inactive,
358
- isEnable: enable,
359
- };
360
- export const mYfmHtmlBlockButton = {
361
- id: ActionName.yfm_html_block,
362
- type: ToolbarDataType.SingleButton,
363
- title: i18n.bind(null, 'html'),
364
- icon: icons.html,
365
- exec: (e) => insertYfmHtmlBlock(e.cm),
159
+ hotkey: f.toView(A.Code),
160
+ exec: (e) => wrapToInlineCode(e.cm),
366
161
  isActive: inactive,
367
162
  isEnable: enable,
368
163
  };
@@ -376,6 +171,7 @@ export const mImagePopupData = {
376
171
  isEnable: enable,
377
172
  renderPopup: (props) => React.createElement(MToolbarImagePopup, Object.assign({}, props)),
378
173
  };
174
+ export const mImageItemData = mImagePopupData;
379
175
  export const mFilePopupData = {
380
176
  id: 'file',
381
177
  type: ToolbarDataType.ButtonPopup,
@@ -386,41 +182,62 @@ export const mFilePopupData = {
386
182
  isEnable: enable,
387
183
  renderPopup: (props) => React.createElement(MToolbarFilePopup, Object.assign({}, props)),
388
184
  };
389
- /** prepared markup toolbar config */
390
- export const mToolbarConfig = [
391
- mHistoryGroupConfig,
392
- mBiusGroupConfig,
393
- [
394
- Object.assign({ id: 'heading', type: ToolbarDataType.ListButton }, mHeadingListConfig),
395
- Object.assign({ id: 'list', type: ToolbarDataType.ListButton }, mListsListConfig),
396
- {
397
- id: 'colorify',
398
- type: ToolbarDataType.ReactComponent,
399
- component: MToolbarColors,
400
- width: 42,
401
- },
402
- mLinkButton,
403
- mNoteButton,
404
- mCutButton,
405
- mQuoteButton,
406
- Object.assign({ id: 'code', type: ToolbarDataType.ListButton }, mCodeListConfig),
407
- ],
408
- [
409
- mImagePopupData,
410
- {
411
- id: 'file',
412
- type: ToolbarDataType.ButtonPopup,
413
- icon: icons.file,
414
- title: i18n('file'),
415
- exec: noop,
416
- isActive: inactive,
417
- isEnable: enable,
418
- renderPopup: (props) => React.createElement(MToolbarFilePopup, Object.assign({}, props)),
419
- },
420
- mTableButton,
421
- mCheckboxButton,
422
- ],
423
- ];
185
+ export const mFileItemData = mFilePopupData;
186
+ export const mTabsItemData = {
187
+ id: 'tabs',
188
+ title: i18n.bind(null, 'tabs'),
189
+ icon: icons.tabs,
190
+ type: ToolbarDataType.SingleButton,
191
+ exec: (e) => insertYfmTabs(e.cm),
192
+ isActive: inactive,
193
+ isEnable: enable,
194
+ };
195
+ export const mMathInlineItemData = {
196
+ id: ActionName.math_inline,
197
+ title: i18n.bind(null, 'math_inline'),
198
+ icon: icons.functionInline,
199
+ exec: (e) => wrapToMathInline(e.cm),
200
+ isActive: inactive,
201
+ isEnable: enable,
202
+ };
203
+ export const mMathBlockItemData = {
204
+ id: ActionName.math_block,
205
+ title: i18n.bind(null, 'math_block'),
206
+ icon: icons.functionBlock,
207
+ exec: (e) => wrapToMathBlock(e.cm),
208
+ isActive: inactive,
209
+ isEnable: enable,
210
+ };
211
+ export const mYfmHtmlBlockButton = {
212
+ id: ActionName.yfm_html_block,
213
+ type: ToolbarDataType.SingleButton,
214
+ title: i18n.bind(null, 'html'),
215
+ icon: icons.html,
216
+ exec: (e) => insertYfmHtmlBlock(e.cm),
217
+ isActive: inactive,
218
+ isEnable: enable,
219
+ };
220
+ export const mYfmHtmlBlockItemData = mYfmHtmlBlockButton;
221
+ export const mMermaidButton = {
222
+ id: ActionName.mermaid,
223
+ type: ToolbarDataType.SingleButton,
224
+ title: i18n.bind(null, 'mermaid'),
225
+ icon: icons.mermaid,
226
+ exec: (e) => insertMermaidDiagram(e.cm),
227
+ isActive: inactive,
228
+ isEnable: enable,
229
+ };
230
+ export const mMermaidItemData = mMermaidButton;
231
+ export const mCodeblockItemData = {
232
+ id: ActionName.code_block,
233
+ title: i18n.bind(null, 'codeblock'),
234
+ icon: icons.codeBlock,
235
+ hotkey: f.toView(A.CodeBlock),
236
+ exec: (e) => wrapToCodeBlock(e.cm),
237
+ isActive: inactive,
238
+ isEnable: enable,
239
+ };
240
+ export const mCodeBlockItemData = mCodeblockItemData;
424
241
  export const mHruleItemData = {
425
242
  id: 'hrule',
426
243
  title: i18n.bind(null, 'hrule'),
@@ -440,42 +257,277 @@ export const mEmojiItemData = {
440
257
  isActive: inactive,
441
258
  isEnable: disable,
442
259
  };
443
- export const mTabsItemData = {
444
- id: 'tabs',
445
- title: i18n.bind(null, 'tabs'),
446
- icon: icons.tabs,
447
- type: ToolbarDataType.SingleButton,
448
- exec: (e) => insertYfmTabs(e.cm),
260
+ export const mMathListItem = {
261
+ id: 'math',
262
+ type: ToolbarDataType.ListButton,
263
+ icon: icons.functionInline,
264
+ withArrow: true,
265
+ title: i18n.bind(null, 'math'),
266
+ data: [mMathInlineItemData, mMathBlockItemData],
267
+ };
268
+ export const mHeading1ItemData = {
269
+ id: ActionName.heading1,
270
+ title: i18n.bind(null, 'heading1'),
271
+ icon: icons.h1,
272
+ hotkey: f.toView(A.Heading1),
273
+ exec: (e) => toH1(e.cm),
274
+ isActive: inactive,
275
+ isEnable: enable,
276
+ };
277
+ export const mHeading2ItemData = {
278
+ id: ActionName.heading2,
279
+ title: i18n.bind(null, 'heading2'),
280
+ icon: icons.h2,
281
+ hotkey: f.toView(A.Heading2),
282
+ exec: (e) => toH2(e.cm),
283
+ isActive: inactive,
284
+ isEnable: enable,
285
+ };
286
+ export const mHeading3ItemData = {
287
+ id: ActionName.heading3,
288
+ title: i18n.bind(null, 'heading3'),
289
+ icon: icons.h3,
290
+ hotkey: f.toView(A.Heading3),
291
+ exec: (e) => toH3(e.cm),
292
+ isActive: inactive,
293
+ isEnable: enable,
294
+ };
295
+ export const mHeading4ItemData = {
296
+ id: ActionName.heading4,
297
+ title: i18n.bind(null, 'heading4'),
298
+ icon: icons.h4,
299
+ hotkey: f.toView(A.Heading4),
300
+ exec: (e) => toH4(e.cm),
301
+ isActive: inactive,
302
+ isEnable: enable,
303
+ };
304
+ export const mHeading5ItemData = {
305
+ id: ActionName.heading5,
306
+ title: i18n.bind(null, 'heading5'),
307
+ icon: icons.h5,
308
+ hotkey: f.toView(A.Heading5),
309
+ exec: (e) => toH5(e.cm),
310
+ isActive: inactive,
311
+ isEnable: enable,
312
+ };
313
+ export const mHeading6ItemData = {
314
+ id: ActionName.heading6,
315
+ title: i18n.bind(null, 'heading6'),
316
+ icon: icons.h6,
317
+ hotkey: f.toView(A.Heading6),
318
+ exec: (e) => toH6(e.cm),
319
+ isActive: inactive,
320
+ isEnable: enable,
321
+ };
322
+ export const mBulletListItemData = {
323
+ id: ActionName.bulletList,
324
+ title: i18n.bind(null, 'ulist'),
325
+ icon: icons.bulletList,
326
+ exec: (e) => toBulletList(e.cm),
327
+ isActive: inactive,
328
+ isEnable: enable,
329
+ };
330
+ export const mOrderedListItemData = {
331
+ id: ActionName.orderedList,
332
+ title: i18n.bind(null, 'olist'),
333
+ icon: icons.orderedList,
334
+ exec: (e) => toOrderedList(e.cm),
335
+ isActive: inactive,
336
+ isEnable: enable,
337
+ };
338
+ export const mSinkListItemData = {
339
+ id: ActionName.sinkListItem,
340
+ title: i18n.bind(null, 'list__action_sink'),
341
+ icon: icons.sink,
342
+ exec: (e) => sinkListItem(e.cm),
449
343
  isActive: inactive,
450
344
  isEnable: enable,
451
345
  };
346
+ export const mLiftListItemData = {
347
+ id: ActionName.liftListItem,
348
+ title: i18n.bind(null, 'list__action_lift'),
349
+ icon: icons.lift,
350
+ exec: (e) => liftListItem(e.cm),
351
+ isActive: inactive,
352
+ isEnable: enable,
353
+ };
354
+ export const mHeadingListConfig = {
355
+ icon: icons.headline,
356
+ withArrow: true,
357
+ title: i18n.bind(null, 'heading'),
358
+ data: [
359
+ mHeading1ItemData,
360
+ mHeading2ItemData,
361
+ mHeading3ItemData,
362
+ mHeading4ItemData,
363
+ mHeading5ItemData,
364
+ mHeading6ItemData,
365
+ ],
366
+ };
367
+ export const mListsListConfig = {
368
+ icon: icons.bulletList,
369
+ withArrow: true,
370
+ title: i18n.bind(null, 'list'),
371
+ data: [mBulletListItemData, mOrderedListItemData],
372
+ };
373
+ export const mListMoveListConfig = {
374
+ icon: icons.lift,
375
+ withArrow: true,
376
+ title: 'Move list item',
377
+ data: [mSinkListItemData, mLiftListItemData],
378
+ };
379
+ export const mCodeListConfig = {
380
+ icon: icons.code,
381
+ withArrow: true,
382
+ title: i18n.bind(null, 'code'),
383
+ data: [mCodeItemData, mCodeblockItemData],
384
+ };
385
+ export const mMathListConfig = {
386
+ icon: icons.functionInline,
387
+ withArrow: true,
388
+ title: i18n.bind(null, 'math'),
389
+ data: [mMathInlineItemData, mMathBlockItemData],
390
+ };
452
391
  export const mHiddenData = [mHruleItemData, mEmojiItemData, mTabsItemData];
392
+ export const mHistoryGroupConfig = [mUndoItemData, mRedoItemData];
393
+ export const mBiusGroupConfig = [
394
+ mBoldItemData,
395
+ mItalicItemData,
396
+ mUnderlineItemData,
397
+ mStrikethroughItemData,
398
+ mMonospaceItemData,
399
+ mMarkedItemData,
400
+ ];
401
+ export const mToolbarConfig = [
402
+ [mUndoItemData, mRedoItemData],
403
+ mBiusGroupConfig,
404
+ [
405
+ {
406
+ id: 'heading',
407
+ type: ToolbarDataType.ListButton,
408
+ icon: icons.headline,
409
+ withArrow: true,
410
+ title: i18n.bind(null, 'heading'),
411
+ data: [
412
+ mHeading1ItemData,
413
+ mHeading2ItemData,
414
+ mHeading3ItemData,
415
+ mHeading4ItemData,
416
+ mHeading5ItemData,
417
+ mHeading6ItemData,
418
+ ],
419
+ },
420
+ {
421
+ id: 'list',
422
+ type: ToolbarDataType.ListButton,
423
+ icon: icons.bulletList,
424
+ withArrow: true,
425
+ title: i18n.bind(null, 'list'),
426
+ data: [mBulletListItemData, mOrderedListItemData],
427
+ },
428
+ {
429
+ id: 'colorify',
430
+ type: ToolbarDataType.ReactComponent,
431
+ component: MToolbarColors,
432
+ width: 42,
433
+ },
434
+ mLinkButton,
435
+ mNoteButton,
436
+ mCutButton,
437
+ mQuoteButton,
438
+ {
439
+ id: 'code',
440
+ type: ToolbarDataType.ListButton,
441
+ icon: icons.code,
442
+ withArrow: true,
443
+ title: i18n.bind(null, 'code'),
444
+ data: [mCodeItemData, mCodeblockItemData],
445
+ },
446
+ ],
447
+ [mImagePopupData, mFilePopupData, mTableButton, mCheckboxButton],
448
+ ];
453
449
  export const mToolbarConfigByPreset = {
454
450
  zero: [mHistoryGroupConfig],
455
451
  commonmark: [
456
- mHistoryGroupConfig,
452
+ [mUndoItemData, mRedoItemData],
457
453
  [mBoldItemData, mItalicItemData],
458
454
  [
459
- Object.assign({ id: 'heading', type: ToolbarDataType.ListButton }, mHeadingListConfig),
460
- Object.assign({ id: 'list', type: ToolbarDataType.ListButton }, mListsListConfig),
455
+ {
456
+ id: 'heading',
457
+ type: ToolbarDataType.ListButton,
458
+ icon: icons.headline,
459
+ withArrow: true,
460
+ title: i18n.bind(null, 'heading'),
461
+ data: [
462
+ mHeading1ItemData,
463
+ mHeading2ItemData,
464
+ mHeading3ItemData,
465
+ mHeading4ItemData,
466
+ mHeading5ItemData,
467
+ mHeading6ItemData,
468
+ ],
469
+ },
470
+ {
471
+ id: 'list',
472
+ type: ToolbarDataType.ListButton,
473
+ icon: icons.bulletList,
474
+ withArrow: true,
475
+ title: i18n.bind(null, 'list'),
476
+ data: [mBulletListItemData, mOrderedListItemData],
477
+ },
461
478
  mLinkButton,
462
479
  mQuoteButton,
463
- Object.assign({ id: 'code', type: ToolbarDataType.ListButton }, mCodeListConfig),
480
+ {
481
+ id: 'code',
482
+ type: ToolbarDataType.ListButton,
483
+ icon: icons.code,
484
+ withArrow: true,
485
+ title: i18n.bind(null, 'code'),
486
+ data: [mCodeItemData, mCodeblockItemData],
487
+ },
464
488
  ],
465
489
  ],
466
490
  default: [
467
- mHistoryGroupConfig,
491
+ [mUndoItemData, mRedoItemData],
468
492
  [mBoldItemData, mItalicItemData, mStrikethroughItemData],
469
493
  [
470
- Object.assign({ id: 'heading', type: ToolbarDataType.ListButton }, mHeadingListConfig),
471
- Object.assign({ id: 'list', type: ToolbarDataType.ListButton }, mListsListConfig),
494
+ {
495
+ id: 'heading',
496
+ type: ToolbarDataType.ListButton,
497
+ icon: icons.headline,
498
+ withArrow: true,
499
+ title: i18n.bind(null, 'heading'),
500
+ data: [
501
+ mHeading1ItemData,
502
+ mHeading2ItemData,
503
+ mHeading3ItemData,
504
+ mHeading4ItemData,
505
+ mHeading5ItemData,
506
+ mHeading6ItemData,
507
+ ],
508
+ },
509
+ {
510
+ id: 'list',
511
+ type: ToolbarDataType.ListButton,
512
+ icon: icons.bulletList,
513
+ withArrow: true,
514
+ title: i18n.bind(null, 'list'),
515
+ data: [mBulletListItemData, mOrderedListItemData],
516
+ },
472
517
  mLinkButton,
473
518
  mQuoteButton,
474
- Object.assign({ id: 'code', type: ToolbarDataType.ListButton }, mCodeListConfig),
519
+ {
520
+ id: 'code',
521
+ type: ToolbarDataType.ListButton,
522
+ icon: icons.code,
523
+ withArrow: true,
524
+ title: i18n.bind(null, 'code'),
525
+ data: [mCodeItemData, mCodeblockItemData],
526
+ },
475
527
  ],
476
528
  ],
477
529
  yfm: [
478
- mHistoryGroupConfig,
530
+ [mUndoItemData, mRedoItemData],
479
531
  [
480
532
  mBoldItemData,
481
533
  mItalicItemData,
@@ -484,13 +536,41 @@ export const mToolbarConfigByPreset = {
484
536
  mMonospaceItemData,
485
537
  ],
486
538
  [
487
- Object.assign({ id: 'heading', type: ToolbarDataType.ListButton }, mHeadingListConfig),
488
- Object.assign({ id: 'list', type: ToolbarDataType.ListButton }, mListsListConfig),
539
+ {
540
+ id: 'heading',
541
+ type: ToolbarDataType.ListButton,
542
+ icon: icons.headline,
543
+ withArrow: true,
544
+ title: i18n.bind(null, 'heading'),
545
+ data: [
546
+ mHeading1ItemData,
547
+ mHeading2ItemData,
548
+ mHeading3ItemData,
549
+ mHeading4ItemData,
550
+ mHeading5ItemData,
551
+ mHeading6ItemData,
552
+ ],
553
+ },
554
+ {
555
+ id: 'list',
556
+ type: ToolbarDataType.ListButton,
557
+ icon: icons.bulletList,
558
+ withArrow: true,
559
+ title: i18n.bind(null, 'list'),
560
+ data: [mBulletListItemData, mOrderedListItemData],
561
+ },
489
562
  mLinkButton,
490
563
  mNoteButton,
491
564
  mCutButton,
492
565
  mQuoteButton,
493
- Object.assign({ id: 'code', type: ToolbarDataType.ListButton }, mCodeListConfig),
566
+ {
567
+ id: 'code',
568
+ type: ToolbarDataType.ListButton,
569
+ icon: icons.code,
570
+ withArrow: true,
571
+ title: i18n.bind(null, 'code'),
572
+ data: [mCodeItemData, mCodeblockItemData],
573
+ },
494
574
  ],
495
575
  [mImagePopupData, mFilePopupData, mTableButton, mCheckboxButton],
496
576
  ],
@@ -499,24 +579,42 @@ export const mToolbarConfigByPreset = {
499
579
  export const mHiddenDataByPreset = {
500
580
  zero: [],
501
581
  commonmark: [
502
- ...mHeadingListConfig.data,
503
- ...mListsListConfig.data,
582
+ mHeading1ItemData,
583
+ mHeading2ItemData,
584
+ mHeading3ItemData,
585
+ mHeading4ItemData,
586
+ mHeading5ItemData,
587
+ mHeading6ItemData,
588
+ mBulletListItemData,
589
+ mOrderedListItemData,
504
590
  mLinkButton,
505
591
  mQuoteButton,
506
592
  mCodeblockItemData,
507
593
  mHruleItemData,
508
594
  ],
509
595
  default: [
510
- ...mHeadingListConfig.data,
511
- ...mListsListConfig.data,
596
+ mHeading1ItemData,
597
+ mHeading2ItemData,
598
+ mHeading3ItemData,
599
+ mHeading4ItemData,
600
+ mHeading5ItemData,
601
+ mHeading6ItemData,
602
+ mBulletListItemData,
603
+ mOrderedListItemData,
512
604
  mLinkButton,
513
605
  mQuoteButton,
514
606
  mCodeblockItemData,
515
607
  mHruleItemData,
516
608
  ],
517
609
  yfm: [
518
- ...mHeadingListConfig.data,
519
- ...mListsListConfig.data,
610
+ mHeading1ItemData,
611
+ mHeading2ItemData,
612
+ mHeading3ItemData,
613
+ mHeading4ItemData,
614
+ mHeading5ItemData,
615
+ mHeading6ItemData,
616
+ mBulletListItemData,
617
+ mOrderedListItemData,
520
618
  mLinkButton,
521
619
  mQuoteButton,
522
620
  mNoteButton,
@@ -530,8 +628,14 @@ export const mHiddenDataByPreset = {
530
628
  mTabsItemData,
531
629
  ],
532
630
  full: [
533
- ...mHeadingListConfig.data,
534
- ...mListsListConfig.data,
631
+ mHeading1ItemData,
632
+ mHeading2ItemData,
633
+ mHeading3ItemData,
634
+ mHeading4ItemData,
635
+ mHeading5ItemData,
636
+ mHeading6ItemData,
637
+ mBulletListItemData,
638
+ mOrderedListItemData,
535
639
  mLinkButton,
536
640
  mQuoteButton,
537
641
  mNoteButton,