decap-cms-widget-markdown 2.16.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (215) hide show
  1. package/CHANGELOG.md +820 -0
  2. package/LICENSE +22 -0
  3. package/README.md +9 -0
  4. package/dist/decap-cms-widget-markdown.js +9 -0
  5. package/dist/decap-cms-widget-markdown.js.LICENSE.txt +37 -0
  6. package/dist/decap-cms-widget-markdown.js.map +1 -0
  7. package/dist/esm/MarkdownControl/RawEditor.js +106 -0
  8. package/dist/esm/MarkdownControl/Toolbar.js +216 -0
  9. package/dist/esm/MarkdownControl/ToolbarButton.js +43 -0
  10. package/dist/esm/MarkdownControl/VisualEditor.js +268 -0
  11. package/dist/esm/MarkdownControl/components/Shortcode.js +78 -0
  12. package/dist/esm/MarkdownControl/components/VoidBlock.js +55 -0
  13. package/dist/esm/MarkdownControl/index.js +129 -0
  14. package/dist/esm/MarkdownControl/plugins/BreakToDefaultBlock.js +34 -0
  15. package/dist/esm/MarkdownControl/plugins/CloseBlock.js +36 -0
  16. package/dist/esm/MarkdownControl/plugins/CommandsAndQueries.js +188 -0
  17. package/dist/esm/MarkdownControl/plugins/ForceInsert.js +49 -0
  18. package/dist/esm/MarkdownControl/plugins/Hotkey.js +35 -0
  19. package/dist/esm/MarkdownControl/plugins/LineBreak.js +21 -0
  20. package/dist/esm/MarkdownControl/plugins/Link.js +56 -0
  21. package/dist/esm/MarkdownControl/plugins/blocks/defaultEmptyBlock.js +16 -0
  22. package/dist/esm/MarkdownControl/plugins/blocks/events/keyDown.js +47 -0
  23. package/dist/esm/MarkdownControl/plugins/blocks/events/keyDownBackspace.js +26 -0
  24. package/dist/esm/MarkdownControl/plugins/blocks/events/keyDownEnter.js +28 -0
  25. package/dist/esm/MarkdownControl/plugins/blocks/events/toggleBlock.js +46 -0
  26. package/dist/esm/MarkdownControl/plugins/blocks/locations/areCurrentAndPreviousBlocksOfType.js +20 -0
  27. package/dist/esm/MarkdownControl/plugins/blocks/locations/getListTypeAtCursor.js +16 -0
  28. package/dist/esm/MarkdownControl/plugins/blocks/locations/isCursorAtEndOfParagraph.js +19 -0
  29. package/dist/esm/MarkdownControl/plugins/blocks/locations/isCursorAtStartOfBlockType.js +19 -0
  30. package/dist/esm/MarkdownControl/plugins/blocks/locations/isCursorAtStartOfNonEmptyHeading.js +20 -0
  31. package/dist/esm/MarkdownControl/plugins/blocks/locations/isCursorInBlockType.js +20 -0
  32. package/dist/esm/MarkdownControl/plugins/blocks/locations/isCursorInNonDefaultBlock.js +20 -0
  33. package/dist/esm/MarkdownControl/plugins/blocks/transforms/splitIntoParagraph.js +23 -0
  34. package/dist/esm/MarkdownControl/plugins/blocks/transforms/unwrapIfCursorAtStart.js +36 -0
  35. package/dist/esm/MarkdownControl/plugins/blocks/transforms/wrapListItemsInBlock.js +27 -0
  36. package/dist/esm/MarkdownControl/plugins/blocks/withBlocks.js +19 -0
  37. package/dist/esm/MarkdownControl/plugins/inlines/events/keyDown.js +39 -0
  38. package/dist/esm/MarkdownControl/plugins/inlines/events/keyDownShiftEnter.js +27 -0
  39. package/dist/esm/MarkdownControl/plugins/inlines/events/toggleLink.js +24 -0
  40. package/dist/esm/MarkdownControl/plugins/inlines/events/toggleMark.js +18 -0
  41. package/dist/esm/MarkdownControl/plugins/inlines/locations/isMarkActive.js +17 -0
  42. package/dist/esm/MarkdownControl/plugins/inlines/selectors/getActiveLink.js +15 -0
  43. package/dist/esm/MarkdownControl/plugins/inlines/transforms/unwrapLink.js +14 -0
  44. package/dist/esm/MarkdownControl/plugins/inlines/transforms/wrapLink.js +45 -0
  45. package/dist/esm/MarkdownControl/plugins/inlines/withInlines.js +23 -0
  46. package/dist/esm/MarkdownControl/plugins/lists/events/keyDown.js +38 -0
  47. package/dist/esm/MarkdownControl/plugins/lists/events/keyDownBackspace.js +29 -0
  48. package/dist/esm/MarkdownControl/plugins/lists/events/keyDownEnter.js +44 -0
  49. package/dist/esm/MarkdownControl/plugins/lists/events/keyDownShiftTab.js +32 -0
  50. package/dist/esm/MarkdownControl/plugins/lists/events/keyDownTab.js +57 -0
  51. package/dist/esm/MarkdownControl/plugins/lists/events/toggleListType.js +29 -0
  52. package/dist/esm/MarkdownControl/plugins/lists/locations/isCursorAtListItemStart.js +18 -0
  53. package/dist/esm/MarkdownControl/plugins/lists/locations/isCursorAtNoninitialParagraphStart.js +17 -0
  54. package/dist/esm/MarkdownControl/plugins/lists/locations/isCursorInItemContainingNestedList.js +14 -0
  55. package/dist/esm/MarkdownControl/plugins/lists/locations/isCursorInListItem.js +20 -0
  56. package/dist/esm/MarkdownControl/plugins/lists/locations/isSelectionWithinNoninitialListItem.js +18 -0
  57. package/dist/esm/MarkdownControl/plugins/lists/selectors/getListContainedInListItem.js +18 -0
  58. package/dist/esm/MarkdownControl/plugins/lists/selectors/getLowestAncestorList.js +15 -0
  59. package/dist/esm/MarkdownControl/plugins/lists/selectors/getLowestAncestorQuote.js +15 -0
  60. package/dist/esm/MarkdownControl/plugins/lists/transforms/changeListType.js +24 -0
  61. package/dist/esm/MarkdownControl/plugins/lists/transforms/convertParagraphToListItem.js +27 -0
  62. package/dist/esm/MarkdownControl/plugins/lists/transforms/liftFirstMatchedParent.js +20 -0
  63. package/dist/esm/MarkdownControl/plugins/lists/transforms/liftListItem.js +37 -0
  64. package/dist/esm/MarkdownControl/plugins/lists/transforms/mergeWithPreviousListItem.js +19 -0
  65. package/dist/esm/MarkdownControl/plugins/lists/transforms/moveListToListItem.js +18 -0
  66. package/dist/esm/MarkdownControl/plugins/lists/transforms/splitListItem.js +37 -0
  67. package/dist/esm/MarkdownControl/plugins/lists/transforms/splitToNestedList.js +37 -0
  68. package/dist/esm/MarkdownControl/plugins/lists/transforms/unwrapFirstMatchedParent.js +14 -0
  69. package/dist/esm/MarkdownControl/plugins/lists/transforms/unwrapSelectionFromList.js +25 -0
  70. package/dist/esm/MarkdownControl/plugins/lists/transforms/wrapFirstMatchedParent.js +14 -0
  71. package/dist/esm/MarkdownControl/plugins/lists/transforms/wrapSelectionInList.js +27 -0
  72. package/dist/esm/MarkdownControl/plugins/lists/withLists.js +67 -0
  73. package/dist/esm/MarkdownControl/plugins/matchers/lowestMatchedAncestor.js +13 -0
  74. package/dist/esm/MarkdownControl/plugins/matchers/matchLink.js +14 -0
  75. package/dist/esm/MarkdownControl/plugins/matchers/matchedAncestors.js +15 -0
  76. package/dist/esm/MarkdownControl/plugins/shortcodes/insertShortcode.js +35 -0
  77. package/dist/esm/MarkdownControl/plugins/shortcodes/locations/isCursorInEmptyParagraph.js +20 -0
  78. package/dist/esm/MarkdownControl/plugins/shortcodes/withShortcodes.js +30 -0
  79. package/dist/esm/MarkdownControl/plugins/util.js +18 -0
  80. package/dist/esm/MarkdownControl/renderers.js +326 -0
  81. package/dist/esm/MarkdownPreview.js +47 -0
  82. package/dist/esm/index.js +31 -0
  83. package/dist/esm/regexHelper.js +151 -0
  84. package/dist/esm/schema.js +35 -0
  85. package/dist/esm/serializers/index.js +233 -0
  86. package/dist/esm/serializers/rehypePaperEmoji.js +24 -0
  87. package/dist/esm/serializers/remarkAllowHtmlEntities.js +55 -0
  88. package/dist/esm/serializers/remarkAssertParents.js +89 -0
  89. package/dist/esm/serializers/remarkEscapeMarkdownEntities.js +271 -0
  90. package/dist/esm/serializers/remarkImagesToText.js +41 -0
  91. package/dist/esm/serializers/remarkPaddedLinks.js +127 -0
  92. package/dist/esm/serializers/remarkRehypeShortcodes.js +93 -0
  93. package/dist/esm/serializers/remarkShortcodes.js +123 -0
  94. package/dist/esm/serializers/remarkSlate.js +518 -0
  95. package/dist/esm/serializers/remarkSquashReferences.js +88 -0
  96. package/dist/esm/serializers/remarkStripTrailingBreaks.js +61 -0
  97. package/dist/esm/serializers/remarkWrapHtml.js +24 -0
  98. package/dist/esm/serializers/slateRemark.js +512 -0
  99. package/dist/esm/styles.js +18 -0
  100. package/dist/esm/types.js +10 -0
  101. package/package.json +64 -0
  102. package/src/MarkdownControl/RawEditor.js +100 -0
  103. package/src/MarkdownControl/Toolbar.js +278 -0
  104. package/src/MarkdownControl/ToolbarButton.js +48 -0
  105. package/src/MarkdownControl/VisualEditor.js +293 -0
  106. package/src/MarkdownControl/__tests__/VisualEditor.spec.js +56 -0
  107. package/src/MarkdownControl/__tests__/__snapshots__/parser.spec.js.snap +543 -0
  108. package/src/MarkdownControl/__tests__/parser.spec.js +668 -0
  109. package/src/MarkdownControl/components/Shortcode.js +74 -0
  110. package/src/MarkdownControl/components/VoidBlock.js +58 -0
  111. package/src/MarkdownControl/index.js +125 -0
  112. package/src/MarkdownControl/plugins/BreakToDefaultBlock.js +23 -0
  113. package/src/MarkdownControl/plugins/CloseBlock.js +25 -0
  114. package/src/MarkdownControl/plugins/CommandsAndQueries.js +156 -0
  115. package/src/MarkdownControl/plugins/ForceInsert.js +38 -0
  116. package/src/MarkdownControl/plugins/Hotkey.js +29 -0
  117. package/src/MarkdownControl/plugins/LineBreak.js +15 -0
  118. package/src/MarkdownControl/plugins/Link.js +40 -0
  119. package/src/MarkdownControl/plugins/blocks/defaultEmptyBlock.js +8 -0
  120. package/src/MarkdownControl/plugins/blocks/events/keyDown.js +47 -0
  121. package/src/MarkdownControl/plugins/blocks/events/keyDownBackspace.js +27 -0
  122. package/src/MarkdownControl/plugins/blocks/events/keyDownEnter.js +26 -0
  123. package/src/MarkdownControl/plugins/blocks/events/toggleBlock.js +39 -0
  124. package/src/MarkdownControl/plugins/blocks/locations/areCurrentAndPreviousBlocksOfType.js +15 -0
  125. package/src/MarkdownControl/plugins/blocks/locations/getListTypeAtCursor.js +11 -0
  126. package/src/MarkdownControl/plugins/blocks/locations/isCursorAtEndOfParagraph.js +14 -0
  127. package/src/MarkdownControl/plugins/blocks/locations/isCursorAtStartOfBlockType.js +14 -0
  128. package/src/MarkdownControl/plugins/blocks/locations/isCursorAtStartOfNonEmptyHeading.js +22 -0
  129. package/src/MarkdownControl/plugins/blocks/locations/isCursorInBlockType.js +27 -0
  130. package/src/MarkdownControl/plugins/blocks/locations/isCursorInNonDefaultBlock.js +17 -0
  131. package/src/MarkdownControl/plugins/blocks/transforms/splitIntoParagraph.js +13 -0
  132. package/src/MarkdownControl/plugins/blocks/transforms/unwrapIfCursorAtStart.js +30 -0
  133. package/src/MarkdownControl/plugins/blocks/transforms/wrapListItemsInBlock.js +11 -0
  134. package/src/MarkdownControl/plugins/blocks/withBlocks.js +15 -0
  135. package/src/MarkdownControl/plugins/inlines/events/keyDown.js +38 -0
  136. package/src/MarkdownControl/plugins/inlines/events/keyDownShiftEnter.js +28 -0
  137. package/src/MarkdownControl/plugins/inlines/events/toggleLink.js +17 -0
  138. package/src/MarkdownControl/plugins/inlines/events/toggleMark.js +13 -0
  139. package/src/MarkdownControl/plugins/inlines/locations/isMarkActive.js +11 -0
  140. package/src/MarkdownControl/plugins/inlines/selectors/getActiveLink.js +10 -0
  141. package/src/MarkdownControl/plugins/inlines/transforms/unwrapLink.js +9 -0
  142. package/src/MarkdownControl/plugins/inlines/transforms/wrapLink.js +30 -0
  143. package/src/MarkdownControl/plugins/inlines/withInlines.js +20 -0
  144. package/src/MarkdownControl/plugins/lists/events/keyDown.js +34 -0
  145. package/src/MarkdownControl/plugins/lists/events/keyDownBackspace.js +31 -0
  146. package/src/MarkdownControl/plugins/lists/events/keyDownEnter.js +39 -0
  147. package/src/MarkdownControl/plugins/lists/events/keyDownShiftTab.js +27 -0
  148. package/src/MarkdownControl/plugins/lists/events/keyDownTab.js +55 -0
  149. package/src/MarkdownControl/plugins/lists/events/toggleListType.js +23 -0
  150. package/src/MarkdownControl/plugins/lists/locations/isCursorAtListItemStart.js +13 -0
  151. package/src/MarkdownControl/plugins/lists/locations/isCursorAtNoninitialParagraphStart.js +11 -0
  152. package/src/MarkdownControl/plugins/lists/locations/isCursorInItemContainingNestedList.js +9 -0
  153. package/src/MarkdownControl/plugins/lists/locations/isCursorInListItem.js +21 -0
  154. package/src/MarkdownControl/plugins/lists/locations/isSelectionWithinNoninitialListItem.js +14 -0
  155. package/src/MarkdownControl/plugins/lists/selectors/getListContainedInListItem.js +12 -0
  156. package/src/MarkdownControl/plugins/lists/selectors/getLowestAncestorList.js +11 -0
  157. package/src/MarkdownControl/plugins/lists/selectors/getLowestAncestorQuote.js +11 -0
  158. package/src/MarkdownControl/plugins/lists/transforms/changeListType.js +16 -0
  159. package/src/MarkdownControl/plugins/lists/transforms/convertParagraphToListItem.js +19 -0
  160. package/src/MarkdownControl/plugins/lists/transforms/liftFirstMatchedParent.js +11 -0
  161. package/src/MarkdownControl/plugins/lists/transforms/liftListItem.js +30 -0
  162. package/src/MarkdownControl/plugins/lists/transforms/mergeWithPreviousListItem.js +13 -0
  163. package/src/MarkdownControl/plugins/lists/transforms/moveListToListItem.js +13 -0
  164. package/src/MarkdownControl/plugins/lists/transforms/splitListItem.js +33 -0
  165. package/src/MarkdownControl/plugins/lists/transforms/splitToNestedList.js +33 -0
  166. package/src/MarkdownControl/plugins/lists/transforms/unwrapFirstMatchedParent.js +9 -0
  167. package/src/MarkdownControl/plugins/lists/transforms/unwrapSelectionFromList.js +14 -0
  168. package/src/MarkdownControl/plugins/lists/transforms/wrapFirstMatchedParent.js +9 -0
  169. package/src/MarkdownControl/plugins/lists/transforms/wrapSelectionInList.js +17 -0
  170. package/src/MarkdownControl/plugins/lists/withLists.js +66 -0
  171. package/src/MarkdownControl/plugins/matchers/lowestMatchedAncestor.js +6 -0
  172. package/src/MarkdownControl/plugins/matchers/matchLink.js +9 -0
  173. package/src/MarkdownControl/plugins/matchers/matchedAncestors.js +18 -0
  174. package/src/MarkdownControl/plugins/shortcodes/insertShortcode.js +34 -0
  175. package/src/MarkdownControl/plugins/shortcodes/locations/isCursorInEmptyParagraph.js +17 -0
  176. package/src/MarkdownControl/plugins/shortcodes/withShortcodes.js +26 -0
  177. package/src/MarkdownControl/plugins/util.js +11 -0
  178. package/src/MarkdownControl/renderers.js +352 -0
  179. package/src/MarkdownPreview.js +27 -0
  180. package/src/__tests__/__snapshots__/renderer.spec.js.snap +239 -0
  181. package/src/__tests__/renderer.spec.js +261 -0
  182. package/src/index.js +16 -0
  183. package/src/regexHelper.js +137 -0
  184. package/src/schema.js +35 -0
  185. package/src/serializers/__tests__/__fixtures__/commonmarkExpected.json +625 -0
  186. package/src/serializers/__tests__/__fixtures__/duplicate_marks_github_issue_3280.md +1 -0
  187. package/src/serializers/__tests__/commonmark.spec.js +110 -0
  188. package/src/serializers/__tests__/index.spec.js +52 -0
  189. package/src/serializers/__tests__/remarkAllowHtmlEntities.spec.js +25 -0
  190. package/src/serializers/__tests__/remarkAssertParents.spec.js +171 -0
  191. package/src/serializers/__tests__/remarkEscapeMarkdownEntities.spec.js +84 -0
  192. package/src/serializers/__tests__/remarkPaddedLinks.spec.js +43 -0
  193. package/src/serializers/__tests__/remarkPlugins.spec.js +299 -0
  194. package/src/serializers/__tests__/remarkShortcodes.spec.js +106 -0
  195. package/src/serializers/__tests__/remarkSlate.spec.js +67 -0
  196. package/src/serializers/__tests__/remarkStripTrailingBreaks.spec.js +23 -0
  197. package/src/serializers/__tests__/slate.spec.js +300 -0
  198. package/src/serializers/index.js +226 -0
  199. package/src/serializers/rehypePaperEmoji.js +16 -0
  200. package/src/serializers/remarkAllowHtmlEntities.js +58 -0
  201. package/src/serializers/remarkAssertParents.js +83 -0
  202. package/src/serializers/remarkEscapeMarkdownEntities.js +269 -0
  203. package/src/serializers/remarkImagesToText.js +26 -0
  204. package/src/serializers/remarkPaddedLinks.js +120 -0
  205. package/src/serializers/remarkRehypeShortcodes.js +67 -0
  206. package/src/serializers/remarkShortcodes.js +106 -0
  207. package/src/serializers/remarkSlate.js +425 -0
  208. package/src/serializers/remarkSquashReferences.js +73 -0
  209. package/src/serializers/remarkStripTrailingBreaks.js +56 -0
  210. package/src/serializers/remarkWrapHtml.js +20 -0
  211. package/src/serializers/slateRemark.js +468 -0
  212. package/src/styles.js +13 -0
  213. package/src/types.js +3 -0
  214. package/test-helpers/h.js +32 -0
  215. package/webpack.config.js +3 -0
