@atlaskit/editor-common 88.11.0 → 88.12.1

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 +26 -0
  2. package/afm-post-office/tsconfig.json +3 -0
  3. package/dist/cjs/analytics/types/enums.js +1 -0
  4. package/dist/cjs/insert/index.js +27 -1
  5. package/dist/cjs/media-single/CommentBadgeNext.js +61 -0
  6. package/dist/cjs/media-single/ExternalImageBadge.js +5 -48
  7. package/dist/cjs/media-single/MediaBadges.js +76 -0
  8. package/dist/cjs/media-single/index.js +15 -1
  9. package/dist/cjs/messages/insert-block.js +10 -0
  10. package/dist/cjs/monitoring/error.js +1 -1
  11. package/dist/cjs/ui/DropList/index.js +1 -1
  12. package/dist/cjs/ui/MediaSingle/styled.js +1 -1
  13. package/dist/es2019/analytics/types/enums.js +1 -0
  14. package/dist/es2019/insert/index.js +30 -1
  15. package/dist/es2019/media-single/CommentBadgeNext.js +51 -0
  16. package/dist/es2019/media-single/ExternalImageBadge.js +5 -40
  17. package/dist/es2019/media-single/MediaBadges.js +63 -0
  18. package/dist/es2019/media-single/index.js +3 -1
  19. package/dist/es2019/messages/insert-block.js +10 -0
  20. package/dist/es2019/monitoring/error.js +1 -1
  21. package/dist/es2019/ui/DropList/index.js +1 -1
  22. package/dist/es2019/ui/MediaSingle/styled.js +2 -1
  23. package/dist/esm/analytics/types/enums.js +1 -0
  24. package/dist/esm/insert/index.js +27 -1
  25. package/dist/esm/media-single/CommentBadgeNext.js +51 -0
  26. package/dist/esm/media-single/ExternalImageBadge.js +5 -45
  27. package/dist/esm/media-single/MediaBadges.js +66 -0
  28. package/dist/esm/media-single/index.js +3 -1
  29. package/dist/esm/messages/insert-block.js +10 -0
  30. package/dist/esm/monitoring/error.js +1 -1
  31. package/dist/esm/ui/DropList/index.js +1 -1
  32. package/dist/esm/ui/MediaSingle/styled.js +1 -1
  33. package/dist/types/analytics/types/enums.d.ts +1 -0
  34. package/dist/types/card/types.d.ts +2 -2
  35. package/dist/types/media-single/CommentBadgeNext.d.ts +11 -0
  36. package/dist/types/media-single/ExternalImageBadge.d.ts +2 -5
  37. package/dist/types/media-single/MediaBadges.d.ts +12 -0
  38. package/dist/types/media-single/index.d.ts +2 -0
  39. package/dist/types/messages/insert-block.d.ts +10 -0
  40. package/dist/types-ts4.5/analytics/types/enums.d.ts +1 -0
  41. package/dist/types-ts4.5/card/types.d.ts +2 -2
  42. package/dist/types-ts4.5/media-single/CommentBadgeNext.d.ts +11 -0
  43. package/dist/types-ts4.5/media-single/ExternalImageBadge.d.ts +2 -5
  44. package/dist/types-ts4.5/media-single/MediaBadges.d.ts +12 -0
  45. package/dist/types-ts4.5/media-single/index.d.ts +2 -0
  46. package/dist/types-ts4.5/messages/insert-block.d.ts +10 -0
  47. package/package.json +2 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,31 @@
1
1
  # @atlaskit/editor-common
2
2
 
