@atlaskit/renderer 109.53.2 → 109.53.3

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 CHANGED
@@ -1,5 +1,13 @@
1
1
  # @atlaskit/renderer
2
2
 
3
+ ## 109.53.3
4
+
5
+ ### Patch Changes
6
+
7
+ - [#138899](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/138899)
8
+ [`e18d6c037fd51`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/e18d6c037fd51) -
9
+ Fix comment button disabled on triple click
10
+
3
11
  ## 109.53.2
4
12
 
5
13
  ### Patch Changes
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.createAnnotationStep = createAnnotationStep;
7
7
  exports.getPosFromRange = getPosFromRange;
8
+ exports.isRoot = isRoot;
8
9
  exports.resolvePos = resolvePos;
9
10
  var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
10
11
  var _transform = require("@atlaskit/editor-prosemirror/transform");
@@ -63,7 +63,7 @@ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.
63
63
  var NORMAL_SEVERITY_THRESHOLD = exports.NORMAL_SEVERITY_THRESHOLD = 2000;
64
64
  var DEGRADED_SEVERITY_THRESHOLD = exports.DEGRADED_SEVERITY_THRESHOLD = 3000;
65
65
  var packageName = "@atlaskit/renderer";
66
- var packageVersion = "109.53.2";
66
+ var packageVersion = "109.53.3";
67
67
  var defaultNodeComponents = exports.defaultNodeComponents = _nodes.nodeToReact;
68
68
  var Renderer = exports.Renderer = /*#__PURE__*/function (_PureComponent) {
69
69
  (0, _inherits2.default)(Renderer, _PureComponent);
@@ -5,8 +5,10 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.useUserSelectionRange = void 0;
7
7
  var _react = require("react");
8
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
8
9
  var _AnnotationRangeContext = require("../contexts/AnnotationRangeContext");
9
10
  var _utils = require("./utils");
11
+ var _steps = require("../../../steps");
10
12
  var useUserSelectionRange = exports.useUserSelectionRange = function useUserSelectionRange(props) {
11
13
  var rendererDOM = props.rendererRef.current;
12
14
  var selectionTimeoutRef = (0, _react.useRef)();
@@ -32,6 +34,27 @@ var useUserSelectionRange = exports.useUserSelectionRange = function useUserSele
32
34
  }
33
35
  var _range = sel.getRangeAt(0);
34
36
  if (rendererDOM && (0, _utils.isRangeInsideOfRendererContainer)(rendererDOM, _range)) {
37
+ if ((0, _platformFeatureFlags.fg)('platform_editor_allow_annotation_triple_click')) {
38
+ var startContainer = _range.startContainer,
39
+ endContainer = _range.endContainer,
40
+ commonAncestorContainer = _range.commonAncestorContainer;
41
+
42
+ // ED-23493
43
+ // On triple-click in Chrome and Safari, the native Selection API's range has endContainer as a non-text node
44
+ // and commonAncestorContainer as root level div.ak-renderer-document when the node is followed by div or hr.
45
+
46
+ // Triple clicks are the only case that can cause the endContainer to be a non-text node
47
+ // Same check for highlight range logic in confluence/next/packages/comments-util/src/domUtils.ts Line 180
48
+ var isTripleClick = endContainer.nodeType !== Node.TEXT_NODE;
49
+
50
+ // isAnnotationAllowedOnRange range validation is checking if the parent container is root element and disable the comment if it is.
51
+ // platform/packages/editor/renderer/src/steps/index.ts Line 180
52
+
53
+ // This workaround ensures the endContainer is set to a text node when endContainer is non-text and the parent container is the root element
54
+ if (isTripleClick && (0, _steps.isRoot)(commonAncestorContainer)) {
55
+ _range.setEnd(startContainer, startContainer.length || 0);
56
+ }
57
+ }
35
58
  setRange(_range.cloneRange());
36
59
  }
37
60
  }, 250);
@@ -124,7 +124,7 @@ function resolveNodePos(node) {
124
124
  }
125
125
  return resolvedPos;
126
126
  }
