@atlaskit/editor-plugin-media-insert 1.2.1 → 1.3.0

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 (47) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/dist/cjs/actions.js +28 -0
  3. package/dist/cjs/plugin.js +57 -10
  4. package/dist/cjs/pm-plugins/main.js +40 -0
  5. package/dist/cjs/pm-plugins/plugin-key.js +8 -0
  6. package/dist/cjs/types.js +5 -0
  7. package/dist/cjs/ui/FromURL.js +108 -85
  8. package/dist/cjs/ui/MediaInsertContent.js +24 -0
  9. package/dist/cjs/ui/MediaInsertPicker.js +86 -0
  10. package/dist/cjs/ui/MediaInsertWrapper.js +21 -0
  11. package/dist/es2019/actions.js +21 -0
  12. package/dist/es2019/plugin.js +62 -12
  13. package/dist/es2019/pm-plugins/main.js +34 -0
  14. package/dist/es2019/pm-plugins/plugin-key.js +2 -0
  15. package/dist/es2019/types.js +1 -0
  16. package/dist/es2019/ui/FromURL.js +34 -16
  17. package/dist/es2019/ui/MediaInsertContent.js +14 -0
  18. package/dist/es2019/ui/MediaInsertPicker.js +79 -0
  19. package/dist/es2019/ui/MediaInsertWrapper.js +15 -0
  20. package/dist/esm/actions.js +22 -0
  21. package/dist/esm/plugin.js +57 -10
  22. package/dist/esm/pm-plugins/main.js +34 -0
  23. package/dist/esm/pm-plugins/plugin-key.js +2 -0
  24. package/dist/esm/types.js +1 -0
  25. package/dist/esm/ui/FromURL.js +108 -85
  26. package/dist/esm/ui/MediaInsertContent.js +14 -0
  27. package/dist/esm/ui/MediaInsertPicker.js +79 -0
  28. package/dist/esm/ui/MediaInsertWrapper.js +14 -0
  29. package/dist/types/actions.d.ts +6 -0
  30. package/dist/types/index.d.ts +1 -1
  31. package/dist/types/plugin.d.ts +1 -2
  32. package/dist/types/pm-plugins/main.d.ts +3 -0
  33. package/dist/types/pm-plugins/plugin-key.d.ts +3 -0
  34. package/dist/types/types.d.ts +14 -0
  35. package/dist/types/ui/MediaInsertContent.d.ts +2 -0
  36. package/dist/types/ui/MediaInsertPicker.d.ts +3 -0
  37. package/dist/types/ui/MediaInsertWrapper.d.ts +4 -0
  38. package/dist/types-ts4.5/actions.d.ts +6 -0
  39. package/dist/types-ts4.5/index.d.ts +1 -1
  40. package/dist/types-ts4.5/plugin.d.ts +1 -2
  41. package/dist/types-ts4.5/pm-plugins/main.d.ts +3 -0
  42. package/dist/types-ts4.5/pm-plugins/plugin-key.d.ts +3 -0
  43. package/dist/types-ts4.5/types.d.ts +16 -0
  44. package/dist/types-ts4.5/ui/MediaInsertContent.d.ts +2 -0
  45. package/dist/types-ts4.5/ui/MediaInsertPicker.d.ts +3 -0
  46. package/dist/types-ts4.5/ui/MediaInsertWrapper.d.ts +4 -0
  47. package/package.json +11 -7
package/CHANGELOG.md CHANGED
@@ -1,5 +1,26 @@
1
1
  # @atlaskit/editor-plugin-media-insert
2
2
 
