@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.
Files changed (85) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/cjs/insertBlockPlugin.js +8 -2
  3. package/dist/cjs/ui/toolbar-components/EmojiButton.js +25 -83
  4. package/dist/cjs/ui/toolbar-components/InsertButton.js +250 -0
  5. package/dist/cjs/ui/toolbar-components/TableSizePicker.js +25 -48
  6. package/dist/cjs/ui/toolbar-components/hooks/useEmojiPickerPopup.js +52 -0
  7. package/dist/cjs/ui/toolbar-components/hooks/useInsertButtonState.js +89 -0
  8. package/dist/cjs/ui/toolbar-components/hooks/usePopupManager.js +65 -0
  9. package/dist/cjs/ui/toolbar-components/hooks/useTableSelectorPopup.js +35 -0
  10. package/dist/cjs/ui/toolbar-components/popups/EmojiPickerPopup.js +53 -0
  11. package/dist/cjs/ui/toolbar-components/popups/TableSelectorPopupWrapper.js +36 -0
  12. package/dist/cjs/ui/toolbar-components/shared/constants.js +18 -0
  13. package/dist/cjs/ui/toolbar-components/shared/types.js +5 -0
  14. package/dist/cjs/ui/toolbar-components.js +66 -2
  15. package/dist/es2019/insertBlockPlugin.js +8 -2
  16. package/dist/es2019/ui/toolbar-components/EmojiButton.js +24 -77
  17. package/dist/es2019/ui/toolbar-components/InsertButton.js +243 -0
  18. package/dist/es2019/ui/toolbar-components/TableSizePicker.js +26 -41
  19. package/dist/es2019/ui/toolbar-components/hooks/useEmojiPickerPopup.js +42 -0
  20. package/dist/es2019/ui/toolbar-components/hooks/useInsertButtonState.js +81 -0
  21. package/dist/es2019/ui/toolbar-components/hooks/usePopupManager.js +50 -0
  22. package/dist/es2019/ui/toolbar-components/hooks/useTableSelectorPopup.js +27 -0
  23. package/dist/es2019/ui/toolbar-components/popups/EmojiPickerPopup.js +47 -0
  24. package/dist/es2019/ui/toolbar-components/popups/TableSelectorPopupWrapper.js +30 -0
  25. package/dist/es2019/ui/toolbar-components/shared/constants.js +12 -0
  26. package/dist/es2019/ui/toolbar-components/shared/types.js +1 -0
  27. package/dist/es2019/ui/toolbar-components.js +63 -3
  28. package/dist/esm/insertBlockPlugin.js +8 -2
  29. package/dist/esm/ui/toolbar-components/EmojiButton.js +26 -83
  30. package/dist/esm/ui/toolbar-components/InsertButton.js +242 -0
  31. package/dist/esm/ui/toolbar-components/TableSizePicker.js +26 -48
  32. package/dist/esm/ui/toolbar-components/hooks/useEmojiPickerPopup.js +45 -0
  33. package/dist/esm/ui/toolbar-components/hooks/useInsertButtonState.js +82 -0
  34. package/dist/esm/ui/toolbar-components/hooks/usePopupManager.js +58 -0
  35. package/dist/esm/ui/toolbar-components/hooks/useTableSelectorPopup.js +28 -0
  36. package/dist/esm/ui/toolbar-components/popups/EmojiPickerPopup.js +46 -0
  37. package/dist/esm/ui/toolbar-components/popups/TableSelectorPopupWrapper.js +29 -0
  38. package/dist/esm/ui/toolbar-components/shared/constants.js +12 -0
  39. package/dist/esm/ui/toolbar-components/shared/types.js +1 -0
  40. package/dist/esm/ui/toolbar-components.js +67 -3
  41. package/dist/types/insertBlockPluginType.d.ts +2 -2
  42. package/dist/types/types/index.d.ts +3 -3
  43. package/dist/types/ui/ElementBrowser/types.d.ts +3 -3
  44. package/dist/types/ui/ToolbarInsertBlock/block-insert-element-browser.d.ts +8 -8
  45. package/dist/types/ui/ToolbarInsertBlock/block-insert-menu.d.ts +12 -12
  46. package/dist/types/ui/ToolbarInsertBlock/create-items.d.ts +24 -24
  47. package/dist/types/ui/ToolbarInsertBlock/dropdown-button.d.ts +4 -4
  48. package/dist/types/ui/ToolbarInsertBlock/index.d.ts +1 -1
  49. package/dist/types/ui/ToolbarInsertBlock/item.d.ts +2 -2
  50. package/dist/types/ui/ToolbarInsertBlock/types.d.ts +36 -36
  51. package/dist/types/ui/toolbar-components/EmojiButton.d.ts +2 -7
  52. package/dist/types/ui/toolbar-components/InsertButton.d.ts +18 -0
  53. package/dist/types/ui/toolbar-components/TableSizePicker.d.ts +3 -5
  54. package/dist/types/ui/toolbar-components/hooks/useEmojiPickerPopup.d.ts +20 -0
  55. package/dist/types/ui/toolbar-components/hooks/useInsertButtonState.d.ts +24 -0
  56. package/dist/types/ui/toolbar-components/hooks/usePopupManager.d.ts +21 -0
  57. package/dist/types/ui/toolbar-components/hooks/useTableSelectorPopup.d.ts +19 -0
  58. package/dist/types/ui/toolbar-components/popups/EmojiPickerPopup.d.ts +16 -0
  59. package/dist/types/ui/toolbar-components/popups/TableSelectorPopupWrapper.d.ts +15 -0
  60. package/dist/types/ui/toolbar-components/shared/constants.d.ts +12 -0
  61. package/dist/types/ui/toolbar-components/shared/types.d.ts +8 -0
  62. package/dist/types/ui/toolbar-components.d.ts +9 -2
  63. package/dist/types-ts4.5/insertBlockPluginType.d.ts +2 -2
  64. package/dist/types-ts4.5/types/index.d.ts +3 -3
  65. package/dist/types-ts4.5/ui/ElementBrowser/types.d.ts +3 -3
  66. package/dist/types-ts4.5/ui/ToolbarInsertBlock/block-insert-element-browser.d.ts +8 -8
  67. package/dist/types-ts4.5/ui/ToolbarInsertBlock/block-insert-menu.d.ts +12 -12
  68. package/dist/types-ts4.5/ui/ToolbarInsertBlock/create-items.d.ts +24 -24
  69. package/dist/types-ts4.5/ui/ToolbarInsertBlock/dropdown-button.d.ts +4 -4
  70. package/dist/types-ts4.5/ui/ToolbarInsertBlock/index.d.ts +1 -1
  71. package/dist/types-ts4.5/ui/ToolbarInsertBlock/item.d.ts +2 -2
  72. package/dist/types-ts4.5/ui/ToolbarInsertBlock/types.d.ts +36 -36
  73. package/dist/types-ts4.5/ui/toolbar-components/EmojiButton.d.ts +2 -7
  74. package/dist/types-ts4.5/ui/toolbar-components/InsertButton.d.ts +18 -0
  75. package/dist/types-ts4.5/ui/toolbar-components/TableSizePicker.d.ts +3 -5
  76. package/dist/types-ts4.5/ui/toolbar-components/hooks/useEmojiPickerPopup.d.ts +20 -0
  77. package/dist/types-ts4.5/ui/toolbar-components/hooks/useInsertButtonState.d.ts +24 -0
  78. package/dist/types-ts4.5/ui/toolbar-components/hooks/usePopupManager.d.ts +21 -0
  79. package/dist/types-ts4.5/ui/toolbar-components/hooks/useTableSelectorPopup.d.ts +19 -0
  80. package/dist/types-ts4.5/ui/toolbar-components/popups/EmojiPickerPopup.d.ts +16 -0
  81. package/dist/types-ts4.5/ui/toolbar-components/popups/TableSelectorPopupWrapper.d.ts +15 -0
  82. package/dist/types-ts4.5/ui/toolbar-components/shared/constants.d.ts +15 -0
  83. package/dist/types-ts4.5/ui/toolbar-components/shared/types.d.ts +8 -0
  84. package/dist/types-ts4.5/ui/toolbar-components.d.ts +9 -2
  85. 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
+ };
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -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
- return (0, _toConsumableArray2.default)(toolbarShowPlusInsertOnly ? [] : [{
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, useState } from 'react';
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 { isDetachedElement } from './utils/utils';
13
- const EmojiPicker = props => {
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
- const onPopupUnmount = () => {
68
- requestAnimationFrame(() => api === null || api === void 0 ? void 0 : api.core.actions.focus());
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
- handleClickOutside: handleEmojiClickOutside,
107
- handleEscapeKeydown: handleEmojiPressEscape
108
- })), /*#__PURE__*/React.createElement(ToolbarTooltip, {
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: onClick,
118
- isSelected: emojiPickerOpen,
64
+ onClick: () => emojiPickerPopup.toggle(),
65
+ isSelected: emojiPickerPopup.isOpen,
119
66
  isDisabled: !isTypeAheadAllowed || !emojiProvider
120
67
  })));
121
68
  };