@atlaskit/renderer 109.9.0 → 109.10.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 (89) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/actions/package.json +1 -1
  3. package/consts/package.json +1 -1
  4. package/dist/cjs/react/nodes/codeBlock/components/codeBlockCopyButton.js +2 -0
  5. package/dist/cjs/react/nodes/codeBlock/components/codeBlockWrapButton.js +2 -0
  6. package/dist/cjs/react/nodes/mediaSingle/index.js +4 -2
  7. package/dist/cjs/ui/MediaCard.js +16 -3
  8. package/dist/cjs/ui/Renderer/index.js +6 -6
  9. package/dist/cjs/ui/annotations/contexts/AnnotationRangeContext.js +136 -0
  10. package/dist/cjs/ui/annotations/element/mark.js +1 -1
  11. package/dist/cjs/ui/annotations/hooks/user-selection.js +10 -12
  12. package/dist/cjs/ui/annotations/hover/index.js +12 -0
  13. package/dist/cjs/ui/annotations/hover/mounter.js +134 -0
  14. package/dist/cjs/ui/annotations/hover/range-validator.js +43 -0
  15. package/dist/cjs/ui/annotations/index.js +7 -3
  16. package/dist/cjs/ui/annotations/selection/index.js +3 -3
  17. package/dist/cjs/ui/annotations/{selection/wrapper.js → wrapper.js} +15 -7
  18. package/dist/es2019/react/nodes/codeBlock/components/codeBlockCopyButton.js +2 -0
  19. package/dist/es2019/react/nodes/codeBlock/components/codeBlockWrapButton.js +2 -0
  20. package/dist/es2019/react/nodes/mediaSingle/index.js +4 -2
  21. package/dist/es2019/ui/MediaCard.js +17 -3
  22. package/dist/es2019/ui/Renderer/index.js +6 -6
  23. package/dist/es2019/ui/annotations/contexts/AnnotationRangeContext.js +112 -0
  24. package/dist/es2019/ui/annotations/element/mark.js +5 -1
  25. package/dist/es2019/ui/annotations/hooks/user-selection.js +13 -8
  26. package/dist/es2019/ui/annotations/hover/index.js +1 -0
  27. package/dist/es2019/ui/annotations/hover/mounter.js +121 -0
  28. package/dist/es2019/ui/annotations/hover/range-validator.js +38 -0
  29. package/dist/es2019/ui/annotations/index.js +7 -3
  30. package/dist/es2019/ui/annotations/selection/index.js +1 -1
  31. package/dist/es2019/ui/annotations/{selection/wrapper.js → wrapper.js} +14 -6
  32. package/dist/esm/react/nodes/codeBlock/components/codeBlockCopyButton.js +2 -0
  33. package/dist/esm/react/nodes/codeBlock/components/codeBlockWrapButton.js +2 -0
  34. package/dist/esm/react/nodes/mediaSingle/index.js +4 -2
  35. package/dist/esm/ui/MediaCard.js +16 -3
  36. package/dist/esm/ui/Renderer/index.js +6 -6
  37. package/dist/esm/ui/annotations/contexts/AnnotationRangeContext.js +126 -0
  38. package/dist/esm/ui/annotations/element/mark.js +2 -2
  39. package/dist/esm/ui/annotations/hooks/user-selection.js +11 -12
  40. package/dist/esm/ui/annotations/hover/index.js +1 -0
  41. package/dist/esm/ui/annotations/hover/mounter.js +124 -0
  42. package/dist/esm/ui/annotations/hover/range-validator.js +34 -0
  43. package/dist/esm/ui/annotations/index.js +7 -3
  44. package/dist/esm/ui/annotations/selection/index.js +1 -1
  45. package/dist/esm/ui/annotations/{selection/wrapper.js → wrapper.js} +14 -6
  46. package/dist/types/react/marks/code.d.ts +2 -2
  47. package/dist/types/react/nodes/codeBlock/codeBlock.d.ts +2 -2
  48. package/dist/types/react/nodes/codeBlock/components/codeBlockCopyButton.d.ts +3 -3
  49. package/dist/types/react/nodes/codeBlock/components/codeBlockWrapButton.d.ts +3 -3
  50. package/dist/types/react/nodes/date.d.ts +2 -2
  51. package/dist/types/react/nodes/index.d.ts +4 -4
  52. package/dist/types/react/nodes/mediaInline.d.ts +2 -2
  53. package/dist/types/react/nodes/mediaSingle/index.d.ts +3 -2
  54. package/dist/types/ui/Expand.d.ts +2 -2
  55. package/dist/types/ui/MediaCard.d.ts +1 -0
  56. package/dist/types/ui/SortingIcon.d.ts +2 -2
  57. package/dist/types/ui/annotations/contexts/AnnotationRangeContext.d.ts +22 -0
  58. package/dist/types/ui/annotations/hover/index.d.ts +1 -0
  59. package/dist/types/ui/annotations/hover/mounter.d.ts +20 -0
  60. package/dist/types/ui/annotations/hover/range-validator.d.ts +13 -0
  61. package/dist/types/ui/annotations/selection/index.d.ts +1 -1
  62. package/dist/{types-ts4.5/ui/annotations/selection → types/ui/annotations}/wrapper.d.ts +1 -1
  63. package/dist/types/utils.d.ts +1 -1
  64. package/dist/types-ts4.5/react/marks/code.d.ts +2 -2
  65. package/dist/types-ts4.5/react/nodes/codeBlock/codeBlock.d.ts +2 -2
  66. package/dist/types-ts4.5/react/nodes/codeBlock/components/codeBlockCopyButton.d.ts +3 -3
  67. package/dist/types-ts4.5/react/nodes/codeBlock/components/codeBlockWrapButton.d.ts +3 -3
  68. package/dist/types-ts4.5/react/nodes/date.d.ts +2 -2
  69. package/dist/types-ts4.5/react/nodes/index.d.ts +4 -4
  70. package/dist/types-ts4.5/react/nodes/mediaInline.d.ts +2 -2
  71. package/dist/types-ts4.5/react/nodes/mediaSingle/index.d.ts +3 -2
  72. package/dist/types-ts4.5/ui/Expand.d.ts +2 -2
  73. package/dist/types-ts4.5/ui/MediaCard.d.ts +1 -0
  74. package/dist/types-ts4.5/ui/SortingIcon.d.ts +2 -2
  75. package/dist/types-ts4.5/ui/annotations/contexts/AnnotationRangeContext.d.ts +22 -0
  76. package/dist/types-ts4.5/ui/annotations/hover/index.d.ts +1 -0
  77. package/dist/types-ts4.5/ui/annotations/hover/mounter.d.ts +20 -0
  78. package/dist/types-ts4.5/ui/annotations/hover/range-validator.d.ts +13 -0
  79. package/dist/types-ts4.5/ui/annotations/selection/index.d.ts +1 -1
  80. package/dist/{types/ui/annotations/selection → types-ts4.5/ui/annotations}/wrapper.d.ts +1 -1
  81. package/dist/types-ts4.5/utils.d.ts +1 -1
  82. package/messages/package.json +1 -1
  83. package/package.json +8 -7
  84. package/render-document/package.json +1 -1
  85. package/renderer-context/package.json +1 -1
  86. package/serializer/package.json +1 -1
  87. package/text-serializer/package.json +1 -1
  88. package/use-feature-flags/package.json +1 -1
  89. package/utils/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # @atlaskit/renderer