3
+ ## 88.12.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [`1269ffa635367`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/1269ffa635367) -
8
+ Cleanup FF platform_editor_get_card_provider_from_config
9
+
10
+ ## 88.12.0
11
+
12
+ ### Minor Changes
13
+
14
+ - [#137821](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/137821)
15
+ [`e26174c7d02a6`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/e26174c7d02a6) -
16
+ ED-24631 Refactor how ExternalImageBadge and CommentBadge are rendered
17
+
18
+ ### Patch Changes
19
+
20
+ - [#138136](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/138136)
21
+ [`35938ecf46ba7`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/35938ecf46ba7) -
22
+ [ED-24755] Implement insert functionality of element templates and fire document inserted event
23
+ with template IDs
24
+ - [#138270](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/138270)
25
+ [`0acb3673d32d9`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/0acb3673d32d9) -
26
+ Add insert menu to right rail for experiment
27
+ - Updated dependencies
28
+
3
29
  ## 88.11.0
4
30
 
5
31
  ### Minor Changes
@@ -41,6 +41,9 @@
41
41
  {
42
42
  "path": "../../../design-system/code/afm-post-office/tsconfig.json"
43
43
  },
44
+ {
45
+ "path": "../../../monorepo-tooling/codemod-utils/afm-post-office/tsconfig.json"
46
+ },
44
47
  {
45
48
  "path": "../../custom-steps/afm-post-office/tsconfig.json"
46
49
  },
@@ -169,6 +169,7 @@ var INPUT_METHOD = exports.INPUT_METHOD = /*#__PURE__*/function (INPUT_METHOD) {
169
169
  INPUT_METHOD["FLOATING_TB"] = "floatingToolbar";
170
170
  INPUT_METHOD["FORMATTING"] = "autoformatting";
171
171
  INPUT_METHOD["INSERT_MENU"] = "insertMenu";
172
+ INPUT_METHOD["INSERT_MENU_RIGHT_RAIL"] = "insertMenuRightRail";
172
173
  INPUT_METHOD["KEYBOARD"] = "keyboard";
173
174
  INPUT_METHOD["MEDIA_PICKER"] = "mediaPicker";
174
175
  INPUT_METHOD["MACRO_BROWSER"] = "macroBrowser";
@@ -246,6 +246,20 @@ var insertSelectedItem = exports.insertSelectedItem = function insertSelectedIte
246
246
  */
247
247
  } else if (node instanceof _model.Node && node.isInline || isInputFragment) {
248
248
  var fragment = isInputFragment ? node : _model.Fragment.fromArray([node, state.schema.text(' ')]);
249
+
250
+ // For platform_editor_element_level_templates experiment only
251
+ // clean up ticket ED-24873
252
+ // @ts-ignore
253
+ if (opts.isTemplate) {
254
+ return insertTemplateFragment({
255
+ fragment: fragment,
256
+ tr: tr,
257
+ position: {
258
+ start: start,
259
+ end: start
260
+ }
261
+ });
262
+ }
249
263
  tr = tr.replaceWith(start, start, fragment);
250
264
  if (opts.selectInlineNode) {
251
265
  // Select inserted node
@@ -291,4 +305,16 @@ function contentAllowedInCodeBlock(state) {
291
305
  return isAllowedChild = node.type === state.schema.nodes.listItem || node.type === state.schema.nodes.bulletList || node.type === state.schema.nodes.orderedList || node.type === state.schema.nodes.paragraph || node.isInline || node.type === state.schema.nodes.panel || node.isText;
292
306
  });
293
307
  return isAllowedChild;
294
- }
308
+ }
309
+
310
+ // For platform_editor_element_level_templates experiment only
311
+ // clean up ticket ED-24873
312
+ var insertTemplateFragment = function insertTemplateFragment(_ref3) {
313
+ var fragment = _ref3.fragment,
314
+ tr = _ref3.tr,
315
+ position = _ref3.position;
316
+ var start = position.start;
317
+ var trWithInsert = (0, _utils.safeInsert)(fragment, start)(tr);
318
+ tr.setSelection(trWithInsert.selection);
319
+ return tr;
320
+ };
@@ -0,0 +1,61 @@
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.CommentBadgeNext = void 0;
9
+ var _react = _interopRequireWildcard(require("react"));
10
+ var _reactIntlNext = require("react-intl-next");
11
+ var _comment = _interopRequireDefault(require("@atlaskit/icon/glyph/comment"));
12
+ var _primitives = require("@atlaskit/primitives");
13
+ var _tooltip = _interopRequireDefault(require("@atlaskit/tooltip"));
14
+ var _media = require("../media");
15
+ 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); }
16
+ 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; }
17
+ var baseStyles = (0, _primitives.xcss)({
18
+ borderRadius: 'border.radius'
19
+ });
20
+ var smallBadgeStyles = (0, _primitives.xcss)({
21
+ height: 'space.200',
22
+ width: 'space.200'
23
+ });
24
+ var mediumBadgeStyles = (0, _primitives.xcss)({
25
+ height: 'space.300',
26
+ width: 'space.300'
27
+ });
28
+ var CommentBadgeNext = exports.CommentBadgeNext = function CommentBadgeNext(_ref) {
29
+ var _ref$status = _ref.status,
30
+ status = _ref$status === void 0 ? 'default' : _ref$status,
31
+ onClick = _ref.onClick,
32
+ onMouseEnter = _ref.onMouseEnter,
33
+ onMouseLeave = _ref.onMouseLeave,
34
+ badgeSize = _ref.badgeSize;
35
+ var intl = (0, _reactIntlNext.useIntl)();
36
+ var title = intl.formatMessage(_media.commentMessages.viewCommentsOnMedia);
37
+ var colourToken = (0, _react.useMemo)(function () {
38
+ switch (status) {
39
+ case 'active':
40
+ return 'color.background.accent.yellow.subtlest.pressed';
41
+ case 'entered':
42
+ return 'color.background.accent.yellow.subtlest.hovered';
43
+ default:
44
+ return 'color.background.accent.yellow.subtlest';
45
+ }
46
+ }, [status]);
47
+ return /*#__PURE__*/_react.default.createElement(_tooltip.default, {
48
+ position: "top",
49
+ content: title
50
+ }, /*#__PURE__*/_react.default.createElement(_primitives.Pressable, {
51
+ xcss: [baseStyles, badgeSize === 'medium' ? mediumBadgeStyles : smallBadgeStyles],
52
+ padding: "space.0",
53
+ onClick: onClick,
54
+ onMouseEnter: onMouseEnter,
55
+ onMouseLeave: onMouseLeave,
56
+ backgroundColor: colourToken
57
+ }, /*#__PURE__*/_react.default.createElement(_comment.default, {
58
+ label: title,
59
+ size: badgeSize
60
+ })));
61
+ };
@@ -1,76 +1,33 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- var _typeof = require("@babel/runtime/helpers/typeof");
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.ExternalImageBadge = void 0;
9
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
- var _react = _interopRequireWildcard(require("react"));
11
- var _debounce = _interopRequireDefault(require("lodash/debounce"));
8
+ var _react = _interopRequireDefault(require("react"));
12
9
  var _reactIntlNext = require("react-intl-next");
