@atlaskit/editor-plugin-insert-block 4.3.3 → 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 (65) hide show
  1. package/CHANGELOG.md +8 -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/ui/toolbar-components/EmojiButton.d.ts +2 -7
  42. package/dist/types/ui/toolbar-components/InsertButton.d.ts +18 -0
  43. package/dist/types/ui/toolbar-components/TableSizePicker.d.ts +3 -5
  44. package/dist/types/ui/toolbar-components/hooks/useEmojiPickerPopup.d.ts +20 -0
  45. package/dist/types/ui/toolbar-components/hooks/useInsertButtonState.d.ts +24 -0
  46. package/dist/types/ui/toolbar-components/hooks/usePopupManager.d.ts +21 -0
  47. package/dist/types/ui/toolbar-components/hooks/useTableSelectorPopup.d.ts +19 -0
  48. package/dist/types/ui/toolbar-components/popups/EmojiPickerPopup.d.ts +16 -0
  49. package/dist/types/ui/toolbar-components/popups/TableSelectorPopupWrapper.d.ts +15 -0
  50. package/dist/types/ui/toolbar-components/shared/constants.d.ts +12 -0
  51. package/dist/types/ui/toolbar-components/shared/types.d.ts +8 -0
  52. package/dist/types/ui/toolbar-components.d.ts +9 -2
  53. package/dist/types-ts4.5/ui/toolbar-components/EmojiButton.d.ts +2 -7
  54. package/dist/types-ts4.5/ui/toolbar-components/InsertButton.d.ts +18 -0
  55. package/dist/types-ts4.5/ui/toolbar-components/TableSizePicker.d.ts +3 -5
  56. package/dist/types-ts4.5/ui/toolbar-components/hooks/useEmojiPickerPopup.d.ts +20 -0
  57. package/dist/types-ts4.5/ui/toolbar-components/hooks/useInsertButtonState.d.ts +24 -0
  58. package/dist/types-ts4.5/ui/toolbar-components/hooks/usePopupManager.d.ts +21 -0
  59. package/dist/types-ts4.5/ui/toolbar-components/hooks/useTableSelectorPopup.d.ts +19 -0
  60. package/dist/types-ts4.5/ui/toolbar-components/popups/EmojiPickerPopup.d.ts +16 -0
  61. package/dist/types-ts4.5/ui/toolbar-components/popups/TableSelectorPopupWrapper.d.ts +15 -0
  62. package/dist/types-ts4.5/ui/toolbar-components/shared/constants.d.ts +15 -0
  63. package/dist/types-ts4.5/ui/toolbar-components/shared/types.d.ts +8 -0
  64. package/dist/types-ts4.5/ui/toolbar-components.d.ts +9 -2
  65. package/package.json +7 -7
package/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # @atlaskit/editor-plugin-insert-block
2
2
 
3
+ ## 4.3.4
4
+
5
+ ### Patch Changes
6
+
7
+ - [`bcc3b620154b0`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/bcc3b620154b0) -
8
+ [ux] ED-28739 [Register] [Primary toolbar] Insert button
9
+ - Updated dependencies
10
+
3
11
  ## 4.3.3
4
12
 
5
13
  ### Patch Changes
@@ -163,11 +163,17 @@ var insertBlockPlugin = exports.insertBlockPlugin = function insertBlockPlugin(_
163
163
  });
164
164
  };
165
165
  if ((0, _expValEquals.expValEquals)('platform_editor_toolbar_aifc', 'isEnabled', true)) {
166
- var _api$toolbar;
166
+ var _api$toolbar, _api$codeBlock, _api$panel, _api$blockType;
167
167
  api === null || api === void 0 || (_api$toolbar = api.toolbar) === null || _api$toolbar === void 0 || _api$toolbar.actions.registerComponents((0, _toolbarComponents.getToolbarComponents)({
168
168
  api: api,
169
169
  tableSelectorSupported: options.tableSelectorSupported,
170
- toolbarShowPlusInsertOnly: options.toolbarShowPlusInsertOnly
170
+ toolbarShowPlusInsertOnly: options.toolbarShowPlusInsertOnly,
171
+ showElementBrowserLink: options.showElementBrowserLink,
172
+ onInsertBlockType: handleInsertBlockType(api === null || api === void 0 || (_api$codeBlock = api.codeBlock) === null || _api$codeBlock === void 0 ? void 0 : _api$codeBlock.actions.insertCodeBlock, api === null || api === void 0 || (_api$panel = api.panel) === null || _api$panel === void 0 ? void 0 : _api$panel.actions.insertPanel, api === null || api === void 0 || (_api$blockType = api.blockType) === null || _api$blockType === void 0 ? void 0 : _api$blockType.actions.insertBlockQuote),
173
+ nativeStatusSupported: options.nativeStatusSupported,
174
+ horizontalRuleEnabled: options.horizontalRuleEnabled,
175
+ expandEnabled: options.allowExpand,
176
+ insertMenuItems: options.insertMenuItems
171
177
  }));
172
178
  } else {
173
179
  var _api$primaryToolbar;
@@ -1,42 +1,26 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
3
  var _typeof = require("@babel/runtime/helpers/typeof");
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.EmojiButton = void 0;
9
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
8
  var _react = _interopRequireWildcard(require("react"));
11
9
  var _reactIntlNext = require("react-intl-next");
12
- var _analytics = require("@atlaskit/editor-common/analytics");
13
10
  var _hooks = require("@atlaskit/editor-common/hooks");
14
11
  var _messages = require("@atlaskit/editor-common/messages");
15
- var _ui = require("@atlaskit/editor-common/ui");
16
- var _uiReact = require("@atlaskit/editor-common/ui-react");
17
- var _editorSharedStyles = require("@atlaskit/editor-shared-styles");
18
12
  var _editorToolbar = require("@atlaskit/editor-toolbar");
19
- var _picker = require("@atlaskit/emoji/picker");
20
13
  var _expValEquals = require("@atlaskit/tmp-editor-statsig/exp-val-equals");
21
- var _utils = require("./utils/utils");
14
+ var _useEmojiPickerPopup = require("./hooks/useEmojiPickerPopup");
15
+ var _EmojiPickerPopup = require("./popups/EmojiPickerPopup");
22
16
  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); }
