@atlaskit/editor-plugin-block-menu 6.0.19 → 6.0.21
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 +18 -0
- package/afm-cc/tsconfig.json +3 -0
- package/afm-jira/tsconfig.json +3 -0
- package/afm-products/tsconfig.json +3 -0
- package/dist/cjs/editor-commands/transformNode.js +8 -10
- package/dist/cjs/pm-plugins/main.js +3 -2
- package/dist/cjs/ui/block-menu-components.js +18 -0
- package/dist/cjs/ui/block-menu.js +12 -1
- package/dist/cjs/ui/delete-button.js +1 -4
- package/dist/es2019/editor-commands/transformNode.js +6 -8
- package/dist/es2019/pm-plugins/main.js +3 -2
- package/dist/es2019/ui/block-menu-components.js +16 -0
- package/dist/es2019/ui/block-menu.js +12 -1
- package/dist/es2019/ui/delete-button.js +1 -4
- package/dist/esm/editor-commands/transformNode.js +9 -10
- package/dist/esm/pm-plugins/main.js +3 -2
- package/dist/esm/ui/block-menu-components.js +18 -0
- package/dist/esm/ui/block-menu.js +12 -1
- package/dist/esm/ui/delete-button.js +1 -4
- package/package.json +4 -3
- package/build/tsconfig.json +0 -17
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# @atlaskit/editor-plugin-block-menu
|
|
2
2
|
|
|
3
|
+
## 6.0.21
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [`b30d6077b3e91`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/b30d6077b3e91) -
|
|
8
|
+
[ux] Suggested section should be hidden when total number to native transfroms is less than 7.
|
|
9
|
+
- [`265980d7959cf`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/265980d7959cf) -
|
|
10
|
+
[ux] recursive node decoration and 'selected danger' classname
|
|
11
|
+
- Updated dependencies
|
|
12
|
+
|
|
13
|
+
## 6.0.20
|
|
14
|
+
|
|
15
|
+
### Patch Changes
|
|
16
|
+
|
|
17
|
+
- [`edb1034803ecf`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/edb1034803ecf) -
|
|
18
|
+
Fix undo/redo via keyboard when block menu is open
|
|
19
|
+
- Updated dependencies
|
|
20
|
+
|
|
3
21
|
## 6.0.19
|
|
4
22
|
|
|
5
23
|
### Patch Changes
|
package/afm-cc/tsconfig.json
CHANGED
package/afm-jira/tsconfig.json
CHANGED
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
3
|
Object.defineProperty(exports, "__esModule", {
|
|
5
4
|
value: true
|
|
6
5
|
});
|
|
7
6
|
exports.transformNode = void 0;
|
|
8
|
-
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
9
7
|
var _analytics = require("@atlaskit/editor-common/analytics");
|
|
10
8
|
var _performanceMeasures = require("@atlaskit/editor-common/performance-measures");
|
|
11
9
|
var _selection = require("@atlaskit/editor-common/selection");
|
|
@@ -33,10 +31,7 @@ var transformNode = exports.transformNode = function transformNode(api) {
|
|
|
33
31
|
var isParentLayout = selectedParent.type === nodes.layoutColumn;
|
|
34
32
|
var isNested = (0, _isNestedNode.isNestedNode)(preservedSelection, '') && !isParentLayout;
|
|
35
33
|
var isList = (0, _utils.isListNode)(selectedParent);
|
|
36
|
-
var
|
|
37
|
-
var sliceEnd = isList ? $to.pos + 1 : $to.pos;
|
|
38
|
-
var slice = tr.doc.slice(sliceStart, sliceEnd);
|
|
39
|
-
var sourceNodes = (0, _toConsumableArray2.default)(slice.content.content);
|
|
34
|
+
var sourceNodes = (0, _selection.getSourceNodesFromSelectionRange)(tr, preservedSelection);
|
|
40
35
|
var sourceNodeTypes = {};
|
|
41
36
|
sourceNodes.forEach(function (node) {
|
|
42
37
|
var typeName = node.type.name;
|
|
@@ -50,7 +45,8 @@ var transformNode = exports.transformNode = function transformNode(api) {
|
|
|
50
45
|
targetAttrs: metadata === null || metadata === void 0 ? void 0 : metadata.targetAttrs,
|
|
51
46
|
parentNode: selectedParent
|
|
52
47
|
});
|
|
53
|
-
var content = resultNodes.length > 0 ? resultNodes :
|
|
48
|
+
var content = resultNodes.length > 0 ? resultNodes : sourceNodes;
|
|
49
|
+
var sliceStart = isList ? $from.pos - 1 : $from.pos;
|
|
54
50
|
if (preservedSelection instanceof _state.NodeSelection && preservedSelection.node.type === nodes.mediaSingle) {
|
|
55
51
|
var _api$blockControls2;
|
|
56
52
|
// when node is media single, use tr.replaceWith freeze editor, if modify position, tr.replaceWith creates duplicats
|
|
@@ -65,10 +61,12 @@ var transformNode = exports.transformNode = function transformNode(api) {
|
|
|
65
61
|
// when we replace and insert content, we need to manually map the preserved selection
|
|
66
62
|
// through the transaction, otherwise it will treat the selection as having been deleted
|
|
67
63
|
// and stop preserving it
|
|
68
|
-
var oldSize =
|
|
69
|
-
|
|
64
|
+
var oldSize = sourceNodes.reduce(function (sum, node) {
|
|
65
|
+
return sum + node.nodeSize;
|
|
66
|
+
}, 0);
|
|
67
|
+
var newSize = content.reduce(function (sum, node) {
|
|
70
68
|
return sum + node.nodeSize;
|
|
71
|
-
}, 0)
|
|
69
|
+
}, 0);
|
|
72
70
|
api === null || api === void 0 || (_api$blockControls2 = api.blockControls) === null || _api$blockControls2 === void 0 || _api$blockControls2.commands.mapPreservedSelection(new _transform.Mapping([new _transform.StepMap([0, oldSize, newSize])]))({
|
|
73
71
|
tr: tr
|
|
74
72
|
});
|
|
@@ -35,12 +35,13 @@ var createPlugin = exports.createPlugin = function createPlugin(api) {
|
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
// Block further handling of key events when block menu is open
|
|
38
|
-
// Except for backspace/delete/copy/cut/paste which should be handled by the selection preservation plugin
|
|
38
|
+
// Except for backspace/delete/copy/cut/paste/undo/redo which should be handled by the selection preservation plugin
|
|
39
39
|
var key = event.key.toLowerCase();
|
|
40
40
|
var isMetaCtrl = event.metaKey || event.ctrlKey;
|
|
41
41
|
var isBackspaceDelete = ['backspace', 'delete'].includes(key);
|
|
42
42
|
var isCopyCutPaste = isMetaCtrl && ['c', 'x', 'v'].includes(key);
|
|
43
|
-
var
|
|
43
|
+
var isUndoRedo = isMetaCtrl && ['z', 'y'].includes(key);
|
|
44
|
+
var suppressNativeHandling = !isCopyCutPaste && !isBackspaceDelete && !isUndoRedo;
|
|
44
45
|
return suppressNativeHandling;
|
|
45
46
|
}
|
|
46
47
|
}
|
|
@@ -9,6 +9,7 @@ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers
|
|
|
9
9
|
var _react = _interopRequireDefault(require("react"));
|
|
10
10
|
var _blockMenu = require("@atlaskit/editor-common/block-menu");
|
|
11
11
|
var _editorToolbar = require("@atlaskit/editor-toolbar");
|
|
12
|
+
var _utils = require("./block-menu-renderer/utils");
|
|
12
13
|
var _copyLink = require("./copy-link");
|
|
13
14
|
var _copySection = require("./copy-section");
|
|
14
15
|
var _deleteButton = require("./delete-button");
|
|
@@ -21,6 +22,20 @@ var _suggestedItemsMenuSection = require("./suggested-items-menu-section");
|
|
|
21
22
|
var _suggestedMenuItems = require("./suggested-menu-items");
|
|
22
23
|
var _createMenuItemsMap = require("./utils/createMenuItemsMap");
|
|
23
24
|
var _getSuggestedItemsFromSelection = require("./utils/getSuggestedItemsFromSelection");
|
|
25
|
+
var MIN_NUMBER_OF_AVAILABLE_NATIVE_TRANSFORMS = 7;
|
|
26
|
+
var getTotalNumberOfAvailableNativeTransforms = function getTotalNumberOfAvailableNativeTransforms(blockMenuComponents) {
|
|
27
|
+
if (!blockMenuComponents) {
|
|
28
|
+
return 0;
|
|
29
|
+
}
|
|
30
|
+
var childrenMap = (0, _utils.buildChildrenMap)(blockMenuComponents);
|
|
31
|
+
var headingsKey = (0, _utils.getChildrenMapKey)(_blockMenu.TRANSFORM_HEADINGS_MENU_SECTION.key, 'block-menu-section');
|
|
32
|
+
var structureKey = (0, _utils.getChildrenMapKey)(_blockMenu.TRANSFORM_STRUCTURE_MENU_SECTION.key, 'block-menu-section');
|
|
33
|
+
var headingsChildren = childrenMap.get(headingsKey) || [];
|
|
34
|
+
var structureChildren = childrenMap.get(structureKey) || [];
|
|
35
|
+
return [].concat((0, _toConsumableArray2.default)(headingsChildren), (0, _toConsumableArray2.default)(structureChildren)).filter(function (c) {
|
|
36
|
+
return (0, _utils.willComponentRender)(c, childrenMap);
|
|
37
|
+
}).length;
|
|
38
|
+
};
|
|
24
39
|
var getMoveUpMoveDownMenuComponents = function getMoveUpMoveDownMenuComponents(api) {
|
|
25
40
|
return [{
|
|
26
41
|
type: 'block-menu-item',
|
|
@@ -101,6 +116,9 @@ var getTurnIntoMenuComponents = function getTurnIntoMenuComponents(api) {
|
|
|
101
116
|
isHidden: function isHidden() {
|
|
102
117
|
var _api$blockMenu, _api$selection, _api$blockControls;
|
|
103
118
|
var blockMenuComponents = api === null || api === void 0 || (_api$blockMenu = api.blockMenu) === null || _api$blockMenu === void 0 ? void 0 : _api$blockMenu.actions.getBlockMenuComponents();
|
|
119
|
+
if (getTotalNumberOfAvailableNativeTransforms(blockMenuComponents) < MIN_NUMBER_OF_AVAILABLE_NATIVE_TRANSFORMS) {
|
|
120
|
+
return true;
|
|
121
|
+
}
|
|
104
122
|
var menuItemsMap = (0, _createMenuItemsMap.createMenuItemsMap)(blockMenuComponents);
|
|
105
123
|
var selection = api === null || api === void 0 || (_api$selection = api.selection) === null || _api$selection === void 0 || (_api$selection = _api$selection.sharedState.currentState()) === null || _api$selection === void 0 ? void 0 : _api$selection.selection;
|
|
106
124
|
var preservedSelection = api === null || api === void 0 || (_api$blockControls = api.blockControls) === null || _api$blockControls === void 0 || (_api$blockControls = _api$blockControls.sharedState.currentState()) === null || _api$blockControls === void 0 ? void 0 : _api$blockControls.preservedSelection;
|
|
@@ -24,6 +24,7 @@ var _editorSharedStyles = require("@atlaskit/editor-shared-styles");
|
|
|
24
24
|
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
25
25
|
var _platformFeatureFlagsReact = require("@atlaskit/platform-feature-flags-react");
|
|
26
26
|
var _compiled = require("@atlaskit/primitives/compiled");
|
|
27
|
+
var _prosemirrorHistory = require("@atlaskit/prosemirror-history");
|
|
27
28
|
var _experiments = require("@atlaskit/tmp-editor-statsig/experiments");
|
|
28
29
|
var _blockMenuProvider = require("./block-menu-provider");
|
|
29
30
|
var _BlockMenuRenderer = require("./block-menu-renderer/BlockMenuRenderer");
|
|
@@ -198,12 +199,22 @@ var BlockMenu = function BlockMenu(_ref4) {
|
|
|
198
199
|
if (!editorView || editorView !== null && editorView !== void 0 && editorView.hasFocus() || isSelectionWithinCodeBlock(editorView.state)) {
|
|
199
200
|
return;
|
|
200
201
|
}
|
|
202
|
+
var key = event.key.toLowerCase();
|
|
203
|
+
var isMetaCtrl = event.metaKey || event.ctrlKey;
|
|
204
|
+
var isDelete = ['backspace', 'delete'].includes(key);
|
|
205
|
+
var isUndo = isMetaCtrl && key === 'z' && !event.shiftKey;
|
|
206
|
+
var isRedo = isMetaCtrl && (key === 'y' || key === 'z' && event.shiftKey);
|
|
201
207
|
|
|
202
208
|
// Necessary to prevent the editor from handling the delete natively
|
|
203
|
-
if (
|
|
209
|
+
if (isDelete || isUndo || isRedo) {
|
|
204
210
|
event.preventDefault();
|
|
205
211
|
event.stopPropagation();
|
|
206
212
|
}
|
|
213
|
+
if (isUndo) {
|
|
214
|
+
(0, _prosemirrorHistory.undo)(editorView.state, editorView.dispatch);
|
|
215
|
+
} else if (isRedo) {
|
|
216
|
+
(0, _prosemirrorHistory.redo)(editorView.state, editorView.dispatch);
|
|
217
|
+
}
|
|
207
218
|
api === null || api === void 0 || (_api$core = api.core) === null || _api$core === void 0 || _api$core.actions.execute(api === null || api === void 0 || (_api$blockControls = api.blockControls) === null || _api$blockControls === void 0 || (_api$blockControls = _api$blockControls.commands) === null || _api$blockControls === void 0 ? void 0 : _api$blockControls.handleKeyDownWithPreservedSelection(event));
|
|
208
219
|
};
|
|
209
220
|
var handleClickOutside = function handleClickOutside(e) {
|
|
@@ -18,11 +18,9 @@ var _text = _interopRequireDefault(require("@atlaskit/primitives/text"));
|
|
|
18
18
|
var _consts = require("./consts");
|
|
19
19
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
20
20
|
var DeleteDropdownItemContent = function DeleteDropdownItemContent(_ref) {
|
|
21
|
-
var _api$core$sharedState;
|
|
22
21
|
var api = _ref.api;
|
|
23
22
|
var _useIntl = (0, _reactIntlNext.useIntl)(),
|
|
24
23
|
formatMessage = _useIntl.formatMessage;
|
|
25
|
-
var nodeTypes = Object.values((api === null || api === void 0 || (_api$core$sharedState = api.core.sharedState.currentState()) === null || _api$core$sharedState === void 0 || (_api$core$sharedState = _api$core$sharedState.schema) === null || _api$core$sharedState === void 0 ? void 0 : _api$core$sharedState.nodes) || {});
|
|
26
24
|
var onClick = function onClick() {
|
|
27
25
|
api === null || api === void 0 || api.core.actions.execute(function (_ref2) {
|
|
28
26
|
var _api$analytics, _api$blockControls, _api$blockControls2;
|
|
@@ -51,14 +49,13 @@ var DeleteDropdownItemContent = function DeleteDropdownItemContent(_ref) {
|
|
|
51
49
|
var _api$decorations, _api$decorations$hove;
|
|
52
50
|
var tr = _ref3.tr;
|
|
53
51
|
api === null || api === void 0 || (_api$decorations = api.decorations) === null || _api$decorations === void 0 || (_api$decorations = _api$decorations.commands) === null || _api$decorations === void 0 || (_api$decorations$hove = _api$decorations.hoverDecoration) === null || _api$decorations$hove === void 0 || _api$decorations$hove.call(_api$decorations, {
|
|
54
|
-
nodeType: nodeTypes,
|
|
55
52
|
add: true
|
|
56
53
|
})({
|
|
57
54
|
tr: tr
|
|
58
55
|
});
|
|
59
56
|
return tr;
|
|
60
57
|
});
|
|
61
|
-
}, [api
|
|
58
|
+
}, [api]);
|
|
62
59
|
var onRemoveHoverDecoration = (0, _react.useCallback)(function () {
|
|
63
60
|
api === null || api === void 0 || api.core.actions.execute(function (_ref4) {
|
|
64
61
|
var _api$decorations2, _api$decorations2$rem;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ACTION, ACTION_SUBJECT, ACTION_SUBJECT_ID, EVENT_TYPE } from '@atlaskit/editor-common/analytics';
|
|
2
2
|
import { startMeasure, stopMeasure } from '@atlaskit/editor-common/performance-measures';
|
|
3
|
-
import { expandSelectionToBlockRange } from '@atlaskit/editor-common/selection';
|
|
3
|
+
import { expandSelectionToBlockRange, getSourceNodesFromSelectionRange } from '@atlaskit/editor-common/selection';
|
|
4
4
|
import { NodeSelection } from '@atlaskit/editor-prosemirror/state';
|
|
5
5
|
import { Mapping, StepMap } from '@atlaskit/editor-prosemirror/transform';
|
|
6
6
|
import { isNestedNode } from '../ui/utils/isNestedNode';
|
|
@@ -27,10 +27,7 @@ export const transformNode = api => (targetType, metadata) => ({
|
|
|
27
27
|
const isParentLayout = selectedParent.type === nodes.layoutColumn;
|
|
28
28
|
const isNested = isNestedNode(preservedSelection, '') && !isParentLayout;
|
|
29
29
|
const isList = isListNode(selectedParent);
|
|
30
|
-
const
|
|
31
|
-
const sliceEnd = isList ? $to.pos + 1 : $to.pos;
|
|
32
|
-
const slice = tr.doc.slice(sliceStart, sliceEnd);
|
|
33
|
-
const sourceNodes = [...slice.content.content];
|
|
30
|
+
const sourceNodes = getSourceNodesFromSelectionRange(tr, preservedSelection);
|
|
34
31
|
const sourceNodeTypes = {};
|
|
35
32
|
sourceNodes.forEach(node => {
|
|
36
33
|
const typeName = node.type.name;
|
|
@@ -44,7 +41,8 @@ export const transformNode = api => (targetType, metadata) => ({
|
|
|
44
41
|
targetAttrs: metadata === null || metadata === void 0 ? void 0 : metadata.targetAttrs,
|
|
45
42
|
parentNode: selectedParent
|
|
46
43
|
});
|
|
47
|
-
const content = resultNodes.length > 0 ? resultNodes :
|
|
44
|
+
const content = resultNodes.length > 0 ? resultNodes : sourceNodes;
|
|
45
|
+
const sliceStart = isList ? $from.pos - 1 : $from.pos;
|
|
48
46
|
if (preservedSelection instanceof NodeSelection && preservedSelection.node.type === nodes.mediaSingle) {
|
|
49
47
|
var _api$blockControls2;
|
|
50
48
|
// when node is media single, use tr.replaceWith freeze editor, if modify position, tr.replaceWith creates duplicats
|
|
@@ -59,8 +57,8 @@ export const transformNode = api => (targetType, metadata) => ({
|
|
|
59
57
|
// when we replace and insert content, we need to manually map the preserved selection
|
|
60
58
|
// through the transaction, otherwise it will treat the selection as having been deleted
|
|
61
59
|
// and stop preserving it
|
|
62
|
-
const oldSize =
|
|
63
|
-
const newSize =
|
|
60
|
+
const oldSize = sourceNodes.reduce((sum, node) => sum + node.nodeSize, 0);
|
|
61
|
+
const newSize = content.reduce((sum, node) => sum + node.nodeSize, 0);
|
|
64
62
|
api === null || api === void 0 ? void 0 : (_api$blockControls2 = api.blockControls) === null || _api$blockControls2 === void 0 ? void 0 : _api$blockControls2.commands.mapPreservedSelection(new Mapping([new StepMap([0, oldSize, newSize])]))({
|
|
65
63
|
tr
|
|
66
64
|
});
|
|
@@ -29,12 +29,13 @@ export const createPlugin = api => {
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
// Block further handling of key events when block menu is open
|
|
32
|
-
// Except for backspace/delete/copy/cut/paste which should be handled by the selection preservation plugin
|
|
32
|
+
// Except for backspace/delete/copy/cut/paste/undo/redo which should be handled by the selection preservation plugin
|
|
33
33
|
const key = event.key.toLowerCase();
|
|
34
34
|
const isMetaCtrl = event.metaKey || event.ctrlKey;
|
|
35
35
|
const isBackspaceDelete = ['backspace', 'delete'].includes(key);
|
|
36
36
|
const isCopyCutPaste = isMetaCtrl && ['c', 'x', 'v'].includes(key);
|
|
37
|
-
const
|
|
37
|
+
const isUndoRedo = isMetaCtrl && ['z', 'y'].includes(key);
|
|
38
|
+
const suppressNativeHandling = !isCopyCutPaste && !isBackspaceDelete && !isUndoRedo;
|
|
38
39
|
return suppressNativeHandling;
|
|
39
40
|
}
|
|
40
41
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { BLOCK_ACTIONS_COPY_LINK_TO_BLOCK_MENU_ITEM, BLOCK_ACTIONS_MENU_SECTION, BLOCK_ACTIONS_MENU_SECTION_RANK, DELETE_MENU_SECTION, DELETE_MENU_SECTION_RANK, DELETE_MENU_ITEM, POSITION_MENU_SECTION, POSITION_MENU_SECTION_RANK, POSITION_MOVE_DOWN_MENU_ITEM, POSITION_MOVE_UP_MENU_ITEM, TRANSFORM_MENU_ITEM, TRANSFORM_MENU_ITEM_RANK, TRANSFORM_MENU_SECTION, TRANSFORM_MENU_SECTION_RANK, TRANSFORM_CREATE_MENU_SECTION, TRANSFORM_SUGGESTED_MENU_SECTION, TRANSFORM_STRUCTURE_MENU_SECTION, TRANSFORM_HEADINGS_MENU_SECTION, MAIN_BLOCK_MENU_SECTION_RANK, TRANSFORM_SUGGESTED_MENU_SECTION_RANK, TRANSFORM_SUGGESTED_MENU_ITEM } from '@atlaskit/editor-common/block-menu';
|
|
3
3
|
import { ToolbarDropdownItemSection } from '@atlaskit/editor-toolbar';
|
|
4
|
+
import { buildChildrenMap, getChildrenMapKey, willComponentRender } from './block-menu-renderer/utils';
|
|
4
5
|
import { CopyLinkDropdownItem } from './copy-link';
|
|
5
6
|
import { CopySection } from './copy-section';
|
|
6
7
|
import { DeleteDropdownItem } from './delete-button';
|
|
@@ -13,6 +14,18 @@ import { SuggestedItemsMenuSection } from './suggested-items-menu-section';
|
|
|
13
14
|
import { SuggestedMenuItems } from './suggested-menu-items';
|
|
14
15
|
import { createMenuItemsMap } from './utils/createMenuItemsMap';
|
|
15
16
|
import { getSuggestedItemsFromSelection } from './utils/getSuggestedItemsFromSelection';
|
|
17
|
+
const MIN_NUMBER_OF_AVAILABLE_NATIVE_TRANSFORMS = 7;
|
|
18
|
+
const getTotalNumberOfAvailableNativeTransforms = blockMenuComponents => {
|
|
19
|
+
if (!blockMenuComponents) {
|
|
20
|
+
return 0;
|
|
21
|
+
}
|
|
22
|
+
const childrenMap = buildChildrenMap(blockMenuComponents);
|
|
23
|
+
const headingsKey = getChildrenMapKey(TRANSFORM_HEADINGS_MENU_SECTION.key, 'block-menu-section');
|
|
24
|
+
const structureKey = getChildrenMapKey(TRANSFORM_STRUCTURE_MENU_SECTION.key, 'block-menu-section');
|
|
25
|
+
const headingsChildren = childrenMap.get(headingsKey) || [];
|
|
26
|
+
const structureChildren = childrenMap.get(structureKey) || [];
|
|
27
|
+
return [...headingsChildren, ...structureChildren].filter(c => willComponentRender(c, childrenMap)).length;
|
|
28
|
+
};
|
|
16
29
|
const getMoveUpMoveDownMenuComponents = api => {
|
|
17
30
|
return [{
|
|
18
31
|
type: 'block-menu-item',
|
|
@@ -85,6 +98,9 @@ const getTurnIntoMenuComponents = api => {
|
|
|
85
98
|
isHidden: () => {
|
|
86
99
|
var _api$blockMenu, _api$selection, _api$selection$shared, _api$blockControls, _api$blockControls$sh;
|
|
87
100
|
const blockMenuComponents = api === null || api === void 0 ? void 0 : (_api$blockMenu = api.blockMenu) === null || _api$blockMenu === void 0 ? void 0 : _api$blockMenu.actions.getBlockMenuComponents();
|
|
101
|
+
if (getTotalNumberOfAvailableNativeTransforms(blockMenuComponents) < MIN_NUMBER_OF_AVAILABLE_NATIVE_TRANSFORMS) {
|
|
102
|
+
return true;
|
|
103
|
+
}
|
|
88
104
|
const menuItemsMap = createMenuItemsMap(blockMenuComponents);
|
|
89
105
|
const selection = api === null || api === void 0 ? void 0 : (_api$selection = api.selection) === null || _api$selection === void 0 ? void 0 : (_api$selection$shared = _api$selection.sharedState.currentState()) === null || _api$selection$shared === void 0 ? void 0 : _api$selection$shared.selection;
|
|
90
106
|
const preservedSelection = api === null || api === void 0 ? void 0 : (_api$blockControls = api.blockControls) === null || _api$blockControls === void 0 ? void 0 : (_api$blockControls$sh = _api$blockControls.sharedState.currentState()) === null || _api$blockControls$sh === void 0 ? void 0 : _api$blockControls$sh.preservedSelection;
|
|
@@ -15,6 +15,7 @@ import { akEditorFloatingOverlapPanelZIndex } from '@atlaskit/editor-shared-styl
|
|
|
15
15
|
import { fg } from '@atlaskit/platform-feature-flags';
|
|
16
16
|
import { conditionalHooksFactory } from '@atlaskit/platform-feature-flags-react';
|
|
17
17
|
import { Box } from '@atlaskit/primitives/compiled';
|
|
18
|
+
import { redo, undo } from '@atlaskit/prosemirror-history';
|
|
18
19
|
import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
|
|
19
20
|
import { useBlockMenu } from './block-menu-provider';
|
|
20
21
|
import { BlockMenuRenderer } from './block-menu-renderer/BlockMenuRenderer';
|
|
@@ -188,12 +189,22 @@ const BlockMenu = ({
|
|
|
188
189
|
if (!editorView || editorView !== null && editorView !== void 0 && editorView.hasFocus() || isSelectionWithinCodeBlock(editorView.state)) {
|
|
189
190
|
return;
|
|
190
191
|
}
|
|
192
|
+
const key = event.key.toLowerCase();
|
|
193
|
+
const isMetaCtrl = event.metaKey || event.ctrlKey;
|
|
194
|
+
const isDelete = ['backspace', 'delete'].includes(key);
|
|
195
|
+
const isUndo = isMetaCtrl && key === 'z' && !event.shiftKey;
|
|
196
|
+
const isRedo = isMetaCtrl && (key === 'y' || key === 'z' && event.shiftKey);
|
|
191
197
|
|
|
192
198
|
// Necessary to prevent the editor from handling the delete natively
|
|
193
|
-
if (
|
|
199
|
+
if (isDelete || isUndo || isRedo) {
|
|
194
200
|
event.preventDefault();
|
|
195
201
|
event.stopPropagation();
|
|
196
202
|
}
|
|
203
|
+
if (isUndo) {
|
|
204
|
+
undo(editorView.state, editorView.dispatch);
|
|
205
|
+
} else if (isRedo) {
|
|
206
|
+
redo(editorView.state, editorView.dispatch);
|
|
207
|
+
}
|
|
197
208
|
api === null || api === void 0 ? void 0 : (_api$core = api.core) === null || _api$core === void 0 ? void 0 : _api$core.actions.execute(api === null || api === void 0 ? void 0 : (_api$blockControls = api.blockControls) === null || _api$blockControls === void 0 ? void 0 : (_api$blockControls$co = _api$blockControls.commands) === null || _api$blockControls$co === void 0 ? void 0 : _api$blockControls$co.handleKeyDownWithPreservedSelection(event));
|
|
198
209
|
};
|
|
199
210
|
const handleClickOutside = e => {
|
|
@@ -11,11 +11,9 @@ import { BLOCK_MENU_ITEM_NAME } from './consts';
|
|
|
11
11
|
const DeleteDropdownItemContent = ({
|
|
12
12
|
api
|
|
13
13
|
}) => {
|
|
14
|
-
var _api$core$sharedState, _api$core$sharedState2;
|
|
15
14
|
const {
|
|
16
15
|
formatMessage
|
|
17
16
|
} = useIntl();
|
|
18
|
-
const nodeTypes = Object.values((api === null || api === void 0 ? void 0 : (_api$core$sharedState = api.core.sharedState.currentState()) === null || _api$core$sharedState === void 0 ? void 0 : (_api$core$sharedState2 = _api$core$sharedState.schema) === null || _api$core$sharedState2 === void 0 ? void 0 : _api$core$sharedState2.nodes) || {});
|
|
19
17
|
const onClick = () => {
|
|
20
18
|
api === null || api === void 0 ? void 0 : api.core.actions.execute(({
|
|
21
19
|
tr
|
|
@@ -46,14 +44,13 @@ const DeleteDropdownItemContent = ({
|
|
|
46
44
|
}) => {
|
|
47
45
|
var _api$decorations, _api$decorations$comm, _api$decorations$comm2;
|
|
48
46
|
api === null || api === void 0 ? void 0 : (_api$decorations = api.decorations) === null || _api$decorations === void 0 ? void 0 : (_api$decorations$comm = _api$decorations.commands) === null || _api$decorations$comm === void 0 ? void 0 : (_api$decorations$comm2 = _api$decorations$comm.hoverDecoration) === null || _api$decorations$comm2 === void 0 ? void 0 : _api$decorations$comm2.call(_api$decorations$comm, {
|
|
49
|
-
nodeType: nodeTypes,
|
|
50
47
|
add: true
|
|
51
48
|
})({
|
|
52
49
|
tr
|
|
53
50
|
});
|
|
54
51
|
return tr;
|
|
55
52
|
});
|
|
56
|
-
}, [api
|
|
53
|
+
}, [api]);
|
|
57
54
|
const onRemoveHoverDecoration = useCallback(() => {
|
|
58
55
|
api === null || api === void 0 ? void 0 : api.core.actions.execute(({
|
|
59
56
|
tr
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
|
|
2
1
|
import { ACTION, ACTION_SUBJECT, ACTION_SUBJECT_ID, EVENT_TYPE } from '@atlaskit/editor-common/analytics';
|
|
3
2
|
import { startMeasure, stopMeasure } from '@atlaskit/editor-common/performance-measures';
|
|
4
|
-
import { expandSelectionToBlockRange } from '@atlaskit/editor-common/selection';
|
|
3
|
+
import { expandSelectionToBlockRange, getSourceNodesFromSelectionRange } from '@atlaskit/editor-common/selection';
|
|
5
4
|
import { NodeSelection } from '@atlaskit/editor-prosemirror/state';
|
|
6
5
|
import { Mapping, StepMap } from '@atlaskit/editor-prosemirror/transform';
|
|
7
6
|
import { isNestedNode } from '../ui/utils/isNestedNode';
|
|
@@ -26,10 +25,7 @@ export var transformNode = function transformNode(api) {
|
|
|
26
25
|
var isParentLayout = selectedParent.type === nodes.layoutColumn;
|
|
27
26
|
var isNested = isNestedNode(preservedSelection, '') && !isParentLayout;
|
|
28
27
|
var isList = isListNode(selectedParent);
|
|
29
|
-
var
|
|
30
|
-
var sliceEnd = isList ? $to.pos + 1 : $to.pos;
|
|
31
|
-
var slice = tr.doc.slice(sliceStart, sliceEnd);
|
|
32
|
-
var sourceNodes = _toConsumableArray(slice.content.content);
|
|
28
|
+
var sourceNodes = getSourceNodesFromSelectionRange(tr, preservedSelection);
|
|
33
29
|
var sourceNodeTypes = {};
|
|
34
30
|
sourceNodes.forEach(function (node) {
|
|
35
31
|
var typeName = node.type.name;
|
|
@@ -43,7 +39,8 @@ export var transformNode = function transformNode(api) {
|
|
|
43
39
|
targetAttrs: metadata === null || metadata === void 0 ? void 0 : metadata.targetAttrs,
|
|
44
40
|
parentNode: selectedParent
|
|
45
41
|
});
|
|
46
|
-
var content = resultNodes.length > 0 ? resultNodes :
|
|
42
|
+
var content = resultNodes.length > 0 ? resultNodes : sourceNodes;
|
|
43
|
+
var sliceStart = isList ? $from.pos - 1 : $from.pos;
|
|
47
44
|
if (preservedSelection instanceof NodeSelection && preservedSelection.node.type === nodes.mediaSingle) {
|
|
48
45
|
var _api$blockControls2;
|
|
49
46
|
// when node is media single, use tr.replaceWith freeze editor, if modify position, tr.replaceWith creates duplicats
|
|
@@ -58,10 +55,12 @@ export var transformNode = function transformNode(api) {
|
|
|
58
55
|
// when we replace and insert content, we need to manually map the preserved selection
|
|
59
56
|
// through the transaction, otherwise it will treat the selection as having been deleted
|
|
60
57
|
// and stop preserving it
|
|
61
|
-
var oldSize =
|
|
62
|
-
|
|
58
|
+
var oldSize = sourceNodes.reduce(function (sum, node) {
|
|
59
|
+
return sum + node.nodeSize;
|
|
60
|
+
}, 0);
|
|
61
|
+
var newSize = content.reduce(function (sum, node) {
|
|
63
62
|
return sum + node.nodeSize;
|
|
64
|
-
}, 0)
|
|
63
|
+
}, 0);
|
|
65
64
|
api === null || api === void 0 || (_api$blockControls2 = api.blockControls) === null || _api$blockControls2 === void 0 || _api$blockControls2.commands.mapPreservedSelection(new Mapping([new StepMap([0, oldSize, newSize])]))({
|
|
66
65
|
tr: tr
|
|
67
66
|
});
|
|
@@ -29,12 +29,13 @@ export var createPlugin = function createPlugin(api) {
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
// Block further handling of key events when block menu is open
|
|
32
|
-
// Except for backspace/delete/copy/cut/paste which should be handled by the selection preservation plugin
|
|
32
|
+
// Except for backspace/delete/copy/cut/paste/undo/redo which should be handled by the selection preservation plugin
|
|
33
33
|
var key = event.key.toLowerCase();
|
|
34
34
|
var isMetaCtrl = event.metaKey || event.ctrlKey;
|
|
35
35
|
var isBackspaceDelete = ['backspace', 'delete'].includes(key);
|
|
36
36
|
var isCopyCutPaste = isMetaCtrl && ['c', 'x', 'v'].includes(key);
|
|
37
|
-
var
|
|
37
|
+
var isUndoRedo = isMetaCtrl && ['z', 'y'].includes(key);
|
|
38
|
+
var suppressNativeHandling = !isCopyCutPaste && !isBackspaceDelete && !isUndoRedo;
|
|
38
39
|
return suppressNativeHandling;
|
|
39
40
|
}
|
|
40
41
|
}
|
|
@@ -2,6 +2,7 @@ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
|
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import { BLOCK_ACTIONS_COPY_LINK_TO_BLOCK_MENU_ITEM, BLOCK_ACTIONS_MENU_SECTION, BLOCK_ACTIONS_MENU_SECTION_RANK, DELETE_MENU_SECTION, DELETE_MENU_SECTION_RANK, DELETE_MENU_ITEM, POSITION_MENU_SECTION, POSITION_MENU_SECTION_RANK, POSITION_MOVE_DOWN_MENU_ITEM, POSITION_MOVE_UP_MENU_ITEM, TRANSFORM_MENU_ITEM, TRANSFORM_MENU_ITEM_RANK, TRANSFORM_MENU_SECTION, TRANSFORM_MENU_SECTION_RANK, TRANSFORM_CREATE_MENU_SECTION, TRANSFORM_SUGGESTED_MENU_SECTION, TRANSFORM_STRUCTURE_MENU_SECTION, TRANSFORM_HEADINGS_MENU_SECTION, MAIN_BLOCK_MENU_SECTION_RANK, TRANSFORM_SUGGESTED_MENU_SECTION_RANK, TRANSFORM_SUGGESTED_MENU_ITEM } from '@atlaskit/editor-common/block-menu';
|
|
4
4
|
import { ToolbarDropdownItemSection } from '@atlaskit/editor-toolbar';
|
|
5
|
+
import { buildChildrenMap, getChildrenMapKey, willComponentRender } from './block-menu-renderer/utils';
|
|
5
6
|
import { CopyLinkDropdownItem } from './copy-link';
|
|
6
7
|
import { CopySection } from './copy-section';
|
|
7
8
|
import { DeleteDropdownItem } from './delete-button';
|
|
@@ -14,6 +15,20 @@ import { SuggestedItemsMenuSection } from './suggested-items-menu-section';
|
|
|
14
15
|
import { SuggestedMenuItems } from './suggested-menu-items';
|
|
15
16
|
import { createMenuItemsMap } from './utils/createMenuItemsMap';
|
|
16
17
|
import { getSuggestedItemsFromSelection } from './utils/getSuggestedItemsFromSelection';
|
|
18
|
+
var MIN_NUMBER_OF_AVAILABLE_NATIVE_TRANSFORMS = 7;
|
|
19
|
+
var getTotalNumberOfAvailableNativeTransforms = function getTotalNumberOfAvailableNativeTransforms(blockMenuComponents) {
|
|
20
|
+
if (!blockMenuComponents) {
|
|
21
|
+
return 0;
|
|
22
|
+
}
|
|
23
|
+
var childrenMap = buildChildrenMap(blockMenuComponents);
|
|
24
|
+
var headingsKey = getChildrenMapKey(TRANSFORM_HEADINGS_MENU_SECTION.key, 'block-menu-section');
|
|
25
|
+
var structureKey = getChildrenMapKey(TRANSFORM_STRUCTURE_MENU_SECTION.key, 'block-menu-section');
|
|
26
|
+
var headingsChildren = childrenMap.get(headingsKey) || [];
|
|
27
|
+
var structureChildren = childrenMap.get(structureKey) || [];
|
|
28
|
+
return [].concat(_toConsumableArray(headingsChildren), _toConsumableArray(structureChildren)).filter(function (c) {
|
|
29
|
+
return willComponentRender(c, childrenMap);
|
|
30
|
+
}).length;
|
|
31
|
+
};
|
|
17
32
|
var getMoveUpMoveDownMenuComponents = function getMoveUpMoveDownMenuComponents(api) {
|
|
18
33
|
return [{
|
|
19
34
|
type: 'block-menu-item',
|
|
@@ -94,6 +109,9 @@ var getTurnIntoMenuComponents = function getTurnIntoMenuComponents(api) {
|
|
|
94
109
|
isHidden: function isHidden() {
|
|
95
110
|
var _api$blockMenu, _api$selection, _api$blockControls;
|
|
96
111
|
var blockMenuComponents = api === null || api === void 0 || (_api$blockMenu = api.blockMenu) === null || _api$blockMenu === void 0 ? void 0 : _api$blockMenu.actions.getBlockMenuComponents();
|
|
112
|
+
if (getTotalNumberOfAvailableNativeTransforms(blockMenuComponents) < MIN_NUMBER_OF_AVAILABLE_NATIVE_TRANSFORMS) {
|
|
113
|
+
return true;
|
|
114
|
+
}
|
|
97
115
|
var menuItemsMap = createMenuItemsMap(blockMenuComponents);
|
|
98
116
|
var selection = api === null || api === void 0 || (_api$selection = api.selection) === null || _api$selection === void 0 || (_api$selection = _api$selection.sharedState.currentState()) === null || _api$selection === void 0 ? void 0 : _api$selection.selection;
|
|
99
117
|
var preservedSelection = api === null || api === void 0 || (_api$blockControls = api.blockControls) === null || _api$blockControls === void 0 || (_api$blockControls = _api$blockControls.sharedState.currentState()) === null || _api$blockControls === void 0 ? void 0 : _api$blockControls.preservedSelection;
|
|
@@ -16,6 +16,7 @@ import { akEditorFloatingOverlapPanelZIndex } from '@atlaskit/editor-shared-styl
|
|
|
16
16
|
import { fg } from '@atlaskit/platform-feature-flags';
|
|
17
17
|
import { conditionalHooksFactory } from '@atlaskit/platform-feature-flags-react';
|
|
18
18
|
import { Box } from '@atlaskit/primitives/compiled';
|
|
19
|
+
import { redo, undo } from '@atlaskit/prosemirror-history';
|
|
19
20
|
import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
|
|
20
21
|
import { useBlockMenu } from './block-menu-provider';
|
|
21
22
|
import { BlockMenuRenderer } from './block-menu-renderer/BlockMenuRenderer';
|
|
@@ -189,12 +190,22 @@ var BlockMenu = function BlockMenu(_ref4) {
|
|
|
189
190
|
if (!editorView || editorView !== null && editorView !== void 0 && editorView.hasFocus() || isSelectionWithinCodeBlock(editorView.state)) {
|
|
190
191
|
return;
|
|
191
192
|
}
|
|
193
|
+
var key = event.key.toLowerCase();
|
|
194
|
+
var isMetaCtrl = event.metaKey || event.ctrlKey;
|
|
195
|
+
var isDelete = ['backspace', 'delete'].includes(key);
|
|
196
|
+
var isUndo = isMetaCtrl && key === 'z' && !event.shiftKey;
|
|
197
|
+
var isRedo = isMetaCtrl && (key === 'y' || key === 'z' && event.shiftKey);
|
|
192
198
|
|
|
193
199
|
// Necessary to prevent the editor from handling the delete natively
|
|
194
|
-
if (
|
|
200
|
+
if (isDelete || isUndo || isRedo) {
|
|
195
201
|
event.preventDefault();
|
|
196
202
|
event.stopPropagation();
|
|
197
203
|
}
|
|
204
|
+
if (isUndo) {
|
|
205
|
+
undo(editorView.state, editorView.dispatch);
|
|
206
|
+
} else if (isRedo) {
|
|
207
|
+
redo(editorView.state, editorView.dispatch);
|
|
208
|
+
}
|
|
198
209
|
api === null || api === void 0 || (_api$core = api.core) === null || _api$core === void 0 || _api$core.actions.execute(api === null || api === void 0 || (_api$blockControls = api.blockControls) === null || _api$blockControls === void 0 || (_api$blockControls = _api$blockControls.commands) === null || _api$blockControls === void 0 ? void 0 : _api$blockControls.handleKeyDownWithPreservedSelection(event));
|
|
199
210
|
};
|
|
200
211
|
var handleClickOutside = function handleClickOutside(e) {
|
|
@@ -9,11 +9,9 @@ import { Box } from '@atlaskit/primitives/box';
|
|
|
9
9
|
import Text from '@atlaskit/primitives/text';
|
|
10
10
|
import { BLOCK_MENU_ITEM_NAME } from './consts';
|
|
11
11
|
var DeleteDropdownItemContent = function DeleteDropdownItemContent(_ref) {
|
|
12
|
-
var _api$core$sharedState;
|
|
13
12
|
var api = _ref.api;
|
|
14
13
|
var _useIntl = useIntl(),
|
|
15
14
|
formatMessage = _useIntl.formatMessage;
|
|
16
|
-
var nodeTypes = Object.values((api === null || api === void 0 || (_api$core$sharedState = api.core.sharedState.currentState()) === null || _api$core$sharedState === void 0 || (_api$core$sharedState = _api$core$sharedState.schema) === null || _api$core$sharedState === void 0 ? void 0 : _api$core$sharedState.nodes) || {});
|
|
17
15
|
var onClick = function onClick() {
|
|
18
16
|
api === null || api === void 0 || api.core.actions.execute(function (_ref2) {
|
|
19
17
|
var _api$analytics, _api$blockControls, _api$blockControls2;
|
|
@@ -42,14 +40,13 @@ var DeleteDropdownItemContent = function DeleteDropdownItemContent(_ref) {
|
|
|
42
40
|
var _api$decorations, _api$decorations$hove;
|
|
43
41
|
var tr = _ref3.tr;
|
|
44
42
|
api === null || api === void 0 || (_api$decorations = api.decorations) === null || _api$decorations === void 0 || (_api$decorations = _api$decorations.commands) === null || _api$decorations === void 0 || (_api$decorations$hove = _api$decorations.hoverDecoration) === null || _api$decorations$hove === void 0 || _api$decorations$hove.call(_api$decorations, {
|
|
45
|
-
nodeType: nodeTypes,
|
|
46
43
|
add: true
|
|
47
44
|
})({
|
|
48
45
|
tr: tr
|
|
49
46
|
});
|
|
50
47
|
return tr;
|
|
51
48
|
});
|
|
52
|
-
}, [api
|
|
49
|
+
}, [api]);
|
|
53
50
|
var onRemoveHoverDecoration = useCallback(function () {
|
|
54
51
|
api === null || api === void 0 || api.core.actions.execute(function (_ref4) {
|
|
55
52
|
var _api$decorations2, _api$decorations2$rem;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlaskit/editor-plugin-block-menu",
|
|
3
|
-
"version": "6.0.
|
|
3
|
+
"version": "6.0.21",
|
|
4
4
|
"description": "BlockMenu plugin for @atlaskit/editor-core",
|
|
5
5
|
"author": "Atlassian Pty Ltd",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -45,8 +45,9 @@
|
|
|
45
45
|
"@atlaskit/platform-feature-flags": "^1.1.0",
|
|
46
46
|
"@atlaskit/platform-feature-flags-react": "^0.4.0",
|
|
47
47
|
"@atlaskit/primitives": "^17.1.0",
|
|
48
|
-
"@atlaskit/
|
|
49
|
-
"@atlaskit/
|
|
48
|
+
"@atlaskit/prosemirror-history": "^0.2.0",
|
|
49
|
+
"@atlaskit/tmp-editor-statsig": "^16.27.0",
|
|
50
|
+
"@atlaskit/tokens": "^10.1.0",
|
|
50
51
|
"@babel/runtime": "^7.0.0"
|
|
51
52
|
},
|
|
52
53
|
"peerDependencies": {
|
package/build/tsconfig.json
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"extends": "../tsconfig",
|
|
3
|
-
"compilerOptions": {
|
|
4
|
-
"target": "es5",
|
|
5
|
-
"paths": {}
|
|
6
|
-
},
|
|
7
|
-
"include": [
|
|
8
|
-
"../src/**/*.ts",
|
|
9
|
-
"../src/**/*.tsx"
|
|
10
|
-
],
|
|
11
|
-
"exclude": [
|
|
12
|
-
"../src/**/__tests__/*",
|
|
13
|
-
"../src/**/*.test.*",
|
|
14
|
-
"../src/**/test.*",
|
|
15
|
-
"../src/**/examples.*"
|
|
16
|
-
]
|
|
17
|
-
}
|