@atlaskit/editor-common 74.33.0 → 74.34.1

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 (49) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/cjs/keymaps/index.js +8 -1
  3. package/dist/cjs/keymaps/keymap.js +38 -0
  4. package/dist/cjs/monitoring/error.js +1 -1
  5. package/dist/cjs/ui/DropList/index.js +1 -1
  6. package/dist/cjs/utils/commands.js +180 -15
  7. package/dist/cjs/utils/editor-core-utils.js +53 -3
  8. package/dist/cjs/utils/index.js +48 -0
  9. package/dist/cjs/utils/input-rules.js +48 -2
  10. package/dist/cjs/version.json +1 -1
  11. package/dist/es2019/keymaps/index.js +3 -2
  12. package/dist/es2019/keymaps/keymap.js +33 -0
  13. package/dist/es2019/monitoring/error.js +1 -1
  14. package/dist/es2019/ui/DropList/index.js +1 -1
  15. package/dist/es2019/utils/commands.js +173 -2
  16. package/dist/es2019/utils/editor-core-utils.js +46 -1
  17. package/dist/es2019/utils/index.js +3 -3
  18. package/dist/es2019/utils/input-rules.js +45 -0
  19. package/dist/es2019/version.json +1 -1
  20. package/dist/esm/keymaps/index.js +3 -2
  21. package/dist/esm/keymaps/keymap.js +33 -0
  22. package/dist/esm/monitoring/error.js +1 -1
  23. package/dist/esm/ui/DropList/index.js +1 -1
  24. package/dist/esm/utils/commands.js +170 -14
  25. package/dist/esm/utils/editor-core-utils.js +47 -0
  26. package/dist/esm/utils/index.js +3 -3
  27. package/dist/esm/utils/input-rules.js +44 -0
  28. package/dist/esm/version.json +1 -1
  29. package/dist/types/keymaps/index.d.ts +1 -0
  30. package/dist/types/keymaps/keymap.d.ts +11 -0
  31. package/dist/types/types/block-type.d.ts +1 -0
  32. package/dist/types/types/feature-flags.d.ts +0 -18
  33. package/dist/types/types/index.d.ts +1 -1
  34. package/dist/types/types/input-rules.d.ts +1 -1
  35. package/dist/types/utils/commands.d.ts +11 -5
  36. package/dist/types/utils/editor-core-utils.d.ts +7 -2
  37. package/dist/types/utils/index.d.ts +3 -3
  38. package/dist/types/utils/input-rules.d.ts +12 -4
  39. package/dist/types-ts4.5/keymaps/index.d.ts +1 -0
  40. package/dist/types-ts4.5/keymaps/keymap.d.ts +11 -0
  41. package/dist/types-ts4.5/types/block-type.d.ts +1 -0
  42. package/dist/types-ts4.5/types/feature-flags.d.ts +0 -18
  43. package/dist/types-ts4.5/types/index.d.ts +1 -1
  44. package/dist/types-ts4.5/types/input-rules.d.ts +1 -1
  45. package/dist/types-ts4.5/utils/commands.d.ts +11 -5
  46. package/dist/types-ts4.5/utils/editor-core-utils.d.ts +7 -2
  47. package/dist/types-ts4.5/utils/index.d.ts +3 -3
  48. package/dist/types-ts4.5/utils/input-rules.d.ts +12 -4
  49. package/package.json +5 -4
package/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # @atlaskit/editor-common
2
2
 