2
2
 
3
+ ## 109.10.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [#83116](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/83116) [`8d4e99057fe0`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/8d4e99057fe0) - Upgrade Typescript from `4.9.5` to `5.4.2`
8
+ - Updated dependencies
9
+
10
+ ## 109.10.0
11
+
12
+ ### Minor Changes
13
+
14
+ - [#78436](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/78436) [`89ff7202e5fe`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/89ff7202e5fe) - The annotation comment provider will now accept a new hoverComponent which is displayed by the annotation ui when specific block nodes are rolled over by the users mouse
15
+
16
+ ### Patch Changes
17
+
18
+ - Updated dependencies
19
+
3
20
  ## 109.9.0
4
21
 
5
22
  ### Minor Changes
@@ -6,7 +6,7 @@
6
6
  "sideEffects": false,
7
7
  "types": "../dist/types/actions.d.ts",
8
8
  "typesVersions": {
9
- ">=4.5 <4.9": {
9
+ ">=4.5 <5.4": {
10
10
  "*": [
11
11
  "../dist/types-ts4.5/actions.d.ts"
12
12
  ]
@@ -6,7 +6,7 @@
6
6
  "sideEffects": false,
7
7
  "types": "../dist/types/consts.d.ts",
8
8
  "typesVersions": {
9
- ">=4.5 <4.9": {
9
+ ">=4.5 <5.4": {
10
10
  "*": [
11
11
  "../dist/types-ts4.5/consts.d.ts"
12
12
  ]
@@ -51,6 +51,8 @@ var CopyButton = function CopyButton(_ref) {
51
51
  }),
52
52
  onClick: function onClick(event) {
53
53
  fireAnalyticsEvent({
54
+ // @ts-expect-error - Type 'ACTION.CLICKED' is not assignable to type 'ACTION.CLICKED | ACTION.EDITOR_TTI | ACTION.RE_RENDERED | ACTION.MEDIA_LINK_TRANSFORMED | ACTION.STARTED | ACTION.TOGGLE_EXPAND | ACTION.UNSUPPORTED_CONTENT_ENCOUNTERED | ACTION.VISITED | ACTION.RENDERED | ACTION.INVALID_PROSEMIRROR_DOCUMENT | ACTION.CRASHED | ... 6 more ... | AnnotationActionType'.
55
+ // This error was introduced after upgrading to TypeScript 5
54
56
  action: _enums.ACTION.CLICKED,
55
57
  actionSubject: _enums.ACTION_SUBJECT.BUTTON,
56
58
  actionSubjectId: _enums.ACTION_SUBJECT_ID.CODEBLOCK_COPY,
@@ -53,6 +53,8 @@ var CodeBlockWrapButton = function CodeBlockWrapButton(_ref) {
53
53
  isSelected: wrapLongLines,
54
54
  onClick: function onClick(event) {
55
55
  fireAnalyticsEvent({
56
+ // @ts-expect-error - Type 'ACTION.CLICKED' is not assignable to type 'ACTION.CLICKED | ACTION.EDITOR_TTI | ACTION.RE_RENDERED | ACTION.MEDIA_LINK_TRANSFORMED | ACTION.STARTED | ACTION.TOGGLE_EXPAND | ACTION.UNSUPPORTED_CONTENT_ENCOUNTERED | ACTION.VISITED | ACTION.RENDERED | ACTION.INVALID_PROSEMIRROR_DOCUMENT | ACTION.CRASHED | ... 6 more ... | AnnotationActionType'
57
+ // This error was introduced after upgrading to TypeScript 5
56
58
  action: _enums.ACTION.CLICKED,
57
59
  actionSubject: _enums.ACTION_SUBJECT.BUTTON,
58
60
  actionSubjectId: _enums.ACTION_SUBJECT_ID.CODEBLOCK_WRAP,
@@ -69,7 +69,8 @@ var MediaSingle = function MediaSingle(props) {
69
69
  _props$allowCaptions = props.allowCaptions,
70
70
  allowCaptions = _props$allowCaptions === void 0 ? false : _props$allowCaptions,
71
71
  _props$isInsideOfInli = props.isInsideOfInlineExtension,
72
- isInsideOfInlineExtension = _props$isInsideOfInli === void 0 ? false : _props$isInsideOfInli;
72
+ isInsideOfInlineExtension = _props$isInsideOfInli === void 0 ? false : _props$isInsideOfInli,
73
+ dataAttributes = props.dataAttributes;
73
74
  var _React$useState = _react.default.useState({
74
75
  width: 0,
75
76
  height: 0
@@ -180,7 +181,8 @@ var MediaSingle = function MediaSingle(props) {
180
181
  widthType: widthType
181
182
  },
182
183
  fullWidthMode: isFullWidth,
183
- isInsideOfInlineExtension: isInsideOfInlineExtension
184
+ isInsideOfInlineExtension: isInsideOfInlineExtension,
185
+ dataAttributes: dataAttributes
184
186
  }, (0, _react2.jsx)(_react.Fragment, null, mediaComponent), allowCaptions && caption);
185
187
  };
186
188
  return (0, _react2.jsx)(_ui.WidthConsumer, null, function (_ref3) {
@@ -21,6 +21,7 @@ var _traverse = require("@atlaskit/adf-utils/traverse");
21
21
  var _mediaCard = require("@atlaskit/media-card");
22
22
  var _mediaClientReact = require("@atlaskit/media-client-react");
23
23
  var _utils = require("@atlaskit/editor-common/utils");
24
+ var _AnnotationRangeContext = require("./annotations/contexts/AnnotationRangeContext");
24
25
  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); }
25
26
  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; }
26
27
  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; }
@@ -267,7 +268,8 @@ var MediaCardView = exports.MediaCardView = /*#__PURE__*/function (_Component) {
267
268
  featureFlags = _this$props5.featureFlags,
268
269
  shouldEnableDownloadButton = _this$props5.shouldEnableDownloadButton,
269
270
  ssr = _this$props5.ssr,
270
- mediaClient = _this$props5.mediaClient;
271
+ mediaClient = _this$props5.mediaClient,
272
+ setHoverTarget = _this$props5.setHoverTarget;
271
273
  var isMobile = rendererAppearance === 'mobile';
272
274
  var shouldPlayInline = useInlinePlayer !== undefined ? useInlinePlayer : true;
273
275
  var isInlinePlayer = isMobile ? false : shouldPlayInline;
@@ -295,13 +297,21 @@ var MediaCardView = exports.MediaCardView = /*#__PURE__*/function (_Component) {
295
297
  collectionName: collection,
296
298
  occurrenceKey: occurrenceKey
297
299
  };
298
- return /*#__PURE__*/_react.default.createElement("div", getClipboardAttrs({
300
+ return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({}, getClipboardAttrs({
299
301
  id: id,
300
302
  alt: alt,
301
303
  collection: collection,
302
304
  contextIdentifierProvider: contextIdentifierProvider,
303
305
  originalDimensions: originalDimensions,
304
306
  fileState: fileState
307
+ }), {
308
+ onMouseEnter: function onMouseEnter(event) {
309
+ // We will not allow a hover target to be set if any mouse button is depressed during the mouse enter state.
310
+ // This could be due to the user trying to select text across the document.
311
+ if (event.buttons === 0) {
312
+ setHoverTarget && setHoverTarget(event.target);
313
+ }
314
+ }
305
315
  }), /*#__PURE__*/_react.default.createElement(_mediaCard.Card, {
306
316
  identifier: identifier,
307
317
  alt: alt,
@@ -360,8 +370,11 @@ var getClipboardAttrs = exports.getClipboardAttrs = function getClipboardAttrs(_
360
370
  };
361
371
  var MediaCardInternal = exports.MediaCardInternal = function MediaCardInternal(props) {
362
372
  var mediaClient = (0, _react.useContext)(_mediaClientReact.MediaClientContext);
373
+ var _useAnnotationRangeDi = (0, _AnnotationRangeContext.useAnnotationRangeDispatch)(),
374
+ setHoverTarget = _useAnnotationRangeDi.setHoverTarget;
363
375
  return /*#__PURE__*/_react.default.createElement(MediaCardView, (0, _extends2.default)({}, props, {
364
- mediaClient: mediaClient
376
+ mediaClient: mediaClient,
377
+ setHoverTarget: setHoverTarget
365
378
  }));
366
379
  };
367
380
  var MediaCard = exports.MediaCard = (0, _utils.withImageLoader)(MediaCardInternal);
@@ -55,7 +55,7 @@ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.
55
55
  var NORMAL_SEVERITY_THRESHOLD = exports.NORMAL_SEVERITY_THRESHOLD = 2000;
56
56
  var DEGRADED_SEVERITY_THRESHOLD = exports.DEGRADED_SEVERITY_THRESHOLD = 3000;
57
57
  var packageName = "@atlaskit/renderer";
58
- var packageVersion = "109.9.0";
58
+ var packageVersion = "109.10.1";
59
59
  var Renderer = exports.Renderer = /*#__PURE__*/function (_PureComponent) {
60
60
  (0, _inherits2.default)(Renderer, _PureComponent);
61
61
  var _super = _createSuper(Renderer);
@@ -353,7 +353,7 @@ var Renderer = exports.Renderer = /*#__PURE__*/function (_PureComponent) {
353
353
  }
354
354
  };
355
355
  try {
356
- var _featureFlags$feature, _this$featureFlags2;
356
+ var _featureFlags$feature, _featureFlags$feature2;
357
357
  var schema = this.getSchema(this.props.schema, this.props.adfStage);
358
358
  var _renderDocument = (0, _.renderDocument)(adfDocument, this.serializer, schema, adfStage, this.props.useSpecBasedValidator, this.id, this.fireAnalyticsEvent, this.props.unsupportedContentLevelsTracking, this.props.appearance),
359
359
  result = _renderDocument.result,
@@ -363,7 +363,7 @@ var Renderer = exports.Renderer = /*#__PURE__*/function (_PureComponent) {
363
363
  onComplete(stat);
364
364
  }
365
365
  var rendererOutput = (0, _react2.jsx)(_rendererContext.RendererContextProvider, {
366
- value: this.featureFlags(this.props.featureFlags)
366
+ value: featureFlags
367
367
  }, (0, _react2.jsx)(_activeHeaderIdProvider.ActiveHeaderIdProvider, {
368
368
  value: (0, _links.getActiveHeadingId)(allowHeadingAnchorLinks)
369
369
  }, (0, _react2.jsx)(_analyticsContext.default.Provider, {
@@ -398,7 +398,7 @@ var Renderer = exports.Renderer = /*#__PURE__*/function (_PureComponent) {
398
398
  height: maxHeight,
399
399
  fadeHeight: fadeOutHeight
400
400
  }, rendererOutput) : rendererOutput;
401
- var rendererRenderTracking = (_this$featureFlags2 = this.featureFlags(this.props.featureFlags)) === null || _this$featureFlags2 === void 0 || (_this$featureFlags2 = _this$featureFlags2.featureFlags) === null || _this$featureFlags2 === void 0 || (_this$featureFlags2 = _this$featureFlags2.rendererRenderTracking) === null || _this$featureFlags2 === void 0 ? void 0 : _this$featureFlags2[_analytics.ACTION_SUBJECT.RENDERER];
401
+ var rendererRenderTracking = featureFlags === null || featureFlags === void 0 || (_featureFlags$feature2 = featureFlags.featureFlags) === null || _featureFlags$feature2 === void 0 || (_featureFlags$feature2 = _featureFlags$feature2.rendererRenderTracking) === null || _featureFlags$feature2 === void 0 ? void 0 : _featureFlags$feature2[_analytics.ACTION_SUBJECT.RENDERER];
402
402
  var reRenderTracking = (rendererRenderTracking === null || rendererRenderTracking === void 0 ? void 0 : rendererRenderTracking.enabled) && (0, _react2.jsx)(_RenderTracking.RenderTracking, {
403
403
  componentProps: this.props,
404
404
  action: _analytics.ACTION.RE_RENDERED,
@@ -408,7 +408,7 @@ var Renderer = exports.Renderer = /*#__PURE__*/function (_PureComponent) {
408
408
  });
409
409
  return (0, _react2.jsx)(_react.Fragment, null, reRenderTracking, rendererResult);
410
410
  } catch (e) {
411
- var _featureFlags$feature2;
411
+ var _featureFlags$feature3;
412
412
  if (onError) {
413
413
  onError(e);
414
414
  }
@@ -419,7 +419,7 @@ var Renderer = exports.Renderer = /*#__PURE__*/function (_PureComponent) {
419
419
  allowPlaceholderText: allowPlaceholderText,
420
420
  allowColumnSorting: allowColumnSorting,
421
421
  allowNestedHeaderLinks: allowNestedHeaderLinks,
422
- useBlockRenderForCodeBlock: (_featureFlags$feature2 = featureFlags.featureFlags.useBlockRenderForCodeBlock) !== null && _featureFlags$feature2 !== void 0 ? _featureFlags$feature2 : true,
422
+ useBlockRenderForCodeBlock: (_featureFlags$feature3 = featureFlags.featureFlags.useBlockRenderForCodeBlock) !== null && _featureFlags$feature3 !== void 0 ? _featureFlags$feature3 : true,
423
423
  addTelepointer: this.props.addTelepointer,
424
424
  onClick: handleWrapperOnClick
425
425
  }, (0, _react2.jsx)(_ui.UnsupportedBlock, null));
@@ -0,0 +1,136 @@
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.useAnnotationRangeState = exports.useAnnotationRangeDispatch = exports.AnnotationRangeStateContext = exports.AnnotationRangeProvider = exports.AnnotationRangeDispatchContext = void 0;
9
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
+ var _react = _interopRequireWildcard(require("react"));
11
+ 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); }
12
+ 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; }
13
+ function reducer(state, action) {
14
+ switch (action.type) {
15
+ case 'clear':
16
+ if (!!state.range || !!state.type) {
17
+ return {
18
+ range: null,
19
+ type: null
20
+ };
21
+ }
22
+ return state;
23
+ case 'clearSelection':
24
+ if (state.type === 'selection') {
25
+ return {
26
+ range: null,
27
+ type: null
28
+ };
29
+ }
30
+ return state;
31
+ case 'clearHover':
32
+ if (state.type === 'hover') {
33
+ return {
34
+ range: null,
35
+ type: null
36
+ };
37
+ }
38
+ return state;
39
+ case 'setSelection':
40
+ if (state.range !== action.range || state.type !== 'selection') {
41
+ return {
42
+ range: action.range,
43
+ type: 'selection'
44
+ };
45
+ }
46
+ return state;
47
+ case 'setHover':
48
+ if (state.range !== action.range || state.type !== 'hover') {
49
+ return {
50
+ range: action.range,
51
+ type: 'hover'
52
+ };
53
+ }
54
+ return state;
55
+ }
56
+ return state;
57
+ }
58
+ var AnnotationRangeStateContext = exports.AnnotationRangeStateContext = /*#__PURE__*/(0, _react.createContext)({
59
+ range: null,
60
+ type: null
61
+ });
62
+ var AnnotationRangeDispatchContext = exports.AnnotationRangeDispatchContext = /*#__PURE__*/(0, _react.createContext)({
63
+ clearRange: function clearRange() {},
64
+ clearSelectionRange: function clearSelectionRange() {},
65
+ clearHoverRange: function clearHoverRange() {},
66
+ setRange: function setRange() {}
67
+ });
68
+ var AnnotationRangeProvider = exports.AnnotationRangeProvider = function AnnotationRangeProvider(_ref) {
69
+ var children = _ref.children,
70
+ allowCommentsOnMedia = _ref.allowCommentsOnMedia;
71
+ var _useReducer = (0, _react.useReducer)(reducer, {
72
+ range: null,
73
+ type: null
74
+ }),
75
+ _useReducer2 = (0, _slicedToArray2.default)(_useReducer, 2),
76
+ _useReducer2$ = _useReducer2[0],
77
+ range = _useReducer2$.range,
78
+ type = _useReducer2$.type,
79
+ dispatch = _useReducer2[1];
80
+ var clearRange = (0, _react.useCallback)(function () {
81
+ return dispatch({
82
+ type: 'clear'
83
+ });
84
+ }, []);
85
+ var clearSelectionRange = (0, _react.useCallback)(function () {
86
+ return dispatch({
87
+ type: 'clearSelection'
88
+ });
89
+ }, []);
90
+ var clearHoverRange = (0, _react.useCallback)(function () {
91
+ return dispatch({
92
+ type: 'clearHover'
93
+ });
94
+ }, []);
95
+ var setRange = (0, _react.useCallback)(function (range) {
96
+ return dispatch({
97
+ type: 'setSelection',
98
+ range: range
99
+ });
100
+ }, []);
101
+ var setHoverTarget = (0, _react.useCallback)(function (target) {
102
+ var range = document.createRange();
103
+ range.setStartBefore(target);
104
+ range.setEndAfter(target);
105
+ dispatch({
106
+ type: 'setHover',
107
+ range: range
108
+ });
109
+ }, []);
110
+ var stateData = (0, _react.useMemo)(function () {
111
+ return {
112
+ range: range,
113
+ type: type
114
+ };
115
+ }, [range, type]);
116
+ var dispatchData = (0, _react.useMemo)(function () {
117
+ return {
118
+ clearRange: clearRange,
119
+ clearSelectionRange: clearSelectionRange,
120
+ clearHoverRange: clearHoverRange,
121
+ setRange: setRange,
122
+ setHoverTarget: !!allowCommentsOnMedia ? setHoverTarget : undefined
123
+ };
124
+ }, [allowCommentsOnMedia, clearRange, clearSelectionRange, clearHoverRange, setRange, setHoverTarget]);
125
+ return /*#__PURE__*/_react.default.createElement(AnnotationRangeStateContext.Provider, {
126
+ value: stateData
127
+ }, /*#__PURE__*/_react.default.createElement(AnnotationRangeDispatchContext.Provider, {
128
+ value: dispatchData
129
+ }, children));
130
+ };
131
+ var useAnnotationRangeState = exports.useAnnotationRangeState = function useAnnotationRangeState() {
132
+ return (0, _react.useContext)(AnnotationRangeStateContext);
133
+ };
134
+ var useAnnotationRangeDispatch = exports.useAnnotationRangeDispatch = function useAnnotationRangeDispatch() {
135
+ return (0, _react.useContext)(AnnotationRangeDispatchContext);
136
+ };
@@ -23,7 +23,7 @@ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbol
23
23
  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; }
24
24
  // eslint-disable-next-line @atlaskit/design-system/no-css-tagged-template-expression -- `AnnotationSharedCSSByState` is not object-safe
25
25
  var markStyles = function markStyles() {
26
- return (0, _react2.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n color: inherit;\n background-color: unset;\n -webkit-tap-highlight-color: transparent;\n\n &[data-mark-annotation-state='", "'] {\n ", ";\n\n &:focus,\n &[data-has-focus='true'] {\n ", ";\n }\n }\n"])), _adfSchema.AnnotationMarkStates.ACTIVE, (0, _styles.AnnotationSharedCSSByState)().blur, (0, _styles.AnnotationSharedCSSByState)().focus);
26
+ return (0, _react2.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n color: inherit;\n background-color: unset;\n -webkit-tap-highlight-color: transparent;\n\n &[data-mark-annotation-state='", "'] {\n ", ";\n\n &:focus,\n &[data-has-focus='true'] {\n ", ";\n }\n\n & div.rich-media-item {\n ", ";\n }\n }\n"])), _adfSchema.AnnotationMarkStates.ACTIVE, (0, _styles.AnnotationSharedCSSByState)().blur, (0, _styles.AnnotationSharedCSSByState)().focus, _styles.mediaAnnotationStyles);
27
27
  };
28
28
  var MarkComponent = exports.MarkComponent = function MarkComponent(_ref) {
29
29
  var annotationParentIds = _ref.annotationParentIds,
@@ -1,20 +1,21 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
3
  Object.defineProperty(exports, "__esModule", {
5
4
  value: true
6
5
  });
7
6
  exports.useUserSelectionRange = void 0;
8
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
9
7
  var _react = require("react");
8
+ var _AnnotationRangeContext = require("../contexts/AnnotationRangeContext");
10
9
  var _context = require("../context");
11
10
  var _utils = require("./utils");
12
11
  var useUserSelectionRange = exports.useUserSelectionRange = function useUserSelectionRange(props) {
13
12
  var rendererDOM = props.rendererRef.current;
14
- var _useState = (0, _react.useState)(null),
15
- _useState2 = (0, _slicedToArray2.default)(_useState, 2),
16
- range = _useState2[0],
17
- setRange = _useState2[1];
13
+ var _useAnnotationRangeDi = (0, _AnnotationRangeContext.useAnnotationRangeDispatch)(),
14
+ clearSelectionRange = _useAnnotationRangeDi.clearSelectionRange,
15
+ setRange = _useAnnotationRangeDi.setRange;
16
+ var _useAnnotationRangeSt = (0, _AnnotationRangeContext.useAnnotationRangeState)(),
17
+ range = _useAnnotationRangeSt.range,
18
+ type = _useAnnotationRangeSt.type;
18
19
  var annotationDraftPosition = (0, _react.useContext)(_context.AnnotationsDraftContext);
19
20
  var hasAnnotationDraft = !!annotationDraftPosition;
20
21
  (0, _react.useEffect)(function () {
@@ -34,11 +35,8 @@ var useUserSelectionRange = exports.useUserSelectionRange = function useUserSele
34
35
  document.addEventListener('selectionchange', onSelectionChange);
35
36
  return function () {
36
37
  document.removeEventListener('selectionchange', onSelectionChange);
37
- setRange(null);
38
+ clearSelectionRange();
38
39
  };
39
- }, [rendererDOM, hasAnnotationDraft]);
40
- var clearRange = (0, _react.useCallback)(function () {
41
- setRange(null);
42
- }, []);
43
- return [range, clearRange];
40
+ }, [rendererDOM, hasAnnotationDraft, setRange, clearSelectionRange]);
41
+ return [type === 'selection' ? range : null, clearSelectionRange];
44
42
  };
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "HoverRangeValidator", {
7
+ enumerable: true,
8
+ get: function get() {
9
+ return _rangeValidator.RangeValidator;
10
+ }
11
+ });
12
+ var _rangeValidator = require("./range-validator");
@@ -0,0 +1,134 @@
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.Mounter = void 0;
9
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
+ var _react = _interopRequireWildcard(require("react"));
11
+ var _adfSchema = require("@atlaskit/adf-schema");
12
+ var _draft = require("../draft");
13
+ var _analyticsListeners = require("@atlaskit/analytics-listeners");
14
+ var _analytics = require("@atlaskit/editor-common/analytics");
15
+ var _RendererActionsContext = require("../../RendererActionsContext");
16
+ 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); }
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
+ var Mounter = exports.Mounter = /*#__PURE__*/_react.default.memo(function (props) {
19
+ var Component = props.component,
20
+ range = props.range,
21
+ isAnnotationAllowed = props.isAnnotationAllowed,
22
+ wrapperDOM = props.wrapperDOM,
23
+ onCloseProps = props.onClose,
24
+ clearAnnotationDraft = props.clearAnnotationDraft,
25
+ applyAnnotationDraftAt = props.applyAnnotationDraftAt,
26
+ documentPosition = props.documentPosition,
27
+ applyAnnotation = props.applyAnnotation,
28
+ createAnalyticsEvent = props.createAnalyticsEvent,
29
+ generateIndexMatch = props.generateIndexMatch;
30
+ var _useState = (0, _react.useState)(),
31
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
32
+ draftDocumentPosition = _useState2[0],
33
+ setDraftDocumentPosition = _useState2[1];
34
+ var actions = (0, _react.useContext)(_RendererActionsContext.RendererContext);
35
+ var onCreateCallback = (0, _react.useCallback)(function (annotationId) {
36
+ if (!isAnnotationAllowed || !documentPosition || !applyAnnotation) {
37
+ return false;
38
+ }
39
+ var annotation = {
40
+ annotationId: annotationId,
41
+ annotationType: _adfSchema.AnnotationTypes.INLINE_COMMENT
42
+ };
43
+ if (createAnalyticsEvent) {
44
+ createAnalyticsEvent({
45
+ action: _analytics.ACTION.INSERTED,
46
+ actionSubject: _analytics.ACTION_SUBJECT.ANNOTATION,
47
+ actionSubjectId: _analytics.ACTION_SUBJECT_ID.INLINE_COMMENT,
48
+ attributes: {},
49
+ eventType: _analytics.EVENT_TYPE.TRACK
50
+ }).fire(_analyticsListeners.FabricChannel.editor);
51
+ }
52
+ return applyAnnotation(draftDocumentPosition || documentPosition, annotation);
53
+ }, [isAnnotationAllowed, documentPosition, applyAnnotation, draftDocumentPosition, createAnalyticsEvent]);
54
+ var createIndexCallback = (0, _react.useCallback)(function () {
55
+ if (!documentPosition || !generateIndexMatch) {
56
+ return false;
57
+ }
58
+ var result = generateIndexMatch(documentPosition);
59
+ if (!result) {
60
+ return false;
61
+ }
62
+ return result;
63
+ }, [documentPosition, generateIndexMatch]);
64
+ var applyDraftModeCallback = (0, _react.useCallback)(function () {
65
+ var keepNativeSelection = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
66
+ if (!documentPosition || !isAnnotationAllowed) {
67
+ if (createAnalyticsEvent) {
68
+ createAnalyticsEvent({
69
+ action: _analytics.ACTION.CREATE_NOT_ALLOWED,
70
+ actionSubject: _analytics.ACTION_SUBJECT.ANNOTATION,
71
+ actionSubjectId: _analytics.ACTION_SUBJECT_ID.INLINE_COMMENT,
72
+ attributes: {},
73
+ eventType: _analytics.EVENT_TYPE.TRACK
74
+ }).fire(_analyticsListeners.FabricChannel.editor);
75
+ }
76
+ return;
77
+ }
78
+ setDraftDocumentPosition(documentPosition);
79
+ applyAnnotationDraftAt(documentPosition);
80
+ if (createAnalyticsEvent) {
81
+ var uniqueAnnotationsInRange = actions.getAnnotationsByPosition(range);
82
+ createAnalyticsEvent({
83
+ action: _analytics.ACTION.OPENED,
84
+ actionSubject: _analytics.ACTION_SUBJECT.ANNOTATION,
85
+ actionSubjectId: _analytics.ACTION_SUBJECT_ID.INLINE_COMMENT,
86
+ eventType: _analytics.EVENT_TYPE.TRACK,
87
+ attributes: {
88
+ overlap: uniqueAnnotationsInRange.length
89
+ }
90
+ }).fire(_analyticsListeners.FabricChannel.editor);
91
+ }
92
+ window.requestAnimationFrame(function () {
93
+ if (keepNativeSelection) {
94
+ (0, _draft.updateWindowSelectionAroundDraft)(documentPosition);
95
+ } else {
96
+ var sel = window.getSelection();
97
+ if (sel) {
98
+ sel.removeAllRanges();
99
+ }
100
+ }
101
+ });
102
+ }, [documentPosition, isAnnotationAllowed, applyAnnotationDraftAt, createAnalyticsEvent, actions, range]);
103
+ var removeDraftModeCallback = (0, _react.useCallback)(function () {
104
+ clearAnnotationDraft();
105
+ setDraftDocumentPosition(null);
106
+ var sel = window.getSelection();
107
+ if (sel) {
108
+ sel.removeAllRanges();
109
+ }
110
+ }, [clearAnnotationDraft]);
111
+ var onCloseCallback = (0, _react.useCallback)(function () {
112
+ if (createAnalyticsEvent) {
113
+ createAnalyticsEvent({
114
+ action: _analytics.ACTION.CLOSED,
115
+ actionSubject: _analytics.ACTION_SUBJECT.ANNOTATION,
116
+ actionSubjectId: _analytics.ACTION_SUBJECT_ID.INLINE_COMMENT,
117
+ eventType: _analytics.EVENT_TYPE.TRACK,
118
+ attributes: {}
119
+ }).fire(_analyticsListeners.FabricChannel.editor);
120
+ }
121
+ removeDraftModeCallback();
122
+ onCloseProps();
123
+ }, [onCloseProps, removeDraftModeCallback, createAnalyticsEvent]);
124
+ return /*#__PURE__*/_react.default.createElement(Component, {
125
+ range: range,
126
+ wrapperDOM: wrapperDOM.current,
127
+ isAnnotationAllowed: isAnnotationAllowed,
128
+ onClose: onCloseCallback,
129
+ onCreate: onCreateCallback,
130
+ getAnnotationIndexMatch: createIndexCallback,
131
+ applyDraftMode: applyDraftModeCallback,
132
+ removeDraftMode: removeDraftModeCallback
133
+ });
134
+ });
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+
3
+ var _typeof = require("@babel/runtime/helpers/typeof");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.RangeValidator = void 0;
8
+ var _react = _interopRequireWildcard(require("react"));
9
+ var _mounter = require("./mounter");
10
+ var _RendererActionsContext = require("../../RendererActionsContext");
11
+ var _AnnotationRangeContext = require("../contexts/AnnotationRangeContext");
12
+ 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); }
13
+ 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; }
14
+ var RangeValidator = exports.RangeValidator = function RangeValidator(props) {
15
+ var component = props.component,
16
+ rendererRef = props.rendererRef,
17
+ applyAnnotationDraftAt = props.applyAnnotationDraftAt,
18
+ clearAnnotationDraft = props.clearAnnotationDraft,
19
+ createAnalyticsEvent = props.createAnalyticsEvent;
20
+ var actions = (0, _react.useContext)(_RendererActionsContext.RendererContext);
21
+ var _useAnnotationRangeDi = (0, _AnnotationRangeContext.useAnnotationRangeDispatch)(),
22
+ clearHoverRange = _useAnnotationRangeDi.clearHoverRange;
23
+ var _useAnnotationRangeSt = (0, _AnnotationRangeContext.useAnnotationRangeState)(),
24
+ range = _useAnnotationRangeSt.range,
25
+ type = _useAnnotationRangeSt.type;
26
+ if (!range || type !== 'hover') {
27
+ return null;
28
+ }
29
+ var documentPosition = actions.getPositionFromRange(range);
30
+ return /*#__PURE__*/_react.default.createElement(_mounter.Mounter, {
31
+ range: range,
32
+ wrapperDOM: rendererRef,
33
+ component: component,
34
+ onClose: clearHoverRange,
35
+ documentPosition: documentPosition,
36
+ isAnnotationAllowed: true,
37
+ applyAnnotation: actions.applyAnnotation.bind(actions),
38
+ applyAnnotationDraftAt: applyAnnotationDraftAt,
39
+ generateIndexMatch: actions.generateAnnotationIndexMatch.bind(actions),
40
+ clearAnnotationDraft: clearAnnotationDraft,
41
+ createAnalyticsEvent: createAnalyticsEvent
42
+ });
43
+ };
@@ -20,11 +20,12 @@ Object.defineProperty(exports, "TextWithAnnotationDraft", {
20
20
  var _react = _interopRequireDefault(require("react"));
21
21
  var _adfSchema = require("@atlaskit/adf-schema");
22
22
  var _view = require("./view");
23
- var _selection = require("./selection");
23
+ var _wrapper = require("./wrapper");
24
24
  var _context = require("./context");
25
25
  var _useLoadAnnotations = require("./hooks/use-load-annotations");
26
26
  var _useEvents = require("./hooks/use-events");
27
27
  var _analyticsNext = require("@atlaskit/analytics-next");
28
+ var _AnnotationRangeContext = require("./contexts/AnnotationRangeContext");
28
29
  var _draft = require("./draft");
29
30
  var _element = require("./element");
30
31
  var LoadAnnotations = /*#__PURE__*/_react.default.memo(function (_ref) {
@@ -35,6 +36,7 @@ var LoadAnnotations = /*#__PURE__*/_react.default.memo(function (_ref) {
35
36
  return null;
36
37
  });
37
38
  var AnnotationsWrapper = exports.AnnotationsWrapper = function AnnotationsWrapper(props) {
39
+ var _annotationProvider$i, _annotationProvider$i2;
38
40
  var children = props.children,
39
41
  annotationProvider = props.annotationProvider,
40
42
  rendererRef = props.rendererRef,
@@ -50,12 +52,14 @@ var AnnotationsWrapper = exports.AnnotationsWrapper = function AnnotationsWrappe
50
52
  value: annotationProvider
51
53
  }, /*#__PURE__*/_react.default.createElement(_context.InlineCommentsStateContext.Provider, {
52
54
  value: inlineCommentAnnotationsState
53
- }, /*#__PURE__*/_react.default.createElement(_selection.SelectionComponentWrapper, {
55
+ }, /*#__PURE__*/_react.default.createElement(_AnnotationRangeContext.AnnotationRangeProvider, {
56
+ allowCommentsOnMedia: (_annotationProvider$i = annotationProvider === null || annotationProvider === void 0 || (_annotationProvider$i2 = annotationProvider.inlineComment) === null || _annotationProvider$i2 === void 0 ? void 0 : _annotationProvider$i2.allowCommentsOnMedia) !== null && _annotationProvider$i !== void 0 ? _annotationProvider$i : false
57
+ }, /*#__PURE__*/_react.default.createElement(_wrapper.AnnotationsContextWrapper, {
54
58
  createAnalyticsEvent: createAnalyticsEvent,
55
59
  rendererRef: rendererRef
56
60
  }, /*#__PURE__*/_react.default.createElement(LoadAnnotations, {
57
61
  adfDocument: adfDocument
58
62
  }), /*#__PURE__*/_react.default.createElement(_view.AnnotationView, {
59
63
  createAnalyticsEvent: createAnalyticsEvent
60
- }), children)));
64
+ }), children))));
61
65
  };
@@ -3,10 +3,10 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- Object.defineProperty(exports, "SelectionComponentWrapper", {
6
+ Object.defineProperty(exports, "SelectionRangeValidator", {
7
7
  enumerable: true,
8
8
  get: function get() {
9
- return _wrapper.Wrapper;
9
+ return _rangeValidator.SelectionRangeValidator;
10
10
  }
11
11
  });
12
- var _wrapper = require("./wrapper");
12
+ var _rangeValidator = require("./range-validator");