@atlaskit/editor-common 76.26.4 → 76.26.6

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,17 @@
1
1
  # @atlaskit/editor-common
2
2
 
3
+ ## 76.26.6
4
+
5
+ ### Patch Changes
6
+
7
+ - [#60295](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/60295) [`48109245628a`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/48109245628a) - Optimised the change node diff scan which occurs for every dispatched transaction within the editor
8
+
9
+ ## 76.26.5
10
+
11
+ ### Patch Changes
12
+
13
+ - [#60035](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/60035) [`5cf5779a8cbe`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/5cf5779a8cbe) - [ux] [ED-19814] Fixed infinite loop when none of the dropdown menu items were enabled during keyboard navigation
14
+
3
15
  ## 76.26.4
4
16
 
5
17
  ### Patch Changes
@@ -16,7 +16,7 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
16
16
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
17
17
  var SENTRY_DSN = 'https://0b10c8e02fb44d8796c047b102c9bee8@o55978.ingest.sentry.io/4505129224110080';
18
18
  var packageName = 'editor-common'; // Sentry doesn't accept '/' in its releases https://docs.sentry.io/platforms/javascript/configuration/releases/
19
- var packageVersion = "76.26.4";
19
+ var packageVersion = "76.26.6";
20
20
  var sanitiseSentryEvents = function sanitiseSentryEvents(data, _hint) {
21
21
  // Remove URL as it has UGC
22
22
  // TODO: Sanitise the URL instead of just removing it
@@ -24,7 +24,7 @@ var _templateObject, _templateObject2, _templateObject3;
24
24
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
25
25
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } /** @jsx jsx */
26
26
  var packageName = "@atlaskit/editor-common";
27
- var packageVersion = "76.26.4";
27
+ var packageVersion = "76.26.6";
28
28
  var halfFocusRing = 1;
29
29
  var dropOffset = '0, 8';
30
30
  var DropList = /*#__PURE__*/function (_Component) {
@@ -10,6 +10,12 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/sli
10
10
  var _react = _interopRequireWildcard(require("react"));
11
11
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
12
12
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
13
+ var hasEnabledItems = function hasEnabledItems(list) {
14
+ return list.some(function (item) {
15
+ return item.getAttribute('aria-disabled') !== 'true';
16
+ });
17
+ };
18
+
13
19
  /**
14
20
  * This component is a wrapper of vertical menus which listens to keydown events of children
15
21
  * and handles up/down arrow key navigation
@@ -96,18 +102,22 @@ var MenuArrowKeyNavigationProvider = exports.MenuArrowKeyNavigationProvider = fu
96
102
  switch (event.key) {
97
103
  case 'ArrowDown':
98
104
  {
99
- var _focusableElements$fo;
100
- var focusIndex = incrementIndex(focusableElements);
101
- (_focusableElements$fo = focusableElements[focusIndex]) === null || _focusableElements$fo === void 0 || _focusableElements$fo.focus();
102
- event.preventDefault();
105
+ if (hasEnabledItems(focusableElements)) {
106
+ var _focusableElements$fo;
107
+ var focusIndex = incrementIndex(focusableElements);
108
+ (_focusableElements$fo = focusableElements[focusIndex]) === null || _focusableElements$fo === void 0 || _focusableElements$fo.focus();
109
+ event.preventDefault();
110
+ }
103
111
  break;
104
112
  }
105
113
  case 'ArrowUp':
106
114
  {
107
- var _focusableElements$_f;
108
- var _focusIndex = decrementIndex(focusableElements);
109
- (_focusableElements$_f = focusableElements[_focusIndex]) === null || _focusableElements$_f === void 0 || _focusableElements$_f.focus();
110
- event.preventDefault();
115
+ if (hasEnabledItems(focusableElements)) {
116
+ var _focusableElements$_f;
117
+ var _focusIndex = decrementIndex(focusableElements);
118
+ (_focusableElements$_f = focusableElements[_focusIndex]) === null || _focusableElements$_f === void 0 || _focusableElements$_f.focus();
119
+ event.preventDefault();
120
+ }
111
121
  break;
112
122
  }
113
123
 
@@ -9,6 +9,7 @@ exports.toJSON = toJSON;
9
9
  exports.validateNodes = exports.validNode = void 0;
10
10
  var _editorJsonTransformer = require("@atlaskit/editor-json-transformer");
11
11
  var _utils = require("@atlaskit/editor-prosemirror/utils");
12
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
12
13
  /**
13
14
  * Finds all top level nodes affected by the transaction
14
15
  * Uses from/to positions in transaction's steps to work out which nodes will
@@ -17,25 +18,36 @@ var _utils = require("@atlaskit/editor-prosemirror/utils");
17
18
  var findChangedNodesFromTransaction = exports.findChangedNodesFromTransaction = function findChangedNodesFromTransaction(tr) {
18
19
  var nodes = [];
19
20
  var steps = tr.steps || [];
20
- steps.forEach(function (step) {
21
- var to = step.to,
22
- from = step.from,
23
- slice = step.slice;
24
- var size = slice && slice.content ? slice.content.size : 0;
25
- var _loop = function _loop() {
26
- if (i <= tr.doc.content.size) {
27
- var topLevelNode = tr.doc.resolve(i).node(1);
28
- if (topLevelNode && !nodes.find(function (n) {
29
- return n === topLevelNode;
30
- })) {
31
- nodes.push(topLevelNode);
21
+ if ((0, _platformFeatureFlags.getBooleanFF)('platform.editor.find-changed-nodes-from-transaction-optimisation')) {
22
+ steps.forEach(function (step) {
23
+ step.getMap().forEach(function (oldStart, oldEnd, newStart, newEnd) {
24
+ tr.doc.nodesBetween(newStart, newEnd, function (node) {
25
+ nodes.push(node);
26
+ return false;
27
+ });
28
+ });
29
+ });
30
+ } else {
31
+ steps.forEach(function (step) {
32
+ var to = step.to,
33
+ from = step.from,
34
+ slice = step.slice;
35
+ var size = slice && slice.content ? slice.content.size : 0;
36
+ var _loop = function _loop() {
37
+ if (i <= tr.doc.content.size) {
38
+ var topLevelNode = tr.doc.resolve(i).node(1);
39
+ if (topLevelNode && !nodes.find(function (n) {
40
+ return n === topLevelNode;
41
+ })) {
42
+ nodes.push(topLevelNode);
43
+ }
32
44
  }
45
+ };
46
+ for (var i = from; i <= to + size; i++) {
47
+ _loop();
33
48
  }
34
- };
35
- for (var i = from; i <= to + size; i++) {
36
- _loop();
37
- }
38
- });
49
+ });
50
+ }
39
51
  return nodes;
40
52
  };
41
53
  var validNode = exports.validNode = function validNode(node) {
@@ -1,6 +1,6 @@
1
1
  const SENTRY_DSN = 'https://0b10c8e02fb44d8796c047b102c9bee8@o55978.ingest.sentry.io/4505129224110080';
2
2
  const packageName = 'editor-common'; // Sentry doesn't accept '/' in its releases https://docs.sentry.io/platforms/javascript/configuration/releases/
3
- const packageVersion = "76.26.4";
3
+ const packageVersion = "76.26.6";
4
4
  const sanitiseSentryEvents = (data, _hint) => {
5
5
  // Remove URL as it has UGC
6
6
  // TODO: Sanitise the URL instead of just removing it
@@ -9,7 +9,7 @@ import { themed } from '@atlaskit/theme/components';
9
9
  import { borderRadius } from '@atlaskit/theme/constants';
10
10
  import Layer from '../Layer';
11
11
  const packageName = "@atlaskit/editor-common";
12
- const packageVersion = "76.26.4";
12
+ const packageVersion = "76.26.6";
13
13
  const halfFocusRing = 1;
14
14
  const dropOffset = '0, 8';
15
15
  class DropList extends Component {
@@ -1,4 +1,6 @@
1
1
  import React, { useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react';
2
+ const hasEnabledItems = list => list.some(item => item.getAttribute('aria-disabled') !== 'true');
3
+
2
4
  /**
3
5
  * This component is a wrapper of vertical menus which listens to keydown events of children
4
6
  * and handles up/down arrow key navigation
@@ -81,18 +83,22 @@ export const MenuArrowKeyNavigationProvider = ({
81
83
  switch (event.key) {
82
84
  case 'ArrowDown':
83
85
  {
84
- var _focusableElements$fo;
85
- const focusIndex = incrementIndex(focusableElements);
86
- (_focusableElements$fo = focusableElements[focusIndex]) === null || _focusableElements$fo === void 0 ? void 0 : _focusableElements$fo.focus();
87
- event.preventDefault();
86
+ if (hasEnabledItems(focusableElements)) {
87
+ var _focusableElements$fo;
88
+ const focusIndex = incrementIndex(focusableElements);
89
+ (_focusableElements$fo = focusableElements[focusIndex]) === null || _focusableElements$fo === void 0 ? void 0 : _focusableElements$fo.focus();
90
+ event.preventDefault();
91
+ }
88
92
  break;
89
93
  }
90
94
  case 'ArrowUp':
91
95
  {
92
- var _focusableElements$fo2;
93
- const focusIndex = decrementIndex(focusableElements);
94
- (_focusableElements$fo2 = focusableElements[focusIndex]) === null || _focusableElements$fo2 === void 0 ? void 0 : _focusableElements$fo2.focus();
95
- event.preventDefault();
96
+ if (hasEnabledItems(focusableElements)) {
97
+ var _focusableElements$fo2;
98
+ const focusIndex = decrementIndex(focusableElements);
99
+ (_focusableElements$fo2 = focusableElements[focusIndex]) === null || _focusableElements$fo2 === void 0 ? void 0 : _focusableElements$fo2.focus();
100
+ event.preventDefault();
101
+ }
96
102
  break;
97
103
  }
98
104
 
@@ -1,5 +1,6 @@
1
1
  import { JSONTransformer } from '@atlaskit/editor-json-transformer';
2
2
  import { findParentNodeOfType } from '@atlaskit/editor-prosemirror/utils';
3
+ import { getBooleanFF } from '@atlaskit/platform-feature-flags';
3
4
  /**
4
5
  * Finds all top level nodes affected by the transaction
5
6
  * Uses from/to positions in transaction's steps to work out which nodes will
@@ -8,22 +9,33 @@ import { findParentNodeOfType } from '@atlaskit/editor-prosemirror/utils';
8
9
  export const findChangedNodesFromTransaction = tr => {
9
10
  const nodes = [];
10
11
  const steps = tr.steps || [];
11
- steps.forEach(step => {
12
- const {
13
- to,
14
- from,
15
- slice
16
- } = step;
17
- const size = slice && slice.content ? slice.content.size : 0;
18
- for (let i = from; i <= to + size; i++) {
19
- if (i <= tr.doc.content.size) {
20
- const topLevelNode = tr.doc.resolve(i).node(1);
21
- if (topLevelNode && !nodes.find(n => n === topLevelNode)) {
22
- nodes.push(topLevelNode);
12
+ if (getBooleanFF('platform.editor.find-changed-nodes-from-transaction-optimisation')) {
13
+ steps.forEach(step => {
14
+ step.getMap().forEach((oldStart, oldEnd, newStart, newEnd) => {
15
+ tr.doc.nodesBetween(newStart, newEnd, node => {
16
+ nodes.push(node);
17
+ return false;
18
+ });
19
+ });
20
+ });
21
+ } else {
22
+ steps.forEach(step => {
23
+ const {
24
+ to,
25
+ from,
26
+ slice
27
+ } = step;
28
+ const size = slice && slice.content ? slice.content.size : 0;
29
+ for (let i = from; i <= to + size; i++) {
30
+ if (i <= tr.doc.content.size) {
31
+ const topLevelNode = tr.doc.resolve(i).node(1);
32
+ if (topLevelNode && !nodes.find(n => n === topLevelNode)) {
33
+ nodes.push(topLevelNode);
34
+ }
23
35
  }
24
36
  }
25
- }
26
- });
37
+ });
38
+ }
27
39
  return nodes;
28
40
  };
29
41
  export const validNode = node => {
@@ -6,7 +6,7 @@ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbol
6
6
  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) { _defineProperty(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; }
7
7
  var SENTRY_DSN = 'https://0b10c8e02fb44d8796c047b102c9bee8@o55978.ingest.sentry.io/4505129224110080';
8
8
  var packageName = 'editor-common'; // Sentry doesn't accept '/' in its releases https://docs.sentry.io/platforms/javascript/configuration/releases/
9
- var packageVersion = "76.26.4";
9
+ var packageVersion = "76.26.6";
10
10
  var sanitiseSentryEvents = function sanitiseSentryEvents(data, _hint) {
11
11
  // Remove URL as it has UGC
12
12
  // TODO: Sanitise the URL instead of just removing it
@@ -19,7 +19,7 @@ import { themed } from '@atlaskit/theme/components';
19
19
  import { borderRadius } from '@atlaskit/theme/constants';
20
20
  import Layer from '../Layer';
21
21
  var packageName = "@atlaskit/editor-common";
22
- var packageVersion = "76.26.4";
22
+ var packageVersion = "76.26.6";
23
23
  var halfFocusRing = 1;
24
24
  var dropOffset = '0, 8';
25
25
  var DropList = /*#__PURE__*/function (_Component) {
@@ -1,5 +1,11 @@
1
1
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
2
  import React, { useCallback, useEffect, useLayoutEffect, useRef, useState } from 'react';
3
+ var hasEnabledItems = function hasEnabledItems(list) {
4
+ return list.some(function (item) {
5
+ return item.getAttribute('aria-disabled') !== 'true';
6
+ });
7
+ };
8
+
3
9
  /**
4
10
  * This component is a wrapper of vertical menus which listens to keydown events of children
5
11
  * and handles up/down arrow key navigation
@@ -86,18 +92,22 @@ export var MenuArrowKeyNavigationProvider = function MenuArrowKeyNavigationProvi
86
92
  switch (event.key) {
87
93
  case 'ArrowDown':
88
94
  {
89
- var _focusableElements$fo;
90
- var focusIndex = incrementIndex(focusableElements);
91
- (_focusableElements$fo = focusableElements[focusIndex]) === null || _focusableElements$fo === void 0 || _focusableElements$fo.focus();
92
- event.preventDefault();
95
+ if (hasEnabledItems(focusableElements)) {
96
+ var _focusableElements$fo;
97
+ var focusIndex = incrementIndex(focusableElements);
98
+ (_focusableElements$fo = focusableElements[focusIndex]) === null || _focusableElements$fo === void 0 || _focusableElements$fo.focus();
99
+ event.preventDefault();
100
+ }
93
101
  break;
94
102
  }
95
103
  case 'ArrowUp':
96
104
  {
97
- var _focusableElements$_f;
98
- var _focusIndex = decrementIndex(focusableElements);
99
- (_focusableElements$_f = focusableElements[_focusIndex]) === null || _focusableElements$_f === void 0 || _focusableElements$_f.focus();
100
- event.preventDefault();
105
+ if (hasEnabledItems(focusableElements)) {
106
+ var _focusableElements$_f;
107
+ var _focusIndex = decrementIndex(focusableElements);
108
+ (_focusableElements$_f = focusableElements[_focusIndex]) === null || _focusableElements$_f === void 0 || _focusableElements$_f.focus();
109
+ event.preventDefault();
110
+ }
101
111
  break;
102
112
  }
103
113
 
@@ -1,5 +1,6 @@
1
1
  import { JSONTransformer } from '@atlaskit/editor-json-transformer';
2
2
  import { findParentNodeOfType } from '@atlaskit/editor-prosemirror/utils';
3
+ import { getBooleanFF } from '@atlaskit/platform-feature-flags';
3
4
  /**
4
5
  * Finds all top level nodes affected by the transaction
5
6
  * Uses from/to positions in transaction's steps to work out which nodes will
@@ -8,25 +9,36 @@ import { findParentNodeOfType } from '@atlaskit/editor-prosemirror/utils';
8
9
  export var findChangedNodesFromTransaction = function findChangedNodesFromTransaction(tr) {
9
10
  var nodes = [];
10
11
  var steps = tr.steps || [];
11
- steps.forEach(function (step) {
12
- var to = step.to,
13
- from = step.from,
14
- slice = step.slice;
15
- var size = slice && slice.content ? slice.content.size : 0;
16
- var _loop = function _loop() {
17
- if (i <= tr.doc.content.size) {
18
- var topLevelNode = tr.doc.resolve(i).node(1);
19
- if (topLevelNode && !nodes.find(function (n) {
20
- return n === topLevelNode;
21
- })) {
22
- nodes.push(topLevelNode);
12
+ if (getBooleanFF('platform.editor.find-changed-nodes-from-transaction-optimisation')) {
13
+ steps.forEach(function (step) {
14
+ step.getMap().forEach(function (oldStart, oldEnd, newStart, newEnd) {
15
+ tr.doc.nodesBetween(newStart, newEnd, function (node) {
16
+ nodes.push(node);
17
+ return false;
18
+ });
19
+ });
20
+ });
21
+ } else {
22
+ steps.forEach(function (step) {
23
+ var to = step.to,
24
+ from = step.from,
25
+ slice = step.slice;
26
+ var size = slice && slice.content ? slice.content.size : 0;
27
+ var _loop = function _loop() {
28
+ if (i <= tr.doc.content.size) {
29
+ var topLevelNode = tr.doc.resolve(i).node(1);
30
+ if (topLevelNode && !nodes.find(function (n) {
31
+ return n === topLevelNode;
32
+ })) {
33
+ nodes.push(topLevelNode);
34
+ }
23
35
  }
36
+ };
37
+ for (var i = from; i <= to + size; i++) {
38
+ _loop();
24
39
  }
25
- };
26
- for (var i = from; i <= to + size; i++) {
27
- _loop();
28
- }
29
- });
40
+ });
41
+ }
30
42
  return nodes;
31
43
  };
32
44
  export var validNode = function validNode(node) {
@@ -15,6 +15,7 @@ export type ColorPaletteArrowKeyNavigationOptions = {
15
15
  selectedColumnIndex: number;
16
16
  isOpenedByKeyboard: boolean;
17
17
  isPopupPositioned: boolean;
18
+ children?: React.ReactNode;
18
19
  };
19
20
  export type ColorPaletteArrowKeyNavigationProps = ColorPaletteArrowKeyNavigationOptions & {
20
21
  handleClose?: SimpleEventHandler<KeyboardEvent>;
@@ -25,6 +26,7 @@ export type MenuArrowKeyNavigationOptions = {
25
26
  type: ArrowKeyNavigationType.MENU;
26
27
  disableArrowKeyNavigation?: boolean;
27
28
  keyDownHandlerContext?: KeyDownHandlerContext;
29
+ children?: React.ReactNode;
28
30
  };
29
31
  export type MenuArrowKeyNavigationProviderProps = MenuArrowKeyNavigationOptions & {
30
32
  handleClose?: SimpleEventHandler<KeyboardEvent>;
@@ -15,6 +15,7 @@ export type ColorPaletteArrowKeyNavigationOptions = {
15
15
  selectedColumnIndex: number;
16
16
  isOpenedByKeyboard: boolean;
17
17
  isPopupPositioned: boolean;
18
+ children?: React.ReactNode;
18
19
  };
19
20
  export type ColorPaletteArrowKeyNavigationProps = ColorPaletteArrowKeyNavigationOptions & {
20
21
  handleClose?: SimpleEventHandler<KeyboardEvent>;
@@ -25,6 +26,7 @@ export type MenuArrowKeyNavigationOptions = {
25
26
  type: ArrowKeyNavigationType.MENU;
26
27
  disableArrowKeyNavigation?: boolean;
27
28
  keyDownHandlerContext?: KeyDownHandlerContext;
29
+ children?: React.ReactNode;
28
30
  };
29
31
  export type MenuArrowKeyNavigationProviderProps = MenuArrowKeyNavigationOptions & {
30
32
  handleClose?: SimpleEventHandler<KeyboardEvent>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/editor-common",
3
- "version": "76.26.4",
3
+ "version": "76.26.6",
4
4
  "description": "A package that contains common classes and components for editor and renderer",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"
@@ -219,6 +219,9 @@
219
219
  },
220
220
  "platform.editor.popup.fix-flicker-react-18": {
221
221
  "type": "boolean"
222
+ },
223
+ "platform.editor.find-changed-nodes-from-transaction-optimisation": {
224
+ "type": "boolean"
222
225
  }
223
226
  }
224
227
  }