@atlaskit/editor-plugin-synced-block 10.7.2 → 10.7.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,14 @@
1
1
  # @atlaskit/editor-plugin-synced-block
2
2
 
3
+ ## 10.7.3
4
+
5
+ ### Patch Changes
6
+
7
+ - [`472c37e82078b`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/472c37e82078b) -
8
+ [ux] Fixed the source synced block placeholder disappearing after placing the cursor inside an
9
+ empty block and then clicking away from the editor.
10
+ - Updated dependencies
11
+
3
12
  ## 10.7.2
4
13
 
5
14
  ### Patch Changes
@@ -9,6 +9,7 @@ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/cl
9
9
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
10
10
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
11
11
  var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
12
+ var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
12
13
  var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
13
14
  var _react = _interopRequireDefault(require("react"));
14
15
  var _analytics = require("@atlaskit/editor-common/analytics");
@@ -21,8 +22,10 @@ var _model = require("@atlaskit/editor-prosemirror/model");
21
22
  var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
22
23
  var _BodiedSyncBlockWrapper = require("../ui/BodiedSyncBlockWrapper");
23
24
  var _SyncBlockLabel = require("../ui/SyncBlockLabel");
25
+ var _isEmptySourceSyncBlock = require("./isEmptySourceSyncBlock");
24
26
  function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2.default)(o), (0, _possibleConstructorReturn2.default)(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2.default)(t).constructor) : o.apply(t, e)); }
25
27
  function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
28
+ function _superPropGet(t, o, e, r) { var p = (0, _get2.default)((0, _getPrototypeOf2.default)(1 & r ? t.prototype : t), o, e); return 2 & r && "function" == typeof p ? function (t) { return p.apply(e, t); } : p; }
26
29
  var toDOMOld = function toDOMOld() {
27
30
  return ['div', {
28
31
  class: _syncBlock.BodiedSyncBlockSharedCssClassName.content,
@@ -91,8 +94,26 @@ var BodiedSyncBlockOld = /*#__PURE__*/function (_ReactNodeView) {
91
94
  // eslint-disable-next-line @atlaskit/platform/no-direct-document-usage -- NodeView DOM must be created against active runtime document
92
95
  var domRef = document.createElement('div');
93
96
  domRef.classList.add(_syncBlock.BodiedSyncBlockSharedCssClassName.prefix);
97
+ domRef.classList.toggle(_syncBlock.BodiedSyncBlockSharedCssClassName.empty, (0, _isEmptySourceSyncBlock.isEmptySourceSyncBlock)(this.node));
94
98
  return domRef;
95
99
  }
100
+
101
+ /**
102
+ * Keeps the empty marker class in sync so the source placeholder can be shown purely from
103
+ * document state. See `isEmptySourceSyncBlock` for why the DOM is not used to decide this.
104
+ */
105
+ }, {
106
+ key: "update",
107
+ value: function update(node, decorations) {
108
+ var updated = _superPropGet(BodiedSyncBlockOld, "update", this, 3)([node, decorations]);
109
+ if (updated) {
110
+ // `ReactNodeView`'s `dom` getter throws rather than returning nullish once the view is
111
+ // destroyed, so optional chaining here would be misleading. `super.update()` only
112
+ // returns true while the view is still mounted, so the ref is guaranteed.
113
+ this.dom.classList.toggle(_syncBlock.BodiedSyncBlockSharedCssClassName.empty, (0, _isEmptySourceSyncBlock.isEmptySourceSyncBlock)(this.node));
114
+ }
115
+ return updated;
116
+ }
96
117
  }, {
97
118
  key: "render",
98
119
  value: function render(_props, forwardRef) {
@@ -222,6 +243,7 @@ var BodiedSyncBlock = exports.BodiedSyncBlock = /*#__PURE__*/function () {
222
243
  }));
223
244
  }, labelContainer, this.labelKey);
224
245
  this.updateContentEditable({});
246
+ this.updateEmptyClass();
225
247
  this.handleConnectivityModeChange();
226
248
  this.handleViewModeChange();
227
249
 
@@ -269,6 +291,16 @@ var BodiedSyncBlock = exports.BodiedSyncBlock = /*#__PURE__*/function () {
269
291
  });
