@titaui/pc 1.10.44 → 1.10.45

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 (104) hide show
  1. package/lib/components/rich-editor/basic/schema.js +47 -0
  2. package/lib/components/rich-editor/consts/events.js +12 -0
  3. package/lib/components/rich-editor/enums.js +42 -0
  4. package/lib/components/rich-editor/index.js +58 -0
  5. package/lib/components/rich-editor/keymap.js +119 -0
  6. package/lib/components/rich-editor/keymaps/index.js +241 -0
  7. package/lib/components/rich-editor/models/controller.js +18 -0
  8. package/lib/components/rich-editor/models/editor.js +47 -0
  9. package/lib/components/rich-editor/models/plugin.js +20 -0
  10. package/lib/components/rich-editor/models/schema.js +121 -0
  11. package/lib/components/rich-editor/plugins/block/block-quote/commond.js +27 -0
  12. package/lib/components/rich-editor/plugins/block/block-quote/index.js +126 -0
  13. package/lib/components/rich-editor/plugins/block/heading/commonds.js +31 -0
  14. package/lib/components/rich-editor/plugins/block/heading/index.js +188 -0
  15. package/lib/components/rich-editor/plugins/block/index.js +57 -0
  16. package/lib/components/rich-editor/plugins/block/lists/actions/conversions.js +172 -0
  17. package/lib/components/rich-editor/plugins/block/lists/actions/indent-list-items-selected.js +163 -0
  18. package/lib/components/rich-editor/plugins/block/lists/actions/indent-list.js +59 -0
  19. package/lib/components/rich-editor/plugins/block/lists/actions/join-list-items-forward.js +74 -0
  20. package/lib/components/rich-editor/plugins/block/lists/actions/join-list-items-scenarios/index.js +45 -0
  21. package/lib/components/rich-editor/plugins/block/lists/actions/join-list-items-scenarios/join-list-item-with-paragraph.js +104 -0
  22. package/lib/components/rich-editor/plugins/block/lists/actions/join-list-items-scenarios/join-list-item-with-parent-nested-list.js +92 -0
  23. package/lib/components/rich-editor/plugins/block/lists/actions/join-list-items-scenarios/join-nested-list-with-parent-list-item.js +89 -0
  24. package/lib/components/rich-editor/plugins/block/lists/actions/join-list-items-scenarios/join-paragraph-with-list.js +48 -0
  25. package/lib/components/rich-editor/plugins/block/lists/actions/join-list-items-scenarios/join-sibling-list-items.js +61 -0
  26. package/lib/components/rich-editor/plugins/block/lists/actions/merge-lists.js +34 -0
  27. package/lib/components/rich-editor/plugins/block/lists/actions/outdent-list-items-selected.js +289 -0
  28. package/lib/components/rich-editor/plugins/block/lists/actions/wrap-and-join-lists.js +180 -0
  29. package/lib/components/rich-editor/plugins/block/lists/baseCommand.js +328 -0
  30. package/lib/components/rich-editor/plugins/block/lists/commond/indent-list.js +60 -0
  31. package/lib/components/rich-editor/plugins/block/lists/commond/index.js +396 -0
  32. package/lib/components/rich-editor/plugins/block/lists/commond/join-list-item-forward.js +45 -0
  33. package/lib/components/rich-editor/plugins/block/lists/commond/listBackspace.js +302 -0
  34. package/lib/components/rich-editor/plugins/block/lists/commond/outdent-list.js +43 -0
  35. package/lib/components/rich-editor/plugins/block/lists/index.js +222 -0
  36. package/lib/components/rich-editor/plugins/block/lists/messages.js +38 -0
  37. package/lib/components/rich-editor/plugins/block/lists/pm-plugins/input-rule.js +152 -0
  38. package/lib/components/rich-editor/plugins/block/lists/pm-plugins/keymap.js +33 -0
  39. package/lib/components/rich-editor/plugins/block/lists/pm-plugins/main.js +94 -0
  40. package/lib/components/rich-editor/plugins/block/lists/styles.js +15 -0
  41. package/lib/components/rich-editor/plugins/block/lists/transforms.js +347 -0
  42. package/lib/components/rich-editor/plugins/block/lists/utils/analytics.js +48 -0
  43. package/lib/components/rich-editor/plugins/block/lists/utils/find.js +126 -0
  44. package/lib/components/rich-editor/plugins/block/lists/utils/indentation.js +87 -0
  45. package/lib/components/rich-editor/plugins/block/lists/utils/node.js +144 -0
  46. package/lib/components/rich-editor/plugins/block/lists/utils/replace-content.js +31 -0
  47. package/lib/components/rich-editor/plugins/block/lists/utils/selection.js +201 -0
  48. package/lib/components/rich-editor/plugins/block/lists/utils.js +52 -0
  49. package/lib/components/rich-editor/plugins/block/paragraph/index.js +91 -0
  50. package/lib/components/rich-editor/plugins/core/index.js +90 -0
  51. package/lib/components/rich-editor/plugins/core/pm-plugins/focus-handler.js +67 -0
  52. package/lib/components/rich-editor/plugins/core/pm-plugins/keymap.js +29 -0
  53. package/lib/components/rich-editor/plugins/core/pm-plugins/reactNodeView.js +80 -0
  54. package/lib/components/rich-editor/plugins/extension/alignment/commond.js +24 -0
  55. package/lib/components/rich-editor/plugins/extension/alignment/index.js +111 -0
  56. package/lib/components/rich-editor/plugins/extension/alignment/utils.js +19 -0
  57. package/lib/components/rich-editor/plugins/extension/index.js +18 -0
  58. package/lib/components/rich-editor/plugins/index.js +44 -0
  59. package/lib/components/rich-editor/plugins/inline/color/commond.js +128 -0
  60. package/lib/components/rich-editor/plugins/inline/color/consts.js +43 -0
  61. package/lib/components/rich-editor/plugins/inline/color/index.css +61 -0
  62. package/lib/components/rich-editor/plugins/inline/color/index.js +209 -0
  63. package/lib/components/rich-editor/plugins/inline/color/selector.js +250 -0
  64. package/lib/components/rich-editor/plugins/inline/delete-line/index.js +147 -0
  65. package/lib/components/rich-editor/plugins/inline/em/index.js +93 -0
  66. package/lib/components/rich-editor/plugins/inline/index.js +83 -0
  67. package/lib/components/rich-editor/plugins/inline/link/commands.js +256 -0
  68. package/lib/components/rich-editor/plugins/inline/link/index.js +149 -0
  69. package/lib/components/rich-editor/plugins/inline/link/pm-plugins/fake-cursor-for-toolbar.js +77 -0
  70. package/lib/components/rich-editor/plugins/inline/link/pm-plugins/main.js +293 -0
  71. package/lib/components/rich-editor/plugins/inline/link/ui/index.css +79 -0
  72. package/lib/components/rich-editor/plugins/inline/link/ui/linkEditor.js +148 -0
  73. package/lib/components/rich-editor/plugins/inline/link/ui/linkToolbar.js +88 -0
  74. package/lib/components/rich-editor/plugins/inline/link/ui/toolbarBtn.js +117 -0
  75. package/lib/components/rich-editor/plugins/inline/link/utils.js +33 -0
  76. package/lib/components/rich-editor/plugins/inline/strong/index.js +137 -0
  77. package/lib/components/rich-editor/plugins/inline/under-line/index.js +145 -0
  78. package/lib/components/rich-editor/plugins/util.js +281 -0
  79. package/lib/components/rich-editor/react/reactNodeView.js +383 -0
  80. package/lib/components/rich-editor/react/uiProvider.js +185 -0
  81. package/lib/components/rich-editor/schemas/basic.js +309 -0
  82. package/lib/components/rich-editor/schemas/index.js +19 -0
  83. package/lib/components/rich-editor/schemas/list.js +342 -0
  84. package/lib/components/rich-editor/types/commond.js +5 -0
  85. package/lib/components/rich-editor/types/index.js +18 -0
  86. package/lib/components/rich-editor/ui/Popup/index.js +247 -0
  87. package/lib/components/rich-editor/ui/Popup/utils.js +399 -0
  88. package/lib/components/rich-editor/ui/editor/index.css +144 -0
  89. package/lib/components/rich-editor/ui/editor/index.js +143 -0
  90. package/lib/components/rich-editor/ui/normal-toolbar/index.css +29 -0
  91. package/lib/components/rich-editor/ui/normal-toolbar/index.js +109 -0
  92. package/lib/components/rich-editor/utils/browser.js +35 -0
  93. package/lib/components/rich-editor/utils/commands.js +266 -0
  94. package/lib/components/rich-editor/utils/document.js +160 -0
  95. package/lib/components/rich-editor/utils/event.js +79 -0
  96. package/lib/components/rich-editor/utils/helpers.js +16 -0
  97. package/lib/components/rich-editor/utils/mark.js +168 -0
  98. package/lib/components/rich-editor/utils/slice.js +85 -0
  99. package/lib/components/rich-editor/utils/toolbar.js +228 -0
  100. package/lib/components/upload/index.js +4 -2
  101. package/lib/components/upload/util.js +2 -0
  102. package/lib/index.js +8 -0
  103. package/package.json +20 -2
  104. package/yarn-error.log +22184 -0