23
- var EmojiPicker = function EmojiPicker(props) {
24
- var setOutsideClickTargetRef = _react.default.useContext(_uiReact.OutsideClickTargetRefContext);
25
- return /*#__PURE__*/_react.default.createElement(_picker.EmojiPicker, {
26
- onPickerRef: setOutsideClickTargetRef,
27
- emojiProvider: props.emojiProvider,
28
- onSelection: props.onSelection
29
- });
30
- };
31
- var EmojiPickerWithListeners = (0, _uiReact.withReactEditorViewOuterListeners)(EmojiPicker);
32
17
  var EmojiButton = exports.EmojiButton = function EmojiButton(_ref) {
33
- var api = _ref.api;
18
+ var api = _ref.api,
19
+ popupsMountPoint = _ref.popupsMountPoint,
20
+ popupsBoundariesElement = _ref.popupsBoundariesElement,
21
+ popupsScrollableElement = _ref.popupsScrollableElement;
34
22
  var _useIntl = (0, _reactIntlNext.useIntl)(),
35
23
  formatMessage = _useIntl.formatMessage;
36
- var _useState = (0, _react.useState)(false),
37
- _useState2 = (0, _slicedToArray2.default)(_useState, 2),
38
- emojiPickerOpen = _useState2[0],
39
- setEmojiPickerOpen = _useState2[1];
40
24
  var emojiButtonRef = (0, _react.useRef)(null);
41
25
  var _useSharedPluginState = (0, _hooks.useSharedPluginStateWithSelector)(api, ['emoji', 'typeAhead'], function (states) {
42
26
  var _states$emojiState, _states$emojiState2, _states$typeAheadStat;
@@ -49,75 +33,31 @@ var EmojiButton = exports.EmojiButton = function EmojiButton(_ref) {
49
33
  emojiProviderSelector = _useSharedPluginState.emojiProviderSelector,
50
34
  emojiProviderPromise = _useSharedPluginState.emojiProviderPromise,
51
35
  isTypeAheadAllowed = _useSharedPluginState.isTypeAheadAllowed;
36
+ var emojiPickerPopup = (0, _useEmojiPickerPopup.useEmojiPickerPopup)({
37
+ api: api,
38
+ buttonRef: emojiButtonRef
39
+ });
52
40
  if (!(api !== null && api !== void 0 && api.emoji)) {
53
41
  return null;
54
42
  }
55
- var toggleEmojiPickerOpen = function toggleEmojiPickerOpen(newState) {
56
- var oldState = emojiPickerOpen;
57
- if (newState === true && oldState === false) {
58
- var _api$analytics;
59
- api === null || api === void 0 || (_api$analytics = api.analytics) === null || _api$analytics === void 0 || _api$analytics.actions.fireAnalyticsEvent({
60
- action: _analytics.ACTION.OPENED,
61
- actionSubject: _analytics.ACTION_SUBJECT.PICKER,
62
- actionSubjectId: _analytics.ACTION_SUBJECT_ID.PICKER_EMOJI,
63
- attributes: {
64
- inputMethod: _analytics.INPUT_METHOD.TOOLBAR
65
- },
66
- eventType: _analytics.EVENT_TYPE.UI
67
- });
68
- }
69
- setEmojiPickerOpen(newState);
70
- };
71
43
  var getEmojiProvider = function getEmojiProvider() {
72
44
  if (emojiProviderSelector) {
73
45
  return Promise.resolve(emojiProviderSelector);
74
46
  }
75
47
  };
76
48
  var emojiProvider = (0, _expValEquals.expValEquals)('platform_editor_prevent_toolbar_layout_shifts', 'isEnabled', true) ? emojiProviderPromise : getEmojiProvider();
77
- var onPopupUnmount = function onPopupUnmount() {
78
- requestAnimationFrame(function () {
79
- return api === null || api === void 0 ? void 0 : api.core.actions.focus();
80
- });
81
- };
82
- var handleSelectedEmoji = function handleSelectedEmoji(emojiId) {
83
- var _api$emoji;
84
- api === null || api === void 0 || api.core.actions.focus();
85
- api === null || api === void 0 || api.core.actions.execute(api === null || api === void 0 || (_api$emoji = api.emoji) === null || _api$emoji === void 0 ? void 0 : _api$emoji.commands.insertEmoji(emojiId, _analytics.INPUT_METHOD.PICKER));
86
- toggleEmojiPickerOpen(false);
87
- return true;
88
- };
89
- var handleEmojiClickOutside = function handleEmojiClickOutside(e) {
90
- // Ignore click events for detached elements.
91
- // Workaround for FS-1322 - where two onClicks fire - one when the upload button is
92
- // still in the document, and one once it's detached. Does not always occur, and
93
- // may be a side effect of a react render optimisation
94
- if (e.target instanceof HTMLElement && !(0, _utils.isDetachedElement)(e.target)) {
95
- toggleEmojiPickerOpen(false);
96
- }
97
- };
98
- var handleEmojiPressEscape = function handleEmojiPressEscape() {
99
- var _emojiButtonRef$curre;
100
- toggleEmojiPickerOpen(false);
101
- emojiButtonRef === null || emojiButtonRef === void 0 || (_emojiButtonRef$curre = emojiButtonRef.current) === null || _emojiButtonRef$curre === void 0 || _emojiButtonRef$curre.focus();
102
- };
103
- var onClick = function onClick() {
104
- toggleEmojiPickerOpen(!emojiPickerOpen);
105
- };
106
- return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, emojiPickerOpen && emojiButtonRef.current && emojiProvider && /*#__PURE__*/_react.default.createElement(_ui.Popup, {
107
- target: emojiButtonRef.current,
108
- fitHeight: 350,
109
- fitWidth: 350,
110
- offset: [0, 3],
111
- mountTo: emojiButtonRef.current,
112
- onUnmount: onPopupUnmount,
113
- focusTrap: true,
114
- zIndex: _editorSharedStyles.akEditorMenuZIndex
115
- }, /*#__PURE__*/_react.default.createElement(EmojiPickerWithListeners, {
49
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_EmojiPickerPopup.EmojiPickerPopup, {
50
+ isOpen: emojiPickerPopup.isOpen,
51
+ targetRef: emojiButtonRef,
116
52
  emojiProvider: emojiProvider,
117
- onSelection: handleSelectedEmoji,
118
- handleClickOutside: handleEmojiClickOutside,
119
- handleEscapeKeydown: handleEmojiPressEscape
120
- })), /*#__PURE__*/_react.default.createElement(_editorToolbar.ToolbarTooltip, {
53
+ onSelection: emojiPickerPopup.handleSelectedEmoji,
54
+ onClickOutside: emojiPickerPopup.handleClickOutside,
55
+ onEscapeKeydown: emojiPickerPopup.handleEscapeKeydown,
56
+ onUnmount: emojiPickerPopup.onPopupUnmount,
57
+ popupsMountPoint: popupsMountPoint,
58
+ popupsBoundariesElement: popupsBoundariesElement,
59
+ popupsScrollableElement: popupsScrollableElement
60
+ }), /*#__PURE__*/_react.default.createElement(_editorToolbar.ToolbarTooltip, {
121
61
  content: formatMessage(_messages.toolbarInsertBlockMessages.emoji)
122
62
  }, /*#__PURE__*/_react.default.createElement(_editorToolbar.ToolbarButton, {
123
63
  iconBefore: /*#__PURE__*/_react.default.createElement(_editorToolbar.EmojiIcon, {
@@ -126,8 +66,10 @@ var EmojiButton = exports.EmojiButton = function EmojiButton(_ref) {
126
66
  }),
127
67
  ariaKeyshortcuts: "Shift+;",
128
68
  ref: emojiButtonRef,
129
- onClick: onClick,
130
- isSelected: emojiPickerOpen,
69
+ onClick: function onClick() {
70
+ return emojiPickerPopup.toggle();
71
+ },
72
+ isSelected: emojiPickerPopup.isOpen,
131
73
  isDisabled: !isTypeAheadAllowed || !emojiProvider
132
74
  })));
133
75
  };
@@ -0,0 +1,250 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.InsertButton = void 0;
9
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
+ var _react = _interopRequireWildcard(require("react"));
11
+ var _reactIntlNext = require("react-intl-next");
12
+ var _analytics = require("@atlaskit/editor-common/analytics");
13
+ var _messages = require("@atlaskit/editor-common/messages");
14
+ var _toolbar = require("@atlaskit/editor-common/toolbar");
15
+ var _ui = require("@atlaskit/editor-common/ui");
16
+ var _useSharedPluginStateSelector = require("@atlaskit/editor-common/use-shared-plugin-state-selector");
17
+ var _editorSharedStyles = require("@atlaskit/editor-shared-styles");
18
+ var _editorToolbar = require("@atlaskit/editor-toolbar");
19
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
20
+ var _InsertMenu = _interopRequireWildcard(require("../ElementBrowser/InsertMenu"));
21
+ var _useEmojiPickerPopup = require("./hooks/useEmojiPickerPopup");
22
+ var _useInsertButtonState2 = require("./hooks/useInsertButtonState");
23
+ var _useTableSelectorPopup = require("./hooks/useTableSelectorPopup");
24
+ var _EmojiPickerPopup = require("./popups/EmojiPickerPopup");
25
+ 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); }
26
+ // This determines how the popup should fit. We prefer the insert menu
27
+ // opening on the bottom as we have a search bar and should only open on
28
+ // top if there is more than sufficient room.
29
+ var FIT_HEIGHT_BUFFER = 100;
30
+ var InsertButton = exports.InsertButton = function InsertButton(_ref) {
31
+ var api = _ref.api,
32
+ _ref$showElementBrows = _ref.showElementBrowserLink,
33
+ showElementBrowserLink = _ref$showElementBrows === void 0 ? false : _ref$showElementBrows,
34
+ _ref$isFullPageAppear = _ref.isFullPageAppearance,
35
+ isFullPageAppearance = _ref$isFullPageAppear === void 0 ? false : _ref$isFullPageAppear,
36
+ tableSelectorSupported = _ref.tableSelectorSupported,
37
+ nativeStatusSupported = _ref.nativeStatusSupported,
38
+ horizontalRuleEnabled = _ref.horizontalRuleEnabled,
39
+ expandEnabled = _ref.expandEnabled,
40
+ insertMenuItems = _ref.insertMenuItems,
41
+ numberOfButtons = _ref.numberOfButtons,
42
+ onInsertBlockType = _ref.onInsertBlockType;
43
+ var _useEditorToolbar = (0, _toolbar.useEditorToolbar)(),
44
+ editorView = _useEditorToolbar.editorView;
45
+ var _useToolbarUI = (0, _editorToolbar.useToolbarUI)(),
46
+ isDisabled = _useToolbarUI.isDisabled,
47
+ popupsMountPoint = _useToolbarUI.popupsMountPoint,
48
+ popupsBoundariesElement = _useToolbarUI.popupsBoundariesElement,
49
+ popupsScrollableElement = _useToolbarUI.popupsScrollableElement;
50
+ var _useIntl = (0, _reactIntlNext.useIntl)(),
51
+ formatMessage = _useIntl.formatMessage;
52
+ var _useState = (0, _react.useState)(false),
53
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
54
+ insertMenuOpen = _useState2[0],
55
+ setInsertMenuOpen = _useState2[1];
56
+ var insertButtonRef = (0, _react.useRef)(null);
57
+ var emojiPickerPopup = (0, _useEmojiPickerPopup.useEmojiPickerPopup)({
58
+ api: api,
59
+ buttonRef: insertButtonRef
60
+ });
61
+ var tableSelectorPopup = (0, _useTableSelectorPopup.useTableSelectorPopup)({
62
+ api: api,
63
+ buttonRef: insertButtonRef
64
+ });
65
+ var showMediaPicker = (0, _useSharedPluginStateSelector.useSharedPluginStateSelector)(api, 'media.showMediaPicker');
66
+ var _useInsertButtonState = (0, _useInsertButtonState2.useInsertButtonState)({
67
+ api: api,
68
+ editorView: editorView || undefined,
69
+ horizontalRuleEnabled: horizontalRuleEnabled,
70
+ insertMenuItems: insertMenuItems,
71
+ nativeStatusSupported: nativeStatusSupported,
72
+ numberOfButtons: numberOfButtons,
73
+ tableSelectorSupported: tableSelectorSupported,
74
+ expandEnabled: expandEnabled,
75
+ showElementBrowserLink: showElementBrowserLink
76
+ }),
77
+ dropdownItems = _useInsertButtonState.dropdownItems,
78
+ emojiProvider = _useInsertButtonState.emojiProvider,
79
+ isTypeAheadAllowed = _useInsertButtonState.isTypeAheadAllowed;
80
+ if (!(api !== null && api !== void 0 && api.insertBlock)) {
81
+ return null;
82
+ }
83
+ var toggleInsertMenuOpen = function toggleInsertMenuOpen(newState) {
84
+ setInsertMenuOpen(newState);
85
+ };
86
+ var onPopupUnmount = function onPopupUnmount() {
87
+ requestAnimationFrame(function () {
88
+ return api === null || api === void 0 ? void 0 : api.core.actions.focus();
89
+ });
90
+ };
91
+ var onClick = function onClick() {
92
+ toggleInsertMenuOpen(!insertMenuOpen);
93
+ };
94
+ var onItemActivated = function onItemActivated(_ref2) {
95
+ var _api$core, _api$hyperlink, _api$imageUpload, _api$mention, _api$taskDecision, _api$rule, _api$core4, _api$date, _api$placeholderText, _api$layout, _api$core5, _api$status, _api$expand;
96
+ var item = _ref2.item,
97
+ inputMethod = _ref2.inputMethod;
98
+ if (!editorView) {
99
+ return;
100
+ }
101
+ var state = editorView.state,
102
+ dispatch = editorView.dispatch;
103
+
104
+ // need to do this before inserting nodes so scrollIntoView works properly
105
+ if (!editorView.hasFocus()) {
106
+ editorView.focus();
107
+ }
108
+ switch (item.value.name) {
109
+ case 'link':
110
+ api === null || api === void 0 || (_api$core = api.core) === null || _api$core === void 0 || _api$core.actions.execute(api === null || api === void 0 || (_api$hyperlink = api.hyperlink) === null || _api$hyperlink === void 0 ? void 0 : _api$hyperlink.commands.showLinkToolbar(inputMethod));
111
+ break;
112
+ case 'table':
113
+ // workaround to solve race condition where cursor is not placed correctly inside table
114
+ queueMicrotask(function () {
115
+ var _api$table, _api$table$actions$in, _api$table$actions;
116
+ api === null || api === void 0 || (_api$table = api.table) === null || _api$table === void 0 || (_api$table$actions$in = (_api$table$actions = _api$table.actions).insertTable) === null || _api$table$actions$in === void 0 || _api$table$actions$in.call(_api$table$actions, {
117
+ action: _analytics.ACTION.INSERTED,
118
+ actionSubject: _analytics.ACTION_SUBJECT.DOCUMENT,
119
+ actionSubjectId: _analytics.ACTION_SUBJECT_ID.TABLE,
120
+ attributes: {
121
+ inputMethod: inputMethod
122
+ },
123
+ eventType: _analytics.EVENT_TYPE.TRACK
124
+ })(state, dispatch);
125
+ });
126
+ break;
127
+ case 'table selector':
128
+ tableSelectorPopup.toggle(inputMethod);
129
+ break;
130
+ case 'image upload':
131
+ if (api !== null && api !== void 0 && (_api$imageUpload = api.imageUpload) !== null && _api$imageUpload !== void 0 && _api$imageUpload.actions.startUpload) {
132
+ api.imageUpload.actions.startUpload()(state, dispatch);
133
+ }
134
+ break;
135
+ case 'media':
136
+ if (showMediaPicker) {
137
+ if ((0, _platformFeatureFlags.fg)('platform_editor_add_media_from_url_rollout')) {
138
+ var _api$core2, _api$mediaInsert;
139
+ api === null || api === void 0 || (_api$core2 = api.core) === null || _api$core2 === void 0 || _api$core2.actions.execute(api === null || api === void 0 || (_api$mediaInsert = api.mediaInsert) === null || _api$mediaInsert === void 0 ? void 0 : _api$mediaInsert.commands.showMediaInsertPopup());
140
+ } else {
141
+ showMediaPicker();
142
+ }
143
+ }
144
+ break;
145
+ case 'mention':
146
+ api === null || api === void 0 || (_api$mention = api.mention) === null || _api$mention === void 0 || (_api$mention = _api$mention.actions) === null || _api$mention === void 0 || _api$mention.openTypeAhead(inputMethod);
147
+ break;
148
+ case 'emoji':
149
+ emojiPickerPopup.toggle(inputMethod);
150
+ break;
151
+ case 'codeblock':
152
+ case 'blockquote':
153
+ case 'panel':
154
+ onInsertBlockType === null || onInsertBlockType === void 0 || onInsertBlockType(item.value.name)(state, dispatch);
155
+ break;
156
+ case 'action':
157
+ case 'decision':
158
+ var listType = item.value.name === 'action' ? 'taskList' : 'decisionList';
159
+ api === null || api === void 0 || (_api$taskDecision = api.taskDecision) === null || _api$taskDecision === void 0 || _api$taskDecision.actions.insertTaskDecision(listType, inputMethod)(state, dispatch);
160
+ break;
161
+ case 'horizontalrule':
162
+ api === null || api === void 0 || (_api$rule = api.rule) === null || _api$rule === void 0 || _api$rule.actions.insertHorizontalRule(inputMethod)(state, dispatch);
163
+ break;
164
+ case 'macro':
165
+ if (!(0, _platformFeatureFlags.fg)('platform_editor_refactor_view_more')) {
166
+ var _api$core3, _api$quickInsert;
167
+ api === null || api === void 0 || (_api$core3 = api.core) === null || _api$core3 === void 0 || _api$core3.actions.execute(api === null || api === void 0 || (_api$quickInsert = api.quickInsert) === null || _api$quickInsert === void 0 ? void 0 : _api$quickInsert.commands.openElementBrowserModal);
168
+ }
169
+ break;
170
+ case 'date':
171
+ api === null || api === void 0 || (_api$core4 = api.core) === null || _api$core4 === void 0 || _api$core4.actions.execute(api === null || api === void 0 || (_api$date = api.date) === null || _api$date === void 0 || (_api$date = _api$date.commands) === null || _api$date === void 0 ? void 0 : _api$date.insertDate({
172
+ inputMethod: inputMethod
173
+ }));
174
+ break;
175
+ case 'placeholder text':
176
+ api === null || api === void 0 || (_api$placeholderText = api.placeholderText) === null || _api$placeholderText === void 0 || _api$placeholderText.actions.showPlaceholderFloatingToolbar(state, dispatch);
177
+ break;
178
+ case 'layout':
179
+ api === null || api === void 0 || (_api$layout = api.layout) === null || _api$layout === void 0 || _api$layout.actions.insertLayoutColumns(inputMethod)(state, dispatch);
180
+ break;
181
+ case 'status':
182
+ api === null || api === void 0 || (_api$core5 = api.core) === null || _api$core5 === void 0 || _api$core5.actions.execute(api === null || api === void 0 || (_api$status = api.status) === null || _api$status === void 0 || (_api$status = _api$status.commands) === null || _api$status === void 0 ? void 0 : _api$status.insertStatus(inputMethod));
183
+ break;
184
+ case 'expand':
185
+ api === null || api === void 0 || (_api$expand = api.expand) === null || _api$expand === void 0 || _api$expand.actions.insertExpand(state, dispatch);
186
+ break;
187
+ default:
188
+ if (item && item.onClick) {
189
+ item.onClick();
190
+ }
191
+ break;
192
+ }
193
+ toggleInsertMenuOpen(false);
194
+ };
195
+ var onInsert = function onInsert(_ref3) {
196
+ var item = _ref3.item;
197
+ onItemActivated({
198
+ item: item,
199
+ inputMethod: _analytics.INPUT_METHOD.INSERT_MENU
200
+ });
201
+ };
202
+ var toggleVisibility = function toggleVisibility() {
203
+ toggleInsertMenuOpen(!insertMenuOpen);
204
+ };
205
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, insertMenuOpen && insertButtonRef.current && editorView && /*#__PURE__*/_react.default.createElement(_ui.Popup, {
206
+ target: insertButtonRef.current,
207
+ fitHeight: _InsertMenu.DEFAULT_HEIGHT + FIT_HEIGHT_BUFFER,
208
+ fitWidth: 350,
209
+ offset: [0, 3],
210
+ mountTo: popupsMountPoint,
211
+ boundariesElement: popupsBoundariesElement,
212
+ scrollableElement: popupsScrollableElement,
213
+ onUnmount: onPopupUnmount,
214
+ focusTrap: true,
215
+ zIndex: _editorSharedStyles.akEditorMenuZIndex,
216
+ preventOverflow: true,
217
+ alignX: "right"
218
+ }, /*#__PURE__*/_react.default.createElement(_InsertMenu.default, {
219
+ editorView: editorView,
220
+ dropdownItems: dropdownItems,
221
+ onInsert: onInsert,
222
+ toggleVisiblity: toggleVisibility,
223
+ showElementBrowserLink: showElementBrowserLink,
224
+ pluginInjectionApi: api,
225
+ isFullPageAppearance: isFullPageAppearance
226
+ })), emojiProvider && /*#__PURE__*/_react.default.createElement(_EmojiPickerPopup.EmojiPickerPopup, {
227
+ isOpen: emojiPickerPopup.isOpen,
228
+ targetRef: insertButtonRef,
229
+ emojiProvider: Promise.resolve(emojiProvider),
230
+ onSelection: emojiPickerPopup.handleSelectedEmoji,
231
+ onClickOutside: emojiPickerPopup.handleClickOutside,
232
+ onEscapeKeydown: emojiPickerPopup.handleEscapeKeydown,
233
+ onUnmount: emojiPickerPopup.onPopupUnmount,
234
+ popupsMountPoint: popupsMountPoint,
235
+ popupsBoundariesElement: popupsBoundariesElement,
236
+ popupsScrollableElement: popupsScrollableElement
237
+ }), /*#__PURE__*/_react.default.createElement(_editorToolbar.ToolbarTooltip, {
238
+ content: formatMessage(_messages.toolbarInsertBlockMessages.insertMenu)
239
+ }, /*#__PURE__*/_react.default.createElement(_editorToolbar.ToolbarButton, {
240
+ iconBefore: /*#__PURE__*/_react.default.createElement(_editorToolbar.AddIcon, {
241
+ size: "small",
242
+ label: formatMessage(_messages.toolbarInsertBlockMessages.insertMenu)
243
+ }),
244
+ ariaKeyshortcuts: "/",
245
+ ref: insertButtonRef,
246
+ onClick: onClick,
247
+ isSelected: insertMenuOpen,
248
+ isDisabled: !isTypeAheadAllowed || isDisabled
249
+ })));
250
+ };
@@ -1,20 +1,17 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
3
  var _typeof = require("@babel/runtime/helpers/typeof");
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.TableSizePicker = void 0;
9
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
8
  var _react = _interopRequireWildcard(require("react"));
11
9
  var _reactIntlNext = require("react-intl-next");
12
- var _analytics = require("@atlaskit/editor-common/analytics");
13
10
  var _messages = require("@atlaskit/editor-common/messages");
14
11
  var _toolbar = require("@atlaskit/editor-common/toolbar");
15
- var _ui = require("@atlaskit/editor-common/ui");
16
12
  var _editorToolbar = require("@atlaskit/editor-toolbar");
17
- var _utils = require("./utils/utils");
13
+ var _useTableSelectorPopup = require("./hooks/useTableSelectorPopup");
14
+ var _TableSelectorPopupWrapper = require("./popups/TableSelectorPopupWrapper");
18
15
  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); }