127
- function isRoot(element) {
127
+ export function isRoot(element) {
128
128
  return !!element && element.classList.contains('ak-renderer-document');
129
129
  }
130
130
  export function resolvePos(node, offset, findEnd = false) {
@@ -45,7 +45,7 @@ import { nodeToReact } from '../../react/nodes';
45
45
  export const NORMAL_SEVERITY_THRESHOLD = 2000;
46
46
  export const DEGRADED_SEVERITY_THRESHOLD = 3000;
47
47
  const packageName = "@atlaskit/renderer";
48
- const packageVersion = "109.53.2";
48
+ const packageVersion = "109.53.3";
49
49
  export const defaultNodeComponents = nodeToReact;
50
50
  export class Renderer extends PureComponent {
51
51
  constructor(props) {
@@ -1,6 +1,8 @@
1
1
  import { useEffect, useRef } from 'react';
2
+ import { fg } from '@atlaskit/platform-feature-flags';
2
3
  import { useAnnotationRangeDispatch, useAnnotationRangeState } from '../contexts/AnnotationRangeContext';
3
4
  import { isRangeInsideOfRendererContainer } from './utils';
5
+ import { isRoot } from '../../../steps';
4
6
  export const useUserSelectionRange = props => {
5
7
  const {
6
8
  rendererRef: {
@@ -32,6 +34,29 @@ export const useUserSelectionRange = props => {
32
34
  }
33
35
  const _range = sel.getRangeAt(0);
34
36
  if (rendererDOM && isRangeInsideOfRendererContainer(rendererDOM, _range)) {
37
+ if (fg('platform_editor_allow_annotation_triple_click')) {
38
+ const {
39
+ startContainer,
40
+ endContainer,
41
+ commonAncestorContainer
42
+ } = _range;
43
+
44
+ // ED-23493
45
+ // On triple-click in Chrome and Safari, the native Selection API's range has endContainer as a non-text node
46
+ // and commonAncestorContainer as root level div.ak-renderer-document when the node is followed by div or hr.
47
+
48
+ // Triple clicks are the only case that can cause the endContainer to be a non-text node
49
+ // Same check for highlight range logic in confluence/next/packages/comments-util/src/domUtils.ts Line 180
50
+ const isTripleClick = endContainer.nodeType !== Node.TEXT_NODE;
51
+
52
+ // isAnnotationAllowedOnRange range validation is checking if the parent container is root element and disable the comment if it is.
53
+ // platform/packages/editor/renderer/src/steps/index.ts Line 180
54
+
55
+ // This workaround ensures the endContainer is set to a text node when endContainer is non-text and the parent container is the root element
56
+ if (isTripleClick && isRoot(commonAncestorContainer)) {
57
+ _range.setEnd(startContainer, startContainer.length || 0);
58
+ }
59
+ }
35
60
  setRange(_range.cloneRange());
36
61
  }
37
62
  }, 250);
@@ -120,7 +120,7 @@ function resolveNodePos(node) {
120
120
  }
121
121
  return resolvedPos;
122
122
  }
123
- function isRoot(element) {
123
+ export function isRoot(element) {
124
124
  return !!element && element.classList.contains('ak-renderer-document');
125
125
  }
126
126
  export function resolvePos(node, offset) {
@@ -55,7 +55,7 @@ import { nodeToReact } from '../../react/nodes';
55
55
  export var NORMAL_SEVERITY_THRESHOLD = 2000;
56
56
  export var DEGRADED_SEVERITY_THRESHOLD = 3000;
57
57
  var packageName = "@atlaskit/renderer";
58
- var packageVersion = "109.53.2";
58
+ var packageVersion = "109.53.3";
59
59
  export var defaultNodeComponents = nodeToReact;
60
60
  export var Renderer = /*#__PURE__*/function (_PureComponent) {
61
61
  _inherits(Renderer, _PureComponent);
@@ -1,6 +1,8 @@
1
1
  import { useEffect, useRef } from 'react';
2
+ import { fg } from '@atlaskit/platform-feature-flags';
2
3
  import { useAnnotationRangeDispatch, useAnnotationRangeState } from '../contexts/AnnotationRangeContext';
3
4
  import { isRangeInsideOfRendererContainer } from './utils';
5
+ import { isRoot } from '../../../steps';
4
6
  export var useUserSelectionRange = function useUserSelectionRange(props) {
5
7
  var rendererDOM = props.rendererRef.current;
6
8
  var selectionTimeoutRef = useRef();
@@ -26,6 +28,27 @@ export var useUserSelectionRange = function useUserSelectionRange(props) {
26
28
  }
27
29
  var _range = sel.getRangeAt(0);
28
30
  if (rendererDOM && isRangeInsideOfRendererContainer(rendererDOM, _range)) {
31
+ if (fg('platform_editor_allow_annotation_triple_click')) {
32
+ var startContainer = _range.startContainer,
33
+ endContainer = _range.endContainer,
34
+ commonAncestorContainer = _range.commonAncestorContainer;
35
+
36
+ // ED-23493
37
+ // On triple-click in Chrome and Safari, the native Selection API's range has endContainer as a non-text node
38
+ // and commonAncestorContainer as root level div.ak-renderer-document when the node is followed by div or hr.
39
+
40
+ // Triple clicks are the only case that can cause the endContainer to be a non-text node
41
+ // Same check for highlight range logic in confluence/next/packages/comments-util/src/domUtils.ts Line 180
42
+ var isTripleClick = endContainer.nodeType !== Node.TEXT_NODE;
43
+
44
+ // isAnnotationAllowedOnRange range validation is checking if the parent container is root element and disable the comment if it is.
45
+ // platform/packages/editor/renderer/src/steps/index.ts Line 180
46
+
47
+ // This workaround ensures the endContainer is set to a text node when endContainer is non-text and the parent container is the root element
48
+ if (isTripleClick && isRoot(commonAncestorContainer)) {
49
+ _range.setEnd(startContainer, startContainer.length || 0);
50
+ }
51
+ }
29
52
  setRange(_range.cloneRange());
30
53
  }
31
54
  }, 250);
@@ -1,5 +1,6 @@
1
1
  import type { Schema } from '@atlaskit/editor-prosemirror/model';
2
2
  import { AddMarkStep } from '@atlaskit/editor-prosemirror/transform';
3
+ export declare function isRoot(element: HTMLElement | null): boolean;
3
4
  export declare function resolvePos(node: Node | null, offset: number, findEnd?: boolean): number | false;
4
5
  interface AnnotationStepOptions {
5
6
  schema: Schema;
@@ -1,5 +1,6 @@
1
1
  import type { Schema } from '@atlaskit/editor-prosemirror/model';
2
2
  import { AddMarkStep } from '@atlaskit/editor-prosemirror/transform';
3
+ export declare function isRoot(element: HTMLElement | null): boolean;
3
4
  export declare function resolvePos(node: Node | null, offset: number, findEnd?: boolean): number | false;
4
5
  interface AnnotationStepOptions {
5
6
  schema: Schema;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/renderer",
3
- "version": "109.53.2",
3
+ "version": "109.53.3",
4
4
  "description": "Renderer component",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"
@@ -145,6 +145,9 @@
145
145
  },
146
146
  "platform-fix-table-ssr-resizing": {
147
147
  "type": "boolean"
148
+ },
149
+ "platform_editor_allow_annotation_triple_click": {
150
+ "type": "boolean"
148
151
  }
149
152
  },
150
153
  "af:exports": {