@atlaskit/editor-plugin-collab-edit 23.0.8 → 24.0.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 CHANGED
@@ -1,5 +1,26 @@
1
1
  # @atlaskit/editor-plugin-collab-edit
2
2
 
3
+ ## 24.0.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`24d07fc254d9d`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/24d07fc254d9d) -
8
+ Expose a monotonic count of direct local human body edits, excluding remote, agent, and
9
+ comment-only transactions, so draft sync can attribute contributors without changing content
10
+ syncing.
11
+
12
+ Enabled behind `confluence_ncs_step_diffing_version_history`.
13
+
14
+ ### Patch Changes
15
+
16
+ - Updated dependencies
17
+
18
+ ## 23.0.9
19
+
20
+ ### Patch Changes
21
+
22
+ - Updated dependencies
23
+
3
24
  ## 23.0.8
4
25
 
5
26
  ### Patch Changes
@@ -6,8 +6,8 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.collabEditPlugin = void 0;
8
8
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
9
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
10
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
11
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
12
12
  var _analytics = require("@atlaskit/editor-common/analytics");
13
13
  var _utils = require("@atlaskit/editor-common/utils");
@@ -120,9 +120,12 @@ var collabEditPlugin = exports.collabEditPlugin = function collabEditPlugin(_ref
120
120
  return {
121
121
  name: 'collabEdit',
122
122
  getSharedState: function getSharedState(state) {
123
+ var _lastOrganicChangeSta;
123
124
  if (!state) {
124
125
  return {
125
- initialised: {
126
+ initialised: _objectSpread(_objectSpread({}, (0, _fg.fg)('confluence_ncs_step_diffing_version_history') && {
127
+ localHumanBodyChangeCount: 0
128
+ }), {}, {
126
129
  collabInitialisedAt: null,
127
130
  firstChangeAfterInitAt: null,
128
131
  firstContentBodyChangeAfterInitAt: null,
@@ -130,7 +133,7 @@ var collabEditPlugin = exports.collabEditPlugin = function collabEditPlugin(_ref
130
133
  lastRemoteOrganicChangeAt: null,
131
134
  lastLocalOrganicBodyChangeAt: null,
132
135
  lastRemoteOrganicBodyChangeAt: null
133
- },
136
+ }),
134
137
  activeParticipants: undefined,
135
138
  sessionId: undefined,
136
139
  lastReconnectionConflictMetadata: undefined
@@ -143,7 +146,9 @@ var collabEditPlugin = exports.collabEditPlugin = function collabEditPlugin(_ref
143
146
  return {
144
147
  activeParticipants: collabPluginState === null || collabPluginState === void 0 ? void 0 : collabPluginState.activeParticipants,
145
148
  sessionId: collabPluginState === null || collabPluginState === void 0 ? void 0 : collabPluginState.sessionId,
146
- initialised: {
149
+ initialised: _objectSpread(_objectSpread({}, (0, _fg.fg)('confluence_ncs_step_diffing_version_history') && {
150
+ localHumanBodyChangeCount: (_lastOrganicChangeSta = lastOrganicChangeState === null || lastOrganicChangeState === void 0 ? void 0 : lastOrganicChangeState.localHumanBodyChangeCount) !== null && _lastOrganicChangeSta !== void 0 ? _lastOrganicChangeSta : 0
151
+ }), {}, {
147
152
  collabInitialisedAt: (metadata === null || metadata === void 0 ? void 0 : metadata.collabInitialisedAt) || null,
148
153
  firstChangeAfterInitAt: (metadata === null || metadata === void 0 ? void 0 : metadata.firstChangeAfterInitAt) || null,
149
154
  firstContentBodyChangeAfterInitAt: (metadata === null || metadata === void 0 ? void 0 : metadata.firstContentBodyChangeAfterInitAt) || null,
@@ -151,7 +156,7 @@ var collabEditPlugin = exports.collabEditPlugin = function collabEditPlugin(_ref
151
156
  lastRemoteOrganicChangeAt: (lastOrganicChangeState === null || lastOrganicChangeState === void 0 ? void 0 : lastOrganicChangeState.lastRemoteOrganicChangeAt) || null,
152
157
  lastLocalOrganicBodyChangeAt: (lastOrganicChangeState === null || lastOrganicChangeState === void 0 ? void 0 : lastOrganicChangeState.lastLocalOrganicBodyChangeAt) || null,
153
158
  lastRemoteOrganicBodyChangeAt: (lastOrganicChangeState === null || lastOrganicChangeState === void 0 ? void 0 : lastOrganicChangeState.lastRemoteOrganicBodyChangeAt) || null
154
- },
159
+ }),
155
160
  lastReconnectionConflictMetadata: lastRemoteConflict
156
161
  };
157
162
  },
@@ -1,26 +1,34 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
4
  Object.defineProperty(exports, "__esModule", {
4
5
  value: true
5
6
  });
6
7
  exports.trackLastOrganicChangePluginKey = exports.createPlugin = void 0;
8
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
7
9
  var _collab = require("@atlaskit/editor-common/collab");
8
10
  var _safePlugin = require("@atlaskit/editor-common/safe-plugin");
11
+ var _transactionAgentAttribution = require("@atlaskit/editor-common/transaction-agent-attribution");
9
12
  var _state = require("@atlaskit/editor-prosemirror/state");
10
13
  var _transform = require("@atlaskit/editor-prosemirror/transform");
14
+ var _fg = require("@atlaskit/platform-feature-flags/fg");
11
15
  var _utils = require("./utils");
16
+ 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; }
17
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
12
18
  var trackLastOrganicChangePluginKey = exports.trackLastOrganicChangePluginKey = new _state.PluginKey('collabTrackLastOrganicChangePlugin');
13
19
  var createPlugin = exports.createPlugin = function createPlugin() {
14
20
  return new _safePlugin.SafePlugin({
15
21
  key: trackLastOrganicChangePluginKey,
16
22
  state: {
17
23
  init: function init() {
18
- return {
24
+ return _objectSpread(_objectSpread({}, (0, _fg.fg)('confluence_ncs_step_diffing_version_history') && {
25
+ localHumanBodyChangeCount: 0
26
+ }), {}, {
19
27
  lastLocalOrganicChangeAt: null,
20
28
  lastRemoteOrganicChangeAt: null,
21
29
  lastLocalOrganicBodyChangeAt: null,
22
30
  lastRemoteOrganicBodyChangeAt: null
23
- };
31
+ });
24
32
  },
25
33
  apply: function apply(transaction, prevPluginState) {
26
34
  if (Boolean(transaction.getMeta('appendedTransaction'))) {
@@ -41,20 +49,28 @@ var createPlugin = exports.createPlugin = function createPlugin() {
41
49
  return prevPluginState;
42
50
  }
43
51
  if ((0, _utils.isOrganicChange)(transaction)) {
52
+ var _prevPluginState$loca;
44
53
  if (isRemote) {
45
- return {
54
+ return _objectSpread(_objectSpread({}, (0, _fg.fg)('confluence_ncs_step_diffing_version_history') && {
55
+ localHumanBodyChangeCount: prevPluginState.localHumanBodyChangeCount
56
+ }), {}, {
46
57
  lastLocalOrganicChangeAt: prevPluginState.lastLocalOrganicChangeAt,
47
58
  lastRemoteOrganicChangeAt: Date.now(),
48
59
  lastLocalOrganicBodyChangeAt: prevPluginState.lastLocalOrganicBodyChangeAt,
49
60
  lastRemoteOrganicBodyChangeAt: isAnnotationStep ? prevPluginState.lastRemoteOrganicBodyChangeAt : Date.now()
50
- };
61
+ });
51
62
  }
52
- return {
63
+ // Agent transactions can be local (frontend streaming) or remote (NCS).
64
+ // Keep organic-change tracking intact for saving, but track human attribution separately.
65
+ var isAgentChange = (0, _fg.fg)('confluence_ncs_step_diffing_version_history') && Boolean(transaction.getMeta(_transactionAgentAttribution.AGENT_ATTRIBUTION_META));
66
+ return _objectSpread(_objectSpread({}, (0, _fg.fg)('confluence_ncs_step_diffing_version_history') && {
67
+ localHumanBodyChangeCount: ((_prevPluginState$loca = prevPluginState.localHumanBodyChangeCount) !== null && _prevPluginState$loca !== void 0 ? _prevPluginState$loca : 0) + (isAnnotationStep || isAgentChange ? 0 : 1)
68
+ }), {}, {
53
69
  lastLocalOrganicChangeAt: Date.now(),
54
70
  lastRemoteOrganicChangeAt: prevPluginState.lastRemoteOrganicChangeAt,
55
71
  lastLocalOrganicBodyChangeAt: isAnnotationStep ? prevPluginState.lastLocalOrganicBodyChangeAt : Date.now(),
56
72
  lastRemoteOrganicBodyChangeAt: prevPluginState.lastRemoteOrganicBodyChangeAt
57
- };
73
+ });
58
74
  }
59
75
  return prevPluginState;
60
76
  }
@@ -81,9 +81,13 @@ export const collabEditPlugin = ({
81
81
  return {
82
82
  name: 'collabEdit',
83
83
  getSharedState(state) {
84
+ var _lastOrganicChangeSta;
84
85
  if (!state) {
85
86
  return {
86
87
  initialised: {
88
+ ...(fg('confluence_ncs_step_diffing_version_history') && {
89
+ localHumanBodyChangeCount: 0
90
+ }),
87
91
  collabInitialisedAt: null,
88
92
  firstChangeAfterInitAt: null,
89
93
  firstContentBodyChangeAfterInitAt: null,
@@ -105,6 +109,9 @@ export const collabEditPlugin = ({
105
109
  activeParticipants: collabPluginState === null || collabPluginState === void 0 ? void 0 : collabPluginState.activeParticipants,
106
110
  sessionId: collabPluginState === null || collabPluginState === void 0 ? void 0 : collabPluginState.sessionId,
107
111
  initialised: {
112
+ ...(fg('confluence_ncs_step_diffing_version_history') && {
113
+ localHumanBodyChangeCount: (_lastOrganicChangeSta = lastOrganicChangeState === null || lastOrganicChangeState === void 0 ? void 0 : lastOrganicChangeState.localHumanBodyChangeCount) !== null && _lastOrganicChangeSta !== void 0 ? _lastOrganicChangeSta : 0
114
+ }),
108
115
  collabInitialisedAt: (metadata === null || metadata === void 0 ? void 0 : metadata.collabInitialisedAt) || null,
109
116
  firstChangeAfterInitAt: (metadata === null || metadata === void 0 ? void 0 : metadata.firstChangeAfterInitAt) || null,
110
117
  firstContentBodyChangeAfterInitAt: (metadata === null || metadata === void 0 ? void 0 : metadata.firstContentBodyChangeAfterInitAt) || null,
@@ -1,7 +1,9 @@
1
1
  import { isDirtyTransaction } from '@atlaskit/editor-common/collab';
2
2
  import { SafePlugin } from '@atlaskit/editor-common/safe-plugin';
3
+ import { AGENT_ATTRIBUTION_META } from '@atlaskit/editor-common/transaction-agent-attribution';
3
4
  import { PluginKey } from '@atlaskit/editor-prosemirror/state';
4
5
  import { AddMarkStep, RemoveMarkStep } from '@atlaskit/editor-prosemirror/transform';
6
+ import { fg } from '@atlaskit/platform-feature-flags/fg';
5
7
  import { isOrganicChange } from './utils';
6
8
  export const trackLastOrganicChangePluginKey = new PluginKey('collabTrackLastOrganicChangePlugin');
7
9
  export const createPlugin = () => {
@@ -10,6 +12,9 @@ export const createPlugin = () => {
10
12
  state: {
11
13
  init() {
12
14
  return {
15
+ ...(fg('confluence_ncs_step_diffing_version_history') && {
16
+ localHumanBodyChangeCount: 0
17
+ }),
13
18
  lastLocalOrganicChangeAt: null,
14
19
  lastRemoteOrganicChangeAt: null,
15
20
  lastLocalOrganicBodyChangeAt: null,
@@ -35,15 +40,25 @@ export const createPlugin = () => {
35
40
  return prevPluginState;
36
41
  }
37
42
  if (isOrganicChange(transaction)) {
43
+ var _prevPluginState$loca;
38
44
  if (isRemote) {
39
45
  return {
46
+ ...(fg('confluence_ncs_step_diffing_version_history') && {
47
+ localHumanBodyChangeCount: prevPluginState.localHumanBodyChangeCount
48
+ }),
40
49
  lastLocalOrganicChangeAt: prevPluginState.lastLocalOrganicChangeAt,
41
50
  lastRemoteOrganicChangeAt: Date.now(),
42
51
  lastLocalOrganicBodyChangeAt: prevPluginState.lastLocalOrganicBodyChangeAt,
43
52
  lastRemoteOrganicBodyChangeAt: isAnnotationStep ? prevPluginState.lastRemoteOrganicBodyChangeAt : Date.now()
44
53
  };
45
54
  }
55
+ // Agent transactions can be local (frontend streaming) or remote (NCS).
56
+ // Keep organic-change tracking intact for saving, but track human attribution separately.
57
+ const isAgentChange = fg('confluence_ncs_step_diffing_version_history') && Boolean(transaction.getMeta(AGENT_ATTRIBUTION_META));
46
58
  return {
59
+ ...(fg('confluence_ncs_step_diffing_version_history') && {
60
+ localHumanBodyChangeCount: ((_prevPluginState$loca = prevPluginState.localHumanBodyChangeCount) !== null && _prevPluginState$loca !== void 0 ? _prevPluginState$loca : 0) + (isAnnotationStep || isAgentChange ? 0 : 1)
61
+ }),
47
62
  lastLocalOrganicChangeAt: Date.now(),
48
63
  lastRemoteOrganicChangeAt: prevPluginState.lastRemoteOrganicChangeAt,
49
64
  lastLocalOrganicBodyChangeAt: isAnnotationStep ? prevPluginState.lastLocalOrganicBodyChangeAt : Date.now(),
@@ -1,5 +1,5 @@
1
- import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
1
  import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
2
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
3
  import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
4
4
  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; }
5
5
  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; }
@@ -113,9 +113,12 @@ export var collabEditPlugin = function collabEditPlugin(_ref4) {
113
113
  return {
114
114
  name: 'collabEdit',
115
115
  getSharedState: function getSharedState(state) {
116
+ var _lastOrganicChangeSta;
116
117
  if (!state) {
117
118
  return {
118
- initialised: {
119
+ initialised: _objectSpread(_objectSpread({}, fg('confluence_ncs_step_diffing_version_history') && {
120
+ localHumanBodyChangeCount: 0
121
+ }), {}, {
119
122
  collabInitialisedAt: null,
120
123
  firstChangeAfterInitAt: null,
121
124
  firstContentBodyChangeAfterInitAt: null,
@@ -123,7 +126,7 @@ export var collabEditPlugin = function collabEditPlugin(_ref4) {
123
126
  lastRemoteOrganicChangeAt: null,
124
127
  lastLocalOrganicBodyChangeAt: null,
125
128
  lastRemoteOrganicBodyChangeAt: null
126
- },
129
+ }),
127
130
  activeParticipants: undefined,
128
131
  sessionId: undefined,
129
132
  lastReconnectionConflictMetadata: undefined
@@ -136,7 +139,9 @@ export var collabEditPlugin = function collabEditPlugin(_ref4) {
136
139
  return {
137
140
  activeParticipants: collabPluginState === null || collabPluginState === void 0 ? void 0 : collabPluginState.activeParticipants,
138
141
  sessionId: collabPluginState === null || collabPluginState === void 0 ? void 0 : collabPluginState.sessionId,
139
- initialised: {
142
+ initialised: _objectSpread(_objectSpread({}, fg('confluence_ncs_step_diffing_version_history') && {
143
+ localHumanBodyChangeCount: (_lastOrganicChangeSta = lastOrganicChangeState === null || lastOrganicChangeState === void 0 ? void 0 : lastOrganicChangeState.localHumanBodyChangeCount) !== null && _lastOrganicChangeSta !== void 0 ? _lastOrganicChangeSta : 0
144
+ }), {}, {
140
145
  collabInitialisedAt: (metadata === null || metadata === void 0 ? void 0 : metadata.collabInitialisedAt) || null,
141
146
  firstChangeAfterInitAt: (metadata === null || metadata === void 0 ? void 0 : metadata.firstChangeAfterInitAt) || null,
142
147
  firstContentBodyChangeAfterInitAt: (metadata === null || metadata === void 0 ? void 0 : metadata.firstContentBodyChangeAfterInitAt) || null,
@@ -144,7 +149,7 @@ export var collabEditPlugin = function collabEditPlugin(_ref4) {
144
149
  lastRemoteOrganicChangeAt: (lastOrganicChangeState === null || lastOrganicChangeState === void 0 ? void 0 : lastOrganicChangeState.lastRemoteOrganicChangeAt) || null,
145
150
  lastLocalOrganicBodyChangeAt: (lastOrganicChangeState === null || lastOrganicChangeState === void 0 ? void 0 : lastOrganicChangeState.lastLocalOrganicBodyChangeAt) || null,
146
151
  lastRemoteOrganicBodyChangeAt: (lastOrganicChangeState === null || lastOrganicChangeState === void 0 ? void 0 : lastOrganicChangeState.lastRemoteOrganicBodyChangeAt) || null
147
- },
152
+ }),
148
153
  lastReconnectionConflictMetadata: lastRemoteConflict
149
154
  };
150
155
  },
@@ -1,7 +1,12 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ 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; }
3
+ 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; }
1
4
  import { isDirtyTransaction } from '@atlaskit/editor-common/collab';
2
5
  import { SafePlugin } from '@atlaskit/editor-common/safe-plugin';
6
+ import { AGENT_ATTRIBUTION_META } from '@atlaskit/editor-common/transaction-agent-attribution';
3
7
  import { PluginKey } from '@atlaskit/editor-prosemirror/state';
4
8
  import { AddMarkStep, RemoveMarkStep } from '@atlaskit/editor-prosemirror/transform';
9
+ import { fg } from '@atlaskit/platform-feature-flags/fg';
5
10
  import { isOrganicChange } from './utils';
6
11
  export var trackLastOrganicChangePluginKey = new PluginKey('collabTrackLastOrganicChangePlugin');
7
12
  export var createPlugin = function createPlugin() {
@@ -9,12 +14,14 @@ export var createPlugin = function createPlugin() {
9
14
  key: trackLastOrganicChangePluginKey,
10
15
  state: {
11
16
  init: function init() {
12
- return {
17
+ return _objectSpread(_objectSpread({}, fg('confluence_ncs_step_diffing_version_history') && {
18
+ localHumanBodyChangeCount: 0
19
+ }), {}, {
13
20
  lastLocalOrganicChangeAt: null,
14
21
  lastRemoteOrganicChangeAt: null,
15
22
  lastLocalOrganicBodyChangeAt: null,
16
23
  lastRemoteOrganicBodyChangeAt: null
17
- };
24
+ });
18
25
  },
19
26
  apply: function apply(transaction, prevPluginState) {
20
27
  if (Boolean(transaction.getMeta('appendedTransaction'))) {
@@ -35,20 +42,28 @@ export var createPlugin = function createPlugin() {
35
42
  return prevPluginState;
36
43
  }
37
44
  if (isOrganicChange(transaction)) {
45
+ var _prevPluginState$loca;
38
46
  if (isRemote) {
39
- return {
47
+ return _objectSpread(_objectSpread({}, fg('confluence_ncs_step_diffing_version_history') && {
48
+ localHumanBodyChangeCount: prevPluginState.localHumanBodyChangeCount
49
+ }), {}, {
40
50
  lastLocalOrganicChangeAt: prevPluginState.lastLocalOrganicChangeAt,
41
51
  lastRemoteOrganicChangeAt: Date.now(),
42
52
  lastLocalOrganicBodyChangeAt: prevPluginState.lastLocalOrganicBodyChangeAt,
43
53
  lastRemoteOrganicBodyChangeAt: isAnnotationStep ? prevPluginState.lastRemoteOrganicBodyChangeAt : Date.now()
44
- };
54
+ });
45
55
  }
46
- return {
56
+ // Agent transactions can be local (frontend streaming) or remote (NCS).
57
+ // Keep organic-change tracking intact for saving, but track human attribution separately.
58
+ var isAgentChange = fg('confluence_ncs_step_diffing_version_history') && Boolean(transaction.getMeta(AGENT_ATTRIBUTION_META));
59
+ return _objectSpread(_objectSpread({}, fg('confluence_ncs_step_diffing_version_history') && {
60
+ localHumanBodyChangeCount: ((_prevPluginState$loca = prevPluginState.localHumanBodyChangeCount) !== null && _prevPluginState$loca !== void 0 ? _prevPluginState$loca : 0) + (isAnnotationStep || isAgentChange ? 0 : 1)
61
+ }), {}, {
47
62
  lastLocalOrganicChangeAt: Date.now(),
48
63
  lastRemoteOrganicChangeAt: prevPluginState.lastRemoteOrganicChangeAt,
49
64
  lastLocalOrganicBodyChangeAt: isAnnotationStep ? prevPluginState.lastLocalOrganicBodyChangeAt : Date.now(),
50
65
  lastRemoteOrganicBodyChangeAt: prevPluginState.lastRemoteOrganicBodyChangeAt
51
- };
66
+ });
52
67
  }
53
68
  return prevPluginState;
54
69
  }
@@ -23,6 +23,8 @@ export type LastOrganicChangeMetadata = {
23
23
  lastLocalOrganicChangeAt: null | number;
24
24
  lastRemoteOrganicBodyChangeAt: null | number;
25
25
  lastRemoteOrganicChangeAt: null | number;
26
+ /** Monotonic count of direct local human body edits, excluding agents and comments. */
27
+ localHumanBodyChangeCount?: number;
26
28
  };
27
29
  export type TrackSpammingStepsMetadata = {
28
30
  recentTransactionsTimestemps: Map<string, {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/editor-plugin-collab-edit",
3
- "version": "23.0.8",
3
+ "version": "24.0.0",
4
4
  "description": "Collab Edit plugin for @atlaskit/editor-core",
5
5
  "author": "Atlassian Pty Ltd",
6
6
  "license": "Apache-2.0",
@@ -22,22 +22,22 @@
22
22
  "@atlaskit/adf-schema": "^57.6.0",
23
23
  "@atlaskit/custom-steps": "^1.1.0",
24
24
  "@atlaskit/editor-json-transformer": "^10.0.0",
25
- "@atlaskit/editor-plugin-analytics": "^22.0.0",
26
- "@atlaskit/editor-plugin-connectivity": "^22.0.0",
27
- "@atlaskit/editor-plugin-editor-viewmode": "^24.0.0",
28
- "@atlaskit/editor-plugin-feature-flags": "^21.0.0",
25
+ "@atlaskit/editor-plugin-analytics": "^23.0.0",
26
+ "@atlaskit/editor-plugin-connectivity": "^23.0.0",
27
+ "@atlaskit/editor-plugin-editor-viewmode": "^25.0.0",
28
+ "@atlaskit/editor-plugin-feature-flags": "^22.0.0",
29
29
  "@atlaskit/editor-prosemirror": "^9.0.0",
30
30
  "@atlaskit/editor-shared-styles": "^4.3.0",
31
31
  "@atlaskit/platform-feature-experiments": "^0.3.0",
32
32
  "@atlaskit/platform-feature-flags": "^2.2.0",
33
33
  "@atlaskit/prosemirror-collab": "^1.1.0",
34
- "@atlaskit/tmp-editor-statsig": "^217.0.0",
34
+ "@atlaskit/tmp-editor-statsig": "^219.0.0",
35
35
  "@atlaskit/tokens": "^20.1.0",
36
36
  "@babel/runtime": "^7.0.0",
37
37
  "memoize-one": "^6.0.0"
38
38
  },
39
39
  "peerDependencies": {
40
- "@atlaskit/editor-common": "^126.4.0",
40
+ "@atlaskit/editor-common": "^127.0.0",
41
41
  "react": "^18.2.0 || ^19.2.0",
42
42
  "react-dom": "^18.2.0 || ^19.2.0"
43
43
  },