3
+ ## 74.34.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [`7cca8fcf473`](https://bitbucket.org/atlassian/atlassian-frontend/commits/7cca8fcf473) - ED-18274: Remove unused feature flags listNumberContinuity and restartNumberedListsToolbar (not planned for future use either) (all related to the restart lists project)
8
+
9
+ ## 74.34.0
10
+
11
+ ### Minor Changes
12
+
13
+ - [`1944b35b538`](https://bitbucket.org/atlassian/atlassian-frontend/commits/1944b35b538) - move common utilities to editor-common, to help with decoupling block-type plugin
14
+
15
+ ### Patch Changes
16
+
17
+ - Updated dependencies
18
+
3
19
  ## 74.33.0
4
20
 
5
21
  ### Minor Changes
@@ -88,6 +88,12 @@ exports.findShortcutByKeymap = findShortcutByKeymap;
88
88
  exports.forwardDelete = void 0;
89
89
  exports.getAriaKeyshortcuts = getAriaKeyshortcuts;
90
90
  exports.insertRule = exports.insertNewLine = exports.indentList = exports.indent = void 0;
91
+ Object.defineProperty(exports, "keymap", {
92
+ enumerable: true,
93
+ get: function get() {
94
+ return _keymap.keymap;
95
+ }
96
+ });
91
97
  exports.makeKeyMapWithCommon = makeKeyMapWithCommon;
92
98
  exports.makeKeymap = makeKeymap;
93
99
  exports.toggleUnderline = exports.toggleTable = exports.toggleSuperscript = exports.toggleSubscript = exports.toggleStrikethrough = exports.toggleOrderedList = exports.toggleItalic = exports.toggleHeading6 = exports.toggleHeading5 = exports.toggleHeading4 = exports.toggleHeading3 = exports.toggleHeading2 = exports.toggleHeading1 = exports.toggleCode = exports.toggleBulletList = exports.toggleBold = exports.toggleBlockQuote = exports.tab = exports.submit = exports.splitListItem = exports.splitCodeBlock = exports.space = exports.shiftTab = exports.shiftEnter = exports.shiftBackspace = exports.setNormalText = exports.redo = exports.previousCell = exports.pastePlainText = exports.paste = exports.outdentList = exports.outdent = exports.openHelp = exports.nextCell = exports.navToFloatingToolbar = exports.navToEditorToolbar = exports.moveUp = exports.moveRight = exports.moveLeft = exports.moveDown = void 0;
@@ -100,6 +106,7 @@ var _react2 = require("@emotion/react");
100
106
  var _colors = require("@atlaskit/theme/colors");
101
107
  var _utils = require("../utils");
102
108
  var _consts = require("./consts");
109
+ var _keymap = require("./keymap");
103
110
  var _templateObject;
104
111
  /** @jsx jsx */
105
112
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
@@ -239,7 +246,7 @@ var arrowKeysMap = {
239
246
  ARROWUP: "\u2191",
240
247
  ARROWDOWN: "\u2193"
241
248
  };
242
- var tooltipShortcutStyle = (0, _react2.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n border-radius: 2px;\n background-color: ", ";\n padding: 0 2px;\n\n /* TODO: fix in develop: https://atlassian.slack.com/archives/CFG3PSQ9E/p1647395052443259?thread_ts=1647394572.556029&cid=CFG3PSQ9E */\n /* stylelint-disable-next-line */\n label: tooltip-shortcut;\n"])), "var(--ds-background-inverse-subtle, ".concat(_colors.N400, ")"));
249
+ var tooltipShortcutStyle = (0, _react2.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n border-radius: 2px;\n background-color: ", ";\n padding: 0 ", ";\n\n /* TODO: fix in develop: https://atlassian.slack.com/archives/CFG3PSQ9E/p1647395052443259?thread_ts=1647394572.556029&cid=CFG3PSQ9E */\n /* stylelint-disable-next-line */\n label: tooltip-shortcut;\n"])), "var(--ds-background-inverse-subtle, ".concat(_colors.N400, ")"), "var(--ds-space-025, 2px)");
243
250
  /* eslint-enable @atlaskit/design-system/ensure-design-token-usage */
244
251
 
245
252
  function formatShortcut(keymap) {
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.keymap = keymap;
7
+ var _w3cKeyname = require("w3c-keyname");
8
+ var _keymap = require("@atlaskit/editor-prosemirror/keymap");
9
+ var _safePlugin = require("../safe-plugin");
10
+ /**
11
+ * A workaround for mostly Cyrillic but should have a positive affect
12
+ * on other languages / layouts. Attempts a similar approach to OS X.
13
+ * @see ED-7310
14
+ * @see https://github.com/ProseMirror/prosemirror/issues/957
15
+ * @param bindings
16
+ */
17
+ function keymap(bindings) {
18
+ return new _safePlugin.SafePlugin({
19
+ props: {
20
+ handleKeyDown: function handleKeyDown(view, event) {
21
+ var name = (0, _w3cKeyname.keyName)(event);
22
+ var keyboardEvent = event;
23
+ if (event.ctrlKey && name.length === 1 &&
24
+ // Check the unicode of the character to
25
+ // assert that its not an ASCII character.
26
+ // These are characters outside Latin's range.
27
+ /[^\u0000-\u007f]/.test(name)) {
28
+ keyboardEvent = new KeyboardEvent('keydown', {
29
+ key: _w3cKeyname.base[event.keyCode],
30
+ code: event.code,
31
+ ctrlKey: true
32
+ });
33
+ }
34
+ return (0, _keymap.keydownHandler)(bindings)(view, keyboardEvent);
35
+ }
36
+ }
37
+ });
38
+ }
@@ -16,7 +16,7 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
16
16
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
17
17
  var SENTRY_DSN = 'https://0b10c8e02fb44d8796c047b102c9bee8@o55978.ingest.sentry.io/4505129224110080';
18
18
  var packageName = 'editor-common'; // Sentry doesn't accept '/' in its releases https://docs.sentry.io/platforms/javascript/configuration/releases/
19
- var packageVersion = "74.33.0";
19
+ var packageVersion = "74.34.1";
20
20
  var sanitiseSentryEvents = function sanitiseSentryEvents(data, _hint) {
21
21
  // Remove URL as it has UGC
22
22
  // TODO: Sanitise the URL instead of just removing it
@@ -24,7 +24,7 @@ var _templateObject, _templateObject2, _templateObject3;
24
24
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
25
25
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } /** @jsx jsx */
26
26
  var packageName = "@atlaskit/editor-common";
27
- var packageVersion = "74.33.0";
27
+ var packageVersion = "74.34.1";
28
28
  var halfFocusRing = 1;
29
29
  var dropOffset = '0, 8';
30
30
  var DropList = /*#__PURE__*/function (_Component) {
@@ -4,11 +4,21 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.walkPrevNode = exports.walkNextNode = exports.isEmptySelectionAtStart = exports.isEmptySelectionAtEnd = exports.insertContentDeleteRange = exports.filterCommand = exports.deleteEmptyParagraphAndMoveBlockUp = void 0;
7
+ exports.atTheBeginningOfDoc = atTheBeginningOfDoc;
8
+ exports.atTheEndOfDoc = atTheEndOfDoc;
9
+ exports.createNewParagraphBelow = exports.createNewParagraphAbove = void 0;
10
+ exports.createParagraphNear = createParagraphNear;
11
+ exports.insertContentDeleteRange = exports.filterCommand = exports.filter = exports.deleteEmptyParagraphAndMoveBlockUp = void 0;
12
+ exports.insertNewLine = insertNewLine;
13
+ exports.walkPrevNode = exports.walkNextNode = exports.isEmptySelectionAtStart = exports.isEmptySelectionAtEnd = exports.insertNewLineWithAnalytics = void 0;
8
14
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
15
+ var _model = require("@atlaskit/editor-prosemirror/model");
9
16
  var _state = require("@atlaskit/editor-prosemirror/state");
17
+ var _analytics = require("../analytics");
18
+ var _editorAnalytics = require("../editor-analytics");
10
19
  var _selection = require("../selection");
11
20
  var _editorCoreUtils = require("./editor-core-utils");
21
+ var _nodes = require("./nodes");
12
22
  var filter = function filter(predicates, cmd) {
13
23
  return function (state, dispatch, view) {
14
24
  if (!Array.isArray(predicates)) {
@@ -29,7 +39,7 @@ var filter = function filter(predicates, cmd) {
29
39
  *
30
40
  * @param $startPos Position to start walking from.
31
41
  */
32
- exports.filterCommand = filter;
42
+ exports.filterCommand = exports.filter = filter;
33
43
  var walkNextNode = function walkNextNode($startPos) {
34
44
  var $pos = $startPos;
35
45
 
@@ -63,6 +73,162 @@ var walkPrevNode = function walkPrevNode($startPos) {
63
73
  foundNode: $pos.pos > 0
64
74
  };
65
75
  };
76
+ exports.walkPrevNode = walkPrevNode;
77
+ function insertNewLine() {
78
+ return function (state, dispatch) {
79
+ var $from = state.selection.$from;
80
+ var parent = $from.parent;
81
+ var hardBreak = state.schema.nodes.hardBreak;
82
+ if (hardBreak) {
83
+ var hardBreakNode = hardBreak.createChecked();
84
+ if (parent && parent.type.validContent(_model.Fragment.from(hardBreakNode))) {
85
+ if (dispatch) {
86
+ dispatch(state.tr.replaceSelectionWith(hardBreakNode, false));
87
+ }
88
+ return true;
89
+ }
90
+ }
91
+ if (state.selection instanceof _state.TextSelection) {
92
+ if (dispatch) {
93
+ dispatch(state.tr.insertText('\n'));
94
+ }
95
+ return true;
96
+ }
97
+ return false;
98
+ };
99
+ }
100
+ var insertNewLineWithAnalytics = function insertNewLineWithAnalytics(editorAnalyticsAPI) {
101
+ return (0, _editorAnalytics.withAnalytics)(editorAnalyticsAPI, {
102
+ action: _analytics.ACTION.INSERTED,
103
+ actionSubject: _analytics.ACTION_SUBJECT.TEXT,
104
+ actionSubjectId: _analytics.ACTION_SUBJECT_ID.LINE_BREAK,
105
+ eventType: _analytics.EVENT_TYPE.TRACK
106
+ })(insertNewLine());
107
+ };
108
+ exports.insertNewLineWithAnalytics = insertNewLineWithAnalytics;
109
+ var createNewParagraphAbove = function createNewParagraphAbove(state, dispatch) {
110
+ var append = false;
111
+ if (!canMoveUp(state) && canCreateParagraphNear(state)) {
112
+ createParagraphNear(append)(state, dispatch);
113
+ return true;
114
+ }
115
+ return false;
116
+ };
117
+ exports.createNewParagraphAbove = createNewParagraphAbove;
118
+ var createNewParagraphBelow = function createNewParagraphBelow(state, dispatch) {
119
+ var append = true;
120
+ if (!canMoveDown(state) && canCreateParagraphNear(state)) {
121
+ createParagraphNear(append)(state, dispatch);
122
+ return true;
123
+ }
124
+ return false;
125
+ };
126
+ exports.createNewParagraphBelow = createNewParagraphBelow;
127
+ function canCreateParagraphNear(state) {
128
+ var $from = state.selection.$from;
129
+ var node = $from.node($from.depth);
130
+ var insideCodeBlock = !!node && node.type === state.schema.nodes.codeBlock;
131
+ var isNodeSelection = state.selection instanceof _state.NodeSelection;
132
+ return $from.depth > 1 || isNodeSelection || insideCodeBlock;
133
+ }
134
+ function createParagraphNear() {
135
+ var append = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
136
+ return function (state, dispatch) {
137
+ var paragraph = state.schema.nodes.paragraph;
138
+ if (!paragraph) {
139
+ return false;
140
+ }
141
+ var insertPos;
142
+ if (state.selection instanceof _state.TextSelection) {
143
+ if (topLevelNodeIsEmptyTextBlock(state)) {
144
+ return false;
145
+ }
146
+ insertPos = getInsertPosFromTextBlock(state, append);
147
+ } else {
148
+ insertPos = getInsertPosFromNonTextBlock(state, append);
149
+ }
150
+ var tr = state.tr.insert(insertPos, paragraph.createAndFill());
151
+ tr.setSelection(_state.TextSelection.create(tr.doc, insertPos + 1));
152
+ if (dispatch) {
153
+ dispatch(tr);
154
+ }
155
+ return true;
156
+ };
157
+ }
158
+ function getInsertPosFromTextBlock(state, append) {
159
+ var _state$selection = state.selection,
160
+ $from = _state$selection.$from,
161
+ $to = _state$selection.$to;
162
+ var pos;
163
+ if (!append) {
164
+ pos = $from.start(0);
165
+ } else {
166
+ pos = $to.end(0);
167
+ }
168
+ return pos;
169
+ }
170
+ function getInsertPosFromNonTextBlock(state, append) {
171
+ var _state$selection2 = state.selection,
172
+ $from = _state$selection2.$from,
173
+ $to = _state$selection2.$to;
174
+ var nodeAtSelection = state.selection instanceof _state.NodeSelection && state.doc.nodeAt(state.selection.$anchor.pos);
175
+ var isMediaSelection = nodeAtSelection && nodeAtSelection.type.name === 'mediaGroup';
176
+ var pos;
177
+ if (!append) {
178
+ // The start position is different with text block because it starts from 0
179
+ pos = $from.start($from.depth);
180
+ // The depth is different with text block because it starts from 0
181
+ pos = $from.depth > 0 && !isMediaSelection ? pos - 1 : pos;
182
+ } else {
183
+ pos = $to.end($to.depth);
184
+ pos = $to.depth > 0 && !isMediaSelection ? pos + 1 : pos;
185
+ }
186
+ return pos;
187
+ }
188
+ function topLevelNodeIsEmptyTextBlock(state) {
189
+ var topLevelNode = state.selection.$from.node(1);
190
+ return topLevelNode.isTextblock && topLevelNode.type !== state.schema.nodes.codeBlock && topLevelNode.nodeSize === 2;
191
+ }
192
+ function canMoveUp(state) {
193
+ var selection = state.selection;
194
+ /**
195
+ * If there's a media element on the selection it will use a gap cursor to move
196
+ */
197
+ if (selection instanceof _state.NodeSelection && (0, _nodes.isMediaNode)(selection.node)) {
198
+ return true;
199
+ }
200
+ if (selection instanceof _state.TextSelection) {
201
+ if (!selection.empty) {
202
+ return true;
203
+ }
204
+ }
205
+ return !atTheBeginningOfDoc(state);
206
+ }
207
+ function canMoveDown(state) {
208
+ var selection = state.selection;
209
+
210
+ /**
211
+ * If there's a media element on the selection it will use a gap cursor to move
212
+ */
213
+ if (selection instanceof _state.NodeSelection && (0, _nodes.isMediaNode)(selection.node)) {
214
+ return true;
215
+ }
216
+ if (selection instanceof _state.TextSelection) {
217
+ if (!selection.empty) {
218
+ return true;
219
+ }
220
+ }
221
+ return !atTheEndOfDoc(state);
222
+ }
223
+ function atTheEndOfDoc(state) {
224
+ var selection = state.selection,
225
+ doc = state.doc;
226
+ return doc.nodeSize - selection.$to.pos - 2 === selection.$to.depth;
227
+ }
228
+ function atTheBeginningOfDoc(state) {
229
+ var selection = state.selection;
230
+ return selection.$from.pos === selection.$from.depth;
231
+ }
66
232
 
67
233
  /**
68
234
  * If the selection is empty, is inside a paragraph node and `canNextNodeMoveUp` is true then delete current paragraph
@@ -71,15 +237,14 @@ var walkPrevNode = function walkPrevNode($startPos) {
71
237
  * @param canNextNodeMoveUp check if node directly after the selection is able to be brought up to selection
72
238
  * @returns PM Command
73
239
  */
74
- exports.walkPrevNode = walkPrevNode;
75
240
  var deleteEmptyParagraphAndMoveBlockUp = function deleteEmptyParagraphAndMoveBlockUp(canNextNodeMoveUp) {
76
241
  return function (state, dispatch, view) {
77
- var _state$selection = state.selection,
78
- _state$selection$$fro = _state$selection.$from,
79
- pos = _state$selection$$fro.pos,
80
- parent = _state$selection$$fro.parent,
81
- $head = _state$selection.$head,
82
- empty = _state$selection.empty,
242
+ var _state$selection3 = state.selection,
243
+ _state$selection3$$fr = _state$selection3.$from,
244
+ pos = _state$selection3$$fr.pos,
245
+ parent = _state$selection3$$fr.parent,
246
+ $head = _state$selection3.$head,
247
+ empty = _state$selection3.empty,
83
248
  tr = state.tr,
84
249
  doc = state.doc;
85
250
  var _walkNextNode = walkNextNode($head),
@@ -113,16 +278,16 @@ var insertContentDeleteRange = function insertContentDeleteRange(tr, getSelectio
113
278
  };
114
279
  exports.insertContentDeleteRange = insertContentDeleteRange;
115
280
  var isEmptySelectionAtStart = function isEmptySelectionAtStart(state) {
116
- var _state$selection2 = state.selection,
117
- empty = _state$selection2.empty,
118
- $from = _state$selection2.$from;
281
+ var _state$selection4 = state.selection,
282
+ empty = _state$selection4.empty,
283
+ $from = _state$selection4.$from;
119
284
  return empty && ($from.parentOffset === 0 || state.selection instanceof _selection.GapCursorSelection);
120
285
  };
121
286
  exports.isEmptySelectionAtStart = isEmptySelectionAtStart;
122
287
  var isEmptySelectionAtEnd = function isEmptySelectionAtEnd(state) {
123
- var _state$selection3 = state.selection,
124
- empty = _state$selection3.empty,
125
- $from = _state$selection3.$from;
288
+ var _state$selection5 = state.selection,
289
+ empty = _state$selection5.empty,
290
+ $from = _state$selection5.$from;
126
291
  return empty && ($from.end() === $from.pos || state.selection instanceof _selection.GapCursorSelection);
127
292
  };
128
293
  exports.isEmptySelectionAtEnd = isEmptySelectionAtEnd;
@@ -3,11 +3,13 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.isElementInTableCell = exports.extractSliceFromStep = void 0;
6
+ exports.extractSliceFromStep = void 0;
7
+ exports.filterChildrenBetween = filterChildrenBetween;
8
+ exports.isElementInTableCell = void 0;
7
9
  exports.isEmptyParagraph = isEmptyParagraph;
8
10
  exports.isValidPosition = exports.isTextSelection = exports.isLastItemMediaGroup = exports.isInLayoutColumn = void 0;
9
11
  exports.nonNullable = nonNullable;
10
- exports.setNodeSelection = void 0;
12
+ exports.setNodeSelection = exports.removeBlockMarks = void 0;
11
13
  exports.setTextSelection = setTextSelection;
12
14
  exports.stepAddsOneOf = stepAddsOneOf;
13
15
  exports.stepHasSlice = void 0;
@@ -103,4 +105,52 @@ exports.isValidPosition = isValidPosition;
103
105
  var isInLayoutColumn = function isInLayoutColumn(state) {
104
106
  return (0, _utils.hasParentNodeOfType)(state.schema.nodes.layoutSection)(state.selection);
105
107
  };
106
- exports.isInLayoutColumn = isInLayoutColumn;
108
+ exports.isInLayoutColumn = isInLayoutColumn;
109
+ function filterChildrenBetween(doc, from, to, predicate) {
110
+ var results = [];
111
+ doc.nodesBetween(from, to, function (node, pos, parent) {
112
+ if (predicate(node, pos, parent)) {
113
+ results.push({
114
+ node: node,
115
+ pos: pos
116
+ });
117
+ }
118
+ });
119
+ return results;
120
+ }
121
+ var removeBlockMarks = function removeBlockMarks(state, marks) {
122
+ var selection = state.selection,
123
+ schema = state.schema;
124
+ var tr = state.tr;
125
+
126
+ // Marks might not exist in Schema
127
+ var marksToRemove = marks.filter(Boolean);
128
+ if (marksToRemove.length === 0) {
129
+ return undefined;
130
+ }
131
+
132
+ /** Saves an extra dispatch */
133
+ var blockMarksExists = false;
134
+ var hasMark = function hasMark(mark) {
135
+ return marksToRemove.indexOf(mark.type) > -1;
136
+ };
137
+ /**
138
+ * When you need to toggle the selection
139
+ * when another type which does not allow alignment is applied
140
+ */
141
+ state.doc.nodesBetween(selection.from, selection.to, function (node, pos) {
142
+ if (node.type === schema.nodes.paragraph && node.marks.some(hasMark)) {
143
+ blockMarksExists = true;
144
+ var resolvedPos = state.doc.resolve(pos);
145
+ var withoutBlockMarks = node.marks.filter(not(hasMark));
146
+ tr = tr.setNodeMarkup(resolvedPos.pos, undefined, node.attrs, withoutBlockMarks);
147
+ }
148
+ });
149
+ return blockMarksExists ? tr : undefined;
150
+ };
151
+ exports.removeBlockMarks = removeBlockMarks;
152
+ var not = function not(fn) {
153
+ return function (arg) {
154
+ return !fn(arg);
155
+ };
156
+ };
@@ -226,6 +226,36 @@ Object.defineProperty(exports, "createCompareNodes", {
226
226
  return _compareNodes.createCompareNodes;
227
227
  }
228
228
  });
229
+ Object.defineProperty(exports, "createNewParagraphAbove", {
230
+ enumerable: true,
231
+ get: function get() {
232
+ return _commands.createNewParagraphAbove;
233
+ }
234
+ });
235
+ Object.defineProperty(exports, "createNewParagraphBelow", {
236
+ enumerable: true,
237
+ get: function get() {
238
+ return _commands.createNewParagraphBelow;
239
+ }
240
+ });
241
+ Object.defineProperty(exports, "createParagraphNear", {
242
+ enumerable: true,
243
+ get: function get() {
244
+ return _commands.createParagraphNear;
245
+ }
246
+ });
247
+ Object.defineProperty(exports, "createRule", {
248
+ enumerable: true,
249
+ get: function get() {
250
+ return _inputRules.createRule;
251
+ }
252
+ });
253
+ Object.defineProperty(exports, "createWrappingJoinRule", {
254
+ enumerable: true,
255
+ get: function get() {
256
+ return _inputRules.createWrappingJoinRule;
257
+ }
258
+ });
229
259
  Object.defineProperty(exports, "deleteEmptyParagraphAndMoveBlockUp", {
230
260
  enumerable: true,
231
261
  get: function get() {
@@ -238,6 +268,12 @@ Object.defineProperty(exports, "extractSliceFromStep", {
238
268
  return _editorCoreUtils.extractSliceFromStep;
239
269
  }
240
270
  });
271
+ Object.defineProperty(exports, "filterChildrenBetween", {
272
+ enumerable: true,
273
+ get: function get() {
274
+ return _editorCoreUtils.filterChildrenBetween;
275
+ }
276
+ });
241
277
  Object.defineProperty(exports, "filterCommand", {
242
278
  enumerable: true,
243
279
  get: function get() {
@@ -454,6 +490,12 @@ Object.defineProperty(exports, "insertContentDeleteRange", {
454
490
  return _commands.insertContentDeleteRange;
455
491
  }
456
492
  });
493
+ Object.defineProperty(exports, "insertNewLineWithAnalytics", {
494
+ enumerable: true,
495
+ get: function get() {
496
+ return _commands.insertNewLineWithAnalytics;
497
+ }
498
+ });
457
499
  Object.defineProperty(exports, "isBulletList", {
458
500
  enumerable: true,
459
501
  get: function get() {
@@ -725,6 +767,12 @@ Object.defineProperty(exports, "processRawValue", {
725
767
  return _document.processRawValue;
726
768
  }
727
769
  });
770
+ Object.defineProperty(exports, "removeBlockMarks", {
771
+ enumerable: true,
772
+ get: function get() {
773
+ return _editorCoreUtils.removeBlockMarks;
774
+ }
775
+ });
728
776
  Object.defineProperty(exports, "removeConnectedNodes", {
729
777
  enumerable: true,
730
778
  get: function get() {
@@ -4,8 +4,11 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.inputRuleWithAnalytics = void 0;
7
+ exports.inputRuleWithAnalytics = exports.createWrappingJoinRule = exports.createRule = void 0;
8
8
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
+ var _history = require("@atlaskit/editor-prosemirror/history");
10
+ var _transform = require("@atlaskit/editor-prosemirror/transform");
11
+ var _analytics = require("../analytics");
9
12
  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; }
10
13
  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) { (0, _defineProperty2.default)(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; }
11
14
  // Roughly based on atlassian-frontend/packages/editor/editor-core/src/utils/input-rules.ts but with the Editor Analytics API that's injected in plugins
@@ -23,4 +26,47 @@ var inputRuleWithAnalytics = function inputRuleWithAnalytics(getPayload, analyti
23
26
  });
24
27
  };
25
28
  };
26
- exports.inputRuleWithAnalytics = inputRuleWithAnalytics;
29
+ exports.inputRuleWithAnalytics = inputRuleWithAnalytics;
30
+ var createWrappingJoinRule = function createWrappingJoinRule(_ref) {
31
+ var match = _ref.match,
32
+ nodeType = _ref.nodeType,
33
+ getAttrs = _ref.getAttrs,
34
+ joinPredicate = _ref.joinPredicate;
35
+ var handler = function handler(state, match, start, end) {
36
+ var attrs = (getAttrs instanceof Function ? getAttrs(match) : getAttrs) || {};
37
+ var tr = state.tr;
38
+ var fixedStart = Math.max(start, 1);
39
+ tr.delete(fixedStart, end);
40
+ var $start = tr.doc.resolve(fixedStart);
41
+ var range = $start.blockRange();
42
+ var wrapping = range && (0, _transform.findWrapping)(range, nodeType, attrs);
43
+ if (!wrapping || !range) {
44
+ return null;
45
+ }
46
+ var parentNodePosMapped = tr.mapping.map(range.start);
47
+ var parentNode = tr.doc.nodeAt(parentNodePosMapped);
48
+ var lastWrap = wrapping[wrapping.length - 1];
49
+ if (parentNode && lastWrap) {
50
+ var allowedMarks = lastWrap.type.allowedMarks(parentNode.marks) || [];
51
+ tr.setNodeMarkup(parentNodePosMapped, parentNode.type, parentNode.attrs, allowedMarks);
52
+ }
53
+ tr.wrap(range, wrapping);
54
+ var before = tr.doc.resolve(fixedStart - 1).nodeBefore;
55
+ if (before && before.type === nodeType && (0, _transform.canJoin)(tr.doc, fixedStart - 1) && (!joinPredicate || joinPredicate(match, before, _analytics.JOIN_SCENARIOS_WHEN_TYPING_TO_INSERT_LIST.JOINED_TO_LIST_ABOVE))) {
56
+ tr.join(fixedStart - 1);
57
+ }
58
+ return tr;
59
+ };
60
+ return createRule(match, handler);
61
+ };
62
+ exports.createWrappingJoinRule = createWrappingJoinRule;
63
+ var createRule = function createRule(match, handler) {
64
+ return {
65
+ match: match,
66
+ handler: handler,
67
+ onHandlerApply: function onHandlerApply(_state, tr) {
68
+ (0, _history.closeHistory)(tr);
69
+ }
70
+ };
71
+ };
72
+ exports.createRule = createRule;
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/editor-common",
3
- "version": "74.33.0",
3
+ "version": "74.34.1",
4
4
  "sideEffects": false
5
5
  }
@@ -77,7 +77,7 @@ const arrowKeysMap = {
77
77
  const tooltipShortcutStyle = css`
78
78
  border-radius: 2px;
79
79
  background-color: ${`var(--ds-background-inverse-subtle, ${N400})`};
80
- padding: 0 2px;
80
+ padding: 0 ${"var(--ds-space-025, 2px)"};
81
81
 
82
82
  /* TODO: fix in develop: https://atlassian.slack.com/archives/CFG3PSQ9E/p1647395052443259?thread_ts=1647394572.556029&cid=CFG3PSQ9E */
83
83
  /* stylelint-disable-next-line */
@@ -205,4 +205,5 @@ export function findKeyMapForBrowser(keyMap) {
205
205
  }
206
206
  return;
207
207
  }
208
- export { DOWN, HEADING_KEYS, KEY_0, KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, LEFT, RIGHT, UP } from './consts';
208
+ export { DOWN, HEADING_KEYS, KEY_0, KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, LEFT, RIGHT, UP } from './consts';
209
+ export { keymap } from './keymap';
@@ -0,0 +1,33 @@
1
+ import { base, keyName } from 'w3c-keyname';
2
+ import { keydownHandler } from '@atlaskit/editor-prosemirror/keymap';
3
+ import { SafePlugin } from '../safe-plugin';
4
+
5
+ /**
6
+ * A workaround for mostly Cyrillic but should have a positive affect
7
+ * on other languages / layouts. Attempts a similar approach to OS X.
8
+ * @see ED-7310
9
+ * @see https://github.com/ProseMirror/prosemirror/issues/957
10
+ * @param bindings
11
+ */
12
+ export function keymap(bindings) {
13
+ return new SafePlugin({
14
+ props: {
15
+ handleKeyDown(view, event) {
16
+ const name = keyName(event);
17
+ let keyboardEvent = event;
18
+ if (event.ctrlKey && name.length === 1 &&
19
+ // Check the unicode of the character to
20
+ // assert that its not an ASCII character.
21
+ // These are characters outside Latin's range.
22
+ /[^\u0000-\u007f]/.test(name)) {
23
+ keyboardEvent = new KeyboardEvent('keydown', {
24
+ key: base[event.keyCode],
25
+ code: event.code,
26
+ ctrlKey: true
27
+ });
28
+ }
29
+ return keydownHandler(bindings)(view, keyboardEvent);
30
+ }
31
+ }
32
+ });
33
+ }
@@ -1,6 +1,6 @@
1
1
  const SENTRY_DSN = 'https://0b10c8e02fb44d8796c047b102c9bee8@o55978.ingest.sentry.io/4505129224110080';
2
2
  const packageName = 'editor-common'; // Sentry doesn't accept '/' in its releases https://docs.sentry.io/platforms/javascript/configuration/releases/
3
- const packageVersion = "74.33.0";
3
+ const packageVersion = "74.34.1";
4
4
  const sanitiseSentryEvents = (data, _hint) => {
5
5
  // Remove URL as it has UGC
6
6
  // TODO: Sanitise the URL instead of just removing it
@@ -8,7 +8,7 @@ import { themed } from '@atlaskit/theme/components';
8
8
  import { borderRadius } from '@atlaskit/theme/constants';
9
9
  import Layer from '../Layer';
10
10
  const packageName = "@atlaskit/editor-common";
11
- const packageVersion = "74.33.0";
11
+ const packageVersion = "74.34.1";
12
12
  const halfFocusRing = 1;
13
13
  const dropOffset = '0, 8';
14
14
  class DropList extends Component {