13
10
  var _info = _interopRequireDefault(require("@atlaskit/icon/glyph/info"));
14
11
  var _primitives = require("@atlaskit/primitives");
15
12
  var _tooltip = _interopRequireDefault(require("@atlaskit/tooltip"));
16
13
  var _media = require("../media");
17
- var _CommentBadge = require("./CommentBadge");
18
- 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); }
19
- 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; }
20
14
  var baseStyles = (0, _primitives.xcss)({
21
- position: 'absolute',
22
- top: 'space.025',
23
15
  borderRadius: 'border.radius',
24
16
  backgroundColor: 'elevation.surface',
25
- zIndex: 'tooltip',
26
17
  lineHeight: "var(--ds-space-200, 16px)",
27
- right: 'var(--right-offset)',
28
18
  cursor: 'pointer'
29
19
  });
30
20
  var ExternalImageBadge = exports.ExternalImageBadge = function ExternalImageBadge(_ref) {
31
- var mediaWidth = _ref.mediaWidth,
32
- mediaHeight = _ref.mediaHeight,
33
- _ref$commentBadgeRigh = _ref.commentBadgeRightOffset,
34
- commentBadgeRightOffset = _ref$commentBadgeRigh === void 0 ? 0 : _ref$commentBadgeRigh,
35
- mediaElement = _ref.mediaElement;
21
+ var badgeSize = _ref.badgeSize;
36
22
  var intl = (0, _reactIntlNext.useIntl)();
37
23
  var message = intl.formatMessage(_media.externalMediaMessages.externalMediaFile);
38
- var _useState = (0, _react.useState)((0, _CommentBadge.getBadgeSize)(mediaWidth, mediaHeight)),
39
- _useState2 = (0, _slicedToArray2.default)(_useState, 2),
40
- badgeSize = _useState2[0],
41
- setBadgeSize = _useState2[1];
42
- // detect resize of media element to adjust badge size
43
- // will combine with the comment badge resize observer when refactoring in the future to avoid multiple resize observers
44
- (0, _react.useEffect)(function () {
45
- var observer = new ResizeObserver((0, _debounce.default)(function (entries) {
46
- var _entries = (0, _slicedToArray2.default)(entries, 1),
47
- entry = _entries[0];
48
- var _entry$contentRect = entry.contentRect,
49
- width = _entry$contentRect.width,
50
- height = _entry$contentRect.height;
51
- setBadgeSize((0, _CommentBadge.getBadgeSize)(width, height));
52
- }));
53
- if (mediaElement) {
54
- observer.observe(mediaElement);
55
- }
56
- return function () {
57
- observer.disconnect();
58
- };
59
- }, [mediaElement]);
60
- var baseRightOffset = badgeSize === 'medium' ? 4 : 2;
61
- var rightOffset = baseRightOffset + commentBadgeRightOffset;
62
- return /*#__PURE__*/_react.default.createElement(_primitives.Box
63
- // eslint-disable-next-line @atlaskit/ui-styling-standard/enforce-style-prop
64
- , {
65
- style: {
66
- '--right-offset': "".concat(rightOffset, "px")
67
- },
24
+ return /*#__PURE__*/_react.default.createElement(_primitives.Box, {
68
25
  padding: badgeSize === 'medium' ? 'space.050' : 'space.0',
69
- "data-external-image-badge": "true",
70
26
  xcss: baseStyles,
71
27
  tabIndex: 0
72
28
  }, /*#__PURE__*/_react.default.createElement(_tooltip.default, {
73
- content: message
29
+ content: message,
30
+ position: "top"
74
31
  }, /*#__PURE__*/_react.default.createElement(_info.default, {
75
32
  size: "small",
76
33
  label: message
@@ -0,0 +1,76 @@
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.MediaBadges = void 0;
9
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
+ var _react = _interopRequireWildcard(require("react"));
11
+ var _debounce = _interopRequireDefault(require("lodash/debounce"));
12
+ var _primitives = require("@atlaskit/primitives");
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 containerStyles = (0, _primitives.xcss)({
16
+ display: 'flex',
17
+ position: 'absolute',
18
+ top: 'space.0',
19
+ right: 'space.0',
20
+ lineHeight: "var(--ds-space-200, 16px)",
21
+ gap: 'space.025',
22
+ zIndex: 'card',
23
+ height: 'fit-content',
24
+ width: 'fit-content',
25
+ margin: 'space.075'
26
+ });
27
+ var resizeOffsetStyles = (0, _primitives.xcss)({
28
+ right: 'space.150'
29
+ });
30
+ var smallBadgeStyles = (0, _primitives.xcss)({
31
+ margin: 'space.025'
32
+ });
33
+ var getBadgeSize = function getBadgeSize(width, height) {
34
+ // width is the original width of image, not resized or currently rendered to user. Defaulting to medium for now
35
+ return width && width < 70 || height && height < 70 ? 'small' : 'medium';
36
+ };
37
+ var MediaBadges = exports.MediaBadges = function MediaBadges(_ref) {
38
+ var children = _ref.children,
39
+ mediaElement = _ref.mediaElement,
40
+ mediaWidth = _ref.mediaWidth,
41
+ mediaHeight = _ref.mediaHeight,
42
+ extendedResizeOffset = _ref.extendedResizeOffset;
43
+ var _useState = (0, _react.useState)(getBadgeSize(mediaWidth, mediaHeight)),
44
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
45
+ badgeSize = _useState2[0],
46
+ setBadgeSize = _useState2[1];
47
+ (0, _react.useEffect)(function () {
48
+ var observer = new ResizeObserver((0, _debounce.default)(function (entries) {
49
+ var _entries = (0, _slicedToArray2.default)(entries, 1),
50
+ entry = _entries[0];
51
+ var _entry$contentRect = entry.contentRect,
52
+ width = _entry$contentRect.width,
53
+ height = _entry$contentRect.height;
54
+ setBadgeSize(getBadgeSize(width, height));
55
+ }));
56
+ if (mediaElement) {
57
+ observer.observe(mediaElement);
58
+ }
59
+ return function () {
60
+ observer.disconnect();
61
+ };
62
+ }, [mediaElement]);
63
+ if (typeof children === 'function') {
64
+ children = children({
65
+ badgeSize: badgeSize
66
+ });
67
+ }
68
+ if (!mediaElement || _react.default.Children.count(children) === 0) {
69
+ return null;
70
+ }
71
+ return /*#__PURE__*/_react.default.createElement(_primitives.Box, {
72
+ testId: "media-badges",
73
+ "data-media-badges": "true",
74
+ xcss: [containerStyles, extendedResizeOffset && resizeOffsetStyles, badgeSize === 'small' && smallBadgeStyles]
75
+ }, children);
76
+ };
@@ -15,6 +15,12 @@ Object.defineProperty(exports, "CommentBadge", {
15
15
  return _CommentBadge.CommentBadge;
16
16
  }
17
17
  });
18
+ Object.defineProperty(exports, "CommentBadgeNext", {
19
+ enumerable: true,
20
+ get: function get() {
21
+ return _CommentBadgeNext.CommentBadgeNext;
22
+ }
23
+ });
18
24
  Object.defineProperty(exports, "DEFAULT_IMAGE_HEIGHT", {
19
25
  enumerable: true,
20
26
  get: function get() {
@@ -69,6 +75,12 @@ Object.defineProperty(exports, "MEDIA_SINGLE_VIDEO_MIN_PIXEL_WIDTH", {
69
75
  return _constants.MEDIA_SINGLE_VIDEO_MIN_PIXEL_WIDTH;
70
76
  }
71
77
  });
78
+ Object.defineProperty(exports, "MediaBadges", {
79
+ enumerable: true,
80
+ get: function get() {
81
+ return _MediaBadges.MediaBadges;
82
+ }
83
+ });
72
84
  Object.defineProperty(exports, "MediaSingleLayout", {
73
85
  enumerable: true,
74
86
  get: function get() {
@@ -144,4 +156,6 @@ Object.defineProperty(exports, "wrappedLayouts", {
144
156
  var _constants = require("./constants");
145
157
  var _utils = require("./utils");
146
158
  var _CommentBadge = require("./CommentBadge");
147
- var _ExternalImageBadge = require("./ExternalImageBadge");
159
+ var _CommentBadgeNext = require("./CommentBadgeNext");
160
+ var _ExternalImageBadge = require("./ExternalImageBadge");
161
+ var _MediaBadges = require("./MediaBadges");
@@ -16,6 +16,11 @@ var toolbarInsertBlockMessages = exports.toolbarInsertBlockMessages = (0, _react
16
16
  defaultMessage: 'Create and assign action items',
17
17
  description: ''
18
18
  },
19
+ closeInsertRightRail: {
20
+ id: 'fabric.editor.insertRightRail.close',
21
+ defaultMessage: 'Close',
22
+ description: 'Close button label'
23
+ },
19
24
  link: {
20
25
  id: 'fabric.editor.link',
21
26
  defaultMessage: 'Link',
@@ -36,6 +41,11 @@ var toolbarInsertBlockMessages = exports.toolbarInsertBlockMessages = (0, _react
36
41
  defaultMessage: 'Add image, video, or file',
37
42
  description: 'Insert one or more files, videos or images'
38
43
  },
44
+ insertRightRailTitle: {
45
+ id: 'fabric.editor.insertRightRail.title',
46
+ defaultMessage: 'Insert',
47
+ description: 'Insert a node into the document'
48
+ },
39
49
  insertMediaFromUrl: {
40
50
  id: 'fabric.editor.insertMediaFromUrl',
41
51
  defaultMessage: 'Image from link',
@@ -17,7 +17,7 @@ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return
17
17
  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; }
18
18
  var SENTRY_DSN = 'https://0b10c8e02fb44d8796c047b102c9bee8@o55978.ingest.sentry.io/4505129224110080';
19
19
  var packageName = 'editor-common'; // Sentry doesn't accept '/' in its releases https://docs.sentry.io/platforms/javascript/configuration/releases/
20
- var packageVersion = "88.11.0";
20
+ var packageVersion = "88.12.1";
21
21
  var sanitiseSentryEvents = function sanitiseSentryEvents(data, _hint) {
22
22
  // Remove URL as it has UGC
23
23
  // TODO: Sanitise the URL instead of just removing it
@@ -25,7 +25,7 @@ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.
25
25
  * @jsx jsx
26
26
  */ // eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766
27
27
  var packageName = "@atlaskit/editor-common";
28
- var packageVersion = "88.11.0";
28
+ var packageVersion = "88.12.1";
29
29
  var halfFocusRing = 1;
30
30
  var dropOffset = '0, 8';
31
31
  var DropList = /*#__PURE__*/function (_Component) {
@@ -211,7 +211,7 @@ var RenderFallbackContainer = function RenderFallbackContainer(_ref2) {
211
211
 
212
212
  // eslint-disable-next-line @atlaskit/design-system/no-css-tagged-template-expression -- Needs manual remediation
213
213
  var mediaWrapperStyle = exports.mediaWrapperStyle = function mediaWrapperStyle(props) {
214
- return (0, _react2.css)(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2.default)(["\n\tposition: relative;\n\n\t", "\n\n\t/* Editor */\n & > figure {\n\t\tposition: ", ";\n\t\theight: 100%;\n\t\twidth: 100%;\n\t}\n\n\t// Comments on media project adds comment badge as child of the media wrapper,\n\t// thus we need to exclude it so that style is applied to intended div\n\t& > div:not([data-comment-badge='true'], [data-external-image-badge='true']) {\n\t\tposition: ", ";\n\t\theight: 100%;\n\t\twidth: 100%;\n\t}\n\n\t& * [data-mark-annotation-type='inlineComment'] {\n\t\twidth: 100%;\n\t\theight: 100%;\n\t}\n\n\t&[data-node-type='embedCard'] > div {\n\t\twidth: 100%;\n\t}\n\n\t/* Renderer */\n\t[data-node-type='media'] {\n\t\tposition: static !important;\n\n\t\t> div {\n\t\t\tposition: absolute;\n\t\t\theight: 100%;\n\t\t}\n\t}\n"])), RenderFallbackContainer(props), props.hasFallbackContainer ? 'absolute' : 'relative', props.hasFallbackContainer ? 'absolute' : 'relative');
214
+ return (0, _react2.css)(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2.default)(["\n\tposition: relative;\n\n\t", "\n\n\t/* Editor */\n & > figure {\n\t\tposition: ", ";\n\t\theight: 100%;\n\t\twidth: 100%;\n\t}\n\n\t// Comments on media project adds comment badge as child of the media wrapper,\n\t// thus we need to exclude it so that style is applied to intended div\n\t// remove [data-comment-badge='true'] when ff platform_editor_insert_media_plugin_phase_one is cleaned up\n\t& > div:not([data-comment-badge='true'], [data-media-badges='true']) {\n\t\tposition: ", ";\n\t\theight: 100%;\n\t\twidth: 100%;\n\t}\n\n\t& * [data-mark-annotation-type='inlineComment'] {\n\t\twidth: 100%;\n\t\theight: 100%;\n\t}\n\n\t&[data-node-type='embedCard'] > div {\n\t\twidth: 100%;\n\t}\n\n\t/* Renderer */\n\t[data-node-type='media'] {\n\t\tposition: static !important;\n\n\t\t> div {\n\t\t\tposition: absolute;\n\t\t\theight: 100%;\n\t\t}\n\t}\n"])), RenderFallbackContainer(props), props.hasFallbackContainer ? 'absolute' : 'relative', props.hasFallbackContainer ? 'absolute' : 'relative');
215
215
  };
216
216
  var MediaWrapper = exports.MediaWrapper = function MediaWrapper(_ref3) {
217
217
  var children = _ref3.children,
@@ -163,6 +163,7 @@ export let INPUT_METHOD = /*#__PURE__*/function (INPUT_METHOD) {
163
163
  INPUT_METHOD["FLOATING_TB"] = "floatingToolbar";
164
164
  INPUT_METHOD["FORMATTING"] = "autoformatting";
165
165
  INPUT_METHOD["INSERT_MENU"] = "insertMenu";
166
+ INPUT_METHOD["INSERT_MENU_RIGHT_RAIL"] = "insertMenuRightRail";
166
167
  INPUT_METHOD["KEYBOARD"] = "keyboard";
167
168
  INPUT_METHOD["MEDIA_PICKER"] = "mediaPicker";
168
169
  INPUT_METHOD["MACRO_BROWSER"] = "macroBrowser";
@@ -239,6 +239,20 @@ export const insertSelectedItem = (maybeNode, opts = {}) => (state, tr, start) =
239
239
  */
240
240
  } else if (node instanceof Node && node.isInline || isInputFragment) {
241
241
  const fragment = isInputFragment ? node : Fragment.fromArray([node, state.schema.text(' ')]);
242
+
243
+ // For platform_editor_element_level_templates experiment only
244
+ // clean up ticket ED-24873
245
+ // @ts-ignore
246
+ if (opts.isTemplate) {
247
+ return insertTemplateFragment({
248
+ fragment,
249
+ tr,
250
+ position: {
251
+ start,
252
+ end: start
253
+ }
254
+ });
255
+ }
242
256
  tr = tr.replaceWith(start, start, fragment);
243
257
  if (opts.selectInlineNode) {
244
258
  // Select inserted node
@@ -285,4 +299,19 @@ export function contentAllowedInCodeBlock(state) {
285
299
  return isAllowedChild = node.type === state.schema.nodes.listItem || node.type === state.schema.nodes.bulletList || node.type === state.schema.nodes.orderedList || node.type === state.schema.nodes.paragraph || node.isInline || node.type === state.schema.nodes.panel || node.isText;
286
300
  });
287
301
  return isAllowedChild;
288
- }
302
+ }
303
+
304
+ // For platform_editor_element_level_templates experiment only
305
+ // clean up ticket ED-24873
306
+ const insertTemplateFragment = ({
307
+ fragment,
308
+ tr,
309
+ position
310
+ }) => {
311
+ const {
312
+ start
313
+ } = position;
314
+ const trWithInsert = pmSafeInsert(fragment, start)(tr);
315
+ tr.setSelection(trWithInsert.selection);
316
+ return tr;
317
+ };
@@ -0,0 +1,51 @@
1
+ import React, { useMemo } from 'react';
2
+ import { useIntl } from 'react-intl-next';
3
+ import CommentIcon from '@atlaskit/icon/glyph/comment';
4
+ import { Pressable, xcss } from '@atlaskit/primitives';
5
+ import Tooltip from '@atlaskit/tooltip';
6
+ import { commentMessages as messages } from '../media';
7
+ const baseStyles = xcss({
8
+ borderRadius: 'border.radius'
9
+ });
10
+ const smallBadgeStyles = xcss({
11
+ height: 'space.200',
12
+ width: 'space.200'
13
+ });
14
+ const mediumBadgeStyles = xcss({
15
+ height: 'space.300',
16
+ width: 'space.300'
17
+ });
18
+ export const CommentBadgeNext = ({
19
+ status = 'default',
20
+ onClick,
21
+ onMouseEnter,
22
+ onMouseLeave,
23
+ badgeSize
24
+ }) => {
25
+ const intl = useIntl();
26
+ const title = intl.formatMessage(messages.viewCommentsOnMedia);
27
+ const colourToken = useMemo(() => {
28
+ switch (status) {
29
+ case 'active':
30
+ return 'color.background.accent.yellow.subtlest.pressed';
31
+ case 'entered':
32
+ return 'color.background.accent.yellow.subtlest.hovered';
33
+ default:
34
+ return 'color.background.accent.yellow.subtlest';
35
+ }
36
+ }, [status]);
37
+ return /*#__PURE__*/React.createElement(Tooltip, {
38
+ position: "top",
39
+ content: title
40
+ }, /*#__PURE__*/React.createElement(Pressable, {
41
+ xcss: [baseStyles, badgeSize === 'medium' ? mediumBadgeStyles : smallBadgeStyles],
42
+ padding: "space.0",
43
+ onClick: onClick,
44
+ onMouseEnter: onMouseEnter,
45
+ onMouseLeave: onMouseLeave,
46
+ backgroundColor: colourToken
47
+ }, /*#__PURE__*/React.createElement(CommentIcon, {
48
+ label: title,
49
+ size: badgeSize
50
+ })));
51
+ };
@@ -1,62 +1,27 @@
1
- import React, { useEffect, useState } from 'react';
2
- import debounce from 'lodash/debounce';
1
+ import React from 'react';
3
2
  import { useIntl } from 'react-intl-next';
4
3
  import InfoIcon from '@atlaskit/icon/glyph/info';
5
4
  import { Box, xcss } from '@atlaskit/primitives';
6
5
  import Tooltip from '@atlaskit/tooltip';
7
6
  import { externalMediaMessages } from '../media';
8
- import { getBadgeSize } from './CommentBadge';
9
7
  const baseStyles = xcss({
10
- position: 'absolute',
11
- top: 'space.025',
12
8
  borderRadius: 'border.radius',
13
9
  backgroundColor: 'elevation.surface',
14
- zIndex: 'tooltip',
15
10
  lineHeight: "var(--ds-space-200, 16px)",
16
- right: 'var(--right-offset)',
17
11
  cursor: 'pointer'
18
12
  });
19
13
  export const ExternalImageBadge = ({
20
- mediaWidth,
21
- mediaHeight,
22
- commentBadgeRightOffset = 0,
23
- mediaElement
14
+ badgeSize
24
15
  }) => {
25
16
  const intl = useIntl();
26
17
  const message = intl.formatMessage(externalMediaMessages.externalMediaFile);
27
- const [badgeSize, setBadgeSize] = useState(getBadgeSize(mediaWidth, mediaHeight));
28
- // detect resize of media element to adjust badge size
29
- // will combine with the comment badge resize observer when refactoring in the future to avoid multiple resize observers
30
- useEffect(() => {
31
- const observer = new ResizeObserver(debounce(entries => {
32
- const [entry] = entries;
33
- const {
34
- width,
35
- height
36
- } = entry.contentRect;
37
- setBadgeSize(getBadgeSize(width, height));
38
- }));
39
- if (mediaElement) {
40
- observer.observe(mediaElement);
41
- }
42
- return () => {
43
- observer.disconnect();
44
- };
45
- }, [mediaElement]);
46
- const baseRightOffset = badgeSize === 'medium' ? 4 : 2;
47
- const rightOffset = baseRightOffset + commentBadgeRightOffset;
48
- return /*#__PURE__*/React.createElement(Box
49
- // eslint-disable-next-line @atlaskit/ui-styling-standard/enforce-style-prop
50
- , {
51
- style: {
52
- '--right-offset': `${rightOffset}px`
53
- },
18
+ return /*#__PURE__*/React.createElement(Box, {
54
19
  padding: badgeSize === 'medium' ? 'space.050' : 'space.0',
55
- "data-external-image-badge": "true",
56
20
  xcss: baseStyles,
57
21
  tabIndex: 0
58
22
  }, /*#__PURE__*/React.createElement(Tooltip, {
59
- content: message
23
+ content: message,
24
+ position: "top"
60
25
  }, /*#__PURE__*/React.createElement(InfoIcon, {
61
26
  size: "small",
62
27
  label: message
@@ -0,0 +1,63 @@
1
+ import React, { useEffect, useState } from 'react';
2
+ import debounce from 'lodash/debounce';
3
+ import { Box, xcss } from '@atlaskit/primitives';
4
+ const containerStyles = xcss({
5
+ display: 'flex',
6
+ position: 'absolute',
7
+ top: 'space.0',
8
+ right: 'space.0',
9
+ lineHeight: "var(--ds-space-200, 16px)",
10
+ gap: 'space.025',
11
+ zIndex: 'card',
12
+ height: 'fit-content',
13
+ width: 'fit-content',
14
+ margin: 'space.075'
15
+ });
16
+ const resizeOffsetStyles = xcss({
17
+ right: 'space.150'
18
+ });
19
+ const smallBadgeStyles = xcss({
20
+ margin: 'space.025'
21
+ });
22
+ const getBadgeSize = (width, height) => {
23
+ // width is the original width of image, not resized or currently rendered to user. Defaulting to medium for now
24
+ return width && width < 70 || height && height < 70 ? 'small' : 'medium';
25
+ };
26
+ export const MediaBadges = ({
27
+ children,
28
+ mediaElement,
29
+ mediaWidth,
30
+ mediaHeight,
31
+ extendedResizeOffset
32
+ }) => {
33
+ const [badgeSize, setBadgeSize] = useState(getBadgeSize(mediaWidth, mediaHeight));
34
+ useEffect(() => {
35
+ const observer = new ResizeObserver(debounce(entries => {
36
+ const [entry] = entries;
37
+ const {
38
+ width,
39
+ height
40
+ } = entry.contentRect;
41
+ setBadgeSize(getBadgeSize(width, height));
42
+ }));
43
+ if (mediaElement) {
44
+ observer.observe(mediaElement);
45
+ }
46
+ return () => {
47
+ observer.disconnect();
48
+ };
49
+ }, [mediaElement]);
50
+ if (typeof children === 'function') {
51
+ children = children({
52
+ badgeSize
53
+ });
54
+ }
55
+ if (!mediaElement || React.Children.count(children) === 0) {
56
+ return null;
57
+ }
58
+ return /*#__PURE__*/React.createElement(Box, {
59
+ testId: "media-badges",
60
+ "data-media-badges": "true",
61
+ xcss: [containerStyles, extendedResizeOffset && resizeOffsetStyles, badgeSize === 'small' && smallBadgeStyles]
62
+ }, children);
63
+ };
@@ -1,4 +1,6 @@
1
1
  export { MEDIA_SINGLE_DEFAULT_MIN_PIXEL_WIDTH, MEDIA_SINGLE_VIDEO_MIN_PIXEL_WIDTH, MEDIA_SINGLE_SNAP_GAP, MEDIA_SINGLE_HIGHLIGHT_GAP, MEDIA_SINGLE_GUTTER_SIZE, MEDIA_SINGLE_RESIZE_THROTTLE_TIME, Layout as MediaSingleLayout, DEFAULT_IMAGE_WIDTH, DEFAULT_IMAGE_HEIGHT, wrappedLayouts, CAPTION_PLACEHOLDER_ID } from './constants';
2
2
  export { getMediaSinglePixelWidth, calcMediaSinglePixelWidth, calcMediaSingleMaxWidth, getMediaSingleInitialWidth, calculateOffsetLeft, roundToNearest, calcMinWidth, getMaxWidthForNestedNode, getMaxWidthForNestedNodeNext, currentMediaNodeWithPos } from './utils';
3
3
  export { CommentBadge } from './CommentBadge';
4
- export { ExternalImageBadge } from './ExternalImageBadge';
4
+ export { CommentBadgeNext } from './CommentBadgeNext';
5
+ export { ExternalImageBadge } from './ExternalImageBadge';
6
+ export { MediaBadges } from './MediaBadges';