@atlaskit/renderer 109.18.0 → 109.19.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.
- package/CHANGELOG.md +16 -0
- package/dist/cjs/react/nodes/mediaSingle/index.js +31 -0
- package/dist/cjs/ui/MediaCard.js +2 -15
- package/dist/cjs/ui/Renderer/index.js +1 -1
- package/dist/cjs/ui/annotations/contexts/AnnotationHoverContext.js +63 -0
- package/dist/cjs/ui/annotations/contexts/AnnotationRangeContext.js +4 -2
- package/dist/cjs/ui/annotations/hover/mounter.js +2 -0
- package/dist/cjs/ui/annotations/hover/range-validator.js +4 -0
- package/dist/cjs/ui/annotations/index.js +3 -2
- package/dist/es2019/react/nodes/mediaSingle/index.js +34 -1
- package/dist/es2019/ui/MediaCard.js +2 -16
- package/dist/es2019/ui/Renderer/index.js +1 -1
- package/dist/es2019/ui/annotations/contexts/AnnotationHoverContext.js +46 -0
- package/dist/es2019/ui/annotations/contexts/AnnotationRangeContext.js +4 -2
- package/dist/es2019/ui/annotations/hover/mounter.js +2 -0
- package/dist/es2019/ui/annotations/hover/range-validator.js +5 -0
- package/dist/es2019/ui/annotations/index.js +3 -2
- package/dist/esm/react/nodes/mediaSingle/index.js +32 -1
- package/dist/esm/ui/MediaCard.js +2 -15
- package/dist/esm/ui/Renderer/index.js +1 -1
- package/dist/esm/ui/annotations/contexts/AnnotationHoverContext.js +53 -0
- package/dist/esm/ui/annotations/contexts/AnnotationRangeContext.js +4 -2
- package/dist/esm/ui/annotations/hover/mounter.js +2 -0
- package/dist/esm/ui/annotations/hover/range-validator.js +4 -0
- package/dist/esm/ui/annotations/index.js +3 -2
- package/dist/types/ui/MediaCard.d.ts +0 -1
- package/dist/types/ui/annotations/contexts/AnnotationHoverContext.d.ts +14 -0
- package/dist/types/ui/annotations/hover/mounter.d.ts +1 -0
- package/dist/types-ts4.5/ui/MediaCard.d.ts +0 -1
- package/dist/types-ts4.5/ui/annotations/contexts/AnnotationHoverContext.d.ts +14 -0
- package/dist/types-ts4.5/ui/annotations/hover/mounter.d.ts +1 -0
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# @atlaskit/renderer
|
|
2
2
|
|
|
3
|
+
## 109.19.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#90964](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/90964) [`6e7df33eb280`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/6e7df33eb280) - [ux] [ED-22992] Auto-dismiss comment button on media if mouse rolling away from media and comment popup, remove popup position transition so that popup does not appear sliding across the page when mouse moving from one media to another
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- Updated dependencies
|
|
12
|
+
|
|
13
|
+
## 109.18.1
|
|
14
|
+
|
|
15
|
+
### Patch Changes
|
|
16
|
+
|
|
17
|
+
- [#90969](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/90969) [`e6b63a9cbe78`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/e6b63a9cbe78) - Fix issues with comment hover for media nodes
|
|
18
|
+
|
|
3
19
|
## 109.18.0
|
|
4
20
|
|
|
5
21
|
### Minor Changes
|
|
@@ -15,6 +15,8 @@ var _ui = require("@atlaskit/editor-common/ui");
|
|
|
15
15
|
var _editorSharedStyles = require("@atlaskit/editor-shared-styles");
|
|
16
16
|
var _style = require("../../../ui/Renderer/style");
|
|
17
17
|
var _styles = require("./styles");
|
|
18
|
+
var _AnnotationRangeContext = require("../../../ui/annotations/contexts/AnnotationRangeContext");
|
|
19
|
+
var _AnnotationHoverContext = require("../../../ui/annotations/contexts/AnnotationHoverContext");
|
|
18
20
|
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
21
|
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
22
|
/** @jsx jsx */
|
|
@@ -144,6 +146,35 @@ var MediaSingleWithChildren = function MediaSingleWithChildren(props) {
|
|
|
144
146
|
height: height
|
|
145
147
|
};
|
|
146
148
|
}, [height, width]);
|
|
149
|
+
var _useAnnotationRangeDi = (0, _AnnotationRangeContext.useAnnotationRangeDispatch)(),
|
|
150
|
+
setHoverTarget = _useAnnotationRangeDi.setHoverTarget;
|
|
151
|
+
var _useAnnotationHoverDi = (0, _AnnotationHoverContext.useAnnotationHoverDispatch)(),
|
|
152
|
+
cancelTimeout = _useAnnotationHoverDi.cancelTimeout,
|
|
153
|
+
initiateTimeout = _useAnnotationHoverDi.initiateTimeout,
|
|
154
|
+
setIsWithinRange = _useAnnotationHoverDi.setIsWithinRange;
|
|
155
|
+
(0, _react.useEffect)(function () {
|
|
156
|
+
var mediaSingleElement = ref.current;
|
|
157
|
+
var handleMouseEnter = function handleMouseEnter(event) {
|
|
158
|
+
cancelTimeout();
|
|
159
|
+
if (event.buttons === 0) {
|
|
160
|
+
setHoverTarget && setHoverTarget(event.target);
|
|
161
|
+
setIsWithinRange(true);
|
|
162
|
+
}
|
|
163
|
+
};
|
|
164
|
+
var handleMouseLeave = function handleMouseLeave() {
|
|
165
|
+
initiateTimeout();
|
|
166
|
+
};
|
|
167
|
+
if (mediaSingleElement) {
|
|
168
|
+
mediaSingleElement.addEventListener('mouseenter', handleMouseEnter);
|
|
169
|
+
mediaSingleElement.addEventListener('mouseleave', handleMouseLeave);
|
|
170
|
+
}
|
|
171
|
+
return function () {
|
|
172
|
+
if (mediaSingleElement) {
|
|
173
|
+
mediaSingleElement.removeEventListener('mouseenter', handleMouseEnter);
|
|
174
|
+
mediaSingleElement.removeEventListener('mouseleave', handleMouseLeave);
|
|
175
|
+
}
|
|
176
|
+
};
|
|
177
|
+
}, [setHoverTarget, cancelTimeout, initiateTimeout, setIsWithinRange]);
|
|
147
178
|
|
|
148
179
|
// Note: in SSR mode the `window` object is not defined,
|
|
149
180
|
// therefore width here is 0, see:
|
package/dist/cjs/ui/MediaCard.js
CHANGED
|
@@ -21,7 +21,6 @@ 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");
|
|
25
24
|
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); }
|
|
26
25
|
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; }
|
|
27
26
|
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; }
|
|
@@ -269,7 +268,6 @@ var MediaCardView = exports.MediaCardView = /*#__PURE__*/function (_Component) {
|
|
|
269
268
|
shouldEnableDownloadButton = _this$props5.shouldEnableDownloadButton,
|
|
270
269
|
ssr = _this$props5.ssr,
|
|
271
270
|
mediaClient = _this$props5.mediaClient,
|
|
272
|
-
setHoverTarget = _this$props5.setHoverTarget,
|
|
273
271
|
dataAttributes = _this$props5.dataAttributes;
|
|
274
272
|
var isMobile = rendererAppearance === 'mobile';
|
|
275
273
|
var shouldPlayInline = useInlinePlayer !== undefined ? useInlinePlayer : true;
|
|
@@ -305,15 +303,7 @@ var MediaCardView = exports.MediaCardView = /*#__PURE__*/function (_Component) {
|
|
|
305
303
|
contextIdentifierProvider: contextIdentifierProvider,
|
|
306
304
|
originalDimensions: originalDimensions,
|
|
307
305
|
fileState: fileState
|
|
308
|
-
}), dataAttributes, {
|
|
309
|
-
onMouseEnter: function onMouseEnter(event) {
|
|
310
|
-
// We will not allow a hover target to be set if any mouse button is depressed during the mouse enter state.
|
|
311
|
-
// This could be due to the user trying to select text across the document.
|
|
312
|
-
if (event.buttons === 0) {
|
|
313
|
-
setHoverTarget && setHoverTarget(event.target);
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
}), /*#__PURE__*/_react.default.createElement(_mediaCard.Card, {
|
|
306
|
+
}), dataAttributes), /*#__PURE__*/_react.default.createElement(_mediaCard.Card, {
|
|
317
307
|
identifier: identifier,
|
|
318
308
|
alt: alt,
|
|
319
309
|
contextId: contextId,
|
|
@@ -371,11 +361,8 @@ var getClipboardAttrs = exports.getClipboardAttrs = function getClipboardAttrs(_
|
|
|
371
361
|
};
|
|
372
362
|
var MediaCardInternal = exports.MediaCardInternal = function MediaCardInternal(props) {
|
|
373
363
|
var mediaClient = (0, _react.useContext)(_mediaClientReact.MediaClientContext);
|
|
374
|
-
var _useAnnotationRangeDi = (0, _AnnotationRangeContext.useAnnotationRangeDispatch)(),
|
|
375
|
-
setHoverTarget = _useAnnotationRangeDi.setHoverTarget;
|
|
376
364
|
return /*#__PURE__*/_react.default.createElement(MediaCardView, (0, _extends2.default)({}, props, {
|
|
377
|
-
mediaClient: mediaClient
|
|
378
|
-
setHoverTarget: setHoverTarget
|
|
365
|
+
mediaClient: mediaClient
|
|
379
366
|
}));
|
|
380
367
|
};
|
|
381
368
|
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.
|
|
58
|
+
var packageVersion = "109.19.0";
|
|
59
59
|
var Renderer = exports.Renderer = /*#__PURE__*/function (_PureComponent) {
|
|
60
60
|
(0, _inherits2.default)(Renderer, _PureComponent);
|
|
61
61
|
var _super = _createSuper(Renderer);
|
|
@@ -0,0 +1,63 @@
|
|
|
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.useAnnotationHoverDispatch = exports.useAnnotationHoverContext = exports.AnnotationHoverContext = 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
|
+
var AnnotationHoverStateContext = /*#__PURE__*/(0, _react.createContext)({
|
|
14
|
+
isWithinRange: false
|
|
15
|
+
});
|
|
16
|
+
var AnnotationHoverDispatchContext = /*#__PURE__*/(0, _react.createContext)({
|
|
17
|
+
cancelTimeout: function cancelTimeout() {},
|
|
18
|
+
initiateTimeout: function initiateTimeout() {},
|
|
19
|
+
setIsWithinRange: function setIsWithinRange() {}
|
|
20
|
+
});
|
|
21
|
+
var AnnotationHoverContext = exports.AnnotationHoverContext = function AnnotationHoverContext(_ref) {
|
|
22
|
+
var children = _ref.children;
|
|
23
|
+
var _useState = (0, _react.useState)(false),
|
|
24
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
25
|
+
isWithinRange = _useState2[0],
|
|
26
|
+
setIsWithinRange = _useState2[1];
|
|
27
|
+
var timeoutHandler = (0, _react.useRef)();
|
|
28
|
+
var cancelTimeout = (0, _react.useCallback)(function () {
|
|
29
|
+
if (timeoutHandler) {
|
|
30
|
+
clearTimeout(timeoutHandler.current);
|
|
31
|
+
}
|
|
32
|
+
}, [timeoutHandler]);
|
|
33
|
+
var initiateTimeout = (0, _react.useCallback)(function () {
|
|
34
|
+
if (isWithinRange) {
|
|
35
|
+
timeoutHandler.current = setTimeout(function () {
|
|
36
|
+
setIsWithinRange(false);
|
|
37
|
+
}, 500);
|
|
38
|
+
}
|
|
39
|
+
}, [isWithinRange]);
|
|
40
|
+
var stateData = (0, _react.useMemo)(function () {
|
|
41
|
+
return {
|
|
42
|
+
isWithinRange: isWithinRange
|
|
43
|
+
};
|
|
44
|
+
}, [isWithinRange]);
|
|
45
|
+
var dispatchData = (0, _react.useMemo)(function () {
|
|
46
|
+
return {
|
|
47
|
+
cancelTimeout: cancelTimeout,
|
|
48
|
+
initiateTimeout: initiateTimeout,
|
|
49
|
+
setIsWithinRange: setIsWithinRange
|
|
50
|
+
};
|
|
51
|
+
}, [cancelTimeout, initiateTimeout, setIsWithinRange]);
|
|
52
|
+
return /*#__PURE__*/_react.default.createElement(AnnotationHoverStateContext.Provider, {
|
|
53
|
+
value: stateData
|
|
54
|
+
}, /*#__PURE__*/_react.default.createElement(AnnotationHoverDispatchContext.Provider, {
|
|
55
|
+
value: dispatchData
|
|
56
|
+
}, children));
|
|
57
|
+
};
|
|
58
|
+
var useAnnotationHoverContext = exports.useAnnotationHoverContext = function useAnnotationHoverContext() {
|
|
59
|
+
return (0, _react.useContext)(AnnotationHoverStateContext);
|
|
60
|
+
};
|
|
61
|
+
var useAnnotationHoverDispatch = exports.useAnnotationHoverDispatch = function useAnnotationHoverDispatch() {
|
|
62
|
+
return (0, _react.useContext)(AnnotationHoverDispatchContext);
|
|
63
|
+
};
|
|
@@ -162,9 +162,11 @@ var AnnotationRangeProvider = exports.AnnotationRangeProvider = function Annotat
|
|
|
162
162
|
});
|
|
163
163
|
}, []);
|
|
164
164
|
var setHoverTarget = (0, _react.useCallback)(function (target) {
|
|
165
|
+
// the HoverComponent expects an element deeply nested inside media, these classes work with the current implementation
|
|
166
|
+
var mediaNode = target.querySelector('.media-card-inline-player, .media-file-card-view');
|
|
165
167
|
var range = document.createRange();
|
|
166
|
-
range.setStartBefore(
|
|
167
|
-
range.setEndAfter(
|
|
168
|
+
range.setStartBefore(mediaNode);
|
|
169
|
+
range.setEndAfter(mediaNode);
|
|
168
170
|
dispatch({
|
|
169
171
|
type: 'setHover',
|
|
170
172
|
range: range
|
|
@@ -18,6 +18,7 @@ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e;
|
|
|
18
18
|
var Mounter = exports.Mounter = /*#__PURE__*/_react.default.memo(function (props) {
|
|
19
19
|
var Component = props.component,
|
|
20
20
|
range = props.range,
|
|
21
|
+
isWithinRange = props.isWithinRange,
|
|
21
22
|
isAnnotationAllowed = props.isAnnotationAllowed,
|
|
22
23
|
wrapperDOM = props.wrapperDOM,
|
|
23
24
|
onCloseProps = props.onClose,
|
|
@@ -123,6 +124,7 @@ var Mounter = exports.Mounter = /*#__PURE__*/_react.default.memo(function (props
|
|
|
123
124
|
}, [onCloseProps, removeDraftModeCallback, createAnalyticsEvent]);
|
|
124
125
|
return /*#__PURE__*/_react.default.createElement(Component, {
|
|
125
126
|
range: range,
|
|
127
|
+
isWithinRange: isWithinRange,
|
|
126
128
|
wrapperDOM: wrapperDOM.current,
|
|
127
129
|
isAnnotationAllowed: isAnnotationAllowed,
|
|
128
130
|
onClose: onCloseCallback,
|
|
@@ -9,6 +9,7 @@ var _react = _interopRequireWildcard(require("react"));
|
|
|
9
9
|
var _mounter = require("./mounter");
|
|
10
10
|
var _RendererActionsContext = require("../../RendererActionsContext");
|
|
11
11
|
var _AnnotationRangeContext = require("../contexts/AnnotationRangeContext");
|
|
12
|
+
var _AnnotationHoverContext = require("../contexts/AnnotationHoverContext");
|
|
12
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); }
|
|
13
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; }
|
|
14
15
|
var RangeValidator = exports.RangeValidator = function RangeValidator(props) {
|
|
@@ -23,11 +24,14 @@ var RangeValidator = exports.RangeValidator = function RangeValidator(props) {
|
|
|
23
24
|
var _useAnnotationRangeSt = (0, _AnnotationRangeContext.useAnnotationRangeState)(),
|
|
24
25
|
range = _useAnnotationRangeSt.range,
|
|
25
26
|
type = _useAnnotationRangeSt.type;
|
|
27
|
+
var _useAnnotationHoverCo = (0, _AnnotationHoverContext.useAnnotationHoverContext)(),
|
|
28
|
+
isWithinRange = _useAnnotationHoverCo.isWithinRange;
|
|
26
29
|
if (!range || type !== 'hover') {
|
|
27
30
|
return null;
|
|
28
31
|
}
|
|
29
32
|
var documentPosition = actions.getPositionFromRange(range);
|
|
30
33
|
return /*#__PURE__*/_react.default.createElement(_mounter.Mounter, {
|
|
34
|
+
isWithinRange: isWithinRange,
|
|
31
35
|
range: range,
|
|
32
36
|
wrapperDOM: rendererRef,
|
|
33
37
|
component: component,
|
|
@@ -26,6 +26,7 @@ var _useLoadAnnotations = require("./hooks/use-load-annotations");
|
|
|
26
26
|
var _useEvents = require("./hooks/use-events");
|
|
27
27
|
var _analyticsNext = require("@atlaskit/analytics-next");
|
|
28
28
|
var _AnnotationRangeContext = require("./contexts/AnnotationRangeContext");
|
|
29
|
+
var _AnnotationHoverContext = require("./contexts/AnnotationHoverContext");
|
|
29
30
|
var _draft = require("./draft");
|
|
30
31
|
var _element = require("./element");
|
|
31
32
|
var LoadAnnotations = /*#__PURE__*/_react.default.memo(function (_ref) {
|
|
@@ -54,12 +55,12 @@ var AnnotationsWrapper = exports.AnnotationsWrapper = function AnnotationsWrappe
|
|
|
54
55
|
value: inlineCommentAnnotationsState
|
|
55
56
|
}, /*#__PURE__*/_react.default.createElement(_AnnotationRangeContext.AnnotationRangeProvider, {
|
|
56
57
|
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, {
|
|
58
|
+
}, /*#__PURE__*/_react.default.createElement(_AnnotationHoverContext.AnnotationHoverContext, null, /*#__PURE__*/_react.default.createElement(_wrapper.AnnotationsContextWrapper, {
|
|
58
59
|
createAnalyticsEvent: createAnalyticsEvent,
|
|
59
60
|
rendererRef: rendererRef
|
|
60
61
|
}, /*#__PURE__*/_react.default.createElement(LoadAnnotations, {
|
|
61
62
|
adfDocument: adfDocument
|
|
62
63
|
}), /*#__PURE__*/_react.default.createElement(_view.AnnotationView, {
|
|
63
64
|
createAnalyticsEvent: createAnalyticsEvent
|
|
64
|
-
}), children))));
|
|
65
|
+
}), children)))));
|
|
65
66
|
};
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/extends";
|
|
2
2
|
/** @jsx jsx */
|
|
3
3
|
|
|
4
|
-
import { default as React, Fragment, useCallback, useContext, useMemo } from 'react';
|
|
4
|
+
import { default as React, Fragment, useCallback, useContext, useMemo, useEffect } from 'react';
|
|
5
5
|
import { jsx } from '@emotion/react';
|
|
6
6
|
import { injectIntl } from 'react-intl-next';
|
|
7
7
|
import { MediaSingle as UIMediaSingle, WidthContext } from '@atlaskit/editor-common/ui';
|
|
8
8
|
import { akEditorFullWidthLayoutWidth, akEditorDefaultLayoutWidth, akEditorWideLayoutWidth } from '@atlaskit/editor-shared-styles';
|
|
9
9
|
import { FullPagePadding } from '../../../ui/Renderer/style';
|
|
10
10
|
import { uiMediaSingleBaseStyles, uiMediaSingleLayoutStyles } from './styles';
|
|
11
|
+
import { useAnnotationRangeDispatch } from '../../../ui/annotations/contexts/AnnotationRangeContext';
|
|
12
|
+
import { useAnnotationHoverDispatch } from '../../../ui/annotations/contexts/AnnotationHoverContext';
|
|
11
13
|
const DEFAULT_WIDTH = 250;
|
|
12
14
|
const DEFAULT_HEIGHT = 200;
|
|
13
15
|
const isMediaElement = media => {
|
|
@@ -129,6 +131,37 @@ const MediaSingleWithChildren = props => {
|
|
|
129
131
|
width,
|
|
130
132
|
height
|
|
131
133
|
}), [height, width]);
|
|
134
|
+
const {
|
|
135
|
+
setHoverTarget
|
|
136
|
+
} = useAnnotationRangeDispatch();
|
|
137
|
+
const {
|
|
138
|
+
cancelTimeout,
|
|
139
|
+
initiateTimeout,
|
|
140
|
+
setIsWithinRange
|
|
141
|
+
} = useAnnotationHoverDispatch();
|
|
142
|
+
useEffect(() => {
|
|
143
|
+
const mediaSingleElement = ref.current;
|
|
144
|
+
const handleMouseEnter = event => {
|
|
145
|
+
cancelTimeout();
|
|
146
|
+
if (event.buttons === 0) {
|
|
147
|
+
setHoverTarget && setHoverTarget(event.target);
|
|
148
|
+
setIsWithinRange(true);
|
|
149
|
+
}
|
|
150
|
+
};
|
|
151
|
+
const handleMouseLeave = () => {
|
|
152
|
+
initiateTimeout();
|
|
153
|
+
};
|
|
154
|
+
if (mediaSingleElement) {
|
|
155
|
+
mediaSingleElement.addEventListener('mouseenter', handleMouseEnter);
|
|
156
|
+
mediaSingleElement.addEventListener('mouseleave', handleMouseLeave);
|
|
157
|
+
}
|
|
158
|
+
return () => {
|
|
159
|
+
if (mediaSingleElement) {
|
|
160
|
+
mediaSingleElement.removeEventListener('mouseenter', handleMouseEnter);
|
|
161
|
+
mediaSingleElement.removeEventListener('mouseleave', handleMouseLeave);
|
|
162
|
+
}
|
|
163
|
+
};
|
|
164
|
+
}, [setHoverTarget, cancelTimeout, initiateTimeout, setIsWithinRange]);
|
|
132
165
|
|
|
133
166
|
// Note: in SSR mode the `window` object is not defined,
|
|
134
167
|
// therefore width here is 0, see:
|
|
@@ -5,7 +5,6 @@ import { filter } from '@atlaskit/adf-utils/traverse';
|
|
|
5
5
|
import { Card, CardLoading, CardError } from '@atlaskit/media-card';
|
|
6
6
|
import { MediaClientContext } from '@atlaskit/media-client-react';
|
|
7
7
|
import { withImageLoader } from '@atlaskit/editor-common/utils';
|
|
8
|
-
import { useAnnotationRangeDispatch } from './annotations/contexts/AnnotationRangeContext';
|
|
9
8
|
export const mediaIdentifierMap = new Map();
|
|
10
9
|
export const getListOfIdentifiersFromDoc = doc => {
|
|
11
10
|
if (!doc) {
|
|
@@ -201,7 +200,6 @@ export class MediaCardView extends Component {
|
|
|
201
200
|
shouldEnableDownloadButton,
|
|
202
201
|
ssr,
|
|
203
202
|
mediaClient,
|
|
204
|
-
setHoverTarget,
|
|
205
203
|
dataAttributes
|
|
206
204
|
} = this.props;
|
|
207
205
|
const isMobile = rendererAppearance === 'mobile';
|
|
@@ -238,15 +236,7 @@ export class MediaCardView extends Component {
|
|
|
238
236
|
contextIdentifierProvider,
|
|
239
237
|
originalDimensions,
|
|
240
238
|
fileState
|
|
241
|
-
}), dataAttributes, {
|
|
242
|
-
onMouseEnter: event => {
|
|
243
|
-
// We will not allow a hover target to be set if any mouse button is depressed during the mouse enter state.
|
|
244
|
-
// This could be due to the user trying to select text across the document.
|
|
245
|
-
if (event.buttons === 0) {
|
|
246
|
-
setHoverTarget && setHoverTarget(event.target);
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
}), /*#__PURE__*/React.createElement(Card, {
|
|
239
|
+
}), dataAttributes), /*#__PURE__*/React.createElement(Card, {
|
|
250
240
|
identifier: identifier,
|
|
251
241
|
alt: alt,
|
|
252
242
|
contextId: contextId,
|
|
@@ -303,12 +293,8 @@ export const getClipboardAttrs = ({
|
|
|
303
293
|
};
|
|
304
294
|
export const MediaCardInternal = props => {
|
|
305
295
|
const mediaClient = useContext(MediaClientContext);
|
|
306
|
-
const {
|
|
307
|
-
setHoverTarget
|
|
308
|
-
} = useAnnotationRangeDispatch();
|
|
309
296
|
return /*#__PURE__*/React.createElement(MediaCardView, _extends({}, props, {
|
|
310
|
-
mediaClient: mediaClient
|
|
311
|
-
setHoverTarget: setHoverTarget
|
|
297
|
+
mediaClient: mediaClient
|
|
312
298
|
}));
|
|
313
299
|
};
|
|
314
300
|
export const MediaCard = withImageLoader(MediaCardInternal);
|
|
@@ -36,7 +36,7 @@ import { EditorMediaClientProvider } from '../../react/utils/EditorMediaClientPr
|
|
|
36
36
|
export const NORMAL_SEVERITY_THRESHOLD = 2000;
|
|
37
37
|
export const DEGRADED_SEVERITY_THRESHOLD = 3000;
|
|
38
38
|
const packageName = "@atlaskit/renderer";
|
|
39
|
-
const packageVersion = "109.
|
|
39
|
+
const packageVersion = "109.19.0";
|
|
40
40
|
export class Renderer extends PureComponent {
|
|
41
41
|
constructor(props) {
|
|
42
42
|
super(props);
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import React, { createContext, useState, useContext, useMemo, useRef, useCallback } from 'react';
|
|
2
|
+
const AnnotationHoverStateContext = /*#__PURE__*/createContext({
|
|
3
|
+
isWithinRange: false
|
|
4
|
+
});
|
|
5
|
+
const AnnotationHoverDispatchContext = /*#__PURE__*/createContext({
|
|
6
|
+
cancelTimeout: () => {},
|
|
7
|
+
initiateTimeout: () => {},
|
|
8
|
+
setIsWithinRange: () => {}
|
|
9
|
+
});
|
|
10
|
+
export const AnnotationHoverContext = ({
|
|
11
|
+
children
|
|
12
|
+
}) => {
|
|
13
|
+
const [isWithinRange, setIsWithinRange] = useState(false);
|
|
14
|
+
const timeoutHandler = useRef();
|
|
15
|
+
const cancelTimeout = useCallback(() => {
|
|
16
|
+
if (timeoutHandler) {
|
|
17
|
+
clearTimeout(timeoutHandler.current);
|
|
18
|
+
}
|
|
19
|
+
}, [timeoutHandler]);
|
|
20
|
+
const initiateTimeout = useCallback(() => {
|
|
21
|
+
if (isWithinRange) {
|
|
22
|
+
timeoutHandler.current = setTimeout(() => {
|
|
23
|
+
setIsWithinRange(false);
|
|
24
|
+
}, 500);
|
|
25
|
+
}
|
|
26
|
+
}, [isWithinRange]);
|
|
27
|
+
const stateData = useMemo(() => ({
|
|
28
|
+
isWithinRange
|
|
29
|
+
}), [isWithinRange]);
|
|
30
|
+
const dispatchData = useMemo(() => ({
|
|
31
|
+
cancelTimeout,
|
|
32
|
+
initiateTimeout,
|
|
33
|
+
setIsWithinRange
|
|
34
|
+
}), [cancelTimeout, initiateTimeout, setIsWithinRange]);
|
|
35
|
+
return /*#__PURE__*/React.createElement(AnnotationHoverStateContext.Provider, {
|
|
36
|
+
value: stateData
|
|
37
|
+
}, /*#__PURE__*/React.createElement(AnnotationHoverDispatchContext.Provider, {
|
|
38
|
+
value: dispatchData
|
|
39
|
+
}, children));
|
|
40
|
+
};
|
|
41
|
+
export const useAnnotationHoverContext = () => {
|
|
42
|
+
return useContext(AnnotationHoverStateContext);
|
|
43
|
+
};
|
|
44
|
+
export const useAnnotationHoverDispatch = () => {
|
|
45
|
+
return useContext(AnnotationHoverDispatchContext);
|
|
46
|
+
};
|
|
@@ -145,9 +145,11 @@ export const AnnotationRangeProvider = ({
|
|
|
145
145
|
});
|
|
146
146
|
}, []);
|
|
147
147
|
const setHoverTarget = useCallback(target => {
|
|
148
|
+
// the HoverComponent expects an element deeply nested inside media, these classes work with the current implementation
|
|
149
|
+
const mediaNode = target.querySelector('.media-card-inline-player, .media-file-card-view');
|
|
148
150
|
const range = document.createRange();
|
|
149
|
-
range.setStartBefore(
|
|
150
|
-
range.setEndAfter(
|
|
151
|
+
range.setStartBefore(mediaNode);
|
|
152
|
+
range.setEndAfter(mediaNode);
|
|
151
153
|
dispatch({
|
|
152
154
|
type: 'setHover',
|
|
153
155
|
range
|
|
@@ -8,6 +8,7 @@ export const Mounter = /*#__PURE__*/React.memo(props => {
|
|
|
8
8
|
const {
|
|
9
9
|
component: Component,
|
|
10
10
|
range,
|
|
11
|
+
isWithinRange,
|
|
11
12
|
isAnnotationAllowed,
|
|
12
13
|
wrapperDOM,
|
|
13
14
|
onClose: onCloseProps,
|
|
@@ -110,6 +111,7 @@ export const Mounter = /*#__PURE__*/React.memo(props => {
|
|
|
110
111
|
}, [onCloseProps, removeDraftModeCallback, createAnalyticsEvent]);
|
|
111
112
|
return /*#__PURE__*/React.createElement(Component, {
|
|
112
113
|
range: range,
|
|
114
|
+
isWithinRange: isWithinRange,
|
|
113
115
|
wrapperDOM: wrapperDOM.current,
|
|
114
116
|
isAnnotationAllowed: isAnnotationAllowed,
|
|
115
117
|
onClose: onCloseCallback,
|
|
@@ -2,6 +2,7 @@ import React, { useContext } from 'react';
|
|
|
2
2
|
import { Mounter } from './mounter';
|
|
3
3
|
import { RendererContext as ActionsContext } from '../../RendererActionsContext';
|
|
4
4
|
import { useAnnotationRangeDispatch, useAnnotationRangeState } from '../contexts/AnnotationRangeContext';
|
|
5
|
+
import { useAnnotationHoverContext } from '../contexts/AnnotationHoverContext';
|
|
5
6
|
export const RangeValidator = props => {
|
|
6
7
|
const {
|
|
7
8
|
component,
|
|
@@ -18,11 +19,15 @@ export const RangeValidator = props => {
|
|
|
18
19
|
range,
|
|
19
20
|
type
|
|
20
21
|
} = useAnnotationRangeState();
|
|
22
|
+
const {
|
|
23
|
+
isWithinRange
|
|
24
|
+
} = useAnnotationHoverContext();
|
|
21
25
|
if (!range || type !== 'hover') {
|
|
22
26
|
return null;
|
|
23
27
|
}
|
|
24
28
|
const documentPosition = actions.getPositionFromRange(range);
|
|
25
29
|
return /*#__PURE__*/React.createElement(Mounter, {
|
|
30
|
+
isWithinRange: isWithinRange,
|
|
26
31
|
range: range,
|
|
27
32
|
wrapperDOM: rendererRef,
|
|
28
33
|
component: component,
|
|
@@ -7,6 +7,7 @@ import { useLoadAnnotations } from './hooks/use-load-annotations';
|
|
|
7
7
|
import { useAnnotationStateByTypeEvent } from './hooks/use-events';
|
|
8
8
|
import { useAnalyticsEvents } from '@atlaskit/analytics-next';
|
|
9
9
|
import { AnnotationRangeProvider } from './contexts/AnnotationRangeContext';
|
|
10
|
+
import { AnnotationHoverContext } from './contexts/AnnotationHoverContext';
|
|
10
11
|
const LoadAnnotations = /*#__PURE__*/React.memo(({
|
|
11
12
|
adfDocument
|
|
12
13
|
}) => {
|
|
@@ -37,14 +38,14 @@ export const AnnotationsWrapper = props => {
|
|
|
37
38
|
value: inlineCommentAnnotationsState
|
|
38
39
|
}, /*#__PURE__*/React.createElement(AnnotationRangeProvider, {
|
|
39
40
|
allowCommentsOnMedia: (_annotationProvider$i = annotationProvider === null || annotationProvider === void 0 ? void 0 : (_annotationProvider$i2 = annotationProvider.inlineComment) === null || _annotationProvider$i2 === void 0 ? void 0 : _annotationProvider$i2.allowCommentsOnMedia) !== null && _annotationProvider$i !== void 0 ? _annotationProvider$i : false
|
|
40
|
-
}, /*#__PURE__*/React.createElement(AnnotationsContextWrapper, {
|
|
41
|
+
}, /*#__PURE__*/React.createElement(AnnotationHoverContext, null, /*#__PURE__*/React.createElement(AnnotationsContextWrapper, {
|
|
41
42
|
createAnalyticsEvent: createAnalyticsEvent,
|
|
42
43
|
rendererRef: rendererRef
|
|
43
44
|
}, /*#__PURE__*/React.createElement(LoadAnnotations, {
|
|
44
45
|
adfDocument: adfDocument
|
|
45
46
|
}), /*#__PURE__*/React.createElement(AnnotationView, {
|
|
46
47
|
createAnalyticsEvent: createAnalyticsEvent
|
|
47
|
-
}), children))));
|
|
48
|
+
}), children)))));
|
|
48
49
|
};
|
|
49
50
|
export { TextWithAnnotationDraft } from './draft';
|
|
50
51
|
export { MarkElement as AnnotationMark } from './element';
|
|
@@ -2,13 +2,15 @@ import _extends from "@babel/runtime/helpers/extends";
|
|
|
2
2
|
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
3
3
|
/** @jsx jsx */
|
|
4
4
|
|
|
5
|
-
import { default as React, Fragment, useCallback, useContext, useMemo } from 'react';
|
|
5
|
+
import { default as React, Fragment, useCallback, useContext, useMemo, useEffect } from 'react';
|
|
6
6
|
import { jsx } from '@emotion/react';
|
|
7
7
|
import { injectIntl } from 'react-intl-next';
|
|
8
8
|
import { MediaSingle as UIMediaSingle, WidthContext } from '@atlaskit/editor-common/ui';
|
|
9
9
|
import { akEditorFullWidthLayoutWidth, akEditorDefaultLayoutWidth, akEditorWideLayoutWidth } from '@atlaskit/editor-shared-styles';
|
|
10
10
|
import { FullPagePadding } from '../../../ui/Renderer/style';
|
|
11
11
|
import { uiMediaSingleBaseStyles, uiMediaSingleLayoutStyles } from './styles';
|
|
12
|
+
import { useAnnotationRangeDispatch } from '../../../ui/annotations/contexts/AnnotationRangeContext';
|
|
13
|
+
import { useAnnotationHoverDispatch } from '../../../ui/annotations/contexts/AnnotationHoverContext';
|
|
12
14
|
var DEFAULT_WIDTH = 250;
|
|
13
15
|
var DEFAULT_HEIGHT = 200;
|
|
14
16
|
var isMediaElement = function isMediaElement(media) {
|
|
@@ -134,6 +136,35 @@ var MediaSingleWithChildren = function MediaSingleWithChildren(props) {
|
|
|
134
136
|
height: height
|
|
135
137
|
};
|
|
136
138
|
}, [height, width]);
|
|
139
|
+
var _useAnnotationRangeDi = useAnnotationRangeDispatch(),
|
|
140
|
+
setHoverTarget = _useAnnotationRangeDi.setHoverTarget;
|
|
141
|
+
var _useAnnotationHoverDi = useAnnotationHoverDispatch(),
|
|
142
|
+
cancelTimeout = _useAnnotationHoverDi.cancelTimeout,
|
|
143
|
+
initiateTimeout = _useAnnotationHoverDi.initiateTimeout,
|
|
144
|
+
setIsWithinRange = _useAnnotationHoverDi.setIsWithinRange;
|
|
145
|
+
useEffect(function () {
|
|
146
|
+
var mediaSingleElement = ref.current;
|
|
147
|
+
var handleMouseEnter = function handleMouseEnter(event) {
|
|
148
|
+
cancelTimeout();
|
|
149
|
+
if (event.buttons === 0) {
|
|
150
|
+
setHoverTarget && setHoverTarget(event.target);
|
|
151
|
+
setIsWithinRange(true);
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
var handleMouseLeave = function handleMouseLeave() {
|
|
155
|
+
initiateTimeout();
|
|
156
|
+
};
|
|
157
|
+
if (mediaSingleElement) {
|
|
158
|
+
mediaSingleElement.addEventListener('mouseenter', handleMouseEnter);
|
|
159
|
+
mediaSingleElement.addEventListener('mouseleave', handleMouseLeave);
|
|
160
|
+
}
|
|
161
|
+
return function () {
|
|
162
|
+
if (mediaSingleElement) {
|
|
163
|
+
mediaSingleElement.removeEventListener('mouseenter', handleMouseEnter);
|
|
164
|
+
mediaSingleElement.removeEventListener('mouseleave', handleMouseLeave);
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
}, [setHoverTarget, cancelTimeout, initiateTimeout, setIsWithinRange]);
|
|
137
168
|
|
|
138
169
|
// Note: in SSR mode the `window` object is not defined,
|
|
139
170
|
// therefore width here is 0, see:
|
package/dist/esm/ui/MediaCard.js
CHANGED
|
@@ -17,7 +17,6 @@ import { filter } from '@atlaskit/adf-utils/traverse';
|
|
|
17
17
|
import { Card, CardLoading, CardError } from '@atlaskit/media-card';
|
|
18
18
|
import { MediaClientContext } from '@atlaskit/media-client-react';
|
|
19
19
|
import { withImageLoader } from '@atlaskit/editor-common/utils';
|
|
20
|
-
import { useAnnotationRangeDispatch } from './annotations/contexts/AnnotationRangeContext';
|
|
21
20
|
export var mediaIdentifierMap = new Map();
|
|
22
21
|
export var getListOfIdentifiersFromDoc = function getListOfIdentifiersFromDoc(doc) {
|
|
23
22
|
if (!doc) {
|
|
@@ -259,7 +258,6 @@ export var MediaCardView = /*#__PURE__*/function (_Component) {
|
|
|
259
258
|
shouldEnableDownloadButton = _this$props5.shouldEnableDownloadButton,
|
|
260
259
|
ssr = _this$props5.ssr,
|
|
261
260
|
mediaClient = _this$props5.mediaClient,
|
|
262
|
-
setHoverTarget = _this$props5.setHoverTarget,
|
|
263
261
|
dataAttributes = _this$props5.dataAttributes;
|
|
264
262
|
var isMobile = rendererAppearance === 'mobile';
|
|
265
263
|
var shouldPlayInline = useInlinePlayer !== undefined ? useInlinePlayer : true;
|
|
@@ -295,15 +293,7 @@ export var MediaCardView = /*#__PURE__*/function (_Component) {
|
|
|
295
293
|
contextIdentifierProvider: contextIdentifierProvider,
|
|
296
294
|
originalDimensions: originalDimensions,
|
|
297
295
|
fileState: fileState
|
|
298
|
-
}), dataAttributes, {
|
|
299
|
-
onMouseEnter: function onMouseEnter(event) {
|
|
300
|
-
// We will not allow a hover target to be set if any mouse button is depressed during the mouse enter state.
|
|
301
|
-
// This could be due to the user trying to select text across the document.
|
|
302
|
-
if (event.buttons === 0) {
|
|
303
|
-
setHoverTarget && setHoverTarget(event.target);
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
}), /*#__PURE__*/React.createElement(Card, {
|
|
296
|
+
}), dataAttributes), /*#__PURE__*/React.createElement(Card, {
|
|
307
297
|
identifier: identifier,
|
|
308
298
|
alt: alt,
|
|
309
299
|
contextId: contextId,
|
|
@@ -361,11 +351,8 @@ export var getClipboardAttrs = function getClipboardAttrs(_ref2) {
|
|
|
361
351
|
};
|
|
362
352
|
export var MediaCardInternal = function MediaCardInternal(props) {
|
|
363
353
|
var mediaClient = useContext(MediaClientContext);
|
|
364
|
-
var _useAnnotationRangeDi = useAnnotationRangeDispatch(),
|
|
365
|
-
setHoverTarget = _useAnnotationRangeDi.setHoverTarget;
|
|
366
354
|
return /*#__PURE__*/React.createElement(MediaCardView, _extends({}, props, {
|
|
367
|
-
mediaClient: mediaClient
|
|
368
|
-
setHoverTarget: setHoverTarget
|
|
355
|
+
mediaClient: mediaClient
|
|
369
356
|
}));
|
|
370
357
|
};
|
|
371
358
|
export var MediaCard = withImageLoader(MediaCardInternal);
|
|
@@ -46,7 +46,7 @@ import { EditorMediaClientProvider } from '../../react/utils/EditorMediaClientPr
|
|
|
46
46
|
export var NORMAL_SEVERITY_THRESHOLD = 2000;
|
|
47
47
|
export var DEGRADED_SEVERITY_THRESHOLD = 3000;
|
|
48
48
|
var packageName = "@atlaskit/renderer";
|
|
49
|
-
var packageVersion = "109.
|
|
49
|
+
var packageVersion = "109.19.0";
|
|
50
50
|
export var Renderer = /*#__PURE__*/function (_PureComponent) {
|
|
51
51
|
_inherits(Renderer, _PureComponent);
|
|
52
52
|
var _super = _createSuper(Renderer);
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
2
|
+
import React, { createContext, useState, useContext, useMemo, useRef, useCallback } from 'react';
|
|
3
|
+
var AnnotationHoverStateContext = /*#__PURE__*/createContext({
|
|
4
|
+
isWithinRange: false
|
|
5
|
+
});
|
|
6
|
+
var AnnotationHoverDispatchContext = /*#__PURE__*/createContext({
|
|
7
|
+
cancelTimeout: function cancelTimeout() {},
|
|
8
|
+
initiateTimeout: function initiateTimeout() {},
|
|
9
|
+
setIsWithinRange: function setIsWithinRange() {}
|
|
10
|
+
});
|
|
11
|
+
export var AnnotationHoverContext = function AnnotationHoverContext(_ref) {
|
|
12
|
+
var children = _ref.children;
|
|
13
|
+
var _useState = useState(false),
|
|
14
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
15
|
+
isWithinRange = _useState2[0],
|
|
16
|
+
setIsWithinRange = _useState2[1];
|
|
17
|
+
var timeoutHandler = useRef();
|
|
18
|
+
var cancelTimeout = useCallback(function () {
|
|
19
|
+
if (timeoutHandler) {
|
|
20
|
+
clearTimeout(timeoutHandler.current);
|
|
21
|
+
}
|
|
22
|
+
}, [timeoutHandler]);
|
|
23
|
+
var initiateTimeout = useCallback(function () {
|
|
24
|
+
if (isWithinRange) {
|
|
25
|
+
timeoutHandler.current = setTimeout(function () {
|
|
26
|
+
setIsWithinRange(false);
|
|
27
|
+
}, 500);
|
|
28
|
+
}
|
|
29
|
+
}, [isWithinRange]);
|
|
30
|
+
var stateData = useMemo(function () {
|
|
31
|
+
return {
|
|
32
|
+
isWithinRange: isWithinRange
|
|
33
|
+
};
|
|
34
|
+
}, [isWithinRange]);
|
|
35
|
+
var dispatchData = useMemo(function () {
|
|
36
|
+
return {
|
|
37
|
+
cancelTimeout: cancelTimeout,
|
|
38
|
+
initiateTimeout: initiateTimeout,
|
|
39
|
+
setIsWithinRange: setIsWithinRange
|
|
40
|
+
};
|
|
41
|
+
}, [cancelTimeout, initiateTimeout, setIsWithinRange]);
|
|
42
|
+
return /*#__PURE__*/React.createElement(AnnotationHoverStateContext.Provider, {
|
|
43
|
+
value: stateData
|
|
44
|
+
}, /*#__PURE__*/React.createElement(AnnotationHoverDispatchContext.Provider, {
|
|
45
|
+
value: dispatchData
|
|
46
|
+
}, children));
|
|
47
|
+
};
|
|
48
|
+
export var useAnnotationHoverContext = function useAnnotationHoverContext() {
|
|
49
|
+
return useContext(AnnotationHoverStateContext);
|
|
50
|
+
};
|
|
51
|
+
export var useAnnotationHoverDispatch = function useAnnotationHoverDispatch() {
|
|
52
|
+
return useContext(AnnotationHoverDispatchContext);
|
|
53
|
+
};
|
|
@@ -152,9 +152,11 @@ export var AnnotationRangeProvider = function AnnotationRangeProvider(_ref) {
|
|
|
152
152
|
});
|
|
153
153
|
}, []);
|
|
154
154
|
var setHoverTarget = useCallback(function (target) {
|
|
155
|
+
// the HoverComponent expects an element deeply nested inside media, these classes work with the current implementation
|
|
156
|
+
var mediaNode = target.querySelector('.media-card-inline-player, .media-file-card-view');
|
|
155
157
|
var range = document.createRange();
|
|
156
|
-
range.setStartBefore(
|
|
157
|
-
range.setEndAfter(
|
|
158
|
+
range.setStartBefore(mediaNode);
|
|
159
|
+
range.setEndAfter(mediaNode);
|
|
158
160
|
dispatch({
|
|
159
161
|
type: 'setHover',
|
|
160
162
|
range: range
|
|
@@ -8,6 +8,7 @@ import { RendererContext as ActionsContext } from '../../RendererActionsContext'
|
|
|
8
8
|
export var Mounter = /*#__PURE__*/React.memo(function (props) {
|
|
9
9
|
var Component = props.component,
|
|
10
10
|
range = props.range,
|
|
11
|
+
isWithinRange = props.isWithinRange,
|
|
11
12
|
isAnnotationAllowed = props.isAnnotationAllowed,
|
|
12
13
|
wrapperDOM = props.wrapperDOM,
|
|
13
14
|
onCloseProps = props.onClose,
|
|
@@ -113,6 +114,7 @@ export var Mounter = /*#__PURE__*/React.memo(function (props) {
|
|
|
113
114
|
}, [onCloseProps, removeDraftModeCallback, createAnalyticsEvent]);
|
|
114
115
|
return /*#__PURE__*/React.createElement(Component, {
|
|
115
116
|
range: range,
|
|
117
|
+
isWithinRange: isWithinRange,
|
|
116
118
|
wrapperDOM: wrapperDOM.current,
|
|
117
119
|
isAnnotationAllowed: isAnnotationAllowed,
|
|
118
120
|
onClose: onCloseCallback,
|
|
@@ -2,6 +2,7 @@ import React, { useContext } from 'react';
|
|
|
2
2
|
import { Mounter } from './mounter';
|
|
3
3
|
import { RendererContext as ActionsContext } from '../../RendererActionsContext';
|
|
4
4
|
import { useAnnotationRangeDispatch, useAnnotationRangeState } from '../contexts/AnnotationRangeContext';
|
|
5
|
+
import { useAnnotationHoverContext } from '../contexts/AnnotationHoverContext';
|
|
5
6
|
export var RangeValidator = function RangeValidator(props) {
|
|
6
7
|
var component = props.component,
|
|
7
8
|
rendererRef = props.rendererRef,
|
|
@@ -14,11 +15,14 @@ export var RangeValidator = function RangeValidator(props) {
|
|
|
14
15
|
var _useAnnotationRangeSt = useAnnotationRangeState(),
|
|
15
16
|
range = _useAnnotationRangeSt.range,
|
|
16
17
|
type = _useAnnotationRangeSt.type;
|
|
18
|
+
var _useAnnotationHoverCo = useAnnotationHoverContext(),
|
|
19
|
+
isWithinRange = _useAnnotationHoverCo.isWithinRange;
|
|
17
20
|
if (!range || type !== 'hover') {
|
|
18
21
|
return null;
|
|
19
22
|
}
|
|
20
23
|
var documentPosition = actions.getPositionFromRange(range);
|
|
21
24
|
return /*#__PURE__*/React.createElement(Mounter, {
|
|
25
|
+
isWithinRange: isWithinRange,
|
|
22
26
|
range: range,
|
|
23
27
|
wrapperDOM: rendererRef,
|
|
24
28
|
component: component,
|
|
@@ -7,6 +7,7 @@ import { useLoadAnnotations } from './hooks/use-load-annotations';
|
|
|
7
7
|
import { useAnnotationStateByTypeEvent } from './hooks/use-events';
|
|
8
8
|
import { useAnalyticsEvents } from '@atlaskit/analytics-next';
|
|
9
9
|
import { AnnotationRangeProvider } from './contexts/AnnotationRangeContext';
|
|
10
|
+
import { AnnotationHoverContext } from './contexts/AnnotationHoverContext';
|
|
10
11
|
var LoadAnnotations = /*#__PURE__*/React.memo(function (_ref) {
|
|
11
12
|
var adfDocument = _ref.adfDocument;
|
|
12
13
|
useLoadAnnotations({
|
|
@@ -33,14 +34,14 @@ export var AnnotationsWrapper = function AnnotationsWrapper(props) {
|
|
|
33
34
|
value: inlineCommentAnnotationsState
|
|
34
35
|
}, /*#__PURE__*/React.createElement(AnnotationRangeProvider, {
|
|
35
36
|
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
|
|
36
|
-
}, /*#__PURE__*/React.createElement(AnnotationsContextWrapper, {
|
|
37
|
+
}, /*#__PURE__*/React.createElement(AnnotationHoverContext, null, /*#__PURE__*/React.createElement(AnnotationsContextWrapper, {
|
|
37
38
|
createAnalyticsEvent: createAnalyticsEvent,
|
|
38
39
|
rendererRef: rendererRef
|
|
39
40
|
}, /*#__PURE__*/React.createElement(LoadAnnotations, {
|
|
40
41
|
adfDocument: adfDocument
|
|
41
42
|
}), /*#__PURE__*/React.createElement(AnnotationView, {
|
|
42
43
|
createAnalyticsEvent: createAnalyticsEvent
|
|
43
|
-
}), children))));
|
|
44
|
+
}), children)))));
|
|
44
45
|
};
|
|
45
46
|
export { TextWithAnnotationDraft } from './draft';
|
|
46
47
|
export { MarkElement as AnnotationMark } from './element';
|
|
@@ -49,7 +49,6 @@ export declare const mediaIdentifierMap: Map<string, Identifier>;
|
|
|
49
49
|
export declare const getListOfIdentifiersFromDoc: (doc?: ADFEntity) => Identifier[];
|
|
50
50
|
export declare class MediaCardView extends Component<MediaCardProps & {
|
|
51
51
|
mediaClient?: MediaClient;
|
|
52
|
-
setHoverTarget?: (target: HTMLElement) => void;
|
|
53
52
|
}, State> {
|
|
54
53
|
state: State;
|
|
55
54
|
componentDidMount(): Promise<void>;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
export interface AnnotationHoverStateContext {
|
|
3
|
+
isWithinRange: boolean;
|
|
4
|
+
}
|
|
5
|
+
export interface AnnotationHoverDispatchContext {
|
|
6
|
+
cancelTimeout: () => void;
|
|
7
|
+
initiateTimeout: () => void;
|
|
8
|
+
setIsWithinRange: (isWithinRange: boolean) => void;
|
|
9
|
+
}
|
|
10
|
+
export declare const AnnotationHoverContext: ({ children, }: {
|
|
11
|
+
children?: ReactNode;
|
|
12
|
+
}) => JSX.Element;
|
|
13
|
+
export declare const useAnnotationHoverContext: () => AnnotationHoverStateContext;
|
|
14
|
+
export declare const useAnnotationHoverDispatch: () => AnnotationHoverDispatchContext;
|
|
@@ -5,6 +5,7 @@ import type { Position } from '../types';
|
|
|
5
5
|
import type { CreateUIAnalyticsEvent } from '@atlaskit/analytics-next';
|
|
6
6
|
type Props = {
|
|
7
7
|
range: Range;
|
|
8
|
+
isWithinRange: boolean;
|
|
8
9
|
component: React.ComponentType<InlineCommentHoverComponentProps>;
|
|
9
10
|
wrapperDOM: React.RefObject<HTMLDivElement>;
|
|
10
11
|
documentPosition: Position | false;
|
|
@@ -49,7 +49,6 @@ export declare const mediaIdentifierMap: Map<string, Identifier>;
|
|
|
49
49
|
export declare const getListOfIdentifiersFromDoc: (doc?: ADFEntity) => Identifier[];
|
|
50
50
|
export declare class MediaCardView extends Component<MediaCardProps & {
|
|
51
51
|
mediaClient?: MediaClient;
|
|
52
|
-
setHoverTarget?: (target: HTMLElement) => void;
|
|
53
52
|
}, State> {
|
|
54
53
|
state: State;
|
|
55
54
|
componentDidMount(): Promise<void>;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
2
|
+
export interface AnnotationHoverStateContext {
|
|
3
|
+
isWithinRange: boolean;
|
|
4
|
+
}
|
|
5
|
+
export interface AnnotationHoverDispatchContext {
|
|
6
|
+
cancelTimeout: () => void;
|
|
7
|
+
initiateTimeout: () => void;
|
|
8
|
+
setIsWithinRange: (isWithinRange: boolean) => void;
|
|
9
|
+
}
|
|
10
|
+
export declare const AnnotationHoverContext: ({ children, }: {
|
|
11
|
+
children?: ReactNode;
|
|
12
|
+
}) => JSX.Element;
|
|
13
|
+
export declare const useAnnotationHoverContext: () => AnnotationHoverStateContext;
|
|
14
|
+
export declare const useAnnotationHoverDispatch: () => AnnotationHoverDispatchContext;
|
|
@@ -5,6 +5,7 @@ import type { Position } from '../types';
|
|
|
5
5
|
import type { CreateUIAnalyticsEvent } from '@atlaskit/analytics-next';
|
|
6
6
|
type Props = {
|
|
7
7
|
range: Range;
|
|
8
|
+
isWithinRange: boolean;
|
|
8
9
|
component: React.ComponentType<InlineCommentHoverComponentProps>;
|
|
9
10
|
wrapperDOM: React.RefObject<HTMLDivElement>;
|
|
10
11
|
documentPosition: Position | false;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlaskit/renderer",
|
|
3
|
-
"version": "109.
|
|
3
|
+
"version": "109.19.0",
|
|
4
4
|
"description": "Renderer component",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"registry": "https://registry.npmjs.org/"
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"@atlaskit/analytics-next": "^9.2.0",
|
|
32
32
|
"@atlaskit/button": "^17.12.0",
|
|
33
33
|
"@atlaskit/code": "^15.1.0",
|
|
34
|
-
"@atlaskit/editor-common": "^78.
|
|
34
|
+
"@atlaskit/editor-common": "^78.29.0",
|
|
35
35
|
"@atlaskit/editor-json-transformer": "^8.10.0",
|
|
36
36
|
"@atlaskit/editor-palette": "1.5.3",
|
|
37
37
|
"@atlaskit/editor-prosemirror": "3.0.0",
|
|
@@ -71,7 +71,7 @@
|
|
|
71
71
|
"@af/integration-testing": "*",
|
|
72
72
|
"@af/visual-regression": "*",
|
|
73
73
|
"@atlaskit/analytics-gas-types": "^5.1.0",
|
|
74
|
-
"@atlaskit/css-reset": "^6.
|
|
74
|
+
"@atlaskit/css-reset": "^6.9.0",
|
|
75
75
|
"@atlaskit/editor-test-helpers": "^18.20.0",
|
|
76
76
|
"@atlaskit/link-provider": "^1.9.0",
|
|
77
77
|
"@atlaskit/link-test-helpers": "^7.0.0",
|