19
16
  var TableSizePicker = exports.TableSizePicker = function TableSizePicker(_ref) {
20
17
  var api = _ref.api,
@@ -23,55 +20,35 @@ var TableSizePicker = exports.TableSizePicker = function TableSizePicker(_ref) {
23
20
  formatMessage = _useIntl.formatMessage;
24
21
  var _useEditorToolbar = (0, _toolbar.useEditorToolbar)(),
25
22
  editorView = _useEditorToolbar.editorView;
26
- var _useToolbarUI = (0, _editorToolbar.useToolbarUI)(),
27
- popupsMountPoint = _useToolbarUI.popupsMountPoint;
28
- var _useState = (0, _react.useState)(false),
29
- _useState2 = (0, _slicedToArray2.default)(_useState, 2),
30
- tableSizePickerOpen = _useState2[0],
31
- setTableSizePickerOpen = _useState2[1];
32
- var _useState3 = (0, _react.useState)(false),
33
- _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
34
- isOpenedByKeyboard = _useState4[0],
35
- setIsOpenedByKeyboard = _useState4[1];
36
23
  var tableSizePickerRef = (0, _react.useRef)(null);
24
+ var _useToolbarUI = (0, _editorToolbar.useToolbarUI)(),
25
+ popupsMountPoint = _useToolbarUI.popupsMountPoint,
26
+ popupsBoundariesElement = _useToolbarUI.popupsBoundariesElement,
27
+ popupsScrollableElement = _useToolbarUI.popupsScrollableElement;
28
+ var tableSelectorPopup = (0, _useTableSelectorPopup.useTableSelectorPopup)({
29
+ api: api,
30
+ buttonRef: tableSizePickerRef
31
+ });
37
32
  if (!(editorView !== null && editorView !== void 0 && editorView.state.schema.nodes.table) || !tableSelectorSupported) {
38
33
  return null;
39
34
  }
40
- var handleSelectedTableSize = function handleSelectedTableSize(rowsCount, colsCount) {
41
- // workaround to solve race condition where cursor is not placed correctly inside table
42
- queueMicrotask(function () {
43
- var _api$core, _api$table;
44
- 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));
45
- });
46
- setTableSizePickerOpen(false);
47
- };
48
- var handleTableSelectorClickOutside = function handleTableSelectorClickOutside(e) {
49
- // Ignore click events for detached elements.
50
- if (e.target instanceof HTMLElement && !(0, _utils.isDetachedElement)(e.target)) {
51
- setTableSizePickerOpen(false);
52
- }
53
- };
54
- var handleTableSelectorPressEscape = function handleTableSelectorPressEscape() {
55
- var _tableSizePickerRef$c;
56
- setTableSizePickerOpen(false);
57
- (_tableSizePickerRef$c = tableSizePickerRef.current) === null || _tableSizePickerRef$c === void 0 || _tableSizePickerRef$c.focus();
58
- };
59
- var onUnmount = function onUnmount() {
60
- api === null || api === void 0 || api.core.actions.focus();
61
- };
62
35
  var onClick = function onClick(event) {
63
- setIsOpenedByKeyboard(event.detail === 0 ? true : false);
64
- setTableSizePickerOpen(!tableSizePickerOpen);
36
+ if (event.detail === 0) {
37
+ tableSelectorPopup.handleKeyboardOpen(event);
38
+ }
39
+ tableSelectorPopup.toggle();
65
40
  };
