@atlaskit/editor-common 102.11.3 → 102.11.5
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/extensions/messages.js +0 -5
- package/dist/cjs/monitoring/error.js +1 -1
- package/dist/cjs/ui/DropList/index.js +1 -1
- package/dist/cjs/ui-menu/Dropdown/index.js +15 -6
- package/dist/cjs/utils/calculate-toolbar-position.js +82 -3
- package/dist/cjs/utils/index.js +6 -0
- package/dist/es2019/extensions/messages.js +0 -5
- package/dist/es2019/monitoring/error.js +1 -1
- package/dist/es2019/ui/DropList/index.js +1 -1
- package/dist/es2019/ui-menu/Dropdown/index.js +15 -6
- package/dist/es2019/utils/calculate-toolbar-position.js +81 -0
- package/dist/es2019/utils/index.js +1 -1
- package/dist/esm/extensions/messages.js +0 -5
- package/dist/esm/monitoring/error.js +1 -1
- package/dist/esm/ui/DropList/index.js +1 -1
- package/dist/esm/ui-menu/Dropdown/index.js +15 -6
- package/dist/esm/utils/calculate-toolbar-position.js +81 -2
- package/dist/esm/utils/index.js +1 -1
- package/dist/types/extensions/messages.d.ts +0 -5
- package/dist/types/ui-menu/Dropdown/index.d.ts +6 -1
- package/dist/types/utils/calculate-toolbar-position.d.ts +1 -0
- package/dist/types/utils/index.d.ts +1 -1
- package/dist/types-ts4.5/extensions/messages.d.ts +0 -5
- package/dist/types-ts4.5/ui-menu/Dropdown/index.d.ts +9 -1
- package/dist/types-ts4.5/utils/calculate-toolbar-position.d.ts +1 -0
- package/dist/types-ts4.5/utils/index.d.ts +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# @atlaskit/editor-common
|
|
2
2
|
|
|
3
|
+
## 102.11.5
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#126837](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/pull-requests/126837)
|
|
8
|
+
[`3f513ff6dac97`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/3f513ff6dac97) -
|
|
9
|
+
[ux] Displays Text Formatting toolbar on CellSelection.
|
|
10
|
+
|
|
11
|
+
## 102.11.4
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- [#129262](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/pull-requests/129262)
|
|
16
|
+
[`9408a99b473bb`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/9408a99b473bb) -
|
|
17
|
+
EDF-2570 Fixed config panel not closing when navigating to other page issue is fixed.
|
|
18
|
+
|
|
3
19
|
## 102.11.3
|
|
4
20
|
|
|
5
21
|
### Patch Changes
|
|
@@ -137,10 +137,5 @@ var configPanelMessages = exports.configPanelMessages = (0, _reactIntlNext.defin
|
|
|
137
137
|
id: 'fabric.editor.configPanel.errorBoundary.note',
|
|
138
138
|
defaultMessage: "We've let the team know. You can still edit and publish this page, or check the error console for more information.",
|
|
139
139
|
description: 'Note for uncaught config panel error'
|
|
140
|
-
},
|
|
141
|
-
objectSidebarPanelHeaderLabel: {
|
|
142
|
-
id: 'fabric.editor.configPanel.objectSidebarPanelHeaderLabel',
|
|
143
|
-
defaultMessage: ' ',
|
|
144
|
-
description: 'Keep this empty. Defined it as headerLabel is required field.'
|
|
145
140
|
}
|
|
146
141
|
});
|
|
@@ -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 = "102.11.
|
|
20
|
+
var packageVersion = "102.11.5";
|
|
21
21
|
var sanitiseSentryEvents = function sanitiseSentryEvents(data, _hint) {
|
|
22
22
|
// Remove URL as it has UGC
|
|
23
23
|
// Ignored via go/ees007
|
|
@@ -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 = "102.11.
|
|
26
|
+
var packageVersion = "102.11.5";
|
|
27
27
|
var halfFocusRing = 1;
|
|
28
28
|
var dropOffset = '0, 8';
|
|
29
29
|
// Ignored via go/ees005
|
|
@@ -84,19 +84,28 @@ var Dropdown = exports.Dropdown = /*#__PURE__*/function (_PureComponent) {
|
|
|
84
84
|
zIndex = _this$props.zIndex,
|
|
85
85
|
arrowKeyNavigationProviderOptions = _this$props.arrowKeyNavigationProviderOptions,
|
|
86
86
|
dropdownListId = _this$props.dropdownListId,
|
|
87
|
-
alignDropdownWithParentElement = _this$props.alignDropdownWithParentElement
|
|
87
|
+
alignDropdownWithParentElement = _this$props.alignDropdownWithParentElement,
|
|
88
|
+
targetProp = _this$props.target,
|
|
89
|
+
forcePlacement = _this$props.forcePlacement,
|
|
90
|
+
alignX = _this$props.alignX,
|
|
91
|
+
alignY = _this$props.alignY,
|
|
92
|
+
offset = _this$props.offset;
|
|
88
93
|
return /*#__PURE__*/_react.default.createElement(_Popup.default, {
|
|
89
|
-
target: alignDropdownWithParentElement ? // Ignored via go/ees005
|
|
94
|
+
target: targetProp !== null && targetProp !== void 0 ? targetProp : alignDropdownWithParentElement ? // Ignored via go/ees005
|
|
90
95
|
// eslint-disable-next-line @atlaskit/editor/no-as-casting
|
|
91
96
|
target === null || target === void 0 ? void 0 : target.closest("[data-testid='editor-floating-toolbar']") : target,
|
|
92
97
|
mountTo: mountTo,
|
|
93
98
|
boundariesElement: boundariesElement,
|
|
94
99
|
scrollableElement: scrollableElement,
|
|
95
|
-
onPlacementChanged: this.updatePopupPlacement,
|
|
100
|
+
onPlacementChanged: forcePlacement ? undefined : this.updatePopupPlacement,
|
|
96
101
|
fitHeight: fitHeight,
|
|
97
102
|
fitWidth: fitWidth,
|
|
98
103
|
zIndex: zIndex,
|
|
99
|
-
allowOutOfBounds: alignDropdownWithParentElement
|
|
104
|
+
allowOutOfBounds: alignDropdownWithParentElement,
|
|
105
|
+
alignX: alignX,
|
|
106
|
+
alignY: alignY,
|
|
107
|
+
forcePlacement: forcePlacement,
|
|
108
|
+
offset: offset
|
|
100
109
|
}, /*#__PURE__*/_react.default.createElement(_ArrowKeyNavigationProvider.ArrowKeyNavigationProvider
|
|
101
110
|
// Ignored via go/ees005
|
|
102
111
|
// eslint-disable-next-line react/jsx-props-no-spreading
|
|
@@ -123,11 +132,11 @@ var Dropdown = exports.Dropdown = /*#__PURE__*/function (_PureComponent) {
|
|
|
123
132
|
var _this$props2 = this.props,
|
|
124
133
|
trigger = _this$props2.trigger,
|
|
125
134
|
isOpen = _this$props2.isOpen;
|
|
126
|
-
return /*#__PURE__*/_react.default.createElement(_uiReact.OutsideClickTargetRefContext.Consumer, null, function (setOutsideClickTargetRef) {
|
|
135
|
+
return trigger ? /*#__PURE__*/_react.default.createElement(_uiReact.OutsideClickTargetRefContext.Consumer, null, function (setOutsideClickTargetRef) {
|
|
127
136
|
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("div", {
|
|
128
137
|
ref: _this2.handleRef(setOutsideClickTargetRef)
|
|
129
138
|
}, trigger), isOpen ? _this2.renderDropdown() : null);
|
|
130
|
-
});
|
|
139
|
+
}) : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, isOpen ? this.renderDropdown() : null);
|
|
131
140
|
}
|
|
132
141
|
}]);
|
|
133
142
|
}(_react.PureComponent);
|
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.calculateToolbarPositionTrackHead = exports.calculateToolbarPositionAboveSelection = void 0;
|
|
6
|
+
exports.calculateToolbarPositionTrackHead = exports.calculateToolbarPositionOnCellSelection = exports.calculateToolbarPositionAboveSelection = void 0;
|
|
7
|
+
var _utils = require("@atlaskit/editor-prosemirror/utils");
|
|
8
|
+
var _cellSelection = require("@atlaskit/editor-tables/cell-selection");
|
|
7
9
|
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
8
10
|
/*
|
|
9
11
|
Calculates the position of the floating toolbar relative to the selection.
|
|
@@ -135,8 +137,8 @@ var calculateToolbarPositionTrackHead = exports.calculateToolbarPositionTrackHea
|
|
|
135
137
|
var leftCoord = Math.max(0, left - wrapperBounds.left);
|
|
136
138
|
if ((0, _platformFeatureFlags.fg)('platform_editor_selection_toolbar_scroll_fix')) {
|
|
137
139
|
if (leftCoord + toolbarRect.width > wrapperBounds.width) {
|
|
138
|
-
var
|
|
139
|
-
leftCoord = Math.max(0, wrapperBounds.width - (toolbarRect.width +
|
|
140
|
+
var _scrollbarWidth = 20;
|
|
141
|
+
leftCoord = Math.max(0, wrapperBounds.width - (toolbarRect.width + _scrollbarWidth));
|
|
140
142
|
}
|
|
141
143
|
}
|
|
142
144
|
|
|
@@ -156,4 +158,81 @@ var getCoordsBelowSelection = function getCoordsBelowSelection(bottomCoords, too
|
|
|
156
158
|
top: (bottomCoords.top || 0) + toolbarRect.height / 1.15,
|
|
157
159
|
left: bottomCoords.right - toolbarRect.width / 2
|
|
158
160
|
};
|
|
161
|
+
};
|
|
162
|
+
var cellSelectionToolbarCffsetTop = 10;
|
|
163
|
+
var scrollbarWidth = 20;
|
|
164
|
+
var calculateToolbarPositionOnCellSelection = exports.calculateToolbarPositionOnCellSelection = function calculateToolbarPositionOnCellSelection(toolbarTitle) {
|
|
165
|
+
return function (editorView, nextPos) {
|
|
166
|
+
var toolbar = document.querySelector("div[aria-label=\"".concat(toolbarTitle, "\"]"));
|
|
167
|
+
if (!toolbar) {
|
|
168
|
+
return nextPos;
|
|
169
|
+
}
|
|
170
|
+
var selection = editorView.state.selection;
|
|
171
|
+
if (!(selection instanceof _cellSelection.CellSelection)) {
|
|
172
|
+
return nextPos;
|
|
173
|
+
}
|
|
174
|
+
var $anchorCell = selection.$anchorCell,
|
|
175
|
+
$headCell = selection.$headCell;
|
|
176
|
+
var domAtPos = editorView.domAtPos.bind(editorView);
|
|
177
|
+
var anchorCellDOM = (0, _utils.findDomRefAtPos)($anchorCell.pos, domAtPos);
|
|
178
|
+
var headCellDOM = (0, _utils.findDomRefAtPos)($headCell.pos, domAtPos);
|
|
179
|
+
if (!(anchorCellDOM instanceof HTMLElement) || !(headCellDOM instanceof HTMLElement)) {
|
|
180
|
+
return nextPos;
|
|
181
|
+
}
|
|
182
|
+
var anchorCellRect = anchorCellDOM.getBoundingClientRect();
|
|
183
|
+
var headCellRect = headCellDOM.getBoundingClientRect();
|
|
184
|
+
var toolbarRect = toolbar.getBoundingClientRect();
|
|
185
|
+
var top;
|
|
186
|
+
if (headCellRect.top <= anchorCellRect.top) {
|
|
187
|
+
// Display Selection toolbar at the top of the selection
|
|
188
|
+
top = headCellRect.top - toolbarRect.height - cellSelectionToolbarCffsetTop;
|
|
189
|
+
} else {
|
|
190
|
+
// Display Selection toolbar at the bottom of the selection
|
|
191
|
+
top = headCellRect.bottom + cellSelectionToolbarCffsetTop;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
// scroll wrapper for full page, fall back to document body
|
|
195
|
+
// Ignored via go/ees007
|
|
196
|
+
// eslint-disable-next-line @atlaskit/editor/enforce-todo-comment-format
|
|
197
|
+
// TODO: look into using getScrollGutterOptions()
|
|
198
|
+
var scrollWrapper = editorView.dom.closest('.fabric-editor-popup-scroll-parent') || document.body;
|
|
199
|
+
var wrapperBounds = scrollWrapper.getBoundingClientRect();
|
|
200
|
+
// Place toolbar below selection if not sufficient space above
|
|
201
|
+
if (top < wrapperBounds.top && headCellRect.top <= anchorCellRect.top) {
|
|
202
|
+
top = anchorCellRect.bottom + cellSelectionToolbarCffsetTop;
|
|
203
|
+
}
|
|
204
|
+
var left;
|
|
205
|
+
if (headCellRect.left < anchorCellRect.left) {
|
|
206
|
+
left = headCellRect.left;
|
|
207
|
+
} else if (headCellRect.left === anchorCellRect.left) {
|
|
208
|
+
left = headCellRect.left + headCellRect.width / 2;
|
|
209
|
+
} else {
|
|
210
|
+
left = headCellRect.right;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
// If a user selected multiple columns via clicking on a drag handle
|
|
214
|
+
// (clicking first on the left column and then shift clicking on the right column),
|
|
215
|
+
// the $headcell stays in place and $anchorcell changes position. If they clicked on the right column
|
|
216
|
+
// and then shift clicked on the left, the $headCell will change while $anchor stays in place.
|
|
217
|
+
// Where is no way to know if user was dragging to select the cells or clicking on the drag handle.
|
|
218
|
+
// So if all cells in columns are selected, we will align the Text Formatting toolbar
|
|
219
|
+
// relative to center of the selected area.
|
|
220
|
+
if (selection.isColSelection()) {
|
|
221
|
+
if (headCellRect.left < anchorCellRect.left) {
|
|
222
|
+
left = headCellRect.left + (anchorCellRect.right - headCellRect.left) / 2;
|
|
223
|
+
} else if (headCellRect.left === anchorCellRect.left) {
|
|
224
|
+
left = left;
|
|
225
|
+
} else {
|
|
226
|
+
left = anchorCellRect.left + (headCellRect.right - anchorCellRect.left) / 2;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
var adjustedLeft = Math.max(0, left - toolbarRect.width / 2 - wrapperBounds.left);
|
|
230
|
+
if (adjustedLeft + toolbarRect.width > wrapperBounds.width) {
|
|
231
|
+
adjustedLeft = Math.max(0, wrapperBounds.width - (toolbarRect.width + scrollbarWidth));
|
|
232
|
+
}
|
|
233
|
+
return {
|
|
234
|
+
top: top - wrapperBounds.top + scrollWrapper.scrollTop,
|
|
235
|
+
left: adjustedLeft
|
|
236
|
+
};
|
|
237
|
+
};
|
|
159
238
|
};
|
package/dist/cjs/utils/index.js
CHANGED
|
@@ -202,6 +202,12 @@ Object.defineProperty(exports, "calculateToolbarPositionAboveSelection", {
|
|
|
202
202
|
return _calculateToolbarPosition.calculateToolbarPositionAboveSelection;
|
|
203
203
|
}
|
|
204
204
|
});
|
|
205
|
+
Object.defineProperty(exports, "calculateToolbarPositionOnCellSelection", {
|
|
206
|
+
enumerable: true,
|
|
207
|
+
get: function get() {
|
|
208
|
+
return _calculateToolbarPosition.calculateToolbarPositionOnCellSelection;
|
|
209
|
+
}
|
|
210
|
+
});
|
|
205
211
|
Object.defineProperty(exports, "calculateToolbarPositionTrackHead", {
|
|
206
212
|
enumerable: true,
|
|
207
213
|
get: function get() {
|
|
@@ -131,10 +131,5 @@ export const configPanelMessages = defineMessages({
|
|
|
131
131
|
id: 'fabric.editor.configPanel.errorBoundary.note',
|
|
132
132
|
defaultMessage: `We've let the team know. You can still edit and publish this page, or check the error console for more information.`,
|
|
133
133
|
description: 'Note for uncaught config panel error'
|
|
134
|
-
},
|
|
135
|
-
objectSidebarPanelHeaderLabel: {
|
|
136
|
-
id: 'fabric.editor.configPanel.objectSidebarPanelHeaderLabel',
|
|
137
|
-
defaultMessage: ' ',
|
|
138
|
-
description: 'Keep this empty. Defined it as headerLabel is required field.'
|
|
139
134
|
}
|
|
140
135
|
});
|
|
@@ -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 = "102.11.
|
|
4
|
+
const packageVersion = "102.11.5";
|
|
5
5
|
const sanitiseSentryEvents = (data, _hint) => {
|
|
6
6
|
// Remove URL as it has UGC
|
|
7
7
|
// Ignored via go/ees007
|
|
@@ -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 = "102.11.
|
|
16
|
+
const packageVersion = "102.11.5";
|
|
17
17
|
const halfFocusRing = 1;
|
|
18
18
|
const dropOffset = '0, 8';
|
|
19
19
|
// Ignored via go/ees005
|
|
@@ -60,20 +60,29 @@ export class Dropdown extends PureComponent {
|
|
|
60
60
|
zIndex,
|
|
61
61
|
arrowKeyNavigationProviderOptions,
|
|
62
62
|
dropdownListId,
|
|
63
|
-
alignDropdownWithParentElement
|
|
63
|
+
alignDropdownWithParentElement,
|
|
64
|
+
target: targetProp,
|
|
65
|
+
forcePlacement,
|
|
66
|
+
alignX,
|
|
67
|
+
alignY,
|
|
68
|
+
offset
|
|
64
69
|
} = this.props;
|
|
65
70
|
return /*#__PURE__*/React.createElement(Popup, {
|
|
66
|
-
target: alignDropdownWithParentElement ? // Ignored via go/ees005
|
|
71
|
+
target: targetProp !== null && targetProp !== void 0 ? targetProp : alignDropdownWithParentElement ? // Ignored via go/ees005
|
|
67
72
|
// eslint-disable-next-line @atlaskit/editor/no-as-casting
|
|
68
73
|
target === null || target === void 0 ? void 0 : target.closest("[data-testid='editor-floating-toolbar']") : target,
|
|
69
74
|
mountTo: mountTo,
|
|
70
75
|
boundariesElement: boundariesElement,
|
|
71
76
|
scrollableElement: scrollableElement,
|
|
72
|
-
onPlacementChanged: this.updatePopupPlacement,
|
|
77
|
+
onPlacementChanged: forcePlacement ? undefined : this.updatePopupPlacement,
|
|
73
78
|
fitHeight: fitHeight,
|
|
74
79
|
fitWidth: fitWidth,
|
|
75
80
|
zIndex: zIndex,
|
|
76
|
-
allowOutOfBounds: alignDropdownWithParentElement
|
|
81
|
+
allowOutOfBounds: alignDropdownWithParentElement,
|
|
82
|
+
alignX: alignX,
|
|
83
|
+
alignY: alignY,
|
|
84
|
+
forcePlacement: forcePlacement,
|
|
85
|
+
offset: offset
|
|
77
86
|
}, /*#__PURE__*/React.createElement(ArrowKeyNavigationProvider
|
|
78
87
|
// Ignored via go/ees005
|
|
79
88
|
// eslint-disable-next-line react/jsx-props-no-spreading
|
|
@@ -98,9 +107,9 @@ export class Dropdown extends PureComponent {
|
|
|
98
107
|
trigger,
|
|
99
108
|
isOpen
|
|
100
109
|
} = this.props;
|
|
101
|
-
return /*#__PURE__*/React.createElement(OutsideClickTargetRefContext.Consumer, null, setOutsideClickTargetRef => /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
|
|
110
|
+
return trigger ? /*#__PURE__*/React.createElement(OutsideClickTargetRefContext.Consumer, null, setOutsideClickTargetRef => /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
|
|
102
111
|
ref: this.handleRef(setOutsideClickTargetRef)
|
|
103
|
-
}, trigger), isOpen ? this.renderDropdown() : null));
|
|
112
|
+
}, trigger), isOpen ? this.renderDropdown() : null)) : /*#__PURE__*/React.createElement(React.Fragment, null, isOpen ? this.renderDropdown() : null);
|
|
104
113
|
}
|
|
105
114
|
}
|
|
106
115
|
const DropdownWithOuterListeners = withReactEditorViewOuterListeners(Dropdown);
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { findDomRefAtPos } from '@atlaskit/editor-prosemirror/utils';
|
|
2
|
+
import { CellSelection } from '@atlaskit/editor-tables/cell-selection';
|
|
1
3
|
import { fg } from '@atlaskit/platform-feature-flags';
|
|
2
4
|
/*
|
|
3
5
|
Calculates the position of the floating toolbar relative to the selection.
|
|
@@ -150,4 +152,83 @@ const getCoordsBelowSelection = (bottomCoords, toolbarRect) => {
|
|
|
150
152
|
top: (bottomCoords.top || 0) + toolbarRect.height / 1.15,
|
|
151
153
|
left: bottomCoords.right - toolbarRect.width / 2
|
|
152
154
|
};
|
|
155
|
+
};
|
|
156
|
+
const cellSelectionToolbarCffsetTop = 10;
|
|
157
|
+
const scrollbarWidth = 20;
|
|
158
|
+
export const calculateToolbarPositionOnCellSelection = toolbarTitle => (editorView, nextPos) => {
|
|
159
|
+
const toolbar = document.querySelector(`div[aria-label="${toolbarTitle}"]`);
|
|
160
|
+
if (!toolbar) {
|
|
161
|
+
return nextPos;
|
|
162
|
+
}
|
|
163
|
+
const {
|
|
164
|
+
selection
|
|
165
|
+
} = editorView.state;
|
|
166
|
+
if (!(selection instanceof CellSelection)) {
|
|
167
|
+
return nextPos;
|
|
168
|
+
}
|
|
169
|
+
const {
|
|
170
|
+
$anchorCell,
|
|
171
|
+
$headCell
|
|
172
|
+
} = selection;
|
|
173
|
+
const domAtPos = editorView.domAtPos.bind(editorView);
|
|
174
|
+
const anchorCellDOM = findDomRefAtPos($anchorCell.pos, domAtPos);
|
|
175
|
+
const headCellDOM = findDomRefAtPos($headCell.pos, domAtPos);
|
|
176
|
+
if (!(anchorCellDOM instanceof HTMLElement) || !(headCellDOM instanceof HTMLElement)) {
|
|
177
|
+
return nextPos;
|
|
178
|
+
}
|
|
179
|
+
const anchorCellRect = anchorCellDOM.getBoundingClientRect();
|
|
180
|
+
const headCellRect = headCellDOM.getBoundingClientRect();
|
|
181
|
+
const toolbarRect = toolbar.getBoundingClientRect();
|
|
182
|
+
let top;
|
|
183
|
+
if (headCellRect.top <= anchorCellRect.top) {
|
|
184
|
+
// Display Selection toolbar at the top of the selection
|
|
185
|
+
top = headCellRect.top - toolbarRect.height - cellSelectionToolbarCffsetTop;
|
|
186
|
+
} else {
|
|
187
|
+
// Display Selection toolbar at the bottom of the selection
|
|
188
|
+
top = headCellRect.bottom + cellSelectionToolbarCffsetTop;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
// scroll wrapper for full page, fall back to document body
|
|
192
|
+
// Ignored via go/ees007
|
|
193
|
+
// eslint-disable-next-line @atlaskit/editor/enforce-todo-comment-format
|
|
194
|
+
// TODO: look into using getScrollGutterOptions()
|
|
195
|
+
const scrollWrapper = editorView.dom.closest('.fabric-editor-popup-scroll-parent') || document.body;
|
|
196
|
+
const wrapperBounds = scrollWrapper.getBoundingClientRect();
|
|
197
|
+
// Place toolbar below selection if not sufficient space above
|
|
198
|
+
if (top < wrapperBounds.top && headCellRect.top <= anchorCellRect.top) {
|
|
199
|
+
top = anchorCellRect.bottom + cellSelectionToolbarCffsetTop;
|
|
200
|
+
}
|
|
201
|
+
let left;
|
|
202
|
+
if (headCellRect.left < anchorCellRect.left) {
|
|
203
|
+
left = headCellRect.left;
|
|
204
|
+
} else if (headCellRect.left === anchorCellRect.left) {
|
|
205
|
+
left = headCellRect.left + headCellRect.width / 2;
|
|
206
|
+
} else {
|
|
207
|
+
left = headCellRect.right;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
// If a user selected multiple columns via clicking on a drag handle
|
|
211
|
+
// (clicking first on the left column and then shift clicking on the right column),
|
|
212
|
+
// the $headcell stays in place and $anchorcell changes position. If they clicked on the right column
|
|
213
|
+
// and then shift clicked on the left, the $headCell will change while $anchor stays in place.
|
|
214
|
+
// Where is no way to know if user was dragging to select the cells or clicking on the drag handle.
|
|
215
|
+
// So if all cells in columns are selected, we will align the Text Formatting toolbar
|
|
216
|
+
// relative to center of the selected area.
|
|
217
|
+
if (selection.isColSelection()) {
|
|
218
|
+
if (headCellRect.left < anchorCellRect.left) {
|
|
219
|
+
left = headCellRect.left + (anchorCellRect.right - headCellRect.left) / 2;
|
|
220
|
+
} else if (headCellRect.left === anchorCellRect.left) {
|
|
221
|
+
left = left;
|
|
222
|
+
} else {
|
|
223
|
+
left = anchorCellRect.left + (headCellRect.right - anchorCellRect.left) / 2;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
let adjustedLeft = Math.max(0, left - toolbarRect.width / 2 - wrapperBounds.left);
|
|
227
|
+
if (adjustedLeft + toolbarRect.width > wrapperBounds.width) {
|
|
228
|
+
adjustedLeft = Math.max(0, wrapperBounds.width - (toolbarRect.width + scrollbarWidth));
|
|
229
|
+
}
|
|
230
|
+
return {
|
|
231
|
+
top: top - wrapperBounds.top + scrollWrapper.scrollTop,
|
|
232
|
+
left: adjustedLeft
|
|
233
|
+
};
|
|
153
234
|
};
|
|
@@ -361,7 +361,7 @@ export { createWrapSelectionTransaction, getWrappingOptions } from './create-wra
|
|
|
361
361
|
export { transformNodeIntoListItem } from './insert-node-into-ordered-list';
|
|
362
362
|
export { wrapSelectionIn } from './wrap-selection-in';
|
|
363
363
|
export { toJSON, nodeToJSON } from './nodes';
|
|
364
|
-
export { calculateToolbarPositionAboveSelection, calculateToolbarPositionTrackHead } from './calculate-toolbar-position';
|
|
364
|
+
export { calculateToolbarPositionAboveSelection, calculateToolbarPositionOnCellSelection, calculateToolbarPositionTrackHead } from './calculate-toolbar-position';
|
|
365
365
|
export { findNodePosByLocalIds } from './nodes-by-localIds';
|
|
366
366
|
export { getPageElementCounts } from './page-element-counts';
|
|
367
367
|
export { withFeatureFlaggedComponent } from './withFeatureFlaggedComponent';
|
|
@@ -131,10 +131,5 @@ export var configPanelMessages = defineMessages({
|
|
|
131
131
|
id: 'fabric.editor.configPanel.errorBoundary.note',
|
|
132
132
|
defaultMessage: "We've let the team know. You can still edit and publish this page, or check the error console for more information.",
|
|
133
133
|
description: 'Note for uncaught config panel error'
|
|
134
|
-
},
|
|
135
|
-
objectSidebarPanelHeaderLabel: {
|
|
136
|
-
id: 'fabric.editor.configPanel.objectSidebarPanelHeaderLabel',
|
|
137
|
-
defaultMessage: ' ',
|
|
138
|
-
description: 'Keep this empty. Defined it as headerLabel is required field.'
|
|
139
134
|
}
|
|
140
135
|
});
|
|
@@ -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 = "102.11.
|
|
10
|
+
var packageVersion = "102.11.5";
|
|
11
11
|
var sanitiseSentryEvents = function sanitiseSentryEvents(data, _hint) {
|
|
12
12
|
// Remove URL as it has UGC
|
|
13
13
|
// Ignored via go/ees007
|
|
@@ -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 = "102.11.
|
|
23
|
+
var packageVersion = "102.11.5";
|
|
24
24
|
var halfFocusRing = 1;
|
|
25
25
|
var dropOffset = '0, 8';
|
|
26
26
|
// Ignored via go/ees005
|
|
@@ -74,19 +74,28 @@ export var Dropdown = /*#__PURE__*/function (_PureComponent) {
|
|
|
74
74
|
zIndex = _this$props.zIndex,
|
|
75
75
|
arrowKeyNavigationProviderOptions = _this$props.arrowKeyNavigationProviderOptions,
|
|
76
76
|
dropdownListId = _this$props.dropdownListId,
|
|
77
|
-
alignDropdownWithParentElement = _this$props.alignDropdownWithParentElement
|
|
77
|
+
alignDropdownWithParentElement = _this$props.alignDropdownWithParentElement,
|
|
78
|
+
targetProp = _this$props.target,
|
|
79
|
+
forcePlacement = _this$props.forcePlacement,
|
|
80
|
+
alignX = _this$props.alignX,
|
|
81
|
+
alignY = _this$props.alignY,
|
|
82
|
+
offset = _this$props.offset;
|
|
78
83
|
return /*#__PURE__*/React.createElement(Popup, {
|
|
79
|
-
target: alignDropdownWithParentElement ? // Ignored via go/ees005
|
|
84
|
+
target: targetProp !== null && targetProp !== void 0 ? targetProp : alignDropdownWithParentElement ? // Ignored via go/ees005
|
|
80
85
|
// eslint-disable-next-line @atlaskit/editor/no-as-casting
|
|
81
86
|
target === null || target === void 0 ? void 0 : target.closest("[data-testid='editor-floating-toolbar']") : target,
|
|
82
87
|
mountTo: mountTo,
|
|
83
88
|
boundariesElement: boundariesElement,
|
|
84
89
|
scrollableElement: scrollableElement,
|
|
85
|
-
onPlacementChanged: this.updatePopupPlacement,
|
|
90
|
+
onPlacementChanged: forcePlacement ? undefined : this.updatePopupPlacement,
|
|
86
91
|
fitHeight: fitHeight,
|
|
87
92
|
fitWidth: fitWidth,
|
|
88
93
|
zIndex: zIndex,
|
|
89
|
-
allowOutOfBounds: alignDropdownWithParentElement
|
|
94
|
+
allowOutOfBounds: alignDropdownWithParentElement,
|
|
95
|
+
alignX: alignX,
|
|
96
|
+
alignY: alignY,
|
|
97
|
+
forcePlacement: forcePlacement,
|
|
98
|
+
offset: offset
|
|
90
99
|
}, /*#__PURE__*/React.createElement(ArrowKeyNavigationProvider
|
|
91
100
|
// Ignored via go/ees005
|
|
92
101
|
// eslint-disable-next-line react/jsx-props-no-spreading
|
|
@@ -113,11 +122,11 @@ export var Dropdown = /*#__PURE__*/function (_PureComponent) {
|
|
|
113
122
|
var _this$props2 = this.props,
|
|
114
123
|
trigger = _this$props2.trigger,
|
|
115
124
|
isOpen = _this$props2.isOpen;
|
|
116
|
-
return /*#__PURE__*/React.createElement(OutsideClickTargetRefContext.Consumer, null, function (setOutsideClickTargetRef) {
|
|
125
|
+
return trigger ? /*#__PURE__*/React.createElement(OutsideClickTargetRefContext.Consumer, null, function (setOutsideClickTargetRef) {
|
|
117
126
|
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
|
|
118
127
|
ref: _this2.handleRef(setOutsideClickTargetRef)
|
|
119
128
|
}, trigger), isOpen ? _this2.renderDropdown() : null);
|
|
120
|
-
});
|
|
129
|
+
}) : /*#__PURE__*/React.createElement(React.Fragment, null, isOpen ? this.renderDropdown() : null);
|
|
121
130
|
}
|
|
122
131
|
}]);
|
|
123
132
|
}(PureComponent);
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { findDomRefAtPos } from '@atlaskit/editor-prosemirror/utils';
|
|
2
|
+
import { CellSelection } from '@atlaskit/editor-tables/cell-selection';
|
|
1
3
|
import { fg } from '@atlaskit/platform-feature-flags';
|
|
2
4
|
/*
|
|
3
5
|
Calculates the position of the floating toolbar relative to the selection.
|
|
@@ -129,8 +131,8 @@ export var calculateToolbarPositionTrackHead = function calculateToolbarPosition
|
|
|
129
131
|
var leftCoord = Math.max(0, left - wrapperBounds.left);
|
|
130
132
|
if (fg('platform_editor_selection_toolbar_scroll_fix')) {
|
|
131
133
|
if (leftCoord + toolbarRect.width > wrapperBounds.width) {
|
|
132
|
-
var
|
|
133
|
-
leftCoord = Math.max(0, wrapperBounds.width - (toolbarRect.width +
|
|
134
|
+
var _scrollbarWidth = 20;
|
|
135
|
+
leftCoord = Math.max(0, wrapperBounds.width - (toolbarRect.width + _scrollbarWidth));
|
|
134
136
|
}
|
|
135
137
|
}
|
|
136
138
|
|
|
@@ -150,4 +152,81 @@ var getCoordsBelowSelection = function getCoordsBelowSelection(bottomCoords, too
|
|
|
150
152
|
top: (bottomCoords.top || 0) + toolbarRect.height / 1.15,
|
|
151
153
|
left: bottomCoords.right - toolbarRect.width / 2
|
|
152
154
|
};
|
|
155
|
+
};
|
|
156
|
+
var cellSelectionToolbarCffsetTop = 10;
|
|
157
|
+
var scrollbarWidth = 20;
|
|
158
|
+
export var calculateToolbarPositionOnCellSelection = function calculateToolbarPositionOnCellSelection(toolbarTitle) {
|
|
159
|
+
return function (editorView, nextPos) {
|
|
160
|
+
var toolbar = document.querySelector("div[aria-label=\"".concat(toolbarTitle, "\"]"));
|
|
161
|
+
if (!toolbar) {
|
|
162
|
+
return nextPos;
|
|
163
|
+
}
|
|
164
|
+
var selection = editorView.state.selection;
|
|
165
|
+
if (!(selection instanceof CellSelection)) {
|
|
166
|
+
return nextPos;
|
|
167
|
+
}
|
|
168
|
+
var $anchorCell = selection.$anchorCell,
|
|
169
|
+
$headCell = selection.$headCell;
|
|
170
|
+
var domAtPos = editorView.domAtPos.bind(editorView);
|
|
171
|
+
var anchorCellDOM = findDomRefAtPos($anchorCell.pos, domAtPos);
|
|
172
|
+
var headCellDOM = findDomRefAtPos($headCell.pos, domAtPos);
|
|
173
|
+
if (!(anchorCellDOM instanceof HTMLElement) || !(headCellDOM instanceof HTMLElement)) {
|
|
174
|
+
return nextPos;
|
|
175
|
+
}
|
|
176
|
+
var anchorCellRect = anchorCellDOM.getBoundingClientRect();
|
|
177
|
+
var headCellRect = headCellDOM.getBoundingClientRect();
|
|
178
|
+
var toolbarRect = toolbar.getBoundingClientRect();
|
|
179
|
+
var top;
|
|
180
|
+
if (headCellRect.top <= anchorCellRect.top) {
|
|
181
|
+
// Display Selection toolbar at the top of the selection
|
|
182
|
+
top = headCellRect.top - toolbarRect.height - cellSelectionToolbarCffsetTop;
|
|
183
|
+
} else {
|
|
184
|
+
// Display Selection toolbar at the bottom of the selection
|
|
185
|
+
top = headCellRect.bottom + cellSelectionToolbarCffsetTop;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
// scroll wrapper for full page, fall back to document body
|
|
189
|
+
// Ignored via go/ees007
|
|
190
|
+
// eslint-disable-next-line @atlaskit/editor/enforce-todo-comment-format
|
|
191
|
+
// TODO: look into using getScrollGutterOptions()
|
|
192
|
+
var scrollWrapper = editorView.dom.closest('.fabric-editor-popup-scroll-parent') || document.body;
|
|
193
|
+
var wrapperBounds = scrollWrapper.getBoundingClientRect();
|
|
194
|
+
// Place toolbar below selection if not sufficient space above
|
|
195
|
+
if (top < wrapperBounds.top && headCellRect.top <= anchorCellRect.top) {
|
|
196
|
+
top = anchorCellRect.bottom + cellSelectionToolbarCffsetTop;
|
|
197
|
+
}
|
|
198
|
+
var left;
|
|
199
|
+
if (headCellRect.left < anchorCellRect.left) {
|
|
200
|
+
left = headCellRect.left;
|
|
201
|
+
} else if (headCellRect.left === anchorCellRect.left) {
|
|
202
|
+
left = headCellRect.left + headCellRect.width / 2;
|
|
203
|
+
} else {
|
|
204
|
+
left = headCellRect.right;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
// If a user selected multiple columns via clicking on a drag handle
|
|
208
|
+
// (clicking first on the left column and then shift clicking on the right column),
|
|
209
|
+
// the $headcell stays in place and $anchorcell changes position. If they clicked on the right column
|
|
210
|
+
// and then shift clicked on the left, the $headCell will change while $anchor stays in place.
|
|
211
|
+
// Where is no way to know if user was dragging to select the cells or clicking on the drag handle.
|
|
212
|
+
// So if all cells in columns are selected, we will align the Text Formatting toolbar
|
|
213
|
+
// relative to center of the selected area.
|
|
214
|
+
if (selection.isColSelection()) {
|
|
215
|
+
if (headCellRect.left < anchorCellRect.left) {
|
|
216
|
+
left = headCellRect.left + (anchorCellRect.right - headCellRect.left) / 2;
|
|
217
|
+
} else if (headCellRect.left === anchorCellRect.left) {
|
|
218
|
+
left = left;
|
|
219
|
+
} else {
|
|
220
|
+
left = anchorCellRect.left + (headCellRect.right - anchorCellRect.left) / 2;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
var adjustedLeft = Math.max(0, left - toolbarRect.width / 2 - wrapperBounds.left);
|
|
224
|
+
if (adjustedLeft + toolbarRect.width > wrapperBounds.width) {
|
|
225
|
+
adjustedLeft = Math.max(0, wrapperBounds.width - (toolbarRect.width + scrollbarWidth));
|
|
226
|
+
}
|
|
227
|
+
return {
|
|
228
|
+
top: top - wrapperBounds.top + scrollWrapper.scrollTop,
|
|
229
|
+
left: adjustedLeft
|
|
230
|
+
};
|
|
231
|
+
};
|
|
153
232
|
};
|
package/dist/esm/utils/index.js
CHANGED
|
@@ -364,7 +364,7 @@ export { createWrapSelectionTransaction, getWrappingOptions } from './create-wra
|
|
|
364
364
|
export { transformNodeIntoListItem } from './insert-node-into-ordered-list';
|
|
365
365
|
export { wrapSelectionIn } from './wrap-selection-in';
|
|
366
366
|
export { toJSON, nodeToJSON } from './nodes';
|
|
367
|
-
export { calculateToolbarPositionAboveSelection, calculateToolbarPositionTrackHead } from './calculate-toolbar-position';
|
|
367
|
+
export { calculateToolbarPositionAboveSelection, calculateToolbarPositionOnCellSelection, calculateToolbarPositionTrackHead } from './calculate-toolbar-position';
|
|
368
368
|
export { findNodePosByLocalIds } from './nodes-by-localIds';
|
|
369
369
|
export { getPageElementCounts } from './page-element-counts';
|
|
370
370
|
export { withFeatureFlaggedComponent } from './withFeatureFlaggedComponent';
|
|
@@ -7,7 +7,7 @@ export interface Props {
|
|
|
7
7
|
mountTo?: HTMLElement;
|
|
8
8
|
boundariesElement?: HTMLElement;
|
|
9
9
|
scrollableElement?: HTMLElement;
|
|
10
|
-
trigger
|
|
10
|
+
trigger?: React.ReactElement<any>;
|
|
11
11
|
isOpen?: boolean;
|
|
12
12
|
onOpenChange?: (attrs: OpenChangedEvent) => void;
|
|
13
13
|
fitWidth?: number;
|
|
@@ -16,6 +16,11 @@ export interface Props {
|
|
|
16
16
|
arrowKeyNavigationProviderOptions: ArrowKeyNavigationProviderOptions;
|
|
17
17
|
dropdownListId?: string;
|
|
18
18
|
alignDropdownWithParentElement?: boolean;
|
|
19
|
+
target?: HTMLElement;
|
|
20
|
+
forcePlacement?: boolean;
|
|
21
|
+
alignX?: 'left' | 'right' | 'center';
|
|
22
|
+
alignY?: 'start' | 'bottom' | 'top';
|
|
23
|
+
offset?: [number, number];
|
|
19
24
|
}
|
|
20
25
|
export interface State {
|
|
21
26
|
target?: HTMLElement;
|
|
@@ -211,7 +211,7 @@ export { createWrapSelectionTransaction, getWrappingOptions, } from './create-wr
|
|
|
211
211
|
export { transformNodeIntoListItem } from './insert-node-into-ordered-list';
|
|
212
212
|
export { wrapSelectionIn } from './wrap-selection-in';
|
|
213
213
|
export { toJSON, nodeToJSON } from './nodes';
|
|
214
|
-
export { calculateToolbarPositionAboveSelection, calculateToolbarPositionTrackHead, } from './calculate-toolbar-position';
|
|
214
|
+
export { calculateToolbarPositionAboveSelection, calculateToolbarPositionOnCellSelection, calculateToolbarPositionTrackHead, } from './calculate-toolbar-position';
|
|
215
215
|
export { findNodePosByLocalIds } from './nodes-by-localIds';
|
|
216
216
|
export { getPageElementCounts } from './page-element-counts';
|
|
217
217
|
export type { PageElementCounts } from './page-element-counts';
|
|
@@ -7,7 +7,7 @@ export interface Props {
|
|
|
7
7
|
mountTo?: HTMLElement;
|
|
8
8
|
boundariesElement?: HTMLElement;
|
|
9
9
|
scrollableElement?: HTMLElement;
|
|
10
|
-
trigger
|
|
10
|
+
trigger?: React.ReactElement<any>;
|
|
11
11
|
isOpen?: boolean;
|
|
12
12
|
onOpenChange?: (attrs: OpenChangedEvent) => void;
|
|
13
13
|
fitWidth?: number;
|
|
@@ -16,6 +16,14 @@ export interface Props {
|
|
|
16
16
|
arrowKeyNavigationProviderOptions: ArrowKeyNavigationProviderOptions;
|
|
17
17
|
dropdownListId?: string;
|
|
18
18
|
alignDropdownWithParentElement?: boolean;
|
|
19
|
+
target?: HTMLElement;
|
|
20
|
+
forcePlacement?: boolean;
|
|
21
|
+
alignX?: 'left' | 'right' | 'center';
|
|
22
|
+
alignY?: 'start' | 'bottom' | 'top';
|
|
23
|
+
offset?: [
|
|
24
|
+
number,
|
|
25
|
+
number
|
|
26
|
+
];
|
|
19
27
|
}
|
|
20
28
|
export interface State {
|
|
21
29
|
target?: HTMLElement;
|
|
@@ -211,7 +211,7 @@ export { createWrapSelectionTransaction, getWrappingOptions, } from './create-wr
|
|
|
211
211
|
export { transformNodeIntoListItem } from './insert-node-into-ordered-list';
|
|
212
212
|
export { wrapSelectionIn } from './wrap-selection-in';
|
|
213
213
|
export { toJSON, nodeToJSON } from './nodes';
|
|
214
|
-
export { calculateToolbarPositionAboveSelection, calculateToolbarPositionTrackHead, } from './calculate-toolbar-position';
|
|
214
|
+
export { calculateToolbarPositionAboveSelection, calculateToolbarPositionOnCellSelection, calculateToolbarPositionTrackHead, } from './calculate-toolbar-position';
|
|
215
215
|
export { findNodePosByLocalIds } from './nodes-by-localIds';
|
|
216
216
|
export { getPageElementCounts } from './page-element-counts';
|
|
217
217
|
export type { PageElementCounts } from './page-element-counts';
|
package/package.json
CHANGED