3
+ ## 1.3.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#129365](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/129365)
8
+ [`0cb229e53ad8f`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/0cb229e53ad8f) -
9
+ [ux] [ED-24249] Added popup dialog for inserting media using editor-plugin-media-insert
10
+
11
+ ### Patch Changes
12
+
13
+ - Updated dependencies
14
+
15
+ ## 1.2.2
16
+
17
+ ### Patch Changes
18
+
19
+ - [#128111](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/128111)
20
+ [`5d65c0d1d28c8`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/5d65c0d1d28c8) -
21
+ [ux] [ED-24322] Add onPaste UX improvements to url upload
22
+ - Updated dependencies
23
+
3
24
  ## 1.2.1
4
25
 
5
26
  ### Patch Changes
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.showMediaInsertPopup = exports.closeMediaInsertPicker = exports.ACTION_OPEN_POPUP = exports.ACTION_CLOSE_POPUP = void 0;
7
+ var _pluginKey = require("./pm-plugins/plugin-key");
8
+ var ACTION_OPEN_POPUP = exports.ACTION_OPEN_POPUP = 'OPEN_POPUP';
9
+ var ACTION_CLOSE_POPUP = exports.ACTION_CLOSE_POPUP = 'CLOSE_POPUP';
10
+ var setPopupMeta = function setPopupMeta(_ref) {
11
+ var type = _ref.type,
12
+ tr = _ref.tr;
13
+ return tr.setMeta(_pluginKey.pluginKey, {
14
+ type: type
15
+ });
16
+ };
17
+ var showMediaInsertPopup = exports.showMediaInsertPopup = function showMediaInsertPopup(tr) {
18
+ return setPopupMeta({
19
+ type: ACTION_OPEN_POPUP,
20
+ tr: tr
21
+ });
22
+ };
23
+ var closeMediaInsertPicker = exports.closeMediaInsertPicker = function closeMediaInsertPicker(tr) {
24
+ return setPopupMeta({
25
+ type: ACTION_CLOSE_POPUP,
26
+ tr: tr
27
+ });
28
+ };
@@ -6,24 +6,60 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.mediaInsertPlugin = void 0;
8
8
  var _react = _interopRequireDefault(require("react"));
9
+ var _analytics = require("@atlaskit/editor-common/analytics");
9
10
  var _messages = require("@atlaskit/editor-common/messages");
10
11
  var _quickInsert = require("@atlaskit/editor-common/quick-insert");
11
- var mediaInsertPlugin = exports.mediaInsertPlugin = function mediaInsertPlugin() {
12
+ var _actions = require("./actions");
13
+ var _main = require("./pm-plugins/main");
14
+ var _pluginKey = require("./pm-plugins/plugin-key");
15
+ var _MediaInsertPicker = require("./ui/MediaInsertPicker");
16
+ var mediaInsertPlugin = exports.mediaInsertPlugin = function mediaInsertPlugin(_ref) {
17
+ var api = _ref.api;
12
18
  return {
13
19
  name: 'mediaInsert',
14
20
  pmPlugins: function pmPlugins() {
15
21
  return [{
16
22
  name: 'mediaInsert',
17
23
  plugin: function plugin() {
18
- // eslint-disable-next-line no-console
19
- console.log('mediaInsert plugin');
20
- return undefined;
24
+ return (0, _main.createPlugin)();
21
25
  }
22
26
  }];
23
27
  },
28
+ getSharedState: function getSharedState(editorState) {
29
+ if (!editorState) {
30
+ return {
31
+ isOpen: false
32
+ };
33
+ }
34
+ var _ref2 = _pluginKey.pluginKey.getState(editorState) || {},
35
+ isOpen = _ref2.isOpen;
36
+ return {
37
+ isOpen: isOpen
38
+ };
39
+ },
40
+ contentComponent: function contentComponent(_ref3) {
41
+ var editorView = _ref3.editorView,
42
+ dispatchAnalyticsEvent = _ref3.dispatchAnalyticsEvent,
43
+ popupsMountPoint = _ref3.popupsMountPoint,
44
+ popupsBoundariesElement = _ref3.popupsBoundariesElement,
45
+ popupsScrollableElement = _ref3.popupsScrollableElement;
46
+ var dispatch = editorView.dispatch,
47
+ state = editorView.state;
48
+ return /*#__PURE__*/_react.default.createElement(_MediaInsertPicker.MediaInsertPicker, {
49
+ api: api,
50
+ editorView: editorView,
51
+ dispatchAnalyticsEvent: dispatchAnalyticsEvent,
52
+ popupsMountPoint: popupsMountPoint,
53
+ popupsBoundariesElement: popupsBoundariesElement,
54
+ popupsScrollableElement: popupsScrollableElement,
55
+ closeMediaInsertPicker: function closeMediaInsertPicker() {
56
+ return dispatch((0, _actions.closeMediaInsertPicker)(state.tr));
57
+ }
58
+ });
59
+ },
24
60
  pluginsOptions: {
25
- quickInsert: function quickInsert(_ref) {
26
- var formatMessage = _ref.formatMessage;
61
+ quickInsert: function quickInsert(_ref4) {
62
+ var formatMessage = _ref4.formatMessage;
27
63
  return [{
28
64
  id: 'media-insert',
29
65
  title: formatMessage(_messages.toolbarInsertBlockMessages.insertMediaFromUrl),
@@ -34,10 +70,21 @@ var mediaInsertPlugin = exports.mediaInsertPlugin = function mediaInsertPlugin()
34
70
  return /*#__PURE__*/_react.default.createElement(_quickInsert.IconImages, null);
35
71
  },
36
72
  action: function action(insert) {
37
- return insert({
38
- type: 'paragraph',
39
- content: []
40
- });
73
+ var _api$analytics;
74
+ // Insert empty string to remove the typeahead raw text
75
+ // close the quick insert immediately
76
+ var tr = insert('');
77
+ (0, _actions.showMediaInsertPopup)(tr);
78
+ api === null || api === void 0 || (_api$analytics = api.analytics) === null || _api$analytics === void 0 || (_api$analytics = _api$analytics.actions) === null || _api$analytics === void 0 || _api$analytics.attachAnalyticsEvent({
79
+ action: _analytics.ACTION.OPENED,
80
+ actionSubject: _analytics.ACTION_SUBJECT.PICKER,
81
+ actionSubjectId: _analytics.ACTION_SUBJECT_ID.PICKER_MEDIA,
82
+ attributes: {
83
+ inputMethod: _analytics.INPUT_METHOD.QUICK_INSERT
84
+ },
85
+ eventType: _analytics.EVENT_TYPE.UI
86
+ })(tr);
87
+ return tr;
41
88
  }
42
89
  }];
43
90
  }
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.createPlugin = void 0;
7
+ var _safePlugin = require("@atlaskit/editor-common/safe-plugin");
8
+ var _actions = require("../actions");
9
+ var _pluginKey = require("./plugin-key");
10
+ var createPlugin = exports.createPlugin = function createPlugin() {
11
+ return new _safePlugin.SafePlugin({
12
+ state: {
13
+ init: function init() {
14
+ return {
15
+ isOpen: false
16
+ };
17
+ },
18
+ apply: function apply(tr, mediaInsertPluginState) {
19
+ var meta = tr.getMeta(_pluginKey.pluginKey);
20
+ if (meta) {
21
+ switch (meta.type) {
22
+ case _actions.ACTION_OPEN_POPUP:
23
+ return {
24
+ isOpen: true
25
+ };
26
+ case _actions.ACTION_CLOSE_POPUP:
27
+ return {
28
+ isOpen: false
29
+ };
30
+ default:
31
+ return mediaInsertPluginState;
32
+ }
33
+ } else {
34
+ return mediaInsertPluginState;
35
+ }
36
+ }
37
+ },
38
+ key: _pluginKey.pluginKey
39
+ });
40
+ };
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.pluginKey = void 0;
7
+ var _state = require("@atlaskit/editor-prosemirror/state");
8
+ var pluginKey = exports.pluginKey = new _state.PluginKey('mediaInsertPlugin');
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -89,118 +89,141 @@ function MediaFromURL(_ref) {
89
89
  };
90
90
  var _React$useState = _react.default.useState(placeholders[1]),
91
91
  _React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2),
92
- url = _React$useState2[0],
92
+ inputUrl = _React$useState2[0],
93
93
  setUrl = _React$useState2[1];
94
94
  var _React$useReducer = _react.default.useReducer(previewStateReducer, INITIAL_PREVIEW_STATE),
95
95
  _React$useReducer2 = (0, _slicedToArray2.default)(_React$useReducer, 2),
96
96
  previewState = _React$useReducer2[0],
97
97
  dispatch = _React$useReducer2[1];
98
+ var pasteFlag = _react.default.useRef(false);
98
99
  var _useAnalyticsEvents = (0, _useAnalyticsEvents2.useAnalyticsEvents)(dispatchAnalyticsEvent),
99
100
  onUploadAnalytics = _useAnalyticsEvents.onUploadAnalytics,
100
101
  onUploadSuccessAnalytics = _useAnalyticsEvents.onUploadSuccessAnalytics,
101
102
  onUploadFailureAnalytics = _useAnalyticsEvents.onUploadFailureAnalytics;
102
- var onURLChange = _react.default.useCallback(function (e) {
103
- setUrl(e.target.value);
104
- dispatch({
105
- type: 'reset'
106
- });
107
- }, []);
108
- var uploadExternalMedia = _react.default.useCallback( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
109
- var _yield$mediaProvider, uploadMediaClientConfig, uploadParams, mediaClient, collection, _yield$mediaClient$fi, uploadableFileUpfrontIds, dimensions, message;
110
- return _regenerator.default.wrap(function _callee$(_context) {
111
- while (1) switch (_context.prev = _context.next) {
112
- case 0:
113
- dispatch({
114
- type: 'loading'
115
- });
116
- _context.next = 3;
117
- return mediaProvider;
118
- case 3:
119
- _yield$mediaProvider = _context.sent;
120
- uploadMediaClientConfig = _yield$mediaProvider.uploadMediaClientConfig;
121
- uploadParams = _yield$mediaProvider.uploadParams;
122
- if (uploadMediaClientConfig) {
123
- _context.next = 8;
124
- break;
125
- }
126
- return _context.abrupt("return");
127
- case 8:
128
- mediaClient = (0, _mediaClientReact.getMediaClient)(uploadMediaClientConfig);
129
- collection = uploadParams === null || uploadParams === void 0 ? void 0 : uploadParams.collection;
130
- onUploadAnalytics();
131
- _context.prev = 11;
132
- _context.next = 14;
133
- return mediaClient.file.uploadExternal(url, collection);
134
- case 14:
135
- _yield$mediaClient$fi = _context.sent;
136
- uploadableFileUpfrontIds = _yield$mediaClient$fi.uploadableFileUpfrontIds;
137
- dimensions = _yield$mediaClient$fi.dimensions;
138
- onUploadSuccessAnalytics();
139
- dispatch({
140
- type: 'success',
141
- payload: {
142
- id: uploadableFileUpfrontIds.id,
143
- collection: collection,
144
- height: dimensions.height,
145
- width: dimensions.width,
146
- occurrenceKey: uploadableFileUpfrontIds.occurrenceKey
147
- }
148
- });
149
- _context.next = 24;
150
- break;
151
- case 21:
152
- _context.prev = 21;
153
- _context.t0 = _context["catch"](11);
154
- if (typeof _context.t0 === 'string' && _context.t0 === 'Could not download remote file') {
155
- // TODO: Make sure this gets good unit test coverage with the actual
156
- // media plugin. This hard coded error message could be changed at any
157
- // point and we need a unit test to break to stop people changing it.
158
- onUploadFailureAnalytics(_context.t0);
159
- dispatch({
160
- type: 'warning',
161
- warning: _context.t0,
162
- url: url
163
- });
164
- } else if (_context.t0 instanceof Error) {
165
- message = 'Image preview fetch failed';
166
- onUploadFailureAnalytics(message);
103
+ var uploadExternalMedia = _react.default.useCallback( /*#__PURE__*/function () {
104
+ var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(url) {
105
+ var _yield$mediaProvider, uploadMediaClientConfig, uploadParams, mediaClient, collection, _yield$mediaClient$fi, uploadableFileUpfrontIds, dimensions, message;
106
+ return _regenerator.default.wrap(function _callee$(_context) {
107
+ while (1) switch (_context.prev = _context.next) {
108
+ case 0:
167
109
  dispatch({
168
- type: 'error',
169
- error: message
110
+ type: 'loading'
170
111
  });
171
- } else {
172
- onUploadFailureAnalytics('Unknown error');
112
+ _context.next = 3;
113
+ return mediaProvider;
114
+ case 3:
115
+ _yield$mediaProvider = _context.sent;
116
+ uploadMediaClientConfig = _yield$mediaProvider.uploadMediaClientConfig;
117
+ uploadParams = _yield$mediaProvider.uploadParams;
118
+ if (uploadMediaClientConfig) {
119
+ _context.next = 8;
120
+ break;
121
+ }
122
+ return _context.abrupt("return");
123
+ case 8:
124
+ mediaClient = (0, _mediaClientReact.getMediaClient)(uploadMediaClientConfig);
125
+ collection = uploadParams === null || uploadParams === void 0 ? void 0 : uploadParams.collection;
126
+ onUploadAnalytics();
127
+ _context.prev = 11;
128
+ _context.next = 14;
129
+ return mediaClient.file.uploadExternal(url, collection);
130
+ case 14:
131
+ _yield$mediaClient$fi = _context.sent;
132
+ uploadableFileUpfrontIds = _yield$mediaClient$fi.uploadableFileUpfrontIds;
133
+ dimensions = _yield$mediaClient$fi.dimensions;
134
+ onUploadSuccessAnalytics();
173
135
  dispatch({
174
- type: 'error',
175
- error: 'Unknown error'
136
+ type: 'success',
137
+ payload: {
138
+ id: uploadableFileUpfrontIds.id,
139
+ collection: collection,
140
+ height: dimensions.height,
141
+ width: dimensions.width,
142
+ occurrenceKey: uploadableFileUpfrontIds.occurrenceKey
143
+ }
176
144
  });
177
- }
178
- case 24:
179
- case "end":
180
- return _context.stop();
181
- }
182
- }, _callee, null, [[11, 21]]);
183
- })), [mediaProvider, onUploadAnalytics, onUploadFailureAnalytics, onUploadSuccessAnalytics, url]);
145
+ _context.next = 24;
146
+ break;
147
+ case 21:
148
+ _context.prev = 21;
149
+ _context.t0 = _context["catch"](11);
150
+ if (typeof _context.t0 === 'string' && _context.t0 === 'Could not download remote file') {
151
+ // TODO: Make sure this gets good unit test coverage with the actual
152
+ // media plugin. This hard coded error message could be changed at any
153
+ // point and we need a unit test to break to stop people changing it.
154
+ onUploadFailureAnalytics(_context.t0);
155
+ dispatch({
156
+ type: 'warning',
157
+ warning: _context.t0,
158
+ url: inputUrl
159
+ });
160
+ } else if (_context.t0 instanceof Error) {
161
+ message = 'Image preview fetch failed';
162
+ onUploadFailureAnalytics(message);
163
+ dispatch({
164
+ type: 'error',
165
+ error: message
166
+ });
167
+ } else {
168
+ onUploadFailureAnalytics('Unknown error');
169
+ dispatch({
170
+ type: 'error',
171
+ error: 'Unknown error'
172
+ });
173
+ }
174
+ case 24:
175
+ case "end":
176
+ return _context.stop();
177
+ }
178
+ }, _callee, null, [[11, 21]]);
179
+ }));
180
+ return function (_x) {
181
+ return _ref2.apply(this, arguments);
182
+ };
183
+ }(), [mediaProvider, onUploadAnalytics, onUploadFailureAnalytics, onUploadSuccessAnalytics, inputUrl]);
184
+ var onURLChange = _react.default.useCallback(function (e) {
185
+ var url = e.target.value;
186
+ setUrl(url);
187
+ dispatch({
188
+ type: 'reset'
189
+ });
190
+ if (pasteFlag.current === true) {
191
+ pasteFlag.current = false;
192
+ uploadExternalMedia(url);
193
+ }
194
+ }, [uploadExternalMedia]);
195
+ var onPaste = _react.default.useCallback(function (e) {
196
+ // Note: this is a little weird, but the paste event will always be
197
+ // fired before the change event when pasting. We don't really want to
198
+ // duplicate logic by handling pastes separately to changes, so we're
199
+ // just noting paste occured to then be handled in the onURLChange fn
200
+ // above. The one exception to this is where paste inputs exactly what was
201
+ // already in the input, in which case we want to ignore it.
202
+ if (e.clipboardData.getData('text') !== inputUrl) {
203
+ pasteFlag.current = true;
204
+ }
205
+ }, [inputUrl]);
184
206
  var onInsertClick = _react.default.useCallback(function () {
185
207
  if (previewState.previewInfo) {
186
208
  return onInsert(previewState.previewInfo);
187
209
  }
188
210
  if (previewState.warning) {
189
- return onExternalInsert(url);
211
+ return onExternalInsert(inputUrl);
190
212
  }
191
- }, [onExternalInsert, onInsert, previewState.previewInfo, previewState.warning, url]);
213
+ }, [onExternalInsert, onInsert, previewState.previewInfo, previewState.warning, inputUrl]);
192
214
  return /*#__PURE__*/_react.default.createElement("form", {
193
215
  onSubmit: function onSubmit(e) {
194
216
  e.preventDefault();
195
- uploadExternalMedia();
217
+ uploadExternalMedia(inputUrl);
196
218
  }
197
219
  }, /*#__PURE__*/_react.default.createElement(_primitives.Stack, {
198
220
  space: "space.150"
199
221
  }, /*#__PURE__*/_react.default.createElement(_textfield.default, {
200
222
  autoFocus: true,
201
- value: url,
223
+ value: inputUrl,
202
224
  placeholder: strings.pasteLinkToUpload,
203
- onChange: onURLChange
225
+ onChange: onURLChange,
226
+ onPaste: onPaste
204
227
  }), previewState.previewInfo && /*#__PURE__*/_react.default.createElement(_primitives.Inline, {
205
228
  alignInline: "center",
206
229
  alignBlock: "center",
@@ -220,7 +243,7 @@ function MediaFromURL(_ref) {
220
243
  }, /*#__PURE__*/_react.default.createElement(_new.default, {
221
244
  type: "submit",
222
245
  isLoading: previewState.isLoading,
223
- isDisabled: !url,
246
+ isDisabled: !inputUrl,
224
247
  iconBefore: _filePreview.default
225
248
  }, strings.loadPreview)), /*#__PURE__*/_react.default.createElement(_primitives.Box, {
226
249
  xcss: ButtonGroupStyles
@@ -0,0 +1,24 @@
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.MediaInsertContent = void 0;
9
+ var _react = _interopRequireDefault(require("react"));
10
+ var _new = _interopRequireDefault(require("@atlaskit/button/new"));
11
+ var _primitives = require("@atlaskit/primitives");
12
+ var _tabs = _interopRequireWildcard(require("@atlaskit/tabs"));
13
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
14
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
15
+ var MediaInsertContent = exports.MediaInsertContent = function MediaInsertContent() {
16
+ return /*#__PURE__*/_react.default.createElement(_tabs.default, {
17
+ id: "media-insert-tab-navigation"
18
+ }, /*#__PURE__*/_react.default.createElement(_primitives.Box, {
19
+ paddingBlockEnd: "space.150"
20
+ }, /*#__PURE__*/_react.default.createElement(_tabs.TabList, null, /*#__PURE__*/_react.default.createElement(_tabs.Tab, null, /*#__PURE__*/_react.default.createElement(_new.default, {
21
+ autoFocus: true,
22
+ appearance: "subtle"
23
+ }, "Link")))), /*#__PURE__*/_react.default.createElement(_tabs.TabPanel, null, /*#__PURE__*/_react.default.createElement("p", null, "InsertLinkPanel here")));
24
+ };
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.MediaInsertPicker = void 0;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _analytics = require("@atlaskit/editor-common/analytics");
10
+ var _hooks = require("@atlaskit/editor-common/hooks");
11
+ var _ui = require("@atlaskit/editor-common/ui");
12
+ var _utils = require("@atlaskit/editor-prosemirror/utils");
13
+ var _editorSharedStyles = require("@atlaskit/editor-shared-styles");
14
+ var _MediaInsertContent = require("./MediaInsertContent");
15
+ var _MediaInsertWrapper = require("./MediaInsertWrapper");
16
+ var PopupWithListeners = (0, _ui.withOuterListeners)(_ui.Popup);
17
+ var getDomRefFromSelection = function getDomRefFromSelection(view, dispatchAnalyticsEvent) {
18
+ try {
19
+ var domRef = (0, _utils.findDomRefAtPos)(view.state.selection.from, view.domAtPos.bind(view));
20
+ if (domRef instanceof HTMLElement) {
21
+ return domRef;
22
+ } else {
23
+ throw new Error('Invalid DOM reference');
24
+ }
25
+ } catch (error) {
26
+ if (dispatchAnalyticsEvent) {
27
+ var payload = {
28
+ action: _analytics.ACTION.ERRORED,
29
+ actionSubject: _analytics.ACTION_SUBJECT.PICKER,
30
+ actionSubjectId: _analytics.ACTION_SUBJECT_ID.PICKER_MEDIA,
31
+ eventType: _analytics.EVENT_TYPE.OPERATIONAL,
32
+ attributes: {
33
+ error: 'Error getting DOM reference from selection'
34
+ }
35
+ };
36
+ dispatchAnalyticsEvent(payload);
37
+ }
38
+ }
39
+ };
40
+ var MediaInsertPicker = exports.MediaInsertPicker = function MediaInsertPicker(_ref) {
41
+ var api = _ref.api,
42
+ editorView = _ref.editorView,
43
+ dispatchAnalyticsEvent = _ref.dispatchAnalyticsEvent,
44
+ popupsMountPoint = _ref.popupsMountPoint,
45
+ popupsBoundariesElement = _ref.popupsBoundariesElement,
46
+ popupsScrollableElement = _ref.popupsScrollableElement,
47
+ closeMediaInsertPicker = _ref.closeMediaInsertPicker;
48
+ var targetRef = getDomRefFromSelection(editorView, dispatchAnalyticsEvent);
49
+ var _useSharedPluginState = (0, _hooks.useSharedPluginState)(api, ['mediaInsert']),
50
+ mediaInsertState = _useSharedPluginState.mediaInsertState;
51
+ if (!mediaInsertState || !mediaInsertState.isOpen) {
52
+ return null;
53
+ }
54
+ var handleClose = function handleClose(exitMethod) {
55
+ return function (event) {
56
+ event.preventDefault();
57
+ if (dispatchAnalyticsEvent) {
58
+ var payload = {
59
+ action: _analytics.ACTION.CLOSED,
60
+ actionSubject: _analytics.ACTION_SUBJECT.PICKER,
61
+ actionSubjectId: _analytics.ACTION_SUBJECT_ID.PICKER_MEDIA,
62
+ eventType: _analytics.EVENT_TYPE.UI,
63
+ attributes: {
64
+ exitMethod: exitMethod
65
+ }
66
+ };
67
+ dispatchAnalyticsEvent(payload);
68
+ }
69
+ closeMediaInsertPicker();
70
+ };
71
+ };
72
+ return /*#__PURE__*/_react.default.createElement(PopupWithListeners
73
+ // TODO: i18n
74
+ , {
75
+ ariaLabel: 'Media Insert',
76
+ offset: [0, 12],
77
+ target: targetRef,
78
+ zIndex: _editorSharedStyles.akEditorFloatingDialogZIndex,
79
+ mountTo: popupsMountPoint,
80
+ boundariesElement: popupsBoundariesElement,
81
+ handleClickOutside: handleClose(_analytics.INPUT_METHOD.MOUSE),
82
+ handleEscapeKeydown: handleClose(_analytics.INPUT_METHOD.KEYBOARD),
83
+ scrollableElement: popupsScrollableElement,
84
+ focusTrap: true
85
+ }, /*#__PURE__*/_react.default.createElement(_MediaInsertWrapper.MediaInsertWrapper, null, /*#__PURE__*/_react.default.createElement(_MediaInsertContent.MediaInsertContent, null)));
86
+ };
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.MediaInsertWrapper = void 0;
8
+ var _react = _interopRequireDefault(require("react"));
9
+ var _primitives = require("@atlaskit/primitives");
10
+ var styles = (0, _primitives.xcss)({
11
+ boxShadow: 'elevation.shadow.overflow',
12
+ width: '340px',
13
+ padding: 'space.200',
14
+ borderRadius: 'border.radius'
15
+ });
16
+ var MediaInsertWrapper = exports.MediaInsertWrapper = function MediaInsertWrapper(_ref) {
17
+ var children = _ref.children;
18
+ return /*#__PURE__*/_react.default.createElement(_primitives.Box, {
19
+ xcss: styles
20
+ }, children);
21
+ };
@@ -0,0 +1,21 @@
1
+ import { pluginKey } from './pm-plugins/plugin-key';
2
+ export const ACTION_OPEN_POPUP = 'OPEN_POPUP';
3
+ export const ACTION_CLOSE_POPUP = 'CLOSE_POPUP';
4
+ const setPopupMeta = ({
5
+ type,
6
+ tr
7
+ }) => tr.setMeta(pluginKey, {
8
+ type
9
+ });
10
+ export const showMediaInsertPopup = tr => {
11
+ return setPopupMeta({
12
+ type: ACTION_OPEN_POPUP,
13
+ tr
14
+ });
15
+ };
16
+ export const closeMediaInsertPicker = tr => {
17
+ return setPopupMeta({
18
+ type: ACTION_CLOSE_POPUP,
19
+ tr
20
+ });
21
+ };