66
- return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, tableSizePickerRef.current && tableSizePickerOpen && /*#__PURE__*/_react.default.createElement(_ui.TableSelectorPopup, {
67
- allowOutsideSelection: true,
68
- target: tableSizePickerRef.current,
69
- onUnmount: onUnmount,
70
- onSelection: handleSelectedTableSize,
41
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_TableSelectorPopupWrapper.TableSelectorPopupWrapper, {
42
+ isOpen: tableSelectorPopup.isOpen,
43
+ targetRef: tableSizePickerRef,
44
+ isOpenedByKeyboard: tableSelectorPopup.isOpenedByKeyboard,
45
+ onSelection: tableSelectorPopup.handleSelectedTableSize,
46
+ onClickOutside: tableSelectorPopup.handleClickOutside,
47
+ onEscapeKeydown: tableSelectorPopup.handleEscapeKeydown,
48
+ onUnmount: tableSelectorPopup.onPopupUnmount,
71
49
  popupsMountPoint: popupsMountPoint,
72
- handleClickOutside: handleTableSelectorClickOutside,
73
- handleEscapeKeydown: handleTableSelectorPressEscape,
74
- isOpenedByKeyboard: isOpenedByKeyboard
50
+ popupsBoundariesElement: popupsBoundariesElement,
51
+ popupsScrollableElement: popupsScrollableElement
75
52
  }), /*#__PURE__*/_react.default.createElement(_editorToolbar.ToolbarTooltip, {
76
53
  content: formatMessage(_messages.toolbarInsertBlockMessages.tableSelector)
77
54
  }, /*#__PURE__*/_react.default.createElement(_editorToolbar.ToolbarButton, {
@@ -79,7 +56,7 @@ var TableSizePicker = exports.TableSizePicker = function TableSizePicker(_ref) {
79
56
  label: formatMessage(_messages.toolbarInsertBlockMessages.tableSelector)
80
57
  }),
81
58
  onClick: onClick,
82
- isSelected: tableSizePickerOpen,
59
+ isSelected: tableSelectorPopup.isOpen,
83
60
  ref: tableSizePickerRef
84
61
  })));
