@atlaskit/editor-plugin-track-changes 12.0.3 → 12.1.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,24 @@
1
1
  # @atlaskit/editor-plugin-track-changes
2
2
 
3
+ ## 12.1.1
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies
8
+
9
+ ## 12.1.0
10
+
11
+ ### Minor Changes
12
+
13
+ - [`dcb19ae73b101`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/dcb19ae73b101) -
14
+ [CCI-18040] Disable the main toolbar's View changes (track changes) button and its keyboard
15
+ shortcut while the AI Review moment is visible. Adds a setToggleChangesDisabled command and
16
+ isToggleChangesDisabled shared state to the track changes plugin.
17
+
18
+ ### Patch Changes
19
+
20
+ - Updated dependencies
21
+
3
22
  ## 12.0.3
4
23
 
5
24
  ### Patch Changes
@@ -18,8 +18,10 @@ function keymapPlugin(api) {
18
18
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
19
19
  _keymaps.toggleViewChanges.common, function () {
20
20
  var _api$trackChanges, _api$trackChanges2;
21
- var isShowDiffAvailable = api === null || api === void 0 || (_api$trackChanges = api.trackChanges) === null || _api$trackChanges === void 0 || (_api$trackChanges = _api$trackChanges.sharedState.currentState()) === null || _api$trackChanges === void 0 ? void 0 : _api$trackChanges.isShowDiffAvailable;
22
- if (!isShowDiffAvailable) {
21
+ var trackChangesState = api === null || api === void 0 || (_api$trackChanges = api.trackChanges) === null || _api$trackChanges === void 0 ? void 0 : _api$trackChanges.sharedState.currentState();
22
+ // Mirror the toolbar button: no changes to show, or another plugin currently owns
23
+ // the diff decorations (e.g. the AI Review moment is visible).
24
+ if (!(trackChangesState !== null && trackChangesState !== void 0 && trackChangesState.isShowDiffAvailable) || trackChangesState !== null && trackChangesState !== void 0 && trackChangesState.isToggleChangesDisabled) {
23
25
  return false;
24
26
  }
25
27
  var result = api === null || api === void 0 ? void 0 : api.core.actions.execute(api === null || api === void 0 || (_api$trackChanges2 = api.trackChanges) === null || _api$trackChanges2 === void 0 ? void 0 : _api$trackChanges2.commands.toggleChanges);
@@ -59,12 +59,18 @@ var createTrackChangesPlugin = exports.createTrackChangesPlugin = function creat
59
59
  steps: [],
60
60
  shouldChangesBeDisplayed: false,
61
61
  isShowDiffAvailable: false,
62
+ isToggleChangesDisabled: false,
62
63
  allocations: new Set()
63
64
  };
64
65
  },
65
66
  apply: function apply(tr, state) {
66
67
  var _api$history, _state$steps$at$alloc, _state$steps$at;
67
68
  var metadata = tr.getMeta(trackChangesPluginKey);
69
+ if (metadata && metadata.action === _types.TOGGLE_TRACK_CHANGES_ACTION.SET_TOGGLE_CHANGES_DISABLED) {
70
+ return _objectSpread(_objectSpread({}, state), {}, {
71
+ isToggleChangesDisabled: Boolean(metadata.isDisabled)
72
+ });
73
+ }
68
74
  if (metadata && metadata.action === _types.TOGGLE_TRACK_CHANGES_ACTION.RESET_BASELINE) {
69
75
  return _objectSpread(_objectSpread({}, state), {}, {
70
76
  steps: [],
@@ -7,5 +7,6 @@ exports.TOGGLE_TRACK_CHANGES_ACTION = void 0;
7
7
  var TOGGLE_TRACK_CHANGES_ACTION = exports.TOGGLE_TRACK_CHANGES_ACTION = /*#__PURE__*/function (TOGGLE_TRACK_CHANGES_ACTION) {
8
8
  TOGGLE_TRACK_CHANGES_ACTION["TOGGLE_TRACK_CHANGES"] = "TOGGLE_TRACK_CHANGES";
9
9
  TOGGLE_TRACK_CHANGES_ACTION["RESET_BASELINE"] = "RESET_BASELINE";
10
+ TOGGLE_TRACK_CHANGES_ACTION["SET_TOGGLE_CHANGES_DISABLED"] = "SET_TOGGLE_CHANGES_DISABLED";
10
11
  return TOGGLE_TRACK_CHANGES_ACTION;
11
12
  }({});
@@ -49,15 +49,34 @@ var trackChangesPlugin = exports.trackChangesPlugin = function trackChangesPlugi
49
49
  },
50
50
  commands: {
51
51
  toggleChanges: function toggleChanges(_ref2) {
52
+ var _api$trackChanges;
52
53
  var tr = _ref2.tr;
54
+ // Another plugin currently owns the diff decorations (e.g. the AI Review moment),
55
+ // so toggling would fight over the same diff — bail out.
56
+ if (api !== null && api !== void 0 && (_api$trackChanges = api.trackChanges) !== null && _api$trackChanges !== void 0 && (_api$trackChanges = _api$trackChanges.sharedState.currentState()) !== null && _api$trackChanges !== void 0 && _api$trackChanges.isToggleChangesDisabled) {
57
+ return null;
58
+ }
53
59
  return tr.setMeta(_main.trackChangesPluginKey, {
54
60
  action: _types.TOGGLE_TRACK_CHANGES_ACTION.TOGGLE_TRACK_CHANGES
55
61
  });
56
62
  },
57
- resetBaseline: function resetBaseline(_ref3) {
58
- var _api$trackChanges;
59
- var tr = _ref3.tr;
60
- if (!(api !== null && api !== void 0 && (_api$trackChanges = api.trackChanges) !== null && _api$trackChanges !== void 0 && (_api$trackChanges = _api$trackChanges.sharedState.currentState()) !== null && _api$trackChanges !== void 0 && _api$trackChanges.isShowDiffAvailable)) {
63
+ setToggleChangesDisabled: function setToggleChangesDisabled(isDisabled) {
64
+ return function (_ref3) {
65
+ var _api$trackChanges2;
66
+ var tr = _ref3.tr;
67
+ if ((api === null || api === void 0 || (_api$trackChanges2 = api.trackChanges) === null || _api$trackChanges2 === void 0 || (_api$trackChanges2 = _api$trackChanges2.sharedState.currentState()) === null || _api$trackChanges2 === void 0 ? void 0 : _api$trackChanges2.isToggleChangesDisabled) === isDisabled) {
68
+ return null;
69
+ }
70
+ return tr.setMeta(_main.trackChangesPluginKey, {
71
+ action: _types.TOGGLE_TRACK_CHANGES_ACTION.SET_TOGGLE_CHANGES_DISABLED,
72
+ isDisabled: isDisabled
73
+ });
74
+ };
75
+ },
76
+ resetBaseline: function resetBaseline(_ref4) {
77
+ var _api$trackChanges3;
78
+ var tr = _ref4.tr;
79
+ if (!(api !== null && api !== void 0 && (_api$trackChanges3 = api.trackChanges) !== null && _api$trackChanges3 !== void 0 && (_api$trackChanges3 = _api$trackChanges3.sharedState.currentState()) !== null && _api$trackChanges3 !== void 0 && _api$trackChanges3.isShowDiffAvailable)) {
61
80
  return null;
62
81
  }
63
82
  return tr.setMeta(_main.trackChangesPluginKey, {
@@ -66,16 +85,18 @@ var trackChangesPlugin = exports.trackChangesPlugin = function trackChangesPlugi
66
85
  }
67
86
  },
68
87
  getSharedState: function getSharedState(editorState) {
69
- var _trackChangesPluginKe, _trackChangesPluginKe2;
88
+ var _trackChangesPluginKe, _trackChangesPluginKe2, _trackChangesPluginKe3;
70
89
  if (!editorState) {
71
90
  return {
72
91
  isDisplayingChanges: false,
73
- isShowDiffAvailable: false
92
+ isShowDiffAvailable: false,
93
+ isToggleChangesDisabled: false
74
94
  };
75
95
  }
76
96
  return {
77
97
  isDisplayingChanges: Boolean((_trackChangesPluginKe = _main.trackChangesPluginKey.getState(editorState)) === null || _trackChangesPluginKe === void 0 ? void 0 : _trackChangesPluginKe.shouldChangesBeDisplayed),
78
- isShowDiffAvailable: Boolean((_trackChangesPluginKe2 = _main.trackChangesPluginKey.getState(editorState)) === null || _trackChangesPluginKe2 === void 0 ? void 0 : _trackChangesPluginKe2.isShowDiffAvailable)
98
+ isShowDiffAvailable: Boolean((_trackChangesPluginKe2 = _main.trackChangesPluginKey.getState(editorState)) === null || _trackChangesPluginKe2 === void 0 ? void 0 : _trackChangesPluginKe2.isShowDiffAvailable),
99
+ isToggleChangesDisabled: Boolean((_trackChangesPluginKe3 = _main.trackChangesPluginKey.getState(editorState)) === null || _trackChangesPluginKe3 === void 0 ? void 0 : _trackChangesPluginKe3.isToggleChangesDisabled)
79
100
  };
80
101
  }
81
102
  };
@@ -18,14 +18,20 @@ var TrackChangesToolbarButton = exports.TrackChangesToolbarButton = function Tra
18
18
  Wrapper = _ref.wrapper;
19
19
  var isToolbarAIFCEnabled = Boolean(api === null || api === void 0 ? void 0 : api.toolbar);
20
20
  var _useSharedPluginState = (0, _hooks.useSharedPluginStateWithSelector)(api, ['trackChanges'], function (states) {
21
- var _states$trackChangesS, _states$trackChangesS2;
21
+ var _states$trackChangesS, _states$trackChangesS2, _states$trackChangesS3;
22
22
  return {
23
23
  isDisplayingChanges: (_states$trackChangesS = states.trackChangesState) === null || _states$trackChangesS === void 0 ? void 0 : _states$trackChangesS.isDisplayingChanges,
24
- isShowDiffAvailable: (_states$trackChangesS2 = states.trackChangesState) === null || _states$trackChangesS2 === void 0 ? void 0 : _states$trackChangesS2.isShowDiffAvailable
24
+ isShowDiffAvailable: (_states$trackChangesS2 = states.trackChangesState) === null || _states$trackChangesS2 === void 0 ? void 0 : _states$trackChangesS2.isShowDiffAvailable,
25
+ isToggleChangesDisabled: (_states$trackChangesS3 = states.trackChangesState) === null || _states$trackChangesS3 === void 0 ? void 0 : _states$trackChangesS3.isToggleChangesDisabled
25
26
  };
26
27
  }),
27
28
  isDisplayingChanges = _useSharedPluginState.isDisplayingChanges,
28
- isShowDiffAvailable = _useSharedPluginState.isShowDiffAvailable;
29
+ isShowDiffAvailable = _useSharedPluginState.isShowDiffAvailable,
30
+ isToggleChangesDisabled = _useSharedPluginState.isToggleChangesDisabled;
31
+
32
+ // Disabled either because there's nothing to diff, or because another plugin currently
33
+ // owns the diff decorations (e.g. the AI Review moment is visible).
34
+ var isDisabled = !isShowDiffAvailable || Boolean(isToggleChangesDisabled);
29
35
  var _useIntl = (0, _reactIntl.useIntl)(),
30
36
  formatMessage = _useIntl.formatMessage;
31
37
  var handleClick = _react.default.useCallback(function () {
@@ -51,7 +57,7 @@ var TrackChangesToolbarButton = exports.TrackChangesToolbarButton = function Tra
51
57
  icon: _editorToolbar.HistoryIcon,
52
58
  label: formatMessage(_messages.trackChangesMessages.toolbarIconLabel),
53
59
  appearance: "subtle",
54
- isDisabled: !isShowDiffAvailable,
60
+ isDisabled: isDisabled,
55
61
  isSelected: isDisplayingChanges,
56
62
  onClick: handleClick
57
63
  }));
@@ -64,7 +70,7 @@ var TrackChangesToolbarButton = exports.TrackChangesToolbarButton = function Tra
64
70
  size: "small"
65
71
  }),
66
72
  onClick: handleClick,
67
- isDisabled: !isShowDiffAvailable,
73
+ isDisabled: isDisabled,
68
74
  isSelected: isDisplayingChanges
69
75
  }));
70
76
  return Wrapper ? /*#__PURE__*/_react.default.createElement(Wrapper, null, button) : button;
@@ -11,9 +11,11 @@ export function keymapPlugin(api) {
11
11
  bindKeymapWithCommand(
12
12
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
13
13
  toggleViewChanges.common, () => {
14
- var _api$trackChanges, _api$trackChanges$sha, _api$trackChanges2;
15
- const isShowDiffAvailable = api === null || api === void 0 ? void 0 : (_api$trackChanges = api.trackChanges) === null || _api$trackChanges === void 0 ? void 0 : (_api$trackChanges$sha = _api$trackChanges.sharedState.currentState()) === null || _api$trackChanges$sha === void 0 ? void 0 : _api$trackChanges$sha.isShowDiffAvailable;
16
- if (!isShowDiffAvailable) {
14
+ var _api$trackChanges, _api$trackChanges2;
15
+ const trackChangesState = api === null || api === void 0 ? void 0 : (_api$trackChanges = api.trackChanges) === null || _api$trackChanges === void 0 ? void 0 : _api$trackChanges.sharedState.currentState();
16
+ // Mirror the toolbar button: no changes to show, or another plugin currently owns
17
+ // the diff decorations (e.g. the AI Review moment is visible).
18
+ if (!(trackChangesState !== null && trackChangesState !== void 0 && trackChangesState.isShowDiffAvailable) || trackChangesState !== null && trackChangesState !== void 0 && trackChangesState.isToggleChangesDisabled) {
17
19
  return false;
18
20
  }
19
21
  const result = api === null || api === void 0 ? void 0 : api.core.actions.execute(api === null || api === void 0 ? void 0 : (_api$trackChanges2 = api.trackChanges) === null || _api$trackChanges2 === void 0 ? void 0 : _api$trackChanges2.commands.toggleChanges);
@@ -34,12 +34,19 @@ export const createTrackChangesPlugin = api => {
34
34
  steps: [],
35
35
  shouldChangesBeDisplayed: false,
36
36
  isShowDiffAvailable: false,
37
+ isToggleChangesDisabled: false,
37
38
  allocations: new Set()
38
39
  };
39
40
  },
40
41
  apply(tr, state) {
41
42
  var _api$history, _state$steps$at$alloc, _state$steps$at;
42
43
  const metadata = tr.getMeta(trackChangesPluginKey);
44
+ if (metadata && metadata.action === ACTION.SET_TOGGLE_CHANGES_DISABLED) {
45
+ return {
46
+ ...state,
47
+ isToggleChangesDisabled: Boolean(metadata.isDisabled)
48
+ };
49
+ }
43
50
  if (metadata && metadata.action === ACTION.RESET_BASELINE) {
44
51
  return {
45
52
  ...state,
@@ -1,5 +1,6 @@
1
1
  export let TOGGLE_TRACK_CHANGES_ACTION = /*#__PURE__*/function (TOGGLE_TRACK_CHANGES_ACTION) {
2
2
  TOGGLE_TRACK_CHANGES_ACTION["TOGGLE_TRACK_CHANGES"] = "TOGGLE_TRACK_CHANGES";
3
3
  TOGGLE_TRACK_CHANGES_ACTION["RESET_BASELINE"] = "RESET_BASELINE";
4
+ TOGGLE_TRACK_CHANGES_ACTION["SET_TOGGLE_CHANGES_DISABLED"] = "SET_TOGGLE_CHANGES_DISABLED";
4
5
  return TOGGLE_TRACK_CHANGES_ACTION;
5
6
  }({});
@@ -41,15 +41,33 @@ export const trackChangesPlugin = ({
41
41
  toggleChanges: ({
42
42
  tr
43
43
  }) => {
44
+ var _api$trackChanges, _api$trackChanges$sha;
45
+ // Another plugin currently owns the diff decorations (e.g. the AI Review moment),
46
+ // so toggling would fight over the same diff — bail out.
47
+ if (api !== null && api !== void 0 && (_api$trackChanges = api.trackChanges) !== null && _api$trackChanges !== void 0 && (_api$trackChanges$sha = _api$trackChanges.sharedState.currentState()) !== null && _api$trackChanges$sha !== void 0 && _api$trackChanges$sha.isToggleChangesDisabled) {
48
+ return null;
49
+ }
44
50
  return tr.setMeta(trackChangesPluginKey, {
45
51
  action: ACTION.TOGGLE_TRACK_CHANGES
46
52
  });
47
53
  },
54
+ setToggleChangesDisabled: isDisabled => ({
55
+ tr
56
+ }) => {
57
+ var _api$trackChanges2, _api$trackChanges2$sh;
58
+ if ((api === null || api === void 0 ? void 0 : (_api$trackChanges2 = api.trackChanges) === null || _api$trackChanges2 === void 0 ? void 0 : (_api$trackChanges2$sh = _api$trackChanges2.sharedState.currentState()) === null || _api$trackChanges2$sh === void 0 ? void 0 : _api$trackChanges2$sh.isToggleChangesDisabled) === isDisabled) {
59
+ return null;
60
+ }
61
+ return tr.setMeta(trackChangesPluginKey, {
62
+ action: ACTION.SET_TOGGLE_CHANGES_DISABLED,
63
+ isDisabled
64
+ });
65
+ },
48
66
  resetBaseline: ({
49
67
  tr
50
68
  }) => {
51
- var _api$trackChanges, _api$trackChanges$sha;
52
- if (!(api !== null && api !== void 0 && (_api$trackChanges = api.trackChanges) !== null && _api$trackChanges !== void 0 && (_api$trackChanges$sha = _api$trackChanges.sharedState.currentState()) !== null && _api$trackChanges$sha !== void 0 && _api$trackChanges$sha.isShowDiffAvailable)) {
69
+ var _api$trackChanges3, _api$trackChanges3$sh;
70
+ if (!(api !== null && api !== void 0 && (_api$trackChanges3 = api.trackChanges) !== null && _api$trackChanges3 !== void 0 && (_api$trackChanges3$sh = _api$trackChanges3.sharedState.currentState()) !== null && _api$trackChanges3$sh !== void 0 && _api$trackChanges3$sh.isShowDiffAvailable)) {
53
71
  return null;
54
72
  }
55
73
  return tr.setMeta(trackChangesPluginKey, {
@@ -58,16 +76,18 @@ export const trackChangesPlugin = ({
58
76
  }
59
77
  },
60
78
  getSharedState: editorState => {
61
- var _trackChangesPluginKe, _trackChangesPluginKe2;
79
+ var _trackChangesPluginKe, _trackChangesPluginKe2, _trackChangesPluginKe3;
62
80
  if (!editorState) {
63
81
  return {
64
82
  isDisplayingChanges: false,
65
- isShowDiffAvailable: false
83
+ isShowDiffAvailable: false,
84
+ isToggleChangesDisabled: false
66
85
  };
67
86
  }
68
87
  return {
69
88
  isDisplayingChanges: Boolean((_trackChangesPluginKe = trackChangesPluginKey.getState(editorState)) === null || _trackChangesPluginKe === void 0 ? void 0 : _trackChangesPluginKe.shouldChangesBeDisplayed),
70
- isShowDiffAvailable: Boolean((_trackChangesPluginKe2 = trackChangesPluginKey.getState(editorState)) === null || _trackChangesPluginKe2 === void 0 ? void 0 : _trackChangesPluginKe2.isShowDiffAvailable)
89
+ isShowDiffAvailable: Boolean((_trackChangesPluginKe2 = trackChangesPluginKey.getState(editorState)) === null || _trackChangesPluginKe2 === void 0 ? void 0 : _trackChangesPluginKe2.isShowDiffAvailable),
90
+ isToggleChangesDisabled: Boolean((_trackChangesPluginKe3 = trackChangesPluginKey.getState(editorState)) === null || _trackChangesPluginKe3 === void 0 ? void 0 : _trackChangesPluginKe3.isToggleChangesDisabled)
71
91
  };
72
92
  }
73
93
  };
@@ -13,14 +13,20 @@ export const TrackChangesToolbarButton = ({
13
13
  const isToolbarAIFCEnabled = Boolean(api === null || api === void 0 ? void 0 : api.toolbar);
14
14
  const {
15
15
  isDisplayingChanges,
16
- isShowDiffAvailable
16
+ isShowDiffAvailable,
17
+ isToggleChangesDisabled
17
18
  } = useSharedPluginStateWithSelector(api, ['trackChanges'], states => {
18
- var _states$trackChangesS, _states$trackChangesS2;
19
+ var _states$trackChangesS, _states$trackChangesS2, _states$trackChangesS3;
19
20
  return {
20
21
  isDisplayingChanges: (_states$trackChangesS = states.trackChangesState) === null || _states$trackChangesS === void 0 ? void 0 : _states$trackChangesS.isDisplayingChanges,
21
- isShowDiffAvailable: (_states$trackChangesS2 = states.trackChangesState) === null || _states$trackChangesS2 === void 0 ? void 0 : _states$trackChangesS2.isShowDiffAvailable
22
+ isShowDiffAvailable: (_states$trackChangesS2 = states.trackChangesState) === null || _states$trackChangesS2 === void 0 ? void 0 : _states$trackChangesS2.isShowDiffAvailable,
23
+ isToggleChangesDisabled: (_states$trackChangesS3 = states.trackChangesState) === null || _states$trackChangesS3 === void 0 ? void 0 : _states$trackChangesS3.isToggleChangesDisabled
22
24
  };
23
25
  });
26
+
27
+ // Disabled either because there's nothing to diff, or because another plugin currently
28
+ // owns the diff decorations (e.g. the AI Review moment is visible).
29
+ const isDisabled = !isShowDiffAvailable || Boolean(isToggleChangesDisabled);
24
30
  const {
25
31
  formatMessage
26
32
  } = useIntl();
@@ -47,7 +53,7 @@ export const TrackChangesToolbarButton = ({
47
53
  icon: HistoryIcon,
48
54
  label: formatMessage(trackChangesMessages.toolbarIconLabel),
49
55
  appearance: "subtle",
50
- isDisabled: !isShowDiffAvailable,
56
+ isDisabled: isDisabled,
51
57
  isSelected: isDisplayingChanges,
52
58
  onClick: handleClick
53
59
  }));
@@ -60,7 +66,7 @@ export const TrackChangesToolbarButton = ({
60
66
  size: "small"
61
67
  }),
62
68
  onClick: handleClick,
63
- isDisabled: !isShowDiffAvailable,
69
+ isDisabled: isDisabled,
64
70
  isSelected: isDisplayingChanges
65
71
  }));
66
72
  return Wrapper ? /*#__PURE__*/React.createElement(Wrapper, null, button) : button;
@@ -12,8 +12,10 @@ export function keymapPlugin(api) {
12
12
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
13
13
  toggleViewChanges.common, function () {
14
14
  var _api$trackChanges, _api$trackChanges2;
15
- var isShowDiffAvailable = api === null || api === void 0 || (_api$trackChanges = api.trackChanges) === null || _api$trackChanges === void 0 || (_api$trackChanges = _api$trackChanges.sharedState.currentState()) === null || _api$trackChanges === void 0 ? void 0 : _api$trackChanges.isShowDiffAvailable;
16
- if (!isShowDiffAvailable) {
15
+ var trackChangesState = api === null || api === void 0 || (_api$trackChanges = api.trackChanges) === null || _api$trackChanges === void 0 ? void 0 : _api$trackChanges.sharedState.currentState();
16
+ // Mirror the toolbar button: no changes to show, or another plugin currently owns
17
+ // the diff decorations (e.g. the AI Review moment is visible).
18
+ if (!(trackChangesState !== null && trackChangesState !== void 0 && trackChangesState.isShowDiffAvailable) || trackChangesState !== null && trackChangesState !== void 0 && trackChangesState.isToggleChangesDisabled) {
17
19
  return false;
18
20
  }
19
21
  var result = api === null || api === void 0 ? void 0 : api.core.actions.execute(api === null || api === void 0 || (_api$trackChanges2 = api.trackChanges) === null || _api$trackChanges2 === void 0 ? void 0 : _api$trackChanges2.commands.toggleChanges);
@@ -52,12 +52,18 @@ export var createTrackChangesPlugin = function createTrackChangesPlugin(api) {
52
52
  steps: [],
53
53
  shouldChangesBeDisplayed: false,
54
54
  isShowDiffAvailable: false,
55
+ isToggleChangesDisabled: false,
55
56
  allocations: new Set()
56
57
  };
57
58
  },
58
59
  apply: function apply(tr, state) {
59
60
  var _api$history, _state$steps$at$alloc, _state$steps$at;
60
61
  var metadata = tr.getMeta(trackChangesPluginKey);
62
+ if (metadata && metadata.action === ACTION.SET_TOGGLE_CHANGES_DISABLED) {
63
+ return _objectSpread(_objectSpread({}, state), {}, {
64
+ isToggleChangesDisabled: Boolean(metadata.isDisabled)
65
+ });
66
+ }
61
67
  if (metadata && metadata.action === ACTION.RESET_BASELINE) {
62
68
  return _objectSpread(_objectSpread({}, state), {}, {
63
69
  steps: [],
@@ -1,5 +1,6 @@
1
1
  export var TOGGLE_TRACK_CHANGES_ACTION = /*#__PURE__*/function (TOGGLE_TRACK_CHANGES_ACTION) {
2
2
  TOGGLE_TRACK_CHANGES_ACTION["TOGGLE_TRACK_CHANGES"] = "TOGGLE_TRACK_CHANGES";
3
3
  TOGGLE_TRACK_CHANGES_ACTION["RESET_BASELINE"] = "RESET_BASELINE";
4
+ TOGGLE_TRACK_CHANGES_ACTION["SET_TOGGLE_CHANGES_DISABLED"] = "SET_TOGGLE_CHANGES_DISABLED";
4
5
  return TOGGLE_TRACK_CHANGES_ACTION;
5
6
  }({});
@@ -42,15 +42,34 @@ export var trackChangesPlugin = function trackChangesPlugin(_ref) {
42
42
  },
43
43
  commands: {
44
44
  toggleChanges: function toggleChanges(_ref2) {
45
+ var _api$trackChanges;
45
46
  var tr = _ref2.tr;
47
+ // Another plugin currently owns the diff decorations (e.g. the AI Review moment),
48
+ // so toggling would fight over the same diff — bail out.
49
+ if (api !== null && api !== void 0 && (_api$trackChanges = api.trackChanges) !== null && _api$trackChanges !== void 0 && (_api$trackChanges = _api$trackChanges.sharedState.currentState()) !== null && _api$trackChanges !== void 0 && _api$trackChanges.isToggleChangesDisabled) {
50
+ return null;
51
+ }
46
52
  return tr.setMeta(trackChangesPluginKey, {
47
53
  action: ACTION.TOGGLE_TRACK_CHANGES
48
54
  });
49
55
  },
50
- resetBaseline: function resetBaseline(_ref3) {
51
- var _api$trackChanges;
52
- var tr = _ref3.tr;
53
- if (!(api !== null && api !== void 0 && (_api$trackChanges = api.trackChanges) !== null && _api$trackChanges !== void 0 && (_api$trackChanges = _api$trackChanges.sharedState.currentState()) !== null && _api$trackChanges !== void 0 && _api$trackChanges.isShowDiffAvailable)) {
56
+ setToggleChangesDisabled: function setToggleChangesDisabled(isDisabled) {
57
+ return function (_ref3) {
58
+ var _api$trackChanges2;
59
+ var tr = _ref3.tr;
60
+ if ((api === null || api === void 0 || (_api$trackChanges2 = api.trackChanges) === null || _api$trackChanges2 === void 0 || (_api$trackChanges2 = _api$trackChanges2.sharedState.currentState()) === null || _api$trackChanges2 === void 0 ? void 0 : _api$trackChanges2.isToggleChangesDisabled) === isDisabled) {
61
+ return null;
62
+ }
63
+ return tr.setMeta(trackChangesPluginKey, {
64
+ action: ACTION.SET_TOGGLE_CHANGES_DISABLED,
65
+ isDisabled: isDisabled
66
+ });
67
+ };
68
+ },
69
+ resetBaseline: function resetBaseline(_ref4) {
70
+ var _api$trackChanges3;
71
+ var tr = _ref4.tr;
72
+ if (!(api !== null && api !== void 0 && (_api$trackChanges3 = api.trackChanges) !== null && _api$trackChanges3 !== void 0 && (_api$trackChanges3 = _api$trackChanges3.sharedState.currentState()) !== null && _api$trackChanges3 !== void 0 && _api$trackChanges3.isShowDiffAvailable)) {
54
73
  return null;
55
74
  }
56
75
  return tr.setMeta(trackChangesPluginKey, {
@@ -59,16 +78,18 @@ export var trackChangesPlugin = function trackChangesPlugin(_ref) {
59
78
  }
60
79
  },
61
80
  getSharedState: function getSharedState(editorState) {
62
- var _trackChangesPluginKe, _trackChangesPluginKe2;
81
+ var _trackChangesPluginKe, _trackChangesPluginKe2, _trackChangesPluginKe3;
63
82
  if (!editorState) {
64
83
  return {
65
84
  isDisplayingChanges: false,
66
- isShowDiffAvailable: false
85
+ isShowDiffAvailable: false,
86
+ isToggleChangesDisabled: false
67
87
  };
68
88
  }
69
89
  return {
70
90
  isDisplayingChanges: Boolean((_trackChangesPluginKe = trackChangesPluginKey.getState(editorState)) === null || _trackChangesPluginKe === void 0 ? void 0 : _trackChangesPluginKe.shouldChangesBeDisplayed),
71
- isShowDiffAvailable: Boolean((_trackChangesPluginKe2 = trackChangesPluginKey.getState(editorState)) === null || _trackChangesPluginKe2 === void 0 ? void 0 : _trackChangesPluginKe2.isShowDiffAvailable)
91
+ isShowDiffAvailable: Boolean((_trackChangesPluginKe2 = trackChangesPluginKey.getState(editorState)) === null || _trackChangesPluginKe2 === void 0 ? void 0 : _trackChangesPluginKe2.isShowDiffAvailable),
92
+ isToggleChangesDisabled: Boolean((_trackChangesPluginKe3 = trackChangesPluginKey.getState(editorState)) === null || _trackChangesPluginKe3 === void 0 ? void 0 : _trackChangesPluginKe3.isToggleChangesDisabled)
72
93
  };
73
94
  }
74
95
  };
@@ -11,14 +11,20 @@ export var TrackChangesToolbarButton = function TrackChangesToolbarButton(_ref)
11
11
  Wrapper = _ref.wrapper;
12
12
  var isToolbarAIFCEnabled = Boolean(api === null || api === void 0 ? void 0 : api.toolbar);
13
13
  var _useSharedPluginState = useSharedPluginStateWithSelector(api, ['trackChanges'], function (states) {
14
- var _states$trackChangesS, _states$trackChangesS2;
14
+ var _states$trackChangesS, _states$trackChangesS2, _states$trackChangesS3;
15
15
  return {
16
16
  isDisplayingChanges: (_states$trackChangesS = states.trackChangesState) === null || _states$trackChangesS === void 0 ? void 0 : _states$trackChangesS.isDisplayingChanges,
17
- isShowDiffAvailable: (_states$trackChangesS2 = states.trackChangesState) === null || _states$trackChangesS2 === void 0 ? void 0 : _states$trackChangesS2.isShowDiffAvailable
17
+ isShowDiffAvailable: (_states$trackChangesS2 = states.trackChangesState) === null || _states$trackChangesS2 === void 0 ? void 0 : _states$trackChangesS2.isShowDiffAvailable,
18
+ isToggleChangesDisabled: (_states$trackChangesS3 = states.trackChangesState) === null || _states$trackChangesS3 === void 0 ? void 0 : _states$trackChangesS3.isToggleChangesDisabled
18
19
  };
19
20
  }),
20
21
  isDisplayingChanges = _useSharedPluginState.isDisplayingChanges,
21
- isShowDiffAvailable = _useSharedPluginState.isShowDiffAvailable;
22
+ isShowDiffAvailable = _useSharedPluginState.isShowDiffAvailable,
23
+ isToggleChangesDisabled = _useSharedPluginState.isToggleChangesDisabled;
24
+
25
+ // Disabled either because there's nothing to diff, or because another plugin currently
26
+ // owns the diff decorations (e.g. the AI Review moment is visible).
27
+ var isDisabled = !isShowDiffAvailable || Boolean(isToggleChangesDisabled);
22
28
  var _useIntl = useIntl(),
23
29
  formatMessage = _useIntl.formatMessage;
24
30
  var handleClick = React.useCallback(function () {
@@ -44,7 +50,7 @@ export var TrackChangesToolbarButton = function TrackChangesToolbarButton(_ref)
44
50
  icon: HistoryIcon,
45
51
  label: formatMessage(trackChangesMessages.toolbarIconLabel),
46
52
  appearance: "subtle",
47
- isDisabled: !isShowDiffAvailable,
53
+ isDisabled: isDisabled,
48
54
  isSelected: isDisplayingChanges,
49
55
  onClick: handleClick
50
56
  }));
@@ -57,7 +63,7 @@ export var TrackChangesToolbarButton = function TrackChangesToolbarButton(_ref)
57
63
  size: "small"
58
64
  }),
59
65
  onClick: handleClick,
60
- isDisabled: !isShowDiffAvailable,
66
+ isDisabled: isDisabled,
61
67
  isSelected: isDisplayingChanges
62
68
  }));
63
69
  return Wrapper ? /*#__PURE__*/React.createElement(Wrapper, null, button) : button;
@@ -8,6 +8,12 @@ export declare const trackChangesPluginKey: PluginKey<TrackChangesPluginState>;
8
8
  type TrackChangesPluginState = {
9
9
  allocations: Set<number>;
10
10
  isShowDiffAvailable: boolean;
11
+ /**
12
+ * Set by other plugins (via the `setToggleChangesDisabled` command) while they own the
13
+ * diff decorations — e.g. the AI Review moment. While true the toolbar button and the
14
+ * keyboard shortcut must not toggle track changes.
15
+ */
16
+ isToggleChangesDisabled: boolean;
11
17
  shouldChangesBeDisplayed: boolean;
12
18
  steps: InvertableStep[];
13
19
  };
@@ -1,4 +1,5 @@
1
1
  export declare enum TOGGLE_TRACK_CHANGES_ACTION {
2
2
  TOGGLE_TRACK_CHANGES = "TOGGLE_TRACK_CHANGES",
3
- RESET_BASELINE = "RESET_BASELINE"
3
+ RESET_BASELINE = "RESET_BASELINE",
4
+ SET_TOGGLE_CHANGES_DISABLED = "SET_TOGGLE_CHANGES_DISABLED"
4
5
  }
@@ -22,6 +22,17 @@ export type TrackChangesPlugin = NextEditorPlugin<'trackChanges', {
22
22
  * Resets the baseline used for tracking changes in the editor.
23
23
  */
24
24
  resetBaseline: EditorCommand;
25
+ /**
26
+ * Disables (or re-enables) the ability to toggle track changes.
27
+ *
28
+ * Intended for other plugins that temporarily own the diff decorations — for example
29
+ * the AI Review moment — so the toolbar button and keyboard shortcut don't fight over
30
+ * the same diff. While disabled the toolbar button renders in a disabled state and
31
+ * `toggleChanges` becomes a no-op.
32
+ *
33
+ * Callers are responsible for re-enabling (passing `false`) once they are done.
34
+ */
35
+ setToggleChangesDisabled: (isDisabled: boolean) => EditorCommand;
25
36
  /**
26
37
  * Toggles the displaying of changes in the editor.
27
38
  */
@@ -55,5 +66,11 @@ export type TrackChangesPlugin = NextEditorPlugin<'trackChanges', {
55
66
  * This will only be false initially before any changes in the session.
56
67
  */
57
68
  isShowDiffAvailable: boolean;
69
+ /**
70
+ * Whether toggling track changes has been disabled by another plugin that currently
71
+ * owns the diff decorations (see the `setToggleChangesDisabled` command).
72
+ * Defaults to false.
73
+ */
74
+ isToggleChangesDisabled: boolean;
58
75
  };
59
76
  }>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/editor-plugin-track-changes",
3
- "version": "12.0.3",
3
+ "version": "12.1.1",
4
4
  "description": "ShowDiff plugin for @atlaskit/editor-core",
5
5
  "author": "Atlassian Pty Ltd",
6
6
  "license": "Apache-2.0",
@@ -23,8 +23,8 @@
23
23
  "@atlaskit/button": "^25.0.0",
24
24
  "@atlaskit/editor-plugin-history": "13.0.0",
25
25
  "@atlaskit/editor-plugin-primary-toolbar": "^14.0.0",
26
- "@atlaskit/editor-plugin-show-diff": "11.0.3",
27
- "@atlaskit/editor-plugin-toolbar": "^10.0.0",
26
+ "@atlaskit/editor-plugin-show-diff": "11.0.4",
27
+ "@atlaskit/editor-plugin-toolbar": "^10.1.0",
28
28
  "@atlaskit/editor-prosemirror": "^8.0.0",
29
29
  "@atlaskit/editor-toolbar": "^2.4.0",
30
30
  "@atlaskit/editor-toolbar-model": "^1.2.0",
@@ -32,7 +32,7 @@
32
32
  "@babel/runtime": "^7.0.0"
33
33
  },
34
34
  "peerDependencies": {
35
- "@atlaskit/editor-common": "^117.2.0",
35
+ "@atlaskit/editor-common": "^117.4.0",
36
36
  "react": "^18.2.0 || ^19.2.0",
37
37
  "react-intl": "^5.25.1 || ^6.0.0 || ^7.0.0"
38
38
  },
@@ -79,10 +79,10 @@
79
79
  },
80
80
  "devDependencies": {
81
81
  "@af/editor-examples-helpers": "workspace:^",
82
- "@atlaskit/editor-core": "^222.0.0",
82
+ "@atlaskit/editor-core": "^222.1.0",
83
83
  "@atlaskit/primitives": "^22.2.0",
84
84
  "@atlaskit/synchrony-test-helpers": "workspace:^",
85
- "@atlaskit/tokens": "^16.3.0",
85
+ "@atlaskit/tokens": "^16.4.0",
86
86
  "@atlassian/structured-docs-types": "workspace:^",
87
87
  "@compiled/react": "^1.0.0",
88
88
  "prosemirror-dev-tools": "^4.2.0",
package/tsconfig.json CHANGED
@@ -1,17 +1,7 @@
1
1
  {
2
- "extends": "../../../tsconfig.json",
3
- "include": [
4
- "examples/**/*.ts",
5
- "examples/**/*.tsx",
6
- "example-helpers/**/*.ts",
7
- "example-helpers/**/*.tsx",
8
- "src/**/*.ts",
9
- "src/**/*.tsx",
10
- "**/stories.ts",
11
- "**/stories.tsx",
12
- "**/stories/*.ts",
13
- "**/stories/*.tsx",
14
- "**/stories/**/*.ts",
15
- "**/stories/**/*.tsx"
16
- ]
2
+ "extends": "./tsconfig.dev.json",
3
+ "compilerOptions": {
4
+ "disableReferencedProjectLoad": true,
5
+ "disableSolutionSearching": true
6
+ }
17
7
  }