270
292
  }
271
293
  }
294
+
295
+ /**
296
+ * Marks the block as empty so the source placeholder can be shown purely from document state.
297
+ * See `isEmptySourceSyncBlock` for why the DOM is not used to decide this.
298
+ */
299
+ }, {
300
+ key: "updateEmptyClass",
301
+ value: function updateEmptyClass() {
302
+ this.dom.classList.toggle(_syncBlock.BodiedSyncBlockSharedCssClassName.empty, (0, _isEmptySourceSyncBlock.isEmptySourceSyncBlock)(this.node));
303
+ }
272
304
  }, {
273
305
  key: "update",
274
306
  value: function update(node) {
@@ -279,6 +311,7 @@ var BodiedSyncBlock = exports.BodiedSyncBlock = /*#__PURE__*/function () {
279
311
  // Cache updates are handled in appendTransaction where we can
280
312
  // filter out non-user changes (remote collab, table auto-scale, etc.)
281
313
  this.node = node;
314
+ this.updateEmptyClass();
282
315
  return true;
283
316
  }
284
317
  }, {
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.isEmptySourceSyncBlock = void 0;
7
+ /**
8
+ * A source synced block counts as "empty" when it holds exactly one paragraph and that paragraph
9
+ * has no content. This is the only state in which the source placeholder should be shown.
10
+ *
11
+ * Emptiness is deliberately derived from the ProseMirror node rather than the rendered DOM.
12
+ * ProseMirror and other plugins inject non-content children into the paragraph element — the
13
+ * selection marker's cursor widget (`.ProseMirror-widget`), ProseMirror's `.ProseMirror-separator`
14
+ * hack node, and the `.ProseMirror-trailingBreak` — so DOM shape is not a reliable signal of
15
+ * whether the user has typed anything. See EDITOR-8327.
16
+ */
17
+ var isEmptySourceSyncBlock = exports.isEmptySourceSyncBlock = function isEmptySourceSyncBlock(node) {
18
+ if (node.childCount !== 1) {
19
+ return false;
20
+ }
21
+ var firstChild = node.firstChild;
22
+ return (firstChild === null || firstChild === void 0 ? void 0 : firstChild.type.name) === 'paragraph' && firstChild.content.size === 0;
23
+ };
@@ -21,7 +21,7 @@ var _syncBlock = require("@atlaskit/editor-common/sync-block");
21
21
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-global-styles, @atlaskit/ui-styling-standard/use-compiled, @typescript-eslint/consistent-type-imports
22
22
 
23
23
  var getSourceSyncBlockPlaceholderStyles = function getSourceSyncBlockPlaceholderStyles(placeholderText) {
24
- return (0, _react2.css)((0, _defineProperty2.default)({}, ".ProseMirror .".concat(_syncBlock.BodiedSyncBlockSharedCssClassName.prefix, " .").concat(_syncBlock.BodiedSyncBlockSharedCssClassName.content, "[contenteditable=\"true\"] > p:only-child:has(.ProseMirror-trailingBreak:only-child)"), {
24
+ return (0, _react2.css)((0, _defineProperty2.default)({}, ".ProseMirror .".concat(_syncBlock.BodiedSyncBlockSharedCssClassName.prefix, ".").concat(_syncBlock.BodiedSyncBlockSharedCssClassName.empty, " .").concat(_syncBlock.BodiedSyncBlockSharedCssClassName.content, "[contenteditable=\"true\"] > p:only-child"), {
25
25
  position: 'relative',
26
26
  '&::before': {
27
27
  // JSON.stringify produces a quoted and escaped CSS string.
@@ -9,6 +9,7 @@ import { DOMSerializer } from '@atlaskit/editor-prosemirror/model';
9
9
  import { fg } from '@atlaskit/platform-feature-flags';
10
10
  import { BodiedSyncBlockWrapper } from '../ui/BodiedSyncBlockWrapper';
11
11
  import { SyncBlockLabel } from '../ui/SyncBlockLabel';
12
+ import { isEmptySourceSyncBlock } from './isEmptySourceSyncBlock';
12
13
  const toDOMOld = () => ['div', {
13
14
  class: BodiedSyncBlockSharedCssClassName.content,
14
15
  contenteditable: true
@@ -64,8 +65,24 @@ class BodiedSyncBlockOld extends ReactNodeView {
64
65
  // eslint-disable-next-line @atlaskit/platform/no-direct-document-usage -- NodeView DOM must be created against active runtime document
65
66
  const domRef = document.createElement('div');
66
67
  domRef.classList.add(BodiedSyncBlockSharedCssClassName.prefix);
68
+ domRef.classList.toggle(BodiedSyncBlockSharedCssClassName.empty, isEmptySourceSyncBlock(this.node));
67
69
  return domRef;
68
70
  }
71
+
72
+ /**
73
+ * Keeps the empty marker class in sync so the source placeholder can be shown purely from
74
+ * document state. See `isEmptySourceSyncBlock` for why the DOM is not used to decide this.
75
+ */
76
+ update(node, decorations) {
77
+ const updated = super.update(node, decorations);
78
+ if (updated) {
79
+ // `ReactNodeView`'s `dom` getter throws rather than returning nullish once the view is
80
+ // destroyed, so optional chaining here would be misleading. `super.update()` only
81
+ // returns true while the view is still mounted, so the ref is guaranteed.
82
+ this.dom.classList.toggle(BodiedSyncBlockSharedCssClassName.empty, isEmptySourceSyncBlock(this.node));
83
+ }
84
+ return updated;
85
+ }
69
86
  render(_props, forwardRef) {
70
87
  var _this$api$syncedBlock, _this$api5, _this$api5$syncedBloc, _this$api5$syncedBloc2, _this$api6, _this$api6$analytics;
71
88
  // Use passed syncBlockStore for SSR where sharedState.currentState() is delayed
@@ -187,6 +204,7 @@ export class BodiedSyncBlock {
187
204
  }));
188
205
  }, labelContainer, this.labelKey);
189
206
  this.updateContentEditable({});
207
+ this.updateEmptyClass();
190
208
  this.handleConnectivityModeChange();
191
209
  this.handleViewModeChange();
192
210
 
@@ -229,6 +247,14 @@ export class BodiedSyncBlock {
229
247
  });
230
248
  }
231
249
  }
250
+
251
+ /**
252
+ * Marks the block as empty so the source placeholder can be shown purely from document state.
253
+ * See `isEmptySourceSyncBlock` for why the DOM is not used to decide this.
254
+ */
255
+ updateEmptyClass() {
256
+ this.dom.classList.toggle(BodiedSyncBlockSharedCssClassName.empty, isEmptySourceSyncBlock(this.node));
257
+ }
232
258
  update(node) {
233
259
  if (this.node.type !== node.type) {
234
260
  return false;
@@ -237,6 +263,7 @@ export class BodiedSyncBlock {
237
263
  // Cache updates are handled in appendTransaction where we can
238
264
  // filter out non-user changes (remote collab, table auto-scale, etc.)
239
265
  this.node = node;
266
+ this.updateEmptyClass();
240
267
  return true;
241
268
  }
242
269
  ignoreMutation(mutation) {
@@ -0,0 +1,17 @@
1
+ /**
2
+ * A source synced block counts as "empty" when it holds exactly one paragraph and that paragraph
3
+ * has no content. This is the only state in which the source placeholder should be shown.
4
+ *
5
+ * Emptiness is deliberately derived from the ProseMirror node rather than the rendered DOM.
6
+ * ProseMirror and other plugins inject non-content children into the paragraph element — the
7
+ * selection marker's cursor widget (`.ProseMirror-widget`), ProseMirror's `.ProseMirror-separator`
8
+ * hack node, and the `.ProseMirror-trailingBreak` — so DOM shape is not a reliable signal of
9
+ * whether the user has typed anything. See EDITOR-8327.
10
+ */
11
+ export const isEmptySourceSyncBlock = node => {
12
+ if (node.childCount !== 1) {
13
+ return false;
14
+ }
15
+ const firstChild = node.firstChild;
16
+ return (firstChild === null || firstChild === void 0 ? void 0 : firstChild.type.name) === 'paragraph' && firstChild.content.size === 0;
17
+ };
@@ -12,12 +12,18 @@ import { useIntl } from 'react-intl';
12
12
  import { placeholderTextMessages } from '@atlaskit/editor-common/messages';
13
13
  import { BodiedSyncBlockSharedCssClassName } from '@atlaskit/editor-common/sync-block';
14
14
  const getSourceSyncBlockPlaceholderStyles = placeholderText => css({
15
- // ProseMirror represents an empty paragraph with a trailing break. Keeping this visual state
16
- // in CSS means typing, deletion, undo/redo, and remote changes update it without decorations.
17
- // :has() ensures the placeholder only appears when that trailing break is the paragraph's
18
- // only child, rather than when the paragraph contains editable content.
15
+ // Emptiness is signalled by the node view via the `empty` class, which is derived from the
16
+ // ProseMirror document. Keeping this visual state in CSS means typing, deletion, undo/redo,
17
+ // and remote changes update it without decorations.
18
+ //
19
+ // This deliberately does NOT inspect the rendered DOM shape. The paragraph inside an empty
20
+ // block routinely gains extra children that are not user content — the selection marker's
21
+ // cursor widget (`.ProseMirror-widget`), ProseMirror's `.ProseMirror-separator` hack node,
22
+ // and the `.ProseMirror-trailingBreak`. An earlier `:has(.ProseMirror-trailingBreak:only-child)`
23
+ // form treated those decorations as content and hid the placeholder whenever the user placed
24
+ // a cursor in the block and then blurred the editor. See EDITOR-8327.
19
25
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/ui-styling-standard/no-nested-selectors, @atlaskit/ui-styling-standard/no-unsafe-selectors, @atlaskit/ui-styling-standard/no-unsafe-values
20
- [`.ProseMirror .${BodiedSyncBlockSharedCssClassName.prefix} .${BodiedSyncBlockSharedCssClassName.content}[contenteditable="true"] > p:only-child:has(.ProseMirror-trailingBreak:only-child)`]: {
26
+ [`.ProseMirror .${BodiedSyncBlockSharedCssClassName.prefix}.${BodiedSyncBlockSharedCssClassName.empty} .${BodiedSyncBlockSharedCssClassName.content}[contenteditable="true"] > p:only-child`]: {
21
27
  position: 'relative',
22
28
  '&::before': {
23
29
  // JSON.stringify produces a quoted and escaped CSS string.
@@ -2,9 +2,11 @@ import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
2
2
  import _createClass from "@babel/runtime/helpers/createClass";
3
3
  import _possibleConstructorReturn from "@babel/runtime/helpers/possibleConstructorReturn";
4
4
  import _getPrototypeOf from "@babel/runtime/helpers/getPrototypeOf";
5
+ import _get from "@babel/runtime/helpers/get";
5
6
  import _inherits from "@babel/runtime/helpers/inherits";
6
7
  function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
7
8
  function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
9
+ function _superPropGet(t, o, e, r) { var p = _get(_getPrototypeOf(1 & r ? t.prototype : t), o, e); return 2 & r && "function" == typeof p ? function (t) { return p.apply(e, t); } : p; }
8
10
  import React from 'react';
9
11
  import { ACTION_SUBJECT, ACTION_SUBJECT_ID } from '@atlaskit/editor-common/analytics';
10
12
  import { isSSR, isSSRStreaming } from '@atlaskit/editor-common/core-utils';
@@ -16,6 +18,7 @@ import { DOMSerializer } from '@atlaskit/editor-prosemirror/model';
16
18
  import { fg } from '@atlaskit/platform-feature-flags';
17
19
  import { BodiedSyncBlockWrapper } from '../ui/BodiedSyncBlockWrapper';
18
20
  import { SyncBlockLabel } from '../ui/SyncBlockLabel';
21
+ import { isEmptySourceSyncBlock } from './isEmptySourceSyncBlock';
19
22
  var toDOMOld = function toDOMOld() {
20
23
  return ['div', {
21
24
  class: BodiedSyncBlockSharedCssClassName.content,
@@ -84,8 +87,26 @@ var BodiedSyncBlockOld = /*#__PURE__*/function (_ReactNodeView) {
84
87
  // eslint-disable-next-line @atlaskit/platform/no-direct-document-usage -- NodeView DOM must be created against active runtime document
85
88
  var domRef = document.createElement('div');
86
89
  domRef.classList.add(BodiedSyncBlockSharedCssClassName.prefix);
90
+ domRef.classList.toggle(BodiedSyncBlockSharedCssClassName.empty, isEmptySourceSyncBlock(this.node));
87
91
  return domRef;
88
92
  }
93
+
94
+ /**
95
+ * Keeps the empty marker class in sync so the source placeholder can be shown purely from
96
+ * document state. See `isEmptySourceSyncBlock` for why the DOM is not used to decide this.
97
+ */
98
+ }, {
99
+ key: "update",
100
+ value: function update(node, decorations) {
101
+ var updated = _superPropGet(BodiedSyncBlockOld, "update", this, 3)([node, decorations]);
102
+ if (updated) {
103
+ // `ReactNodeView`'s `dom` getter throws rather than returning nullish once the view is
104
+ // destroyed, so optional chaining here would be misleading. `super.update()` only
105
+ // returns true while the view is still mounted, so the ref is guaranteed.
106
+ this.dom.classList.toggle(BodiedSyncBlockSharedCssClassName.empty, isEmptySourceSyncBlock(this.node));
107
+ }
108
+ return updated;
109
+ }
89
110
  }, {
90
111
  key: "render",
91
112
  value: function render(_props, forwardRef) {
@@ -215,6 +236,7 @@ export var BodiedSyncBlock = /*#__PURE__*/function () {
215
236
  }));
216
237
  }, labelContainer, this.labelKey);
217
238
  this.updateContentEditable({});
239
+ this.updateEmptyClass();
218
240
  this.handleConnectivityModeChange();
219
241
  this.handleViewModeChange();
220
242
 
@@ -262,6 +284,16 @@ export var BodiedSyncBlock = /*#__PURE__*/function () {
262
284
  });
263
285
  }
264
286
  }
287
+
288
+ /**
289
+ * Marks the block as empty so the source placeholder can be shown purely from document state.
290
+ * See `isEmptySourceSyncBlock` for why the DOM is not used to decide this.
291
+ */
292
+ }, {
293
+ key: "updateEmptyClass",
294
+ value: function updateEmptyClass() {
295
+ this.dom.classList.toggle(BodiedSyncBlockSharedCssClassName.empty, isEmptySourceSyncBlock(this.node));
296
+ }
265
297
  }, {
266
298
  key: "update",
267
299
  value: function update(node) {
@@ -272,6 +304,7 @@ export var BodiedSyncBlock = /*#__PURE__*/function () {
272
304
  // Cache updates are handled in appendTransaction where we can
273
305
  // filter out non-user changes (remote collab, table auto-scale, etc.)
274
306
  this.node = node;
307
+ this.updateEmptyClass();
275
308
  return true;
276
309
  }
277
310
  }, {
@@ -0,0 +1,17 @@
1
+ /**
2
+ * A source synced block counts as "empty" when it holds exactly one paragraph and that paragraph
3
+ * has no content. This is the only state in which the source placeholder should be shown.
4
+ *
5
+ * Emptiness is deliberately derived from the ProseMirror node rather than the rendered DOM.
6
+ * ProseMirror and other plugins inject non-content children into the paragraph element — the
7
+ * selection marker's cursor widget (`.ProseMirror-widget`), ProseMirror's `.ProseMirror-separator`
8
+ * hack node, and the `.ProseMirror-trailingBreak` — so DOM shape is not a reliable signal of
9
+ * whether the user has typed anything. See EDITOR-8327.
10
+ */
11
+ export var isEmptySourceSyncBlock = function isEmptySourceSyncBlock(node) {
12
+ if (node.childCount !== 1) {
13
+ return false;
14
+ }
15
+ var firstChild = node.firstChild;
16
+ return (firstChild === null || firstChild === void 0 ? void 0 : firstChild.type.name) === 'paragraph' && firstChild.content.size === 0;
17
+ };
@@ -13,7 +13,7 @@ import { useIntl } from 'react-intl';
13
13
  import { placeholderTextMessages } from '@atlaskit/editor-common/messages';
14
14
  import { BodiedSyncBlockSharedCssClassName } from '@atlaskit/editor-common/sync-block';
15
15
  var getSourceSyncBlockPlaceholderStyles = function getSourceSyncBlockPlaceholderStyles(placeholderText) {
16
- return css(_defineProperty({}, ".ProseMirror .".concat(BodiedSyncBlockSharedCssClassName.prefix, " .").concat(BodiedSyncBlockSharedCssClassName.content, "[contenteditable=\"true\"] > p:only-child:has(.ProseMirror-trailingBreak:only-child)"), {
16
+ return css(_defineProperty({}, ".ProseMirror .".concat(BodiedSyncBlockSharedCssClassName.prefix, ".").concat(BodiedSyncBlockSharedCssClassName.empty, " .").concat(BodiedSyncBlockSharedCssClassName.content, "[contenteditable=\"true\"] > p:only-child"), {
17
17
  position: 'relative',
18
18
  '&::before': {
19
19
  // JSON.stringify produces a quoted and escaped CSS string.
@@ -38,6 +38,11 @@ export declare class BodiedSyncBlock implements NodeView {
38
38
  private updateContentEditable;
39
39
  private handleConnectivityModeChange;
40
40
  private handleViewModeChange;
41
+ /**
42
+ * Marks the block as empty so the source placeholder can be shown purely from document state.
43
+ * See `isEmptySourceSyncBlock` for why the DOM is not used to decide this.
44
+ */
45
+ private updateEmptyClass;
41
46
  update(node: PMNode): boolean;
42
47
  ignoreMutation(mutation: MutationRecord | {
43
48
  target: Node;
@@ -0,0 +1,12 @@
1
+ import type { Node as PMNode } from '@atlaskit/editor-prosemirror/model';
2
+ /**
3
+ * A source synced block counts as "empty" when it holds exactly one paragraph and that paragraph
4
+ * has no content. This is the only state in which the source placeholder should be shown.
5
+ *
6
+ * Emptiness is deliberately derived from the ProseMirror node rather than the rendered DOM.
7
+ * ProseMirror and other plugins inject non-content children into the paragraph element — the
8
+ * selection marker's cursor widget (`.ProseMirror-widget`), ProseMirror's `.ProseMirror-separator`
9
+ * hack node, and the `.ProseMirror-trailingBreak` — so DOM shape is not a reliable signal of
10
+ * whether the user has typed anything. See EDITOR-8327.
11
+ */
12
+ export declare const isEmptySourceSyncBlock: (node: PMNode) => boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/editor-plugin-synced-block",
3
- "version": "10.7.2",
3
+ "version": "10.7.3",
4
4
  "description": "SyncedBlock plugin for @atlaskit/editor-core",
5
5
  "author": "Atlassian Pty Ltd",
6
6
  "license": "Apache-2.0",
@@ -46,7 +46,7 @@
46
46
  "@atlaskit/platform-feature-flags": "^2.1.0",
47
47
  "@atlaskit/primitives": "^22.2.0",
48
48
  "@atlaskit/spinner": "20.1.1",
49
- "@atlaskit/tmp-editor-statsig": "^135.9.0",
49
+ "@atlaskit/tmp-editor-statsig": "^135.10.0",
50
50
  "@atlaskit/tokens": "16.3.0",
51
51
  "@atlaskit/tooltip": "^24.0.0",
52
52
  "@atlaskit/visually-hidden": "^4.2.0",
@@ -58,7 +58,7 @@
58
58
  "memoize-one": "^6.0.0"
59
59
  },
60
60
  "peerDependencies": {
61
- "@atlaskit/editor-common": "^116.46.0",
61
+ "@atlaskit/editor-common": "^116.47.0",
62
62
  "react": "^18.2.0 || ^19.2.0",
63
63
  "react-intl": "^5.25.1 || ^6.0.0 || ^7.0.0"
64
64
  },