@@ -0,0 +1,266 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.chainTransactions = chainTransactions;
7
+ exports.filter = exports.clearNodes = void 0;
8
+ exports.findCutBefore = findCutBefore;
9
+ exports.selectNode = exports.isFirstChildOfParent = exports.isEmptySelectionAtStart = exports.isEmptySelectionAtEnd = exports.insertContentDeleteRange = void 0;
10
+ exports.setAlignment = setAlignment;
11
+ exports.setHeadLine = setHeadLine;
12
+ exports.walkPrevNode = exports.walkNextNode = void 0;
13
+
14
+ var _prosemirrorCommands = require("prosemirror-commands");
15
+
16
+ var _prosemirrorState = require("prosemirror-state");
17
+
18
+ var _prosemirrorTransform = require("prosemirror-transform");
19
+
20
+ var _schemas = _interopRequireDefault(require("../schemas"));
21
+
22
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
23
+
24
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
25
+
26
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
27
+
28
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
29
+
30
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
31
+
32
+ function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
33
+
34
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
35
+
36
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
37
+
38
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
39
+
40
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
41
+
42
+ function chainTransactions() {
43
+ for (var _len = arguments.length, commands = new Array(_len), _key = 0; _key < _len; _key++) {
44
+ commands[_key] = arguments[_key];
45
+ }
46
+
47
+ return function (state, dispatch) {
48
+ var dispatcher = function dispatcher(tr) {
49
+ state = state.apply(tr);
50
+ dispatch(tr);
51
+ };
52
+
53
+ var last = commands.pop();
54
+ var reduced = commands.reduce(function (result, command) {
55
+ return result || command(state, dispatcher);
56
+ }, false);
57
+ return reduced && last !== undefined && last(state, dispatch);
58
+ };
59
+ }
60
+
61
+ function setHeadLine(state, dispatchTransiction, level) {
62
+ var $from = state.selection.$from;
63
+ var node = $from.node();
64
+
65
+ if (node.type === _schemas["default"].nodes.heading && level === node.attrs.level) {
66
+ return (0, _prosemirrorCommands.setBlockType)(_schemas["default"].nodes.paragraph, node.attrs)(state, dispatchTransiction);
67
+ }
68
+
69
+ return chainTransactions(clearNodes(), (0, _prosemirrorCommands.setBlockType)(_schemas["default"].nodes.heading, _objectSpread(_objectSpread({}, node.attrs), {}, {
70
+ level: level
71
+ })))(state, dispatchTransiction);
72
+ }
73
+
74
+ function setAlignment(state, dispatchTransiction, alignment) {
75
+ var $from = state.selection.$from;
76
+ var node = $from.node();
77
+ return (0, _prosemirrorCommands.setBlockType)(node.type, _objectSpread(_objectSpread({}, node.attrs), {}, {
78
+ textAlign: alignment
79
+ }))(state, dispatchTransiction);
80
+ }
81
+
82
+ var clearNodes = function clearNodes() {
83
+ return function (state, dispatch) {
84
+ var tr = state.tr;
85
+ var selection = tr.selection;
86
+ var ranges = selection.ranges;
87
+ ranges.forEach(function (range) {
88
+ state.doc.nodesBetween(range.$from.pos, range.$to.pos, function (node, pos) {
89
+ if (node.type.isText) {
90
+ return;
91
+ }
92
+
93
+ var $fromPos = tr.doc.resolve(tr.mapping.map(pos));
94
+ var $toPos = tr.doc.resolve(tr.mapping.map(pos + node.nodeSize));
95
+ var nodeRange = $fromPos.blockRange($toPos);
96
+
97
+ if (!nodeRange) {
98
+ return;
99
+ }
100
+
101
+ var targetLiftDepth = (0, _prosemirrorTransform.liftTarget)(nodeRange);
102
+
103
+ if (node.type.isTextblock && dispatch) {
104
+ var _$fromPos$parent$cont = $fromPos.parent.contentMatchAt($fromPos.index()),
105
+ defaultType = _$fromPos$parent$cont.defaultType;
106
+
107
+ tr.setNodeMarkup(nodeRange.start, defaultType);
108
+ }
109
+
110
+ if ((targetLiftDepth || targetLiftDepth === 0) && dispatch) {
111
+ tr.lift(nodeRange, targetLiftDepth);
112
+ }
113
+ });
114
+ });
115
+ tr.docChanged && dispatch(tr);
116
+ return true;
117
+ };
118
+ };
119
+
120
+ exports.clearNodes = clearNodes;
121
+
122
+ var filter = function filter(predicates, cmd) {
123
+ return function (state, dispatch, view) {
124
+ if (!Array.isArray(predicates)) {
125
+ predicates = [predicates];
126
+ }
127
+
128
+ if (predicates.some(function (pred) {
129
+ return !pred(state, view);
130
+ })) {
131
+ return false;
132
+ }
133
+
134
+ return cmd(state, dispatch, view) || false;
135
+ };
136
+ };
137
+
138
+ exports.filter = filter;
139
+
140
+ var isFirstChildOfParent = function isFirstChildOfParent(state) {
141
+ var $from = state.selection.$from;
142
+ return $from.depth > 1 ? // ? (state.selection instanceof GapCursorSelection &&
143
+ // $from.parentOffset === 0) ||
144
+ $from.index($from.depth - 1) === 0 : true;
145
+ };
146
+
147
+ exports.isFirstChildOfParent = isFirstChildOfParent;
148
+
149
+ function findCutBefore($pos) {
150
+ // parent is non-isolating, so we can look across this boundary
151
+ if (!$pos.parent.type.spec.isolating) {
152
+ // search up the tree from the pos's *parent*
153
+ for (var i = $pos.depth - 1; i >= 0; i--) {
154
+ // starting from the inner most node's parent, find out
155
+ // if we're not its first child
156
+ if ($pos.index(i) > 0) {
157
+ return $pos.doc.resolve($pos.before(i + 1));
158
+ }
159
+
160
+ if ($pos.node(i).type.spec.isolating) {
161
+ break;
162
+ }
163
+ }
164
+ }
165
+
166
+ return null;
167
+ }
168
+
169
+ var isEmptySelectionAtStart = function isEmptySelectionAtStart(state) {
170
+ var _state$selection = state.selection,
171
+ empty = _state$selection.empty,
172
+ $from = _state$selection.$from;
173
+ return empty && $from.parentOffset === 0;
174
+ };
175
+
176
+ exports.isEmptySelectionAtStart = isEmptySelectionAtStart;
177
+
178
+ var isEmptySelectionAtEnd = function isEmptySelectionAtEnd(state) {
179
+ var _state$selection2 = state.selection,
180
+ empty = _state$selection2.empty,
181
+ $from = _state$selection2.$from;
182
+ return empty && $from.end() === $from.pos;
183
+ };
184
+
185
+ exports.isEmptySelectionAtEnd = isEmptySelectionAtEnd;
186
+
187
+ /**
188
+ * Walk backwards from a position until we encounter the (inside) end of
189
+ * the previous node, or reach the start of the document.
190
+ *
191
+ * @param $startPos Position to start walking from.
192
+ */
193
+ var walkPrevNode = function walkPrevNode($startPos) {
194
+ var $pos = $startPos;
195
+
196
+ while ($pos.pos > 0 && ($pos.pos === $startPos.pos || $pos.parentOffset < $pos.parent.nodeSize - 2)) {
197
+ $pos = $pos.doc.resolve($pos.pos - 1);
198
+ }
199
+
200
+ return {
201
+ $pos: $pos,
202
+ foundNode: $pos.pos > 0
203
+ };
204
+ };
205
+
206
+ exports.walkPrevNode = walkPrevNode;
207
+
208
+ var walkNextNode = function walkNextNode($startPos) {
209
+ var $pos = $startPos; // invariant 1: don't walk past the end of the document
210
+ // invariant 2: we are at the beginning or
211
+ // we haven't walked to the start of *any* node
212
+ // parentOffset includes textOffset.
213
+
214
+ while ($pos.pos < $pos.doc.nodeSize - 2 && ($pos.pos === $startPos.pos || $pos.parentOffset > 0)) {
215
+ $pos = $pos.doc.resolve($pos.pos + 1);
216
+ }
217
+
218
+ return {
219
+ $pos: $pos,
220
+ foundNode: $pos.pos < $pos.doc.nodeSize - 2
221
+ };
222
+ };
223
+ /**
224
+ * Insert content, delete a range and create a new selection
225
+ * This function automatically handles the mapping of positions for insertion and deletion.
226
+ * The new selection is handled as a function since it may not always be necessary to resolve a position to the transactions mapping
227
+ *
228
+ * @param getSelectionResolvedPos get the resolved position to create a new selection
229
+ * @param insertions content to insert at the specified position
230
+ * @param deletions the ranges to delete
231
+ */
232
+
233
+
234
+ exports.walkNextNode = walkNextNode;
235
+
236
+ var insertContentDeleteRange = function insertContentDeleteRange(tr, getSelectionResolvedPos, insertions, deletions) {
237
+ insertions.forEach(function (contentInsert) {
238
+ var _contentInsert = _slicedToArray(contentInsert, 2),
239
+ content = _contentInsert[0],
240
+ pos = _contentInsert[1];
241
+
242
+ tr.insert(tr.mapping.map(pos), content);
243
+ });
244
+ deletions.forEach(function (deleteRange) {
245
+ var _deleteRange = _slicedToArray(deleteRange, 2),
246
+ firstPos = _deleteRange[0],
247
+ lastPos = _deleteRange[1];
248
+
249
+ tr["delete"](tr.mapping.map(firstPos), tr.mapping.map(lastPos));
250
+ });
251
+ tr.setSelection(new _prosemirrorState.TextSelection(getSelectionResolvedPos(tr)));
252
+ };
253
+
254
+ exports.insertContentDeleteRange = insertContentDeleteRange;
255
+
256
+ var selectNode = function selectNode(pos) {
257
+ return function (state, dispatch) {
258
+ if (dispatch) {
259
+ dispatch(state.tr.setSelection(new _prosemirrorState.NodeSelection(state.doc.resolve(pos))));
260
+ }
261
+
262
+ return true;
263
+ };
264
+ };
265
+
266
+ exports.selectNode = selectNode;
@@ -0,0 +1,160 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.findFarthestParentNode = void 0;
7
+ exports.getNodesCount = getNodesCount;
8
+ exports.getStepRange = void 0;
9
+ exports.hasVisibleContent = hasVisibleContent;
10
+ exports.isEmptyDocument = isEmptyDocument;
11
+ exports.isEmptyParagraph = isEmptyParagraph;
12
+ exports.isNodeEmpty = isNodeEmpty;
13
+ exports.isSelectionEndOfParagraph = void 0;
14
+ exports.nodesBetweenChanged = nodesBetweenChanged;
15
+
16
+ /**
17
+ * Checks if node is an empty paragraph.
18
+ */
19
+ function isEmptyParagraph(node) {
20
+ return !node || node.type.name === 'paragraph' && !node.textContent && !node.childCount;
21
+ }
22
+ /**
23
+ * Returns false if node contains only empty inline nodes and hardBreaks.
24
+ */
25
+
26
+
27
+ function hasVisibleContent(node) {
28
+ var isInlineNodeHasVisibleContent = function isInlineNodeHasVisibleContent(inlineNode) {
29
+ return inlineNode.isText ? !!inlineNode.textContent.trim() : inlineNode.type.name !== 'hardBreak';
30
+ };
31
+
32
+ if (node.isInline) {
33
+ return isInlineNodeHasVisibleContent(node);
34
+ } else if (node.isBlock && (node.isLeaf || node.isAtom)) {
35
+ return true;
36
+ } else if (!node.childCount) {
37
+ return false;
38
+ }
39
+
40
+ for (var _index = 0; _index < node.childCount; _index++) {
41
+ var child = node.child(_index);
42
+
43
+ if (hasVisibleContent(child)) {
44
+ return true;
45
+ }
46
+ }
47
+
48
+ return false;
49
+ }
50
+ /**
51
+ * Checks if a node has any content. Ignores node that only contain empty block nodes.
52
+ */
53
+
54
+
55
+ function isNodeEmpty(node) {
56
+ if (node && node.textContent) {
57
+ return false;
58
+ }
59
+
60
+ if (!node || !node.childCount || node.childCount === 1 && isEmptyParagraph(node.firstChild)) {
61
+ return true;
62
+ }
63
+
64
+ var block = [];
65
+ var nonBlock = [];
66
+ node.forEach(function (child) {
67
+ child.isInline ? nonBlock.push(child) : block.push(child);
68
+ });
69
+ return !nonBlock.length && !block.filter(function (childNode) {
70
+ return !!childNode.childCount && !(childNode.childCount === 1 && isEmptyParagraph(childNode.firstChild)) || childNode.isAtom;
71
+ }).length;
72
+ }
73
+ /**
74
+ * Checks if a node looks like an empty document
75
+ */
76
+
77
+
78
+ function isEmptyDocument(node) {
79
+ var nodeChild = node.content.firstChild;
80
+
81
+ if (node.childCount !== 1 || !nodeChild) {
82
+ return false;
83
+ }
84
+
85
+ return nodeChild.type.name === 'paragraph' && !nodeChild.childCount && nodeChild.nodeSize === 2 && (!nodeChild.marks || nodeChild.marks.length === 0);
86
+ }
87
+
88
+ var getStepRange = function getStepRange(transaction) {
89
+ var from = -1;
90
+ var to = -1;
91
+ transaction.steps.forEach(function (step) {
92
+ step.getMap().forEach(function (_oldStart, _oldEnd, newStart, newEnd) {
93
+ from = newStart < from || from === -1 ? newStart : from;
94
+ to = newEnd < to || to === -1 ? newEnd : to;
95
+ });
96
+ });
97
+
98
+ if (from !== -1) {
99
+ return {
100
+ from: from,
101
+ to: to
102
+ };
103
+ }
104
+
105
+ return null;
106
+ };
107
+ /**
108
+ * Find the farthest node given a condition
109
+ * @param predicate Function to check the node
110
+ */
111
+
112
+
113
+ exports.getStepRange = getStepRange;
114
+
115
+ var findFarthestParentNode = function findFarthestParentNode(predicate) {
116
+ return function ($pos) {
117
+ var candidate = null;
118
+
119
+ for (var i = $pos.depth; i > 0; i--) {
120
+ var _node = $pos.node(i);
121
+
122
+ if (predicate(_node)) {
123
+ candidate = {
124
+ pos: i > 0 ? $pos.before(i) : 0,
125
+ start: $pos.start(i),
126
+ depth: i,
127
+ node: _node
128
+ };
129
+ }
130
+ }
131
+
132
+ return candidate;
133
+ };
134
+ };
135
+
136
+ exports.findFarthestParentNode = findFarthestParentNode;
137
+
138
+ var isSelectionEndOfParagraph = function isSelectionEndOfParagraph(state) {
139
+ return state.selection.$to.parent.type === state.schema.nodes.paragraph && state.selection.$to.pos === state.doc.resolve(state.selection.$to.pos).end();
140
+ };
141
+
142
+ exports.isSelectionEndOfParagraph = isSelectionEndOfParagraph;
143
+
144
+ function nodesBetweenChanged(tr, f, startPos) {
145
+ var stepRange = getStepRange(tr);
146
+
147
+ if (!stepRange) {
148
+ return;
149
+ }
150
+
151
+ tr.doc.nodesBetween(stepRange.from, stepRange.to, f, startPos);
152
+ }
153
+
154
+ function getNodesCount(node) {
155
+ var count = {};
156
+ node.nodesBetween(0, node.nodeSize - 2, function (node) {
157
+ count[node.type.name] = (count[node.type.name] || 0) + 1;
158
+ });
159
+ return count;
160
+ }
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.EventDispatcher = void 0;
7
+ exports.createDispatch = createDispatch;
8
+
9
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
10
+
11
+ function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
12
+
13
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
14
+
15
+ var EventDispatcher = /*#__PURE__*/function () {
16
+ function EventDispatcher() {
17
+ _classCallCheck(this, EventDispatcher);
18
+
19
+ this.listeners = {};
20
+ }
21
+
22
+ _createClass(EventDispatcher, [{
23
+ key: "on",
24
+ value: function on(event, cb) {
25
+ if (!this.listeners[event]) {
26
+ this.listeners[event] = new Set();
27
+ }
28
+
29
+ this.listeners[event].add(cb);
30
+ }
31
+ }, {
32
+ key: "off",
33
+ value: function off(event, cb) {
34
+ if (!this.listeners[event]) {
35
+ return;
36
+ }
37
+
38
+ if (this.listeners[event].has(cb)) {
39
+ this.listeners[event]["delete"](cb);
40
+ }
41
+ }
42
+ }, {
43
+ key: "emit",
44
+ value: function emit(event, data) {
45
+ if (!this.listeners[event]) {
46
+ return;
47
+ }
48
+
49
+ this.listeners[event].forEach(function (cb) {
50
+ return cb(data);
51
+ });
52
+ }
53
+ }, {
54
+ key: "destroy",
55
+ value: function destroy() {
56
+ this.listeners = {};
57
+ }
58
+ }]);
59
+
60
+ return EventDispatcher;
61
+ }();
62
+ /**
63
+ * Creates a dispatch function that can be called inside ProseMirror Plugin
64
+ * to notify listeners about that plugin's state change.
65
+ */
66
+
67
+
68
+ exports.EventDispatcher = EventDispatcher;
69
+
70
+ function createDispatch(eventDispatcher) {
71
+ return function (eventName, data) {
72
+ if (!eventName) {
73
+ throw new Error('event name is required!');
74
+ }
75
+
76
+ var event = typeof eventName === 'string' ? eventName : eventName.key;
77
+ eventDispatcher.emit(event, data);
78
+ };
79
+ }
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.shallowEqual = shallowEqual;
7
+
8
+ function shallowEqual() {
9
+ var obj1 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
10
+ var obj2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
11
+ var keys1 = Object.keys(obj1);
12
+ var keys2 = Object.keys(obj2);
13
+ return keys1.length === keys2.length && keys1.reduce(function (acc, key) {
14
+ return acc && obj1[key] === obj2[key];
15
+ }, true);
16
+ }
@@ -0,0 +1,168 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.selectionContainsMark = exports.sanitiseSelectionMarksForWrapping = exports.sanitiseMarksInSelection = exports.removeBlockMarks = exports.isMarkExcluded = exports.isMarkAllowedInRange = void 0;
7
+
8
+ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
9
+
10
+ var isMarkAllowedInRange = function isMarkAllowedInRange(doc, ranges, type) {
11
+ var _loop = function _loop(i) {
12
+ var _ranges$i = ranges[i],
13
+ $from = _ranges$i.$from,
14
+ $to = _ranges$i.$to;
15
+ var can = $from.depth === 0 ? doc.type.allowsMarkType(type) : false;
16
+ doc.nodesBetween($from.pos, $to.pos, function (node) {
17
+ if (can) {
18
+ return false;
19
+ }
20
+
21
+ can = node.inlineContent && node.type.allowsMarkType(type);
22
+ return;
23
+ });
24
+
25
+ if (can) {
26
+ return {
27
+ v: can
28
+ };
29
+ }
30
+ };
31
+
32
+ for (var i = 0; i < ranges.length; i++) {
33
+ var _ret = _loop(i);
34
+
35
+ if (_typeof(_ret) === "object") return _ret.v;
36
+ }
37
+
38
+ return false;
39
+ };
40
+
41
+ exports.isMarkAllowedInRange = isMarkAllowedInRange;
42
+
43
+ var isMarkExcluded = function isMarkExcluded(type, marks) {
44
+ if (marks) {
45
+ return marks.some(function (mark) {
46
+ return mark.type !== type && mark.type.excludes(type);
47
+ });
48
+ }
49
+
50
+ return false;
51
+ };
52
+
53
+ exports.isMarkExcluded = isMarkExcluded;
54
+
55
+ var not = function not(fn) {
56
+ return function (arg) {
57
+ return !fn(arg);
58
+ };
59
+ };
60
+
61
+ var removeBlockMarks = function removeBlockMarks(state, marks) {
62
+ var selection = state.selection,
63
+ schema = state.schema;
64
+ var tr = state.tr; // Marks might not exist in Schema
65
+
66
+ var marksToRemove = marks.filter(Boolean);
67
+
68
+ if (marksToRemove.length === 0) {
69
+ return undefined;
70
+ }
71
+ /** Saves an extra dispatch */
72
+
73
+
74
+ var blockMarksExists = false;
75
+
76
+ var hasMark = function hasMark(mark) {
77
+ return marksToRemove.indexOf(mark.type) > -1;
78
+ };
79
+ /**
80
+ * When you need to toggle the selection
81
+ * when another type which does not allow alignment is applied
82
+ */
83
+
84
+
85
+ state.doc.nodesBetween(selection.from, selection.to, function (node, pos) {
86
+ if (node.type === schema.nodes.paragraph && node.marks.some(hasMark)) {
87
+ blockMarksExists = true;
88
+ var resolvedPos = state.doc.resolve(pos);
89
+ var withoutBlockMarks = node.marks.filter(not(hasMark));
90
+ tr = tr.setNodeMarkup(resolvedPos.pos, undefined, node.attrs, withoutBlockMarks);
91
+ }
92
+ });
93
+ return blockMarksExists ? tr : undefined;
94
+ };
95
+ /**
96
+ * Removes marks from nodes in the current selection that are not supported
97
+ */
98
+
99
+
100
+ exports.removeBlockMarks = removeBlockMarks;
101
+
102
+ var sanitiseSelectionMarksForWrapping = function sanitiseSelectionMarksForWrapping(state, newParentType) {
103
+ var tr = state.tr;
104
+ sanitiseMarksInSelection(tr, newParentType);
105
+ return tr;
106
+ };
107
+
108
+ exports.sanitiseSelectionMarksForWrapping = sanitiseSelectionMarksForWrapping;
109
+
110
+ var sanitiseMarksInSelection = function sanitiseMarksInSelection(tr, newParentType) {
111
+ var _tr$selection = tr.selection,
112
+ from = _tr$selection.from,
113
+ to = _tr$selection.to;
114
+ var nodesSanitized = [];
115
+ tr.doc.nodesBetween(from, to, function (node, pos, parent) {
116
+ if (node.isText) {
117
+ return false;
118
+ } // Skip expands and layouts if they are outside selection
119
+ // but continue to iterate over their children.
120
+
121
+
122
+ if (['expand', 'layoutSection'].includes(node.type.name) && (pos < from || pos > to)) {
123
+ return true;
124
+ }
125
+
126
+ node.marks.forEach(function (mark) {
127
+ if (!parent.type.allowsMarkType(mark.type) || newParentType && !newParentType.allowsMarkType(mark.type)) {
128
+ var filteredMarks = node.marks.filter(function (m) {
129
+ return m.type !== mark.type;
130
+ });
131
+ var position = pos > 0 ? pos : 0;
132
+ var marksRemoved = node.marks.filter(function (m) {
133
+ return m.type === mark.type;
134
+ });
135
+ nodesSanitized.push({
136
+ node: node,
137
+ marksRemoved: marksRemoved
138
+ });
139
+ tr.setNodeMarkup(position, undefined, node.attrs, filteredMarks);
140
+ }
141
+ });
142
+ });
143
+ return nodesSanitized;
144
+ };
145
+
146
+ exports.sanitiseMarksInSelection = sanitiseMarksInSelection;
147
+
148
+ var selectionContainsMark = function selectionContainsMark(state, markName) {
149
+ var _state$selection = state.selection,
150
+ from = _state$selection.from,
151
+ to = _state$selection.to,
152
+ $from = _state$selection.$from;
153
+ var marks = [];
154
+
155
+ if (from == to) {
156
+ marks = state.storedMarks || $from.marks();
157
+ } else {
158
+ state.doc.nodesBetween(from, to, function (node) {
159
+ marks = marks.concat(node.marks);
160
+ });
161
+ }
162
+
163
+ return marks.findIndex(function (m) {
164
+ return m.type.name == markName;
165
+ }) !== -1;
166
+ };
167
+
168
+ exports.selectionContainsMark = selectionContainsMark;