@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.
- package/CHANGELOG.md +16 -0
- package/dist/cjs/keymaps/index.js +8 -1
- package/dist/cjs/keymaps/keymap.js +38 -0
- package/dist/cjs/monitoring/error.js +1 -1
- package/dist/cjs/ui/DropList/index.js +1 -1
- package/dist/cjs/utils/commands.js +180 -15
- package/dist/cjs/utils/editor-core-utils.js +53 -3
- package/dist/cjs/utils/index.js +48 -0
- package/dist/cjs/utils/input-rules.js +48 -2
- package/dist/cjs/version.json +1 -1
- package/dist/es2019/keymaps/index.js +3 -2
- package/dist/es2019/keymaps/keymap.js +33 -0
- package/dist/es2019/monitoring/error.js +1 -1
- package/dist/es2019/ui/DropList/index.js +1 -1
- package/dist/es2019/utils/commands.js +173 -2
- package/dist/es2019/utils/editor-core-utils.js +46 -1
- package/dist/es2019/utils/index.js +3 -3
- package/dist/es2019/utils/input-rules.js +45 -0
- package/dist/es2019/version.json +1 -1
- package/dist/esm/keymaps/index.js +3 -2
- package/dist/esm/keymaps/keymap.js +33 -0
- package/dist/esm/monitoring/error.js +1 -1
- package/dist/esm/ui/DropList/index.js +1 -1
- package/dist/esm/utils/commands.js +170 -14
- package/dist/esm/utils/editor-core-utils.js +47 -0
- package/dist/esm/utils/index.js +3 -3
- package/dist/esm/utils/input-rules.js +44 -0
- package/dist/esm/version.json +1 -1
- package/dist/types/keymaps/index.d.ts +1 -0
- package/dist/types/keymaps/keymap.d.ts +11 -0
- package/dist/types/types/block-type.d.ts +1 -0
- package/dist/types/types/feature-flags.d.ts +0 -18
- package/dist/types/types/index.d.ts +1 -1
- package/dist/types/types/input-rules.d.ts +1 -1
- package/dist/types/utils/commands.d.ts +11 -5
- package/dist/types/utils/editor-core-utils.d.ts +7 -2
- package/dist/types/utils/index.d.ts +3 -3
- package/dist/types/utils/input-rules.d.ts +12 -4
- package/dist/types-ts4.5/keymaps/index.d.ts +1 -0
- package/dist/types-ts4.5/keymaps/keymap.d.ts +11 -0
- package/dist/types-ts4.5/types/block-type.d.ts +1 -0
- package/dist/types-ts4.5/types/feature-flags.d.ts +0 -18
- package/dist/types-ts4.5/types/index.d.ts +1 -1
- package/dist/types-ts4.5/types/input-rules.d.ts +1 -1
- package/dist/types-ts4.5/utils/commands.d.ts +11 -5
- package/dist/types-ts4.5/utils/editor-core-utils.d.ts +7 -2
- package/dist/types-ts4.5/utils/index.d.ts +3 -3
- package/dist/types-ts4.5/utils/input-rules.d.ts +12 -4
- 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
|
|
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.
|
|
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.
|
|
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.
|
|
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$
|
|
78
|
-
_state$
|
|
79
|
-
pos = _state$
|
|
80
|
-
parent = _state$
|
|
81
|
-
$head = _state$
|
|
82
|
-
empty = _state$
|
|
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$
|
|
117
|
-
empty = _state$
|
|
118
|
-
$from = _state$
|
|
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$
|
|
124
|
-
empty = _state$
|
|
125
|
-
$from = _state$
|
|
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.
|
|
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
|
+
};
|
package/dist/cjs/utils/index.js
CHANGED
|
@@ -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;
|
package/dist/cjs/version.json
CHANGED
|
@@ -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.
|
|
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.
|
|
11
|
+
const packageVersion = "74.34.1";
|
|
12
12
|
const halfFocusRing = 1;
|
|
13
13
|
const dropOffset = '0, 8';
|
|
14
14
|
class DropList extends Component {
|