85
62
  };
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.useEmojiPickerPopup = 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 useEmojiPickerPopup = exports.useEmojiPickerPopup = function useEmojiPickerPopup(_ref) {
15
+ var api = _ref.api,
16
+ buttonRef = _ref.buttonRef;
17
+ var popupManager = (0, _usePopupManager.usePopupManager)({
18
+ focusTarget: buttonRef,
19
+ analytics: {
20
+ onToggle: function onToggle(isOpen) {
21
+ if (isOpen) {
22
+ var _api$analytics;
23
+ api === null || api === void 0 || (_api$analytics = api.analytics) === null || _api$analytics === void 0 || _api$analytics.actions.fireAnalyticsEvent({
24
+ action: _analytics.ACTION.OPENED,
25
+ actionSubject: _analytics.ACTION_SUBJECT.PICKER,
26
+ actionSubjectId: _analytics.ACTION_SUBJECT_ID.PICKER_EMOJI,
27
+ attributes: {
28
+ inputMethod: _analytics.INPUT_METHOD.TOOLBAR
29
+ },
30
+ eventType: _analytics.EVENT_TYPE.UI
31
+ });
32
+ }
33
+ }
34
+ }
35
+ });
36
+ var handleSelectedEmoji = (0, _react.useCallback)(function (emojiId) {
37
+ var _api$emoji;
38
+ api === null || api === void 0 || api.core.actions.focus();
39
+ api === null || api === void 0 || api.core.actions.execute(api === null || api === void 0 || (_api$emoji = api.emoji) === null || _api$emoji === void 0 ? void 0 : _api$emoji.commands.insertEmoji(emojiId, _analytics.INPUT_METHOD.PICKER));
40
+ popupManager.close();
41
+ return true;
42
+ }, [api, popupManager]);
43
+ var onPopupUnmount = (0, _react.useCallback)(function () {
44
+ requestAnimationFrame(function () {
45
+ return api === null || api === void 0 ? void 0 : api.core.actions.focus();
46
+ });
47
+ }, [api]);
48
+ return _objectSpread(_objectSpread({}, popupManager), {}, {
49
+ handleSelectedEmoji: handleSelectedEmoji,
50
+ onPopupUnmount: onPopupUnmount
51
+ });
52
+ };