@@ -0,0 +1,188 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _castArray2 = _interopRequireDefault(require("lodash/castArray"));
8
+ var _tail2 = _interopRequireDefault(require("lodash/tail"));
9
+ var _isArray2 = _interopRequireDefault(require("lodash/isArray"));
10
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
+ function CommandsAndQueries({
12
+ defaultType
13
+ }) {
14
+ return {
15
+ queries: {
16
+ atStartOf(editor, node) {
17
+ const {
18
+ selection
19
+ } = editor.value;
20
+ return selection.isCollapsed && selection.start.isAtStartOfNode(node);
21
+ },
22
+ getAncestor(editor, firstKey, lastKey) {
23
+ if (firstKey === lastKey) {
24
+ return editor.value.document.getParent(firstKey);
25
+ }
26
+ return editor.value.document.getCommonAncestor(firstKey, lastKey);
27
+ },
28
+ getOffset(editor, node) {
29
+ const parent = editor.value.document.getParent(node.key);
30
+ return parent.nodes.indexOf(node);
31
+ },
32
+ getSelectedChildren(editor, node) {
33
+ return node.nodes.filter(child => editor.isSelected(child));
34
+ },
35
+ getCommonAncestor(editor) {
36
+ const {
37
+ startBlock,
38
+ endBlock,
39
+ document: doc
40
+ } = editor.value;
41
+ return doc.getCommonAncestor(startBlock.key, endBlock.key);
42
+ },
43
+ getClosestType(editor, node, type) {
44
+ const types = (0, _castArray2.default)(type);
45
+ return editor.value.document.getClosest(node.key, n => types.includes(n.type));
46
+ },
47
+ getBlockContainer(editor, node) {
48
+ const targetTypes = ['bulleted-list', 'numbered-list', 'list-item', 'quote', 'table-cell'];
49
+ const {
50
+ startBlock,
51
+ selection
52
+ } = editor.value;
53
+ const target = node ? editor.value.document.getParent(node.key) : selection.isCollapsed && startBlock || editor.getCommonAncestor();
54
+ if (!target) {
55
+ return editor.value.document;
56
+ }
57
+ if (targetTypes.includes(target.type)) {
58
+ return target;
59
+ }
60
+ return editor.getBlockContainer(target);
61
+ },
62
+ isSelected(editor, nodes) {
63
+ return (0, _castArray2.default)(nodes).every(node => {
64
+ return editor.value.document.isInRange(node.key, editor.value.selection);
65
+ });
66
+ },
67
+ isFirstChild(editor, node) {
68
+ return editor.value.document.getParent(node.key).nodes.first().key === node.key;
69
+ },
70
+ areSiblings(editor, nodes) {
71
+ if (!(0, _isArray2.default)(nodes) || nodes.length < 2) {
72
+ return true;
73
+ }
74
+ const parent = editor.value.document.getParent(nodes[0].key);
75
+ return (0, _tail2.default)(nodes).every(node => {
76
+ return editor.value.document.getParent(node.key).key === parent.key;
77
+ });
78
+ },
79
+ everyBlock(editor, type) {
80
+ return editor.value.blocks.every(block => block.type === type);
81
+ },
82
+ hasMark(editor, type) {
83
+ return editor.value.activeMarks.some(mark => mark.type === type);
84
+ },
85
+ hasBlock(editor, type) {
86
+ return editor.value.blocks.some(node => node.type === type);
87
+ },
88
+ hasInline(editor, type) {
89
+ return editor.value.inlines.some(node => node.type === type);
90
+ },
91
+ hasQuote(editor, quoteLabel) {
92
+ const {
93
+ value
94
+ } = editor;
95
+ const {
96
+ document,
97
+ blocks
98
+ } = value;
99
+ return blocks.some(node => {
100
+ const {
101
+ key: descendantNodeKey
102
+ } = node;
103
+ /* When focusing a quote block, the actual block that gets the focus is the paragraph block whose parent is a `quote` block.
104
+ Hence, we need to get its parent and check if its type is `quote`. This parent will always be defined because every block in the editor
105
+ has a Document object as parent by default.
106
+ */
107
+ const parent = document.getParent(descendantNodeKey);
108
+ return parent.type === quoteLabel;
109
+ });
110
+ },
111
+ hasListItems(editor, listType) {
112
+ const {
113
+ value
114
+ } = editor;
115
+ const {
116
+ document,
117
+ blocks
118
+ } = value;
119
+ return blocks.some(node => {
120
+ const {
121
+ key: lowestNodeKey
122
+ } = node;
123
+ /* A list block has the following structure:
124
+ <ol>
125
+ <li>
126
+ <p>Coffee</p>
127
+ </li>
128
+ <li>
129
+ <p>Tea</p>
130
+ </li>
131
+ </ol>
132
+ */
133
+ const parent = document.getParent(lowestNodeKey);
134
+ const grandparent = document.getParent(parent.key);
135
+ return parent.type === 'list-item' && (grandparent === null || grandparent === void 0 ? void 0 : grandparent.type) === listType;
136
+ });
137
+ }
138
+ },
139
+ commands: {
140
+ toggleBlock(editor, type) {
141
+ switch (type) {
142
+ case 'heading-one':
143
+ case 'heading-two':
144
+ case 'heading-three':
145
+ case 'heading-four':
146
+ case 'heading-five':
147
+ case 'heading-six':
148
+ return editor.setBlocks(editor.everyBlock(type) ? defaultType : type);
149
+ case 'quote':
150
+ return editor.toggleQuoteBlock();
151
+ case 'numbered-list':
152
+ case 'bulleted-list':
153
+ {
154
+ return editor.toggleList(type);
155
+ }
156
+ }
157
+ },
158
+ unwrapBlockChildren(editor, block) {
159
+ if (!block || block.object !== 'block') {
160
+ throw Error(`Expected block but received ${block}.`);
161
+ }
162
+ const index = editor.value.document.getPath(block.key).last();
163
+ const parent = editor.value.document.getParent(block.key);
164
+ editor.withoutNormalizing(() => {
165
+ block.nodes.forEach((node, idx) => {
166
+ editor.moveNodeByKey(node.key, parent.key, index + idx);
167
+ });
168
+ editor.removeNodeByKey(block.key);
169
+ });
170
+ },
171
+ unwrapNodeToDepth(editor, node, depth) {
172
+ let currentDepth = 0;
173
+ editor.withoutNormalizing(() => {
174
+ while (currentDepth < depth) {
175
+ editor.unwrapNodeByKey(node.key);
176
+ currentDepth += 1;
177
+ }
178
+ });
179
+ },
180
+ unwrapNodeFromAncestor(editor, node, ancestor) {
181
+ const depth = ancestor.getDepth(node.key);
182
+ editor.unwrapNodeToDepth(node, depth);
183
+ }
184
+ }
185
+ };
186
+ }
187
+ var _default = CommandsAndQueries;
188
+ exports.default = _default;
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ function ForceInsert({
8
+ defaultType
9
+ }) {
10
+ return {
11
+ queries: {
12
+ canInsertBeforeNode(editor, node) {
13
+ if (!editor.isVoid(node)) {
14
+ return true;
15
+ }
16
+ return !!editor.value.document.getPreviousSibling(node.key);
17
+ },
18
+ canInsertAfterNode(editor, node) {
19
+ if (!editor.isVoid(node)) {
20
+ return true;
21
+ }
22
+ const nextSibling = editor.value.document.getNextSibling(node.key);
23
+ return nextSibling && !editor.isVoid(nextSibling);
24
+ }
25
+ },
26
+ commands: {
27
+ forceInsertBeforeNode(editor, node) {
28
+ const block = {
29
+ type: defaultType,
30
+ object: 'block'
31
+ };
32
+ const parent = editor.value.document.getParent(node.key);
33
+ return editor.insertNodeByKey(parent.key, 0, block).moveToStartOfNode(parent).focus();
34
+ },
35
+ forceInsertAfterNode(editor, node) {
36
+ return editor.moveToEndOfNode(node).insertBlock(defaultType).focus();
37
+ },
38
+ moveToEndOfDocument(editor) {
39
+ const lastBlock = editor.value.document.nodes.last();
40
+ if (editor.isVoid(lastBlock)) {
41
+ editor.insertBlock(defaultType);
42
+ }
43
+ return editor.moveToEndOfNode(lastBlock).focus();
44
+ }
45
+ }
46
+ };
47
+ }
48
+ var _default = ForceInsert;
49
+ exports.default = _default;
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = exports.HOT_KEY_MAP = void 0;
7
+ var _isHotkey = _interopRequireDefault(require("is-hotkey"));
8
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
9
+ const HOT_KEY_MAP = {
10
+ bold: 'mod+b',
11
+ code: 'mod+shift+c',
12
+ italic: 'mod+i',
13
+ strikethrough: 'mod+shift+s',
14
+ 'heading-one': 'mod+1',
15
+ 'heading-two': 'mod+2',
16
+ 'heading-three': 'mod+3',
17
+ 'heading-four': 'mod+4',
18
+ 'heading-five': 'mod+5',
19
+ 'heading-six': 'mod+6',
20
+ link: 'mod+k'
21
+ };
22
+ exports.HOT_KEY_MAP = HOT_KEY_MAP;
23
+ function Hotkey(key, fn) {
24
+ return {
25
+ onKeyDown(event, editor, next) {
26
+ if (!(0, _isHotkey.default)(key, event)) {
27
+ return next();
28
+ }
29
+ event.preventDefault();
30
+ editor.command(fn);
31
+ }
32
+ };
33
+ }
34
+ var _default = Hotkey;
35
+ exports.default = _default;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _isHotkey = _interopRequireDefault(require("is-hotkey"));
8
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
9
+ function LineBreak() {
10
+ return {
11
+ onKeyDown(event, editor, next) {
12
+ const isShiftEnter = (0, _isHotkey.default)('shift+enter', event);
13
+ if (!isShiftEnter) {
14
+ return next();
15
+ }
16
+ return editor.insertInline('break').insertText('').moveToStartOfNextText();
17
+ }
18
+ };
19
+ }
20
+ var _default = LineBreak;
21
+ exports.default = _default;
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ function Link({
8
+ type
9
+ }) {
10
+ return {
11
+ commands: {
12
+ toggleLink(editor, getUrl) {
13
+ const selection = editor.value.selection;
14
+ const isCollapsed = selection && selection.isCollapsed;
15
+ if (editor.hasInline(type)) {
16
+ const inlines = editor.value.inlines.toJSON();
17
+ const link = inlines.find(item => item.type === type);
18
+ const url = getUrl(link.data.url);
19
+ if (url) {
20
+ // replace the old link
21
+ return editor.setInlines({
22
+ data: {
23
+ url
24
+ }
25
+ });
26
+ } else {
27
+ // remove url if it was removed by the user
28
+ return editor.unwrapInline(type);
29
+ }
30
+ } else {
31
+ const url = getUrl();
32
+ if (!url) {
33
+ return;
34
+ }
35
+ return isCollapsed ? editor.insertInline({
36
+ type,
37
+ data: {
38
+ url
39
+ },
40
+ nodes: [{
41
+ object: 'text',
42
+ text: url
43
+ }]
44
+ }) : editor.wrapInline({
45
+ type,
46
+ data: {
47
+ url
48
+ }
49
+ }).moveToEnd();
50
+ }
51
+ }
52
+ }
53
+ };
54
+ }
55
+ var _default = Link;
56
+ exports.default = _default;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ function defaultEmptyBlock(text = '') {
8
+ return {
9
+ type: 'paragraph',
10
+ children: [{
11
+ text
12
+ }]
13
+ };
14
+ }
15
+ var _default = defaultEmptyBlock;
16
+ exports.default = _default;
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _isHotkey = _interopRequireDefault(require("is-hotkey"));
8
+ var _keyDownEnter = _interopRequireDefault(require("./keyDownEnter"));
9
+ var _keyDownBackspace = _interopRequireDefault(require("./keyDownBackspace"));
10
+ var _isCursorInNonDefaultBlock = _interopRequireDefault(require("../locations/isCursorInNonDefaultBlock"));
11
+ var _toggleBlock = _interopRequireDefault(require("./toggleBlock"));
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+ const HEADING_HOTKEYS = {
14
+ 'mod+1': 'heading-one',
15
+ 'mod+2': 'heading-two',
16
+ 'mod+3': 'heading-three',
17
+ 'mod+4': 'heading-four',
18
+ 'mod+5': 'heading-five',
19
+ 'mod+6': 'heading-six'
20
+ };
21
+ function keyDown(event, editor) {
22
+ if (!editor.selection) return;
23
+ for (const hotkey in HEADING_HOTKEYS) {
24
+ if ((0, _isHotkey.default)(hotkey, event)) {
25
+ (0, _toggleBlock.default)(editor, HEADING_HOTKEYS[hotkey]);
26
+ event.preventDefault();
27
+ return false;
28
+ }
29
+ }
30
+ if (!(0, _isCursorInNonDefaultBlock.default)(editor)) return;
31
+ if ((0, _isHotkey.default)('enter', event)) {
32
+ const eventIntercepted = (0, _keyDownEnter.default)(editor);
33
+ if (eventIntercepted) {
34
+ event.preventDefault();
35
+ return false;
36
+ }
37
+ }
38
+ if ((0, _isHotkey.default)('backspace', event)) {
39
+ const eventIntercepted = (0, _keyDownBackspace.default)(editor);
40
+ if (eventIntercepted) {
41
+ event.preventDefault();
42
+ return false;
43
+ }
44
+ }
45
+ }
46
+ var _default = keyDown;
47
+ exports.default = _default;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _slate = require("slate");
8
+ var _unwrapIfCursorAtStart = _interopRequireDefault(require("../transforms/unwrapIfCursorAtStart"));
9
+ var _isCursorAtStartOfNonEmptyHeading = _interopRequireDefault(require("../locations/isCursorAtStartOfNonEmptyHeading"));
10
+ var _lowestMatchedAncestor = _interopRequireDefault(require("../../matchers/lowestMatchedAncestor"));
11
+ var _areCurrentAndPreviousBlocksOfType = _interopRequireDefault(require("../locations/areCurrentAndPreviousBlocksOfType"));
12
+ var _isCursorAtStartOfBlockType = _interopRequireDefault(require("../locations/isCursorAtStartOfBlockType"));
13
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
+ function keyDownBackspace(editor) {
15
+ if (!editor.selection) return;
16
+ if ((0, _isCursorAtStartOfNonEmptyHeading.default)(editor)) {
17
+ return;
18
+ }
19
+ if ((0, _isCursorAtStartOfBlockType.default)(editor, 'quote') && (0, _areCurrentAndPreviousBlocksOfType.default)(editor, 'quote')) {
20
+ _slate.Transforms.mergeNodes(editor, (0, _lowestMatchedAncestor.default)(editor, 'quote'));
21
+ return true;
22
+ }
23
+ return (0, _unwrapIfCursorAtStart.default)(editor, true);
24
+ }
25
+ var _default = keyDownBackspace;
26
+ exports.default = _default;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _isCursorInBlockType = _interopRequireDefault(require("../locations/isCursorInBlockType"));
8
+ var _splitIntoParagraph = _interopRequireDefault(require("../transforms/splitIntoParagraph"));
9
+ var _unwrapIfCursorAtStart = _interopRequireDefault(require("../transforms/unwrapIfCursorAtStart"));
10
+ var _isCursorAtEndOfParagraph = _interopRequireDefault(require("../locations/isCursorAtEndOfParagraph"));
11
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
+ function keyDownEnter(editor) {
13
+ if (!editor.selection) return;
14
+ if ((0, _isCursorInBlockType.default)(editor, 'heading', true)) {
15
+ return handleHeading(editor);
16
+ }
17
+ return (0, _unwrapIfCursorAtStart.default)(editor);
18
+ }
19
+ function handleHeading(editor) {
20
+ if ((0, _isCursorAtEndOfParagraph.default)(editor)) {
21
+ // split into paragraph if cursor is at the end of heading
22
+ (0, _splitIntoParagraph.default)(editor);
23
+ return true;
24
+ }
25
+ return;
26
+ }
27
+ var _default = keyDownEnter;
28
+ exports.default = _default;
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _slate = require("slate");
8
+ var _isCursorInBlockType = _interopRequireDefault(require("../locations/isCursorInBlockType"));
9
+ var _getListTypeAtCursor = _interopRequireDefault(require("../locations/getListTypeAtCursor"));
10
+ var _wrapListItemsInBlock = _interopRequireDefault(require("../transforms/wrapListItemsInBlock"));
11
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
+ function toggleBlock(editor, type) {
13
+ const {
14
+ selection
15
+ } = editor;
16
+ if (!selection) return;
17
+ const isHeading = type.startsWith('heading-');
18
+ const isActive = (0, _isCursorInBlockType.default)(editor, type, isHeading, _slate.Range.isExpanded(selection));
19
+ const listType = (0, _getListTypeAtCursor.default)(editor);
20
+
21
+ // headings do not contain paragraphs so they could be converted, not wrapped/unwrapped
22
+ if (isHeading) {
23
+ _slate.Transforms.setNodes(editor, {
24
+ type: isActive ? 'paragraph' : type
25
+ });
26
+ return;
27
+ }
28
+ const {
29
+ focus,
30
+ anchor
31
+ } = selection;
32
+ if (!isActive && listType && focus.path[focus.path.length - 3] != anchor.path[anchor.path.length - 3]) {
33
+ return (0, _wrapListItemsInBlock.default)(editor, type, listType);
34
+ }
35
+ if (!isActive) {
36
+ return _slate.Transforms.wrapNodes(editor, {
37
+ type
38
+ });
39
+ }
40
+ _slate.Transforms.unwrapNodes(editor, {
41
+ match: n => n.type === type
42
+ });
43
+ return;
44
+ }
45
+ var _default = toggleBlock;
46
+ exports.default = _default;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _slate = require("slate");
8
+ var _lowestMatchedAncestor = _interopRequireDefault(require("../../matchers/lowestMatchedAncestor"));
9
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
+ function areCurrentAndPreviousBlocksOfType(editor, type) {
11
+ const {
12
+ selection
13
+ } = editor;
14
+ if (!selection) return false;
15
+ const [current] = _slate.Editor.nodes(editor, (0, _lowestMatchedAncestor.default)(editor, 'block'));
16
+ const previous = _slate.Editor.previous(editor, (0, _lowestMatchedAncestor.default)(editor, type));
17
+ return current && previous && current[0].type === previous[0].type;
18
+ }
19
+ var _default = areCurrentAndPreviousBlocksOfType;
20
+ exports.default = _default;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _slate = require("slate");
8
+ var _lowestMatchedAncestor = _interopRequireDefault(require("../../matchers/lowestMatchedAncestor"));
9
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
+ function getListTypeAtCursor(editor) {
11
+ const list = _slate.Editor.above(editor, (0, _lowestMatchedAncestor.default)(editor, 'list'));
12
+ if (!list) return null;
13
+ return list[0].type;
14
+ }
15
+ var _default = getListTypeAtCursor;
16
+ exports.default = _default;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _slate = require("slate");
8
+ var _lowestMatchedAncestor = _interopRequireDefault(require("../../matchers/lowestMatchedAncestor"));
9
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
+ function isCursorAtEndOfParagraph(editor) {
11
+ const {
12
+ selection
13
+ } = editor;
14
+ if (!selection) return false;
15
+ const paragraph = _slate.Editor.above(editor, (0, _lowestMatchedAncestor.default)(editor, 'paragraph'));
16
+ return !!paragraph && _slate.Editor.isEnd(editor, editor.selection.focus, paragraph[1]);
17
+ }
18
+ var _default = isCursorAtEndOfParagraph;
19
+ exports.default = _default;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _slate = require("slate");
8
+ var _lowestMatchedAncestor = _interopRequireDefault(require("../../matchers/lowestMatchedAncestor"));
9
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
+ function isCursorAtStartOfBlockType(editor, type) {
11
+ const {
12
+ selection
13
+ } = editor;
14
+ if (!selection) return false;
15
+ const block = _slate.Editor.above(editor, (0, _lowestMatchedAncestor.default)(editor, type));
16
+ return !!block && _slate.Editor.isStart(editor, editor.selection.focus, block[1]);
17
+ }
18
+ var _default = isCursorAtStartOfBlockType;
19
+ exports.default = _default;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _slate = require("slate");
8
+ function isCursorAtStartOfNonEmptyHeading(editor) {
9
+ const {
10
+ selection
11
+ } = editor;
12
+ if (!selection) return false;
13
+ const [match] = Array.from(_slate.Editor.nodes(editor, {
14
+ match: n => _slate.Element.isElement(n) && _slate.Editor.isBlock(editor, n) && `${n.type}`.startsWith('heading-'),
15
+ mode: 'lowest'
16
+ }));
17
+ return !!match && _slate.Editor.isStart(editor, editor.selection.focus, match[1]) && !_slate.Editor.isEmpty(editor, match[0]);
18
+ }
19
+ var _default = isCursorAtStartOfNonEmptyHeading;
20
+ exports.default = _default;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _slate = require("slate");
8
+ function isCursorInBlockType(editor, type, ignoreHeadings, ignoreLists) {
9
+ const {
10
+ selection
11
+ } = editor;
12
+ if (!selection) return false;
13
+ const [match] = Array.from(_slate.Editor.nodes(editor, {
14
+ match: n => _slate.Element.isElement(n) && _slate.Editor.isBlock(editor, n) && n.type !== 'paragraph' && n.type !== 'list-item' && (ignoreHeadings || !`${n.type}`.startsWith('heading-')) && (!ignoreLists || !`${n.type}`.endsWith('-list')),
15
+ mode: 'lowest'
16
+ }));
17
+ return !!match && (match[0].type === type || `${match[0].type}`.startsWith(`${type}-` || `${match[0].type}`.endsWith(`-${type}`)));
18
+ }
19
+ var _default = isCursorInBlockType;
20
+ exports.default = _default;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _slate = require("slate");
8
+ function isCursorInNonDefaultBlock(editor) {
9
+ const {
10
+ selection
11
+ } = editor;
12
+ if (!selection) return false;
13
+ const [match] = Array.from(_slate.Editor.nodes(editor, {
14
+ match: n => _slate.Element.isElement(n) && _slate.Editor.isBlock(editor, n) && n.type !== 'paragraph',
15
+ mode: 'lowest'
16
+ }));
17
+ return !!match && !_slate.Editor.isEditor(match[0]);
18
+ }
19
+ var _default = isCursorInNonDefaultBlock;
20
+ exports.default = _default;