@atlaskit/editor-plugin-insert-block 4.3.2 → 4.3.4
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/insertBlockPlugin.js +8 -2
- package/dist/cjs/ui/toolbar-components/EmojiButton.js +25 -83
- package/dist/cjs/ui/toolbar-components/InsertButton.js +250 -0
- package/dist/cjs/ui/toolbar-components/TableSizePicker.js +25 -48
- package/dist/cjs/ui/toolbar-components/hooks/useEmojiPickerPopup.js +52 -0
- package/dist/cjs/ui/toolbar-components/hooks/useInsertButtonState.js +89 -0
- package/dist/cjs/ui/toolbar-components/hooks/usePopupManager.js +65 -0
- package/dist/cjs/ui/toolbar-components/hooks/useTableSelectorPopup.js +35 -0
- package/dist/cjs/ui/toolbar-components/popups/EmojiPickerPopup.js +53 -0
- package/dist/cjs/ui/toolbar-components/popups/TableSelectorPopupWrapper.js +36 -0
- package/dist/cjs/ui/toolbar-components/shared/constants.js +18 -0
- package/dist/cjs/ui/toolbar-components/shared/types.js +5 -0
- package/dist/cjs/ui/toolbar-components.js +66 -2
- package/dist/es2019/insertBlockPlugin.js +8 -2
- package/dist/es2019/ui/toolbar-components/EmojiButton.js +24 -77
- package/dist/es2019/ui/toolbar-components/InsertButton.js +243 -0
- package/dist/es2019/ui/toolbar-components/TableSizePicker.js +26 -41
- package/dist/es2019/ui/toolbar-components/hooks/useEmojiPickerPopup.js +42 -0
- package/dist/es2019/ui/toolbar-components/hooks/useInsertButtonState.js +81 -0
- package/dist/es2019/ui/toolbar-components/hooks/usePopupManager.js +50 -0
- package/dist/es2019/ui/toolbar-components/hooks/useTableSelectorPopup.js +27 -0
- package/dist/es2019/ui/toolbar-components/popups/EmojiPickerPopup.js +47 -0
- package/dist/es2019/ui/toolbar-components/popups/TableSelectorPopupWrapper.js +30 -0
- package/dist/es2019/ui/toolbar-components/shared/constants.js +12 -0
- package/dist/es2019/ui/toolbar-components/shared/types.js +1 -0
- package/dist/es2019/ui/toolbar-components.js +63 -3
- package/dist/esm/insertBlockPlugin.js +8 -2
- package/dist/esm/ui/toolbar-components/EmojiButton.js +26 -83
- package/dist/esm/ui/toolbar-components/InsertButton.js +242 -0
- package/dist/esm/ui/toolbar-components/TableSizePicker.js +26 -48
- package/dist/esm/ui/toolbar-components/hooks/useEmojiPickerPopup.js +45 -0
- package/dist/esm/ui/toolbar-components/hooks/useInsertButtonState.js +82 -0
- package/dist/esm/ui/toolbar-components/hooks/usePopupManager.js +58 -0
- package/dist/esm/ui/toolbar-components/hooks/useTableSelectorPopup.js +28 -0
- package/dist/esm/ui/toolbar-components/popups/EmojiPickerPopup.js +46 -0
- package/dist/esm/ui/toolbar-components/popups/TableSelectorPopupWrapper.js +29 -0
- package/dist/esm/ui/toolbar-components/shared/constants.js +12 -0
- package/dist/esm/ui/toolbar-components/shared/types.js +1 -0
- package/dist/esm/ui/toolbar-components.js +67 -3
- package/dist/types/insertBlockPluginType.d.ts +2 -2
- package/dist/types/types/index.d.ts +3 -3
- package/dist/types/ui/ElementBrowser/types.d.ts +3 -3
- package/dist/types/ui/ToolbarInsertBlock/block-insert-element-browser.d.ts +8 -8
- package/dist/types/ui/ToolbarInsertBlock/block-insert-menu.d.ts +12 -12
- package/dist/types/ui/ToolbarInsertBlock/create-items.d.ts +24 -24
- package/dist/types/ui/ToolbarInsertBlock/dropdown-button.d.ts +4 -4
- package/dist/types/ui/ToolbarInsertBlock/index.d.ts +1 -1
- package/dist/types/ui/ToolbarInsertBlock/item.d.ts +2 -2
- package/dist/types/ui/ToolbarInsertBlock/types.d.ts +36 -36
- package/dist/types/ui/toolbar-components/EmojiButton.d.ts +2 -7
- package/dist/types/ui/toolbar-components/InsertButton.d.ts +18 -0
- package/dist/types/ui/toolbar-components/TableSizePicker.d.ts +3 -5
- package/dist/types/ui/toolbar-components/hooks/useEmojiPickerPopup.d.ts +20 -0
- package/dist/types/ui/toolbar-components/hooks/useInsertButtonState.d.ts +24 -0
- package/dist/types/ui/toolbar-components/hooks/usePopupManager.d.ts +21 -0
- package/dist/types/ui/toolbar-components/hooks/useTableSelectorPopup.d.ts +19 -0
- package/dist/types/ui/toolbar-components/popups/EmojiPickerPopup.d.ts +16 -0
- package/dist/types/ui/toolbar-components/popups/TableSelectorPopupWrapper.d.ts +15 -0
- package/dist/types/ui/toolbar-components/shared/constants.d.ts +12 -0
- package/dist/types/ui/toolbar-components/shared/types.d.ts +8 -0
- package/dist/types/ui/toolbar-components.d.ts +9 -2
- package/dist/types-ts4.5/insertBlockPluginType.d.ts +2 -2
- package/dist/types-ts4.5/types/index.d.ts +3 -3
- package/dist/types-ts4.5/ui/ElementBrowser/types.d.ts +3 -3
- package/dist/types-ts4.5/ui/ToolbarInsertBlock/block-insert-element-browser.d.ts +8 -8
- package/dist/types-ts4.5/ui/ToolbarInsertBlock/block-insert-menu.d.ts +12 -12
- package/dist/types-ts4.5/ui/ToolbarInsertBlock/create-items.d.ts +24 -24
- package/dist/types-ts4.5/ui/ToolbarInsertBlock/dropdown-button.d.ts +4 -4
- package/dist/types-ts4.5/ui/ToolbarInsertBlock/index.d.ts +1 -1
- package/dist/types-ts4.5/ui/ToolbarInsertBlock/item.d.ts +2 -2
- package/dist/types-ts4.5/ui/ToolbarInsertBlock/types.d.ts +36 -36
- package/dist/types-ts4.5/ui/toolbar-components/EmojiButton.d.ts +2 -7
- package/dist/types-ts4.5/ui/toolbar-components/InsertButton.d.ts +18 -0
- package/dist/types-ts4.5/ui/toolbar-components/TableSizePicker.d.ts +3 -5
- package/dist/types-ts4.5/ui/toolbar-components/hooks/useEmojiPickerPopup.d.ts +20 -0
- package/dist/types-ts4.5/ui/toolbar-components/hooks/useInsertButtonState.d.ts +24 -0
- package/dist/types-ts4.5/ui/toolbar-components/hooks/usePopupManager.d.ts +21 -0
- package/dist/types-ts4.5/ui/toolbar-components/hooks/useTableSelectorPopup.d.ts +19 -0
- package/dist/types-ts4.5/ui/toolbar-components/popups/EmojiPickerPopup.d.ts +16 -0
- package/dist/types-ts4.5/ui/toolbar-components/popups/TableSelectorPopupWrapper.d.ts +15 -0
- package/dist/types-ts4.5/ui/toolbar-components/shared/constants.d.ts +15 -0
- package/dist/types-ts4.5/ui/toolbar-components/shared/types.d.ts +8 -0
- package/dist/types-ts4.5/ui/toolbar-components.d.ts +9 -2
- package/package.json +8 -9
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.useInsertButtonState = void 0;
|
|
8
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
9
|
+
var _reactIntlNext = require("react-intl-next");
|
|
10
|
+
var _useSharedPluginStateSelector = require("@atlaskit/editor-common/use-shared-plugin-state-selector");
|
|
11
|
+
var _createItems = require("../../ToolbarInsertBlock/create-items");
|
|
12
|
+
var useInsertButtonState = exports.useInsertButtonState = function useInsertButtonState(_ref) {
|
|
13
|
+
var api = _ref.api,
|
|
14
|
+
editorView = _ref.editorView,
|
|
15
|
+
horizontalRuleEnabled = _ref.horizontalRuleEnabled,
|
|
16
|
+
insertMenuItems = _ref.insertMenuItems,
|
|
17
|
+
nativeStatusSupported = _ref.nativeStatusSupported,
|
|
18
|
+
numberOfButtons = _ref.numberOfButtons,
|
|
19
|
+
tableSelectorSupported = _ref.tableSelectorSupported,
|
|
20
|
+
expandEnabled = _ref.expandEnabled,
|
|
21
|
+
showElementBrowserLink = _ref.showElementBrowserLink;
|
|
22
|
+
var _useIntl = (0, _reactIntlNext.useIntl)(),
|
|
23
|
+
formatMessage = _useIntl.formatMessage;
|
|
24
|
+
var isTypeAheadAllowed = (0, _useSharedPluginStateSelector.useSharedPluginStateSelector)(api, 'typeAhead.isAllowed');
|
|
25
|
+
var imageUploadEnabled = (0, _useSharedPluginStateSelector.useSharedPluginStateSelector)(api, 'imageUpload.enabled');
|
|
26
|
+
var mentionsSupported = !!(0, _useSharedPluginStateSelector.useSharedPluginStateSelector)(api, 'mention.mentionProvider');
|
|
27
|
+
var canInsertMention = (0, _useSharedPluginStateSelector.useSharedPluginStateSelector)(api, 'mention.canInsertMention');
|
|
28
|
+
var dateEnabled = (0, _useSharedPluginStateSelector.useSharedPluginStateSelector)(api, 'date.isInitialised');
|
|
29
|
+
var placeholderTextEnabled = (0, _useSharedPluginStateSelector.useSharedPluginStateSelector)(api, 'placeholderText.allowInserting');
|
|
30
|
+
var mediaAllowsUploads = (0, _useSharedPluginStateSelector.useSharedPluginStateSelector)(api, 'media.allowsUploads');
|
|
31
|
+
var canInsertLink = (0, _useSharedPluginStateSelector.useSharedPluginStateSelector)(api, 'hyperlink.canInsertLink');
|
|
32
|
+
var activeLinkMark = (0, _useSharedPluginStateSelector.useSharedPluginStateSelector)(api, 'hyperlink.activeLinkMark');
|
|
33
|
+
var connectivityMode = (0, _useSharedPluginStateSelector.useSharedPluginStateSelector)(api, 'connectivity.mode');
|
|
34
|
+
var emojiProvider = (0, _useSharedPluginStateSelector.useSharedPluginStateSelector)(api, 'emoji.emojiProvider');
|
|
35
|
+
var availableWrapperBlockTypes = (0, _useSharedPluginStateSelector.useSharedPluginStateSelector)(api, 'blockType.availableWrapperBlockTypes');
|
|
36
|
+
|
|
37
|
+
// Computed values
|
|
38
|
+
var mediaUploadsEnabled = mediaAllowsUploads;
|
|
39
|
+
var mediaSupported = mediaAllowsUploads !== undefined;
|
|
40
|
+
var isEditorOffline = connectivityMode === 'offline';
|
|
41
|
+
var imageUploadSupported = !!(api !== null && api !== void 0 && api.imageUpload);
|
|
42
|
+
var mentionsDisabled = !canInsertMention;
|
|
43
|
+
var linkSupported = canInsertLink !== undefined;
|
|
44
|
+
var linkDisabled = !canInsertLink || !!activeLinkMark;
|
|
45
|
+
var emojiDisabled = !emojiProvider;
|
|
46
|
+
var actionSupported = !!(editorView !== null && editorView !== void 0 && editorView.state.schema.nodes.taskItem);
|
|
47
|
+
var decisionSupported = !!(editorView !== null && editorView !== void 0 && editorView.state.schema.nodes.decisionItem);
|
|
48
|
+
var layoutSectionEnabled = !!(api !== null && api !== void 0 && api.layout);
|
|
49
|
+
var _ref2 = editorView !== null && editorView !== void 0 && editorView.state.schema ? (0, _createItems.createItems)({
|
|
50
|
+
isTypeAheadAllowed: isTypeAheadAllowed,
|
|
51
|
+
tableSupported: !!(editorView !== null && editorView !== void 0 && editorView.state.schema.nodes.table),
|
|
52
|
+
tableSelectorSupported: tableSelectorSupported,
|
|
53
|
+
mediaUploadsEnabled: mediaUploadsEnabled,
|
|
54
|
+
mediaSupported: mediaSupported,
|
|
55
|
+
isEditorOffline: isEditorOffline,
|
|
56
|
+
imageUploadSupported: imageUploadSupported,
|
|
57
|
+
imageUploadEnabled: imageUploadEnabled,
|
|
58
|
+
mentionsSupported: mentionsSupported,
|
|
59
|
+
mentionsDisabled: mentionsDisabled,
|
|
60
|
+
actionSupported: actionSupported,
|
|
61
|
+
decisionSupported: decisionSupported,
|
|
62
|
+
linkSupported: linkSupported,
|
|
63
|
+
linkDisabled: linkDisabled,
|
|
64
|
+
emojiDisabled: emojiDisabled,
|
|
65
|
+
hasEmojiPlugin: !!(api !== null && api !== void 0 && api.emoji),
|
|
66
|
+
hasMentionsPlugin: !!(api !== null && api !== void 0 && api.mention),
|
|
67
|
+
hasMediaPlugin: !!(api !== null && api !== void 0 && api.media),
|
|
68
|
+
nativeStatusSupported: nativeStatusSupported,
|
|
69
|
+
dateEnabled: dateEnabled,
|
|
70
|
+
placeholderTextEnabled: placeholderTextEnabled,
|
|
71
|
+
horizontalRuleEnabled: horizontalRuleEnabled,
|
|
72
|
+
layoutSectionEnabled: layoutSectionEnabled,
|
|
73
|
+
expandEnabled: expandEnabled,
|
|
74
|
+
showElementBrowserLink: showElementBrowserLink,
|
|
75
|
+
emojiProvider: emojiProvider,
|
|
76
|
+
availableWrapperBlockTypes: availableWrapperBlockTypes,
|
|
77
|
+
insertMenuItems: insertMenuItems,
|
|
78
|
+
schema: editorView === null || editorView === void 0 ? void 0 : editorView.state.schema,
|
|
79
|
+
numberOfButtons: numberOfButtons || 0,
|
|
80
|
+
formatMessage: formatMessage
|
|
81
|
+
}) : [, []],
|
|
82
|
+
_ref3 = (0, _slicedToArray2.default)(_ref2, 2),
|
|
83
|
+
dropdownItems = _ref3[1];
|
|
84
|
+
return {
|
|
85
|
+
dropdownItems: dropdownItems,
|
|
86
|
+
emojiProvider: emojiProvider,
|
|
87
|
+
isTypeAheadAllowed: isTypeAheadAllowed
|
|
88
|
+
};
|
|
89
|
+
};
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.usePopupManager = void 0;
|
|
8
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
9
|
+
var _react = require("react");
|
|
10
|
+
var _utils = require("../utils/utils");
|
|
11
|
+
var usePopupManager = exports.usePopupManager = function usePopupManager() {
|
|
12
|
+
var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
13
|
+
var _useState = (0, _react.useState)(false),
|
|
14
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
15
|
+
isOpen = _useState2[0],
|
|
16
|
+
setIsOpen = _useState2[1];
|
|
17
|
+
var _useState3 = (0, _react.useState)(false),
|
|
18
|
+
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
|
|
19
|
+
isOpenedByKeyboard = _useState4[0],
|
|
20
|
+
setIsOpenedByKeyboard = _useState4[1];
|
|
21
|
+
var toggle = (0, _react.useCallback)(function (inputMethod) {
|
|
22
|
+
var _config$analytics, _config$analytics$onT;
|
|
23
|
+
var newState = !isOpen;
|
|
24
|
+
setIsOpen(newState);
|
|
25
|
+
if (newState) {
|
|
26
|
+
var _config$onOpen;
|
|
27
|
+
(_config$onOpen = config.onOpen) === null || _config$onOpen === void 0 || _config$onOpen.call(config, inputMethod);
|
|
28
|
+
} else {
|
|
29
|
+
var _config$onClose;
|
|
30
|
+
(_config$onClose = config.onClose) === null || _config$onClose === void 0 || _config$onClose.call(config);
|
|
31
|
+
}
|
|
32
|
+
(_config$analytics = config.analytics) === null || _config$analytics === void 0 || (_config$analytics$onT = _config$analytics.onToggle) === null || _config$analytics$onT === void 0 || _config$analytics$onT.call(_config$analytics, newState, inputMethod);
|
|
33
|
+
}, [isOpen, config]);
|
|
34
|
+
var close = (0, _react.useCallback)(function () {
|
|
35
|
+
var _config$onClose2, _config$analytics2, _config$analytics2$on;
|
|
36
|
+
setIsOpen(false);
|
|
37
|
+
(_config$onClose2 = config.onClose) === null || _config$onClose2 === void 0 || _config$onClose2.call(config);
|
|
38
|
+
(_config$analytics2 = config.analytics) === null || _config$analytics2 === void 0 || (_config$analytics2$on = _config$analytics2.onToggle) === null || _config$analytics2$on === void 0 || _config$analytics2$on.call(_config$analytics2, false);
|
|
39
|
+
}, [config]);
|
|
40
|
+
var handleEscapeKeydown = (0, _react.useCallback)(function () {
|
|
41
|
+
var _config$focusTarget;
|
|
42
|
+
close();
|
|
43
|
+
(_config$focusTarget = config.focusTarget) === null || _config$focusTarget === void 0 || (_config$focusTarget = _config$focusTarget.current) === null || _config$focusTarget === void 0 || _config$focusTarget.focus();
|
|
44
|
+
}, [close, config.focusTarget]);
|
|
45
|
+
var handleClickOutside = (0, _react.useCallback)(function (e) {
|
|
46
|
+
if (e.target instanceof HTMLElement && !(0, _utils.isDetachedElement)(e.target)) {
|
|
47
|
+
close();
|
|
48
|
+
}
|
|
49
|
+
}, [close]);
|
|
50
|
+
var handleKeyboardOpen = (0, _react.useCallback)(function (event) {
|
|
51
|
+
if (event.key === 'Enter' || event.key === ' ') {
|
|
52
|
+
setIsOpenedByKeyboard(true);
|
|
53
|
+
event.preventDefault();
|
|
54
|
+
}
|
|
55
|
+
}, []);
|
|
56
|
+
return {
|
|
57
|
+
isOpen: isOpen,
|
|
58
|
+
isOpenedByKeyboard: isOpenedByKeyboard,
|
|
59
|
+
toggle: toggle,
|
|
60
|
+
close: close,
|
|
61
|
+
handleEscapeKeydown: handleEscapeKeydown,
|
|
62
|
+
handleClickOutside: handleClickOutside,
|
|
63
|
+
handleKeyboardOpen: handleKeyboardOpen
|
|
64
|
+
};
|
|
65
|
+
};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.useTableSelectorPopup = void 0;
|
|
8
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
9
|
+
var _react = require("react");
|
|
10
|
+
var _analytics = require("@atlaskit/editor-common/analytics");
|
|
11
|
+
var _usePopupManager = require("./usePopupManager");
|
|
12
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
13
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
14
|
+
var useTableSelectorPopup = exports.useTableSelectorPopup = function useTableSelectorPopup(_ref) {
|
|
15
|
+
var api = _ref.api,
|
|
16
|
+
buttonRef = _ref.buttonRef;
|
|
17
|
+
var popupManager = (0, _usePopupManager.usePopupManager)({
|
|
18
|
+
focusTarget: buttonRef
|
|
19
|
+
});
|
|
20
|
+
var handleSelectedTableSize = (0, _react.useCallback)(function (rowsCount, colsCount) {
|
|
21
|
+
// workaround to solve race condition where cursor is not placed correctly inside table
|
|
22
|
+
queueMicrotask(function () {
|
|
23
|
+
var _api$core, _api$table;
|
|
24
|
+
api === null || api === void 0 || (_api$core = api.core) === null || _api$core === void 0 || _api$core.actions.execute(api === null || api === void 0 || (_api$table = api.table) === null || _api$table === void 0 ? void 0 : _api$table.commands.insertTableWithSize(rowsCount, colsCount, _analytics.INPUT_METHOD.PICKER));
|
|
25
|
+
});
|
|
26
|
+
popupManager.close();
|
|
27
|
+
}, [api, popupManager]);
|
|
28
|
+
var onPopupUnmount = (0, _react.useCallback)(function () {
|
|
29
|
+
api === null || api === void 0 || api.core.actions.focus();
|
|
30
|
+
}, [api]);
|
|
31
|
+
return _objectSpread(_objectSpread({}, popupManager), {}, {
|
|
32
|
+
handleSelectedTableSize: handleSelectedTableSize,
|
|
33
|
+
onPopupUnmount: onPopupUnmount
|
|
34
|
+
});
|
|
35
|
+
};
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.EmojiPickerPopup = void 0;
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
var _ui = require("@atlaskit/editor-common/ui");
|
|
10
|
+
var _uiReact = require("@atlaskit/editor-common/ui-react");
|
|
11
|
+
var _editorSharedStyles = require("@atlaskit/editor-shared-styles");
|
|
12
|
+
var _picker = require("@atlaskit/emoji/picker");
|
|
13
|
+
var EmojiPicker = function EmojiPicker(props) {
|
|
14
|
+
var setOutsideClickTargetRef = _react.default.useContext(_uiReact.OutsideClickTargetRefContext);
|
|
15
|
+
return /*#__PURE__*/_react.default.createElement(_picker.EmojiPicker, {
|
|
16
|
+
onPickerRef: setOutsideClickTargetRef,
|
|
17
|
+
emojiProvider: props.emojiProvider,
|
|
18
|
+
onSelection: props.onSelection
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
var EmojiPickerWithListeners = (0, _uiReact.withReactEditorViewOuterListeners)(EmojiPicker);
|
|
22
|
+
var EmojiPickerPopup = exports.EmojiPickerPopup = function EmojiPickerPopup(_ref) {
|
|
23
|
+
var isOpen = _ref.isOpen,
|
|
24
|
+
targetRef = _ref.targetRef,
|
|
25
|
+
emojiProvider = _ref.emojiProvider,
|
|
26
|
+
onSelection = _ref.onSelection,
|
|
27
|
+
onClickOutside = _ref.onClickOutside,
|
|
28
|
+
onEscapeKeydown = _ref.onEscapeKeydown,
|
|
29
|
+
onUnmount = _ref.onUnmount,
|
|
30
|
+
popupsMountPoint = _ref.popupsMountPoint,
|
|
31
|
+
popupsBoundariesElement = _ref.popupsBoundariesElement,
|
|
32
|
+
popupsScrollableElement = _ref.popupsScrollableElement;
|
|
33
|
+
if (!isOpen || !targetRef.current || !emojiProvider) {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
return /*#__PURE__*/_react.default.createElement(_ui.Popup, {
|
|
37
|
+
target: targetRef.current,
|
|
38
|
+
fitHeight: 350,
|
|
39
|
+
fitWidth: 350,
|
|
40
|
+
offset: [0, 3],
|
|
41
|
+
mountTo: popupsMountPoint,
|
|
42
|
+
boundariesElement: popupsBoundariesElement,
|
|
43
|
+
scrollableElement: popupsScrollableElement,
|
|
44
|
+
onUnmount: onUnmount,
|
|
45
|
+
focusTrap: true,
|
|
46
|
+
zIndex: _editorSharedStyles.akEditorMenuZIndex
|
|
47
|
+
}, /*#__PURE__*/_react.default.createElement(EmojiPickerWithListeners, {
|
|
48
|
+
emojiProvider: emojiProvider,
|
|
49
|
+
onSelection: onSelection,
|
|
50
|
+
handleClickOutside: onClickOutside,
|
|
51
|
+
handleEscapeKeydown: onEscapeKeydown
|
|
52
|
+
}));
|
|
53
|
+
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.TableSelectorPopupWrapper = void 0;
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
var _ui = require("@atlaskit/editor-common/ui");
|
|
10
|
+
var TableSelectorPopupWrapper = exports.TableSelectorPopupWrapper = function TableSelectorPopupWrapper(_ref) {
|
|
11
|
+
var isOpen = _ref.isOpen,
|
|
12
|
+
targetRef = _ref.targetRef,
|
|
13
|
+
isOpenedByKeyboard = _ref.isOpenedByKeyboard,
|
|
14
|
+
onSelection = _ref.onSelection,
|
|
15
|
+
onClickOutside = _ref.onClickOutside,
|
|
16
|
+
onEscapeKeydown = _ref.onEscapeKeydown,
|
|
17
|
+
onUnmount = _ref.onUnmount,
|
|
18
|
+
popupsMountPoint = _ref.popupsMountPoint,
|
|
19
|
+
popupsBoundariesElement = _ref.popupsBoundariesElement,
|
|
20
|
+
popupsScrollableElement = _ref.popupsScrollableElement;
|
|
21
|
+
if (!isOpen || !targetRef.current) {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
return /*#__PURE__*/_react.default.createElement(_ui.TableSelectorPopup, {
|
|
25
|
+
allowOutsideSelection: true,
|
|
26
|
+
target: targetRef.current,
|
|
27
|
+
onUnmount: onUnmount,
|
|
28
|
+
onSelection: onSelection,
|
|
29
|
+
popupsMountPoint: popupsMountPoint,
|
|
30
|
+
popupsBoundariesElement: popupsBoundariesElement,
|
|
31
|
+
popupsScrollableElement: popupsScrollableElement,
|
|
32
|
+
handleClickOutside: onClickOutside,
|
|
33
|
+
handleEscapeKeydown: onEscapeKeydown,
|
|
34
|
+
isOpenedByKeyboard: isOpenedByKeyboard
|
|
35
|
+
});
|
|
36
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.POPUP_Z_INDEX = exports.POPUP_DIMENSIONS = exports.FOCUS_DELAY = void 0;
|
|
7
|
+
var POPUP_Z_INDEX = exports.POPUP_Z_INDEX = 'akEditorMenuZIndex';
|
|
8
|
+
var POPUP_DIMENSIONS = exports.POPUP_DIMENSIONS = {
|
|
9
|
+
EMOJI_PICKER: {
|
|
10
|
+
fitHeight: 350,
|
|
11
|
+
fitWidth: 350,
|
|
12
|
+
offset: [0, 3]
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
var FOCUS_DELAY = exports.FOCUS_DELAY = {
|
|
16
|
+
ANIMATION_FRAME: 'requestAnimationFrame',
|
|
17
|
+
MICROTASK: 'queueMicrotask'
|
|
18
|
+
};
|
|
@@ -10,6 +10,7 @@ var _react = _interopRequireDefault(require("react"));
|
|
|
10
10
|
var _toolbar = require("@atlaskit/editor-common/toolbar");
|
|
11
11
|
var _EmojiButton = require("./toolbar-components/EmojiButton");
|
|
12
12
|
var _ImageButton = require("./toolbar-components/ImageButton");
|
|
13
|
+
var _InsertButton = require("./toolbar-components/InsertButton");
|
|
13
14
|
var _LayoutButton = require("./toolbar-components/LayoutButton");
|
|
14
15
|
var _MediaButton = require("./toolbar-components/MediaButton");
|
|
15
16
|
var _MentionButton = require("./toolbar-components/MentionButton");
|
|
@@ -19,8 +20,42 @@ var _TaskListButton = require("./toolbar-components/TaskListButton");
|
|
|
19
20
|
var getToolbarComponents = exports.getToolbarComponents = function getToolbarComponents(_ref) {
|
|
20
21
|
var api = _ref.api,
|
|
21
22
|
tableSelectorSupported = _ref.tableSelectorSupported,
|
|
22
|
-
toolbarShowPlusInsertOnly = _ref.toolbarShowPlusInsertOnly
|
|
23
|
-
|
|
23
|
+
toolbarShowPlusInsertOnly = _ref.toolbarShowPlusInsertOnly,
|
|
24
|
+
showElementBrowserLink = _ref.showElementBrowserLink,
|
|
25
|
+
onInsertBlockType = _ref.onInsertBlockType,
|
|
26
|
+
nativeStatusSupported = _ref.nativeStatusSupported,
|
|
27
|
+
horizontalRuleEnabled = _ref.horizontalRuleEnabled,
|
|
28
|
+
expandEnabled = _ref.expandEnabled,
|
|
29
|
+
insertMenuItems = _ref.insertMenuItems;
|
|
30
|
+
return (0, _toConsumableArray2.default)(toolbarShowPlusInsertOnly ? [{
|
|
31
|
+
type: _toolbar.INSERT_GROUP.type,
|
|
32
|
+
key: _toolbar.INSERT_GROUP.key,
|
|
33
|
+
parents: [{
|
|
34
|
+
type: _toolbar.INSERT_BLOCK_SECTION.type,
|
|
35
|
+
key: _toolbar.INSERT_BLOCK_SECTION.key,
|
|
36
|
+
rank: _toolbar.INSERT_BLOCK_SECTION_RANK[_toolbar.INSERT_GROUP.key]
|
|
37
|
+
}]
|
|
38
|
+
}, {
|
|
39
|
+
type: _toolbar.INSERT_BUTTON.type,
|
|
40
|
+
key: _toolbar.INSERT_BUTTON.key,
|
|
41
|
+
parents: [{
|
|
42
|
+
type: _toolbar.INSERT_GROUP.type,
|
|
43
|
+
key: _toolbar.INSERT_GROUP.key,
|
|
44
|
+
rank: _toolbar.INSERT_GROUP_RANK[_toolbar.INSERT_BUTTON.key]
|
|
45
|
+
}],
|
|
46
|
+
component: function component() {
|
|
47
|
+
return /*#__PURE__*/_react.default.createElement(_InsertButton.InsertButton, {
|
|
48
|
+
api: api,
|
|
49
|
+
showElementBrowserLink: showElementBrowserLink,
|
|
50
|
+
tableSelectorSupported: tableSelectorSupported,
|
|
51
|
+
onInsertBlockType: onInsertBlockType,
|
|
52
|
+
nativeStatusSupported: nativeStatusSupported,
|
|
53
|
+
horizontalRuleEnabled: horizontalRuleEnabled,
|
|
54
|
+
expandEnabled: expandEnabled,
|
|
55
|
+
insertMenuItems: insertMenuItems
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
}] : [{
|
|
24
59
|
type: _toolbar.TASK_LIST_GROUP.type,
|
|
25
60
|
key: _toolbar.TASK_LIST_GROUP.key,
|
|
26
61
|
parents: [{
|
|
@@ -162,5 +197,34 @@ var getToolbarComponents = exports.getToolbarComponents = function getToolbarCom
|
|
|
162
197
|
tableSelectorSupported: tableSelectorSupported
|
|
163
198
|
});
|
|
164
199
|
}
|
|
200
|
+
}, {
|
|
201
|
+
type: _toolbar.INSERT_GROUP.type,
|
|
202
|
+
key: _toolbar.INSERT_GROUP.key,
|
|
203
|
+
parents: [{
|
|
204
|
+
type: _toolbar.INSERT_BLOCK_SECTION.type,
|
|
205
|
+
key: _toolbar.INSERT_BLOCK_SECTION.key,
|
|
206
|
+
rank: _toolbar.INSERT_BLOCK_SECTION_RANK[_toolbar.INSERT_GROUP.key]
|
|
207
|
+
}]
|
|
208
|
+
}, {
|
|
209
|
+
type: _toolbar.INSERT_BUTTON.type,
|
|
210
|
+
key: _toolbar.INSERT_BUTTON.key,
|
|
211
|
+
parents: [{
|
|
212
|
+
type: _toolbar.INSERT_GROUP.type,
|
|
213
|
+
key: _toolbar.INSERT_GROUP.key,
|
|
214
|
+
rank: _toolbar.INSERT_GROUP_RANK[_toolbar.INSERT_BUTTON.key]
|
|
215
|
+
}],
|
|
216
|
+
component: function component() {
|
|
217
|
+
return /*#__PURE__*/_react.default.createElement(_InsertButton.InsertButton, {
|
|
218
|
+
api: api,
|
|
219
|
+
showElementBrowserLink: showElementBrowserLink,
|
|
220
|
+
tableSelectorSupported: tableSelectorSupported,
|
|
221
|
+
onInsertBlockType: onInsertBlockType,
|
|
222
|
+
nativeStatusSupported: nativeStatusSupported,
|
|
223
|
+
horizontalRuleEnabled: horizontalRuleEnabled,
|
|
224
|
+
expandEnabled: expandEnabled,
|
|
225
|
+
insertMenuItems: insertMenuItems,
|
|
226
|
+
numberOfButtons: 7 // TODO: ED-28759 - Default to 7 buttons - Remove this once we have a proper way to do toolbar responsiveness
|
|
227
|
+
});
|
|
228
|
+
}
|
|
165
229
|
}]);
|
|
166
230
|
};
|
|
@@ -148,11 +148,17 @@ export const insertBlockPlugin = ({
|
|
|
148
148
|
});
|
|
149
149
|
};
|
|
150
150
|
if (expValEquals('platform_editor_toolbar_aifc', 'isEnabled', true)) {
|
|
151
|
-
var _api$toolbar;
|
|
151
|
+
var _api$toolbar, _api$codeBlock, _api$panel, _api$blockType;
|
|
152
152
|
api === null || api === void 0 ? void 0 : (_api$toolbar = api.toolbar) === null || _api$toolbar === void 0 ? void 0 : _api$toolbar.actions.registerComponents(getToolbarComponents({
|
|
153
153
|
api,
|
|
154
154
|
tableSelectorSupported: options.tableSelectorSupported,
|
|
155
|
-
toolbarShowPlusInsertOnly: options.toolbarShowPlusInsertOnly
|
|
155
|
+
toolbarShowPlusInsertOnly: options.toolbarShowPlusInsertOnly,
|
|
156
|
+
showElementBrowserLink: options.showElementBrowserLink,
|
|
157
|
+
onInsertBlockType: handleInsertBlockType(api === null || api === void 0 ? void 0 : (_api$codeBlock = api.codeBlock) === null || _api$codeBlock === void 0 ? void 0 : _api$codeBlock.actions.insertCodeBlock, api === null || api === void 0 ? void 0 : (_api$panel = api.panel) === null || _api$panel === void 0 ? void 0 : _api$panel.actions.insertPanel, api === null || api === void 0 ? void 0 : (_api$blockType = api.blockType) === null || _api$blockType === void 0 ? void 0 : _api$blockType.actions.insertBlockQuote),
|
|
158
|
+
nativeStatusSupported: options.nativeStatusSupported,
|
|
159
|
+
horizontalRuleEnabled: options.horizontalRuleEnabled,
|
|
160
|
+
expandEnabled: options.allowExpand,
|
|
161
|
+
insertMenuItems: options.insertMenuItems
|
|
156
162
|
}));
|
|
157
163
|
} else {
|
|
158
164
|
var _api$primaryToolbar;
|
|
@@ -1,31 +1,20 @@
|
|
|
1
|
-
import React, { useRef
|
|
1
|
+
import React, { useRef } from 'react';
|
|
2
2
|
import { useIntl } from 'react-intl-next';
|
|
3
|
-
import { ACTION, ACTION_SUBJECT, ACTION_SUBJECT_ID, EVENT_TYPE, INPUT_METHOD } from '@atlaskit/editor-common/analytics';
|
|
4
3
|
import { useSharedPluginStateWithSelector } from '@atlaskit/editor-common/hooks';
|
|
5
4
|
import { toolbarInsertBlockMessages as messages } from '@atlaskit/editor-common/messages';
|
|
6
|
-
import { Popup } from '@atlaskit/editor-common/ui';
|
|
7
|
-
import { OutsideClickTargetRefContext, withReactEditorViewOuterListeners as withOuterListeners } from '@atlaskit/editor-common/ui-react';
|
|
8
|
-
import { akEditorMenuZIndex } from '@atlaskit/editor-shared-styles';
|
|
9
5
|
import { ToolbarButton, ToolbarTooltip, EmojiIcon } from '@atlaskit/editor-toolbar';
|
|
10
|
-
import { EmojiPicker as AkEmojiPicker } from '@atlaskit/emoji/picker';
|
|
11
6
|
import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
|
|
12
|
-
import {
|
|
13
|
-
|
|
14
|
-
const setOutsideClickTargetRef = React.useContext(OutsideClickTargetRefContext);
|
|
15
|
-
return /*#__PURE__*/React.createElement(AkEmojiPicker, {
|
|
16
|
-
onPickerRef: setOutsideClickTargetRef,
|
|
17
|
-
emojiProvider: props.emojiProvider,
|
|
18
|
-
onSelection: props.onSelection
|
|
19
|
-
});
|
|
20
|
-
};
|
|
21
|
-
const EmojiPickerWithListeners = withOuterListeners(EmojiPicker);
|
|
7
|
+
import { useEmojiPickerPopup } from './hooks/useEmojiPickerPopup';
|
|
8
|
+
import { EmojiPickerPopup } from './popups/EmojiPickerPopup';
|
|
22
9
|
export const EmojiButton = ({
|
|
23
|
-
api
|
|
10
|
+
api,
|
|
11
|
+
popupsMountPoint,
|
|
12
|
+
popupsBoundariesElement,
|
|
13
|
+
popupsScrollableElement
|
|
24
14
|
}) => {
|
|
25
15
|
const {
|
|
26
16
|
formatMessage
|
|
27
17
|
} = useIntl();
|
|
28
|
-
const [emojiPickerOpen, setEmojiPickerOpen] = useState(false);
|
|
29
18
|
const emojiButtonRef = useRef(null);
|
|
30
19
|
const {
|
|
31
20
|
emojiProviderSelector,
|
|
@@ -39,73 +28,31 @@ export const EmojiButton = ({
|
|
|
39
28
|
isTypeAheadAllowed: (_states$typeAheadStat = states.typeAheadState) === null || _states$typeAheadStat === void 0 ? void 0 : _states$typeAheadStat.isAllowed
|
|
40
29
|
};
|
|
41
30
|
});
|
|
31
|
+
const emojiPickerPopup = useEmojiPickerPopup({
|
|
32
|
+
api,
|
|
33
|
+
buttonRef: emojiButtonRef
|
|
34
|
+
});
|
|
42
35
|
if (!(api !== null && api !== void 0 && api.emoji)) {
|
|
43
36
|
return null;
|
|
44
37
|
}
|
|
45
|
-
const toggleEmojiPickerOpen = newState => {
|
|
46
|
-
const oldState = emojiPickerOpen;
|
|
47
|
-
if (newState === true && oldState === false) {
|
|
48
|
-
var _api$analytics;
|
|
49
|
-
api === null || api === void 0 ? void 0 : (_api$analytics = api.analytics) === null || _api$analytics === void 0 ? void 0 : _api$analytics.actions.fireAnalyticsEvent({
|
|
50
|
-
action: ACTION.OPENED,
|
|
51
|
-
actionSubject: ACTION_SUBJECT.PICKER,
|
|
52
|
-
actionSubjectId: ACTION_SUBJECT_ID.PICKER_EMOJI,
|
|
53
|
-
attributes: {
|
|
54
|
-
inputMethod: INPUT_METHOD.TOOLBAR
|
|
55
|
-
},
|
|
56
|
-
eventType: EVENT_TYPE.UI
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
setEmojiPickerOpen(newState);
|
|
60
|
-
};
|
|
61
38
|
const getEmojiProvider = () => {
|
|
62
39
|
if (emojiProviderSelector) {
|
|
63
40
|
return Promise.resolve(emojiProviderSelector);
|
|
64
41
|
}
|
|
65
42
|
};
|
|
66
43
|
const emojiProvider = expValEquals('platform_editor_prevent_toolbar_layout_shifts', 'isEnabled', true) ? emojiProviderPromise : getEmojiProvider();
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
const handleSelectedEmoji = emojiId => {
|
|
71
|
-
var _api$emoji;
|
|
72
|
-
api === null || api === void 0 ? void 0 : api.core.actions.focus();
|
|
73
|
-
api === null || api === void 0 ? void 0 : api.core.actions.execute(api === null || api === void 0 ? void 0 : (_api$emoji = api.emoji) === null || _api$emoji === void 0 ? void 0 : _api$emoji.commands.insertEmoji(emojiId, INPUT_METHOD.PICKER));
|
|
74
|
-
toggleEmojiPickerOpen(false);
|
|
75
|
-
return true;
|
|
76
|
-
};
|
|
77
|
-
const handleEmojiClickOutside = e => {
|
|
78
|
-
// Ignore click events for detached elements.
|
|
79
|
-
// Workaround for FS-1322 - where two onClicks fire - one when the upload button is
|
|
80
|
-
// still in the document, and one once it's detached. Does not always occur, and
|
|
81
|
-
// may be a side effect of a react render optimisation
|
|
82
|
-
if (e.target instanceof HTMLElement && !isDetachedElement(e.target)) {
|
|
83
|
-
toggleEmojiPickerOpen(false);
|
|
84
|
-
}
|
|
85
|
-
};
|
|
86
|
-
const handleEmojiPressEscape = () => {
|
|
87
|
-
var _emojiButtonRef$curre;
|
|
88
|
-
toggleEmojiPickerOpen(false);
|
|
89
|
-
emojiButtonRef === null || emojiButtonRef === void 0 ? void 0 : (_emojiButtonRef$curre = emojiButtonRef.current) === null || _emojiButtonRef$curre === void 0 ? void 0 : _emojiButtonRef$curre.focus();
|
|
90
|
-
};
|
|
91
|
-
const onClick = () => {
|
|
92
|
-
toggleEmojiPickerOpen(!emojiPickerOpen);
|
|
93
|
-
};
|
|
94
|
-
return /*#__PURE__*/React.createElement(React.Fragment, null, emojiPickerOpen && emojiButtonRef.current && emojiProvider && /*#__PURE__*/React.createElement(Popup, {
|
|
95
|
-
target: emojiButtonRef.current,
|
|
96
|
-
fitHeight: 350,
|
|
97
|
-
fitWidth: 350,
|
|
98
|
-
offset: [0, 3],
|
|
99
|
-
mountTo: emojiButtonRef.current,
|
|
100
|
-
onUnmount: onPopupUnmount,
|
|
101
|
-
focusTrap: true,
|
|
102
|
-
zIndex: akEditorMenuZIndex
|
|
103
|
-
}, /*#__PURE__*/React.createElement(EmojiPickerWithListeners, {
|
|
44
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(EmojiPickerPopup, {
|
|
45
|
+
isOpen: emojiPickerPopup.isOpen,
|
|
46
|
+
targetRef: emojiButtonRef,
|
|
104
47
|
emojiProvider: emojiProvider,
|
|
105
|
-
onSelection: handleSelectedEmoji,
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
48
|
+
onSelection: emojiPickerPopup.handleSelectedEmoji,
|
|
49
|
+
onClickOutside: emojiPickerPopup.handleClickOutside,
|
|
50
|
+
onEscapeKeydown: emojiPickerPopup.handleEscapeKeydown,
|
|
51
|
+
onUnmount: emojiPickerPopup.onPopupUnmount,
|
|
52
|
+
popupsMountPoint: popupsMountPoint,
|
|
53
|
+
popupsBoundariesElement: popupsBoundariesElement,
|
|
54
|
+
popupsScrollableElement: popupsScrollableElement
|
|
55
|
+
}), /*#__PURE__*/React.createElement(ToolbarTooltip, {
|
|
109
56
|
content: formatMessage(messages.emoji)
|
|
110
57
|
}, /*#__PURE__*/React.createElement(ToolbarButton, {
|
|
111
58
|
iconBefore: /*#__PURE__*/React.createElement(EmojiIcon, {
|
|
@@ -114,8 +61,8 @@ export const EmojiButton = ({
|
|
|
114
61
|
}),
|
|
115
62
|
ariaKeyshortcuts: "Shift+;",
|
|
116
63
|
ref: emojiButtonRef,
|
|
117
|
-
onClick:
|
|
118
|
-
isSelected:
|
|
64
|
+
onClick: () => emojiPickerPopup.toggle(),
|
|
65
|
+
isSelected: emojiPickerPopup.isOpen,
|
|
119
66
|
isDisabled: !isTypeAheadAllowed || !emojiProvider
|
|
120
67
|
})));
|
|
121
68
|
};
|