@atlaskit/editor-common 96.7.1 → 96.8.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 +17 -0
- package/dist/cjs/messages/layout.js +5 -0
- package/dist/cjs/monitoring/error.js +1 -1
- package/dist/cjs/resizer/BreakoutResizer.js +101 -1
- package/dist/cjs/ui/DropList/index.js +1 -1
- package/dist/es2019/messages/layout.js +5 -0
- package/dist/es2019/monitoring/error.js +1 -1
- package/dist/es2019/resizer/BreakoutResizer.js +102 -2
- package/dist/es2019/ui/DropList/index.js +1 -1
- package/dist/esm/messages/layout.js +5 -0
- package/dist/esm/monitoring/error.js +1 -1
- package/dist/esm/resizer/BreakoutResizer.js +102 -2
- package/dist/esm/ui/DropList/index.js +1 -1
- package/dist/types/messages/layout.d.ts +5 -0
- package/dist/types-ts4.5/messages/layout.d.ts +5 -0
- package/package.json +6 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
# @atlaskit/editor-common
|
|
2
2
|
|
|
3
|
+
## 96.8.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#181266](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/181266)
|
|
8
|
+
[`4b4994d4a2620`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/4b4994d4a2620) -
|
|
9
|
+
ED-25613: Keyboard shortcuts to resize layout
|
|
10
|
+
- Updated dependencies
|
|
11
|
+
|
|
12
|
+
## 96.8.0
|
|
13
|
+
|
|
14
|
+
### Minor Changes
|
|
15
|
+
|
|
16
|
+
- [#180960](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/180960)
|
|
17
|
+
[`3ee72a54bc1bb`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/3ee72a54bc1bb) -
|
|
18
|
+
ED-26040 fix editor layout padding issue
|
|
19
|
+
|
|
3
20
|
## 96.7.1
|
|
4
21
|
|
|
5
22
|
### Patch Changes
|
|
@@ -80,5 +80,10 @@ var toolbarMessages = exports.toolbarMessages = (0, _reactIntlNext.defineMessage
|
|
|
80
80
|
id: 'fabric.editor.layout.columnOption',
|
|
81
81
|
defaultMessage: '{count, plural, one { Column} other {{count} Columns}}',
|
|
82
82
|
description: 'column option text for layout'
|
|
83
|
+
},
|
|
84
|
+
resizeLayout: {
|
|
85
|
+
id: 'fabric.editor.layout.resizeLayout',
|
|
86
|
+
defaultMessage: 'Resize layout',
|
|
87
|
+
description: 'resize layout'
|
|
83
88
|
}
|
|
84
89
|
});
|
|
@@ -17,7 +17,7 @@ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return
|
|
|
17
17
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
18
18
|
var SENTRY_DSN = 'https://0b10c8e02fb44d8796c047b102c9bee8@o55978.ingest.sentry.io/4505129224110080';
|
|
19
19
|
var packageName = 'editor-common'; // Sentry doesn't accept '/' in its releases https://docs.sentry.io/platforms/javascript/configuration/releases/
|
|
20
|
-
var packageVersion = "96.
|
|
20
|
+
var packageVersion = "96.8.1";
|
|
21
21
|
var sanitiseSentryEvents = function sanitiseSentryEvents(data, _hint) {
|
|
22
22
|
// Remove URL as it has UGC
|
|
23
23
|
// TODO: Sanitise the URL instead of just removing it
|
|
@@ -8,16 +8,19 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
8
8
|
exports.ignoreResizerMutations = exports.BreakoutResizer = void 0;
|
|
9
9
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
10
10
|
var _react = _interopRequireWildcard(require("react"));
|
|
11
|
+
var _bindEventListener = require("bind-event-listener");
|
|
11
12
|
var _editorSharedStyles = require("@atlaskit/editor-shared-styles");
|
|
12
13
|
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
13
14
|
var _experiments = require("@atlaskit/tmp-editor-statsig/experiments");
|
|
14
15
|
var _analytics = require("../analytics");
|
|
15
16
|
var _styles = require("../styles");
|
|
17
|
+
var _browser = require("../utils/browser");
|
|
16
18
|
var _Resizer = _interopRequireDefault(require("./Resizer"));
|
|
17
19
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
18
20
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
19
21
|
var breakoutSupportedNodes = ['layoutSection', 'expand', 'codeBlock'];
|
|
20
22
|
var getHandleStyle = function getHandleStyle(node) {
|
|
23
|
+
var layoutMarginOffset = (0, _platformFeatureFlags.fg)('platform_editor_advanced_layouts_post_fix_patch_2') ? 12 : 8;
|
|
21
24
|
switch (node) {
|
|
22
25
|
case 'codeBlock':
|
|
23
26
|
return {
|
|
@@ -30,7 +33,7 @@ var getHandleStyle = function getHandleStyle(node) {
|
|
|
30
33
|
};
|
|
31
34
|
// expand and layout section elements have a negative margin applied
|
|
32
35
|
default:
|
|
33
|
-
var handleOffset = (0, _experiments.editorExperiment)('nested-dnd', true) ? _styles.LAYOUT_SECTION_MARGIN * 2 +
|
|
36
|
+
var handleOffset = (0, _experiments.editorExperiment)('nested-dnd', true) ? _styles.LAYOUT_SECTION_MARGIN * 2 + layoutMarginOffset : _styles.LAYOUT_COLUMN_PADDING * 2;
|
|
34
37
|
return {
|
|
35
38
|
left: {
|
|
36
39
|
left: "-".concat(handleOffset, "px"),
|
|
@@ -70,6 +73,7 @@ var resizingStyles = {
|
|
|
70
73
|
var defaultStyles = {
|
|
71
74
|
display: 'grid'
|
|
72
75
|
};
|
|
76
|
+
var RESIZE_STEP_VALUE = 10;
|
|
73
77
|
|
|
74
78
|
/**
|
|
75
79
|
* BreakoutResizer is a common component used to resize nodes that support the 'Breakout' mark, so it requires
|
|
@@ -98,6 +102,8 @@ var BreakoutResizer = exports.BreakoutResizer = function BreakoutResizer(_ref) {
|
|
|
98
102
|
maxWidth = _useState2$.maxWidth,
|
|
99
103
|
isResizing = _useState2$.isResizing,
|
|
100
104
|
setResizingState = _useState2[1];
|
|
105
|
+
var areResizeMetaKeysPressed = (0, _react.useRef)(false);
|
|
106
|
+
var resizerRef = (0, _react.useRef)(null);
|
|
101
107
|
|
|
102
108
|
// Relying on re-renders caused by selection changes inside/around node
|
|
103
109
|
var isSelectionInNode = (0, _react.useMemo)(function () {
|
|
@@ -175,6 +181,99 @@ var BreakoutResizer = exports.BreakoutResizer = function BreakoutResizer(_ref) {
|
|
|
175
181
|
maxWidth: undefined
|
|
176
182
|
});
|
|
177
183
|
}, [getPos, editorView, displayGapCursor, editorAnalyticsApi]);
|
|
184
|
+
var handleEscape = (0, _react.useCallback)(function () {
|
|
185
|
+
editorView === null || editorView === void 0 || editorView.focus();
|
|
186
|
+
}, [editorView]);
|
|
187
|
+
var handleLayoutSizeChangeOnKeypress = (0, _react.useCallback)(function (step) {
|
|
188
|
+
if (!parentRef) {
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
var resizerItem = parentRef.closest('.resizer-item');
|
|
192
|
+
if (!(resizerItem instanceof HTMLElement)) {
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
var newWidth = resizerItem.offsetWidth + step;
|
|
196
|
+
if (maxWidth && newWidth > maxWidth || minWidth && newWidth < minWidth) {
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
handleResizeStop({
|
|
200
|
+
width: resizerItem.offsetWidth,
|
|
201
|
+
x: 0,
|
|
202
|
+
y: 0,
|
|
203
|
+
height: 0
|
|
204
|
+
}, {
|
|
205
|
+
width: step,
|
|
206
|
+
height: 0
|
|
207
|
+
});
|
|
208
|
+
}, [handleResizeStop, maxWidth, minWidth, parentRef]);
|
|
209
|
+
var resizeHandleKeyDownHandler = (0, _react.useCallback)(function (event) {
|
|
210
|
+
var isBracketKey = event.code === 'BracketRight' || event.code === 'BracketLeft';
|
|
211
|
+
var metaKey = _browser.browser.mac ? event.metaKey : event.ctrlKey;
|
|
212
|
+
if (event.altKey || metaKey || event.shiftKey) {
|
|
213
|
+
areResizeMetaKeysPressed.current = true;
|
|
214
|
+
}
|
|
215
|
+
if (event.altKey && metaKey) {
|
|
216
|
+
if (isBracketKey) {
|
|
217
|
+
event.preventDefault();
|
|
218
|
+
handleLayoutSizeChangeOnKeypress(event.code === 'BracketRight' ? RESIZE_STEP_VALUE : -RESIZE_STEP_VALUE);
|
|
219
|
+
}
|
|
220
|
+
} else if (!areResizeMetaKeysPressed.current) {
|
|
221
|
+
handleEscape();
|
|
222
|
+
}
|
|
223
|
+
}, [handleEscape, handleLayoutSizeChangeOnKeypress]);
|
|
224
|
+
var resizeHandleKeyUpHandler = (0, _react.useCallback)(function (event) {
|
|
225
|
+
if (event.altKey || event.metaKey) {
|
|
226
|
+
areResizeMetaKeysPressed.current = false;
|
|
227
|
+
}
|
|
228
|
+
return;
|
|
229
|
+
}, [areResizeMetaKeysPressed]);
|
|
230
|
+
var resizerGlobalKeyDownHandler = (0, _react.useCallback)(function (event) {
|
|
231
|
+
if (!resizerRef.current) {
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
var resizeHandleThumbEl = resizerRef.current.getResizerThumbEl();
|
|
235
|
+
var metaKey = _browser.browser.mac ? event.metaKey : event.ctrlKey;
|
|
236
|
+
var isTargetResizeHandle = event.target instanceof HTMLElement && event.target.classList.contains('resizer-handle-thumb');
|
|
237
|
+
if (event.altKey && event.shiftKey && metaKey && event.code === 'KeyR' || isTargetResizeHandle && (event.altKey || metaKey || event.shiftKey)) {
|
|
238
|
+
event.preventDefault();
|
|
239
|
+
if (!resizeHandleThumbEl) {
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
resizeHandleThumbEl.focus();
|
|
243
|
+
resizeHandleThumbEl.scrollIntoView({
|
|
244
|
+
behavior: 'smooth',
|
|
245
|
+
block: 'center',
|
|
246
|
+
inline: 'nearest'
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
}, [resizerRef]);
|
|
250
|
+
(0, _react.useLayoutEffect)(function () {
|
|
251
|
+
if (!resizerRef.current || !editorView) {
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
var resizeHandleThumbEl = resizerRef.current.getResizerThumbEl();
|
|
255
|
+
if (!resizeHandleThumbEl) {
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
if ((0, _platformFeatureFlags.fg)('platform_editor_advanced_layouts_a11y')) {
|
|
259
|
+
var editorViewDom = editorView.dom;
|
|
260
|
+
var unbindEditorViewDom = (0, _bindEventListener.bind)(editorViewDom, {
|
|
261
|
+
type: 'keydown',
|
|
262
|
+
listener: resizerGlobalKeyDownHandler
|
|
263
|
+
});
|
|
264
|
+
var unbindResizeHandle = (0, _bindEventListener.bindAll)(resizeHandleThumbEl, [{
|
|
265
|
+
type: 'keydown',
|
|
266
|
+
listener: resizeHandleKeyDownHandler
|
|
267
|
+
}, {
|
|
268
|
+
type: 'keyup',
|
|
269
|
+
listener: resizeHandleKeyUpHandler
|
|
270
|
+
}]);
|
|
271
|
+
return function () {
|
|
272
|
+
unbindEditorViewDom();
|
|
273
|
+
unbindResizeHandle();
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
}, [editorView, resizerGlobalKeyDownHandler, resizeHandleKeyDownHandler, resizeHandleKeyUpHandler]);
|
|
178
277
|
(0, _react.useEffect)(function () {
|
|
179
278
|
// clean up gap cursor if node was unmounting when resizing (e.g. during collab)
|
|
180
279
|
return function () {
|
|
@@ -190,6 +289,7 @@ var BreakoutResizer = exports.BreakoutResizer = function BreakoutResizer(_ref) {
|
|
|
190
289
|
});
|
|
191
290
|
}
|
|
192
291
|
return /*#__PURE__*/_react.default.createElement(_Resizer.default, {
|
|
292
|
+
ref: resizerRef,
|
|
193
293
|
enable: {
|
|
194
294
|
left: true,
|
|
195
295
|
right: true
|
|
@@ -23,7 +23,7 @@ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.
|
|
|
23
23
|
* @jsx jsx
|
|
24
24
|
*/ // eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766
|
|
25
25
|
var packageName = "@atlaskit/editor-common";
|
|
26
|
-
var packageVersion = "96.
|
|
26
|
+
var packageVersion = "96.8.1";
|
|
27
27
|
var halfFocusRing = 1;
|
|
28
28
|
var dropOffset = '0, 8';
|
|
29
29
|
var DropList = /*#__PURE__*/function (_Component) {
|
|
@@ -74,5 +74,10 @@ export const toolbarMessages = defineMessages({
|
|
|
74
74
|
id: 'fabric.editor.layout.columnOption',
|
|
75
75
|
defaultMessage: '{count, plural, one { Column} other {{count} Columns}}',
|
|
76
76
|
description: 'column option text for layout'
|
|
77
|
+
},
|
|
78
|
+
resizeLayout: {
|
|
79
|
+
id: 'fabric.editor.layout.resizeLayout',
|
|
80
|
+
defaultMessage: 'Resize layout',
|
|
81
|
+
description: 'resize layout'
|
|
77
82
|
}
|
|
78
83
|
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { isFedRamp } from './environment';
|
|
2
2
|
const SENTRY_DSN = 'https://0b10c8e02fb44d8796c047b102c9bee8@o55978.ingest.sentry.io/4505129224110080';
|
|
3
3
|
const packageName = 'editor-common'; // Sentry doesn't accept '/' in its releases https://docs.sentry.io/platforms/javascript/configuration/releases/
|
|
4
|
-
const packageVersion = "96.
|
|
4
|
+
const packageVersion = "96.8.1";
|
|
5
5
|
const sanitiseSentryEvents = (data, _hint) => {
|
|
6
6
|
// Remove URL as it has UGC
|
|
7
7
|
// TODO: Sanitise the URL instead of just removing it
|
|
@@ -1,12 +1,15 @@
|
|
|
1
|
-
import React, { useCallback, useEffect, useMemo, useState } from 'react';
|
|
1
|
+
import React, { useCallback, useEffect, useMemo, useRef, useState, useLayoutEffect } from 'react';
|
|
2
|
+
import { bind, bindAll } from 'bind-event-listener';
|
|
2
3
|
import { akEditorDefaultLayoutWidth, akEditorFullWidthLayoutWidth, akEditorGutterPadding, akEditorGutterPaddingDynamic } from '@atlaskit/editor-shared-styles';
|
|
3
4
|
import { fg } from '@atlaskit/platform-feature-flags';
|
|
4
5
|
import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
|
|
5
6
|
import { ACTION, ACTION_SUBJECT, EVENT_TYPE } from '../analytics';
|
|
6
7
|
import { LAYOUT_COLUMN_PADDING, LAYOUT_SECTION_MARGIN } from '../styles';
|
|
8
|
+
import { browser } from '../utils/browser';
|
|
7
9
|
import Resizer from './Resizer';
|
|
8
10
|
const breakoutSupportedNodes = ['layoutSection', 'expand', 'codeBlock'];
|
|
9
11
|
const getHandleStyle = node => {
|
|
12
|
+
const layoutMarginOffset = fg('platform_editor_advanced_layouts_post_fix_patch_2') ? 12 : 8;
|
|
10
13
|
switch (node) {
|
|
11
14
|
case 'codeBlock':
|
|
12
15
|
return {
|
|
@@ -19,7 +22,7 @@ const getHandleStyle = node => {
|
|
|
19
22
|
};
|
|
20
23
|
// expand and layout section elements have a negative margin applied
|
|
21
24
|
default:
|
|
22
|
-
const handleOffset = editorExperiment('nested-dnd', true) ? LAYOUT_SECTION_MARGIN * 2 +
|
|
25
|
+
const handleOffset = editorExperiment('nested-dnd', true) ? LAYOUT_SECTION_MARGIN * 2 + layoutMarginOffset : LAYOUT_COLUMN_PADDING * 2;
|
|
23
26
|
return {
|
|
24
27
|
left: {
|
|
25
28
|
left: `-${handleOffset}px`,
|
|
@@ -59,6 +62,7 @@ const resizingStyles = {
|
|
|
59
62
|
const defaultStyles = {
|
|
60
63
|
display: 'grid'
|
|
61
64
|
};
|
|
65
|
+
const RESIZE_STEP_VALUE = 10;
|
|
62
66
|
|
|
63
67
|
/**
|
|
64
68
|
* BreakoutResizer is a common component used to resize nodes that support the 'Breakout' mark, so it requires
|
|
@@ -86,6 +90,8 @@ const BreakoutResizer = ({
|
|
|
86
90
|
maxWidth: undefined,
|
|
87
91
|
isResizing: false
|
|
88
92
|
});
|
|
93
|
+
const areResizeMetaKeysPressed = useRef(false);
|
|
94
|
+
const resizerRef = useRef(null);
|
|
89
95
|
|
|
90
96
|
// Relying on re-renders caused by selection changes inside/around node
|
|
91
97
|
const isSelectionInNode = useMemo(() => {
|
|
@@ -170,6 +176,99 @@ const BreakoutResizer = ({
|
|
|
170
176
|
maxWidth: undefined
|
|
171
177
|
});
|
|
172
178
|
}, [getPos, editorView, displayGapCursor, editorAnalyticsApi]);
|
|
179
|
+
const handleEscape = useCallback(() => {
|
|
180
|
+
editorView === null || editorView === void 0 ? void 0 : editorView.focus();
|
|
181
|
+
}, [editorView]);
|
|
182
|
+
const handleLayoutSizeChangeOnKeypress = useCallback(step => {
|
|
183
|
+
if (!parentRef) {
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
const resizerItem = parentRef.closest('.resizer-item');
|
|
187
|
+
if (!(resizerItem instanceof HTMLElement)) {
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
const newWidth = resizerItem.offsetWidth + step;
|
|
191
|
+
if (maxWidth && newWidth > maxWidth || minWidth && newWidth < minWidth) {
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
handleResizeStop({
|
|
195
|
+
width: resizerItem.offsetWidth,
|
|
196
|
+
x: 0,
|
|
197
|
+
y: 0,
|
|
198
|
+
height: 0
|
|
199
|
+
}, {
|
|
200
|
+
width: step,
|
|
201
|
+
height: 0
|
|
202
|
+
});
|
|
203
|
+
}, [handleResizeStop, maxWidth, minWidth, parentRef]);
|
|
204
|
+
const resizeHandleKeyDownHandler = useCallback(event => {
|
|
205
|
+
const isBracketKey = event.code === 'BracketRight' || event.code === 'BracketLeft';
|
|
206
|
+
const metaKey = browser.mac ? event.metaKey : event.ctrlKey;
|
|
207
|
+
if (event.altKey || metaKey || event.shiftKey) {
|
|
208
|
+
areResizeMetaKeysPressed.current = true;
|
|
209
|
+
}
|
|
210
|
+
if (event.altKey && metaKey) {
|
|
211
|
+
if (isBracketKey) {
|
|
212
|
+
event.preventDefault();
|
|
213
|
+
handleLayoutSizeChangeOnKeypress(event.code === 'BracketRight' ? RESIZE_STEP_VALUE : -RESIZE_STEP_VALUE);
|
|
214
|
+
}
|
|
215
|
+
} else if (!areResizeMetaKeysPressed.current) {
|
|
216
|
+
handleEscape();
|
|
217
|
+
}
|
|
218
|
+
}, [handleEscape, handleLayoutSizeChangeOnKeypress]);
|
|
219
|
+
const resizeHandleKeyUpHandler = useCallback(event => {
|
|
220
|
+
if (event.altKey || event.metaKey) {
|
|
221
|
+
areResizeMetaKeysPressed.current = false;
|
|
222
|
+
}
|
|
223
|
+
return;
|
|
224
|
+
}, [areResizeMetaKeysPressed]);
|
|
225
|
+
const resizerGlobalKeyDownHandler = useCallback(event => {
|
|
226
|
+
if (!resizerRef.current) {
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
const resizeHandleThumbEl = resizerRef.current.getResizerThumbEl();
|
|
230
|
+
const metaKey = browser.mac ? event.metaKey : event.ctrlKey;
|
|
231
|
+
const isTargetResizeHandle = event.target instanceof HTMLElement && event.target.classList.contains('resizer-handle-thumb');
|
|
232
|
+
if (event.altKey && event.shiftKey && metaKey && event.code === 'KeyR' || isTargetResizeHandle && (event.altKey || metaKey || event.shiftKey)) {
|
|
233
|
+
event.preventDefault();
|
|
234
|
+
if (!resizeHandleThumbEl) {
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
resizeHandleThumbEl.focus();
|
|
238
|
+
resizeHandleThumbEl.scrollIntoView({
|
|
239
|
+
behavior: 'smooth',
|
|
240
|
+
block: 'center',
|
|
241
|
+
inline: 'nearest'
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
}, [resizerRef]);
|
|
245
|
+
useLayoutEffect(() => {
|
|
246
|
+
if (!resizerRef.current || !editorView) {
|
|
247
|
+
return;
|
|
248
|
+
}
|
|
249
|
+
const resizeHandleThumbEl = resizerRef.current.getResizerThumbEl();
|
|
250
|
+
if (!resizeHandleThumbEl) {
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
253
|
+
if (fg('platform_editor_advanced_layouts_a11y')) {
|
|
254
|
+
const editorViewDom = editorView.dom;
|
|
255
|
+
const unbindEditorViewDom = bind(editorViewDom, {
|
|
256
|
+
type: 'keydown',
|
|
257
|
+
listener: resizerGlobalKeyDownHandler
|
|
258
|
+
});
|
|
259
|
+
const unbindResizeHandle = bindAll(resizeHandleThumbEl, [{
|
|
260
|
+
type: 'keydown',
|
|
261
|
+
listener: resizeHandleKeyDownHandler
|
|
262
|
+
}, {
|
|
263
|
+
type: 'keyup',
|
|
264
|
+
listener: resizeHandleKeyUpHandler
|
|
265
|
+
}]);
|
|
266
|
+
return () => {
|
|
267
|
+
unbindEditorViewDom();
|
|
268
|
+
unbindResizeHandle();
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
}, [editorView, resizerGlobalKeyDownHandler, resizeHandleKeyDownHandler, resizeHandleKeyUpHandler]);
|
|
173
272
|
useEffect(() => {
|
|
174
273
|
// clean up gap cursor if node was unmounting when resizing (e.g. during collab)
|
|
175
274
|
return () => {
|
|
@@ -183,6 +282,7 @@ const BreakoutResizer = ({
|
|
|
183
282
|
});
|
|
184
283
|
}
|
|
185
284
|
return /*#__PURE__*/React.createElement(Resizer, {
|
|
285
|
+
ref: resizerRef,
|
|
186
286
|
enable: {
|
|
187
287
|
left: true,
|
|
188
288
|
right: true
|
|
@@ -13,7 +13,7 @@ import withAnalyticsContext from '@atlaskit/analytics-next/withAnalyticsContext'
|
|
|
13
13
|
import withAnalyticsEvents from '@atlaskit/analytics-next/withAnalyticsEvents';
|
|
14
14
|
import Layer from '../Layer';
|
|
15
15
|
const packageName = "@atlaskit/editor-common";
|
|
16
|
-
const packageVersion = "96.
|
|
16
|
+
const packageVersion = "96.8.1";
|
|
17
17
|
const halfFocusRing = 1;
|
|
18
18
|
const dropOffset = '0, 8';
|
|
19
19
|
class DropList extends Component {
|
|
@@ -74,5 +74,10 @@ export var toolbarMessages = defineMessages({
|
|
|
74
74
|
id: 'fabric.editor.layout.columnOption',
|
|
75
75
|
defaultMessage: '{count, plural, one { Column} other {{count} Columns}}',
|
|
76
76
|
description: 'column option text for layout'
|
|
77
|
+
},
|
|
78
|
+
resizeLayout: {
|
|
79
|
+
id: 'fabric.editor.layout.resizeLayout',
|
|
80
|
+
defaultMessage: 'Resize layout',
|
|
81
|
+
description: 'resize layout'
|
|
77
82
|
}
|
|
78
83
|
});
|
|
@@ -7,7 +7,7 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
|
|
|
7
7
|
import { isFedRamp } from './environment';
|
|
8
8
|
var SENTRY_DSN = 'https://0b10c8e02fb44d8796c047b102c9bee8@o55978.ingest.sentry.io/4505129224110080';
|
|
9
9
|
var packageName = 'editor-common'; // Sentry doesn't accept '/' in its releases https://docs.sentry.io/platforms/javascript/configuration/releases/
|
|
10
|
-
var packageVersion = "96.
|
|
10
|
+
var packageVersion = "96.8.1";
|
|
11
11
|
var sanitiseSentryEvents = function sanitiseSentryEvents(data, _hint) {
|
|
12
12
|
// Remove URL as it has UGC
|
|
13
13
|
// TODO: Sanitise the URL instead of just removing it
|
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
2
|
-
import React, { useCallback, useEffect, useMemo, useState } from 'react';
|
|
2
|
+
import React, { useCallback, useEffect, useMemo, useRef, useState, useLayoutEffect } from 'react';
|
|
3
|
+
import { bind, bindAll } from 'bind-event-listener';
|
|
3
4
|
import { akEditorDefaultLayoutWidth, akEditorFullWidthLayoutWidth, akEditorGutterPadding, akEditorGutterPaddingDynamic } from '@atlaskit/editor-shared-styles';
|
|
4
5
|
import { fg } from '@atlaskit/platform-feature-flags';
|
|
5
6
|
import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
|
|
6
7
|
import { ACTION, ACTION_SUBJECT, EVENT_TYPE } from '../analytics';
|
|
7
8
|
import { LAYOUT_COLUMN_PADDING, LAYOUT_SECTION_MARGIN } from '../styles';
|
|
9
|
+
import { browser } from '../utils/browser';
|
|
8
10
|
import Resizer from './Resizer';
|
|
9
11
|
var breakoutSupportedNodes = ['layoutSection', 'expand', 'codeBlock'];
|
|
10
12
|
var getHandleStyle = function getHandleStyle(node) {
|
|
13
|
+
var layoutMarginOffset = fg('platform_editor_advanced_layouts_post_fix_patch_2') ? 12 : 8;
|
|
11
14
|
switch (node) {
|
|
12
15
|
case 'codeBlock':
|
|
13
16
|
return {
|
|
@@ -20,7 +23,7 @@ var getHandleStyle = function getHandleStyle(node) {
|
|
|
20
23
|
};
|
|
21
24
|
// expand and layout section elements have a negative margin applied
|
|
22
25
|
default:
|
|
23
|
-
var handleOffset = editorExperiment('nested-dnd', true) ? LAYOUT_SECTION_MARGIN * 2 +
|
|
26
|
+
var handleOffset = editorExperiment('nested-dnd', true) ? LAYOUT_SECTION_MARGIN * 2 + layoutMarginOffset : LAYOUT_COLUMN_PADDING * 2;
|
|
24
27
|
return {
|
|
25
28
|
left: {
|
|
26
29
|
left: "-".concat(handleOffset, "px"),
|
|
@@ -60,6 +63,7 @@ var resizingStyles = {
|
|
|
60
63
|
var defaultStyles = {
|
|
61
64
|
display: 'grid'
|
|
62
65
|
};
|
|
66
|
+
var RESIZE_STEP_VALUE = 10;
|
|
63
67
|
|
|
64
68
|
/**
|
|
65
69
|
* BreakoutResizer is a common component used to resize nodes that support the 'Breakout' mark, so it requires
|
|
@@ -88,6 +92,8 @@ var BreakoutResizer = function BreakoutResizer(_ref) {
|
|
|
88
92
|
maxWidth = _useState2$.maxWidth,
|
|
89
93
|
isResizing = _useState2$.isResizing,
|
|
90
94
|
setResizingState = _useState2[1];
|
|
95
|
+
var areResizeMetaKeysPressed = useRef(false);
|
|
96
|
+
var resizerRef = useRef(null);
|
|
91
97
|
|
|
92
98
|
// Relying on re-renders caused by selection changes inside/around node
|
|
93
99
|
var isSelectionInNode = useMemo(function () {
|
|
@@ -165,6 +171,99 @@ var BreakoutResizer = function BreakoutResizer(_ref) {
|
|
|
165
171
|
maxWidth: undefined
|
|
166
172
|
});
|
|
167
173
|
}, [getPos, editorView, displayGapCursor, editorAnalyticsApi]);
|
|
174
|
+
var handleEscape = useCallback(function () {
|
|
175
|
+
editorView === null || editorView === void 0 || editorView.focus();
|
|
176
|
+
}, [editorView]);
|
|
177
|
+
var handleLayoutSizeChangeOnKeypress = useCallback(function (step) {
|
|
178
|
+
if (!parentRef) {
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
var resizerItem = parentRef.closest('.resizer-item');
|
|
182
|
+
if (!(resizerItem instanceof HTMLElement)) {
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
var newWidth = resizerItem.offsetWidth + step;
|
|
186
|
+
if (maxWidth && newWidth > maxWidth || minWidth && newWidth < minWidth) {
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
handleResizeStop({
|
|
190
|
+
width: resizerItem.offsetWidth,
|
|
191
|
+
x: 0,
|
|
192
|
+
y: 0,
|
|
193
|
+
height: 0
|
|
194
|
+
}, {
|
|
195
|
+
width: step,
|
|
196
|
+
height: 0
|
|
197
|
+
});
|
|
198
|
+
}, [handleResizeStop, maxWidth, minWidth, parentRef]);
|
|
199
|
+
var resizeHandleKeyDownHandler = useCallback(function (event) {
|
|
200
|
+
var isBracketKey = event.code === 'BracketRight' || event.code === 'BracketLeft';
|
|
201
|
+
var metaKey = browser.mac ? event.metaKey : event.ctrlKey;
|
|
202
|
+
if (event.altKey || metaKey || event.shiftKey) {
|
|
203
|
+
areResizeMetaKeysPressed.current = true;
|
|
204
|
+
}
|
|
205
|
+
if (event.altKey && metaKey) {
|
|
206
|
+
if (isBracketKey) {
|
|
207
|
+
event.preventDefault();
|
|
208
|
+
handleLayoutSizeChangeOnKeypress(event.code === 'BracketRight' ? RESIZE_STEP_VALUE : -RESIZE_STEP_VALUE);
|
|
209
|
+
}
|
|
210
|
+
} else if (!areResizeMetaKeysPressed.current) {
|
|
211
|
+
handleEscape();
|
|
212
|
+
}
|
|
213
|
+
}, [handleEscape, handleLayoutSizeChangeOnKeypress]);
|
|
214
|
+
var resizeHandleKeyUpHandler = useCallback(function (event) {
|
|
215
|
+
if (event.altKey || event.metaKey) {
|
|
216
|
+
areResizeMetaKeysPressed.current = false;
|
|
217
|
+
}
|
|
218
|
+
return;
|
|
219
|
+
}, [areResizeMetaKeysPressed]);
|
|
220
|
+
var resizerGlobalKeyDownHandler = useCallback(function (event) {
|
|
221
|
+
if (!resizerRef.current) {
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
var resizeHandleThumbEl = resizerRef.current.getResizerThumbEl();
|
|
225
|
+
var metaKey = browser.mac ? event.metaKey : event.ctrlKey;
|
|
226
|
+
var isTargetResizeHandle = event.target instanceof HTMLElement && event.target.classList.contains('resizer-handle-thumb');
|
|
227
|
+
if (event.altKey && event.shiftKey && metaKey && event.code === 'KeyR' || isTargetResizeHandle && (event.altKey || metaKey || event.shiftKey)) {
|
|
228
|
+
event.preventDefault();
|
|
229
|
+
if (!resizeHandleThumbEl) {
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
resizeHandleThumbEl.focus();
|
|
233
|
+
resizeHandleThumbEl.scrollIntoView({
|
|
234
|
+
behavior: 'smooth',
|
|
235
|
+
block: 'center',
|
|
236
|
+
inline: 'nearest'
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
}, [resizerRef]);
|
|
240
|
+
useLayoutEffect(function () {
|
|
241
|
+
if (!resizerRef.current || !editorView) {
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
var resizeHandleThumbEl = resizerRef.current.getResizerThumbEl();
|
|
245
|
+
if (!resizeHandleThumbEl) {
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
if (fg('platform_editor_advanced_layouts_a11y')) {
|
|
249
|
+
var editorViewDom = editorView.dom;
|
|
250
|
+
var unbindEditorViewDom = bind(editorViewDom, {
|
|
251
|
+
type: 'keydown',
|
|
252
|
+
listener: resizerGlobalKeyDownHandler
|
|
253
|
+
});
|
|
254
|
+
var unbindResizeHandle = bindAll(resizeHandleThumbEl, [{
|
|
255
|
+
type: 'keydown',
|
|
256
|
+
listener: resizeHandleKeyDownHandler
|
|
257
|
+
}, {
|
|
258
|
+
type: 'keyup',
|
|
259
|
+
listener: resizeHandleKeyUpHandler
|
|
260
|
+
}]);
|
|
261
|
+
return function () {
|
|
262
|
+
unbindEditorViewDom();
|
|
263
|
+
unbindResizeHandle();
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
}, [editorView, resizerGlobalKeyDownHandler, resizeHandleKeyDownHandler, resizeHandleKeyUpHandler]);
|
|
168
267
|
useEffect(function () {
|
|
169
268
|
// clean up gap cursor if node was unmounting when resizing (e.g. during collab)
|
|
170
269
|
return function () {
|
|
@@ -180,6 +279,7 @@ var BreakoutResizer = function BreakoutResizer(_ref) {
|
|
|
180
279
|
});
|
|
181
280
|
}
|
|
182
281
|
return /*#__PURE__*/React.createElement(Resizer, {
|
|
282
|
+
ref: resizerRef,
|
|
183
283
|
enable: {
|
|
184
284
|
left: true,
|
|
185
285
|
right: true
|
|
@@ -20,7 +20,7 @@ import withAnalyticsContext from '@atlaskit/analytics-next/withAnalyticsContext'
|
|
|
20
20
|
import withAnalyticsEvents from '@atlaskit/analytics-next/withAnalyticsEvents';
|
|
21
21
|
import Layer from '../Layer';
|
|
22
22
|
var packageName = "@atlaskit/editor-common";
|
|
23
|
-
var packageVersion = "96.
|
|
23
|
+
var packageVersion = "96.8.1";
|
|
24
24
|
var halfFocusRing = 1;
|
|
25
25
|
var dropOffset = '0, 8';
|
|
26
26
|
var DropList = /*#__PURE__*/function (_Component) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlaskit/editor-common",
|
|
3
|
-
"version": "96.
|
|
3
|
+
"version": "96.8.1",
|
|
4
4
|
"description": "A package that contains common classes and components for editor and renderer",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"registry": "https://registry.npmjs.org/"
|
|
@@ -140,7 +140,7 @@
|
|
|
140
140
|
"@atlaskit/media-file-preview": "^0.9.0",
|
|
141
141
|
"@atlaskit/media-picker": "^67.0.0",
|
|
142
142
|
"@atlaskit/media-ui": "^27.1.0",
|
|
143
|
-
"@atlaskit/media-viewer": "49.5.
|
|
143
|
+
"@atlaskit/media-viewer": "49.5.1",
|
|
144
144
|
"@atlaskit/mention": "^23.4.0",
|
|
145
145
|
"@atlaskit/menu": "^2.13.0",
|
|
146
146
|
"@atlaskit/onboarding": "^12.2.0",
|
|
@@ -163,6 +163,7 @@
|
|
|
163
163
|
"@sentry/browser": "^6.18.2",
|
|
164
164
|
"@sentry/integrations": "^6.18.2",
|
|
165
165
|
"@sentry/types": "^6.18.2",
|
|
166
|
+
"bind-event-listener": "^3.0.0",
|
|
166
167
|
"chromatism": "^2.6.0",
|
|
167
168
|
"classnames": "^2.2.5",
|
|
168
169
|
"clipboard-polyfill": "4.0.1",
|
|
@@ -304,6 +305,9 @@
|
|
|
304
305
|
"platform_editor_selection_toolbar_scroll_fix": {
|
|
305
306
|
"type": "boolean"
|
|
306
307
|
},
|
|
308
|
+
"platform_editor_advanced_layouts_a11y": {
|
|
309
|
+
"type": "boolean"
|
|
310
|
+
},
|
|
307
311
|
"platform_editor_legacy_content_macro": {
|
|
308
312
|
"type": "boolean"
|
|
309
313
|
},
|