@atlaskit/editor-common 112.8.2 → 112.8.4

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,23 @@
1
1
  # @atlaskit/editor-common
2
2
 
3
+ ## 112.8.4
4
+
5
+ ### Patch Changes
6
+
7
+ - [`ca2338799c141`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/ca2338799c141) -
8
+ [ux] Fix media cards and media singles to use the correct border radius in the editor, renderer
9
+ and inline media player.
10
+ - Updated dependencies
11
+
12
+ ## 112.8.3
13
+
14
+ ### Patch Changes
15
+
16
+ - [`14174d5130d27`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/14174d5130d27) -
17
+ Adding editorAppearance in coreplugin shared state so that plugins can access appearance value
18
+ when updated
19
+ - Updated dependencies
20
+
3
21
  ## 112.8.2
4
22
 
5
23
  ### Patch Changes
@@ -19,7 +19,7 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
19
19
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
20
20
  var SENTRY_DSN = 'https://0b10c8e02fb44d8796c047b102c9bee8@o55978.ingest.sentry.io/4505129224110080';
21
21
  var packageName = 'editor-common'; // Sentry doesn't accept '/' in its releases https://docs.sentry.io/platforms/javascript/configuration/releases/
22
- var packageVersion = "112.8.1";
22
+ var packageVersion = "112.8.3";
23
23
  var sanitiseSentryEvents = function sanitiseSentryEvents(data, _hint) {
24
24
  // Remove URL as it has UGC
25
25
  // Ignored via go/ees007
@@ -9,6 +9,7 @@ var _expValEquals = require("@atlaskit/tmp-editor-statsig/exp-val-equals");
9
9
  var _nodeAnchorProvider = require("../../node-anchor/node-anchor-provider");
10
10
  var _processRawValue = require("../../utils/processRawValue");
11
11
  var _editorCommands = require("../editor-commands");
12
+ var _appearancePlugin = require("./pm-plugins/appearance-plugin");
12
13
  var _requestDocument = require("./requestDocument");
13
14
  /**
14
15
  * Core plugin that is always included in the preset.
@@ -22,10 +23,23 @@ var corePlugin = exports.corePlugin = function corePlugin(_ref) {
22
23
  return {
23
24
  name: 'core',
24
25
  getSharedState: function getSharedState(state) {
26
+ var pluginState = state && _appearancePlugin.appearancePluginKey.getState(state);
25
27
  return {
26
- schema: state === null || state === void 0 ? void 0 : state.schema
28
+ schema: state === null || state === void 0 ? void 0 : state.schema,
29
+ appearance: (0, _expValEquals.expValEquals)('platform_editor_appearance_shared_state', 'isEnabled', true) ? pluginState === null || pluginState === void 0 ? void 0 : pluginState.appearance : undefined
27
30
  };
28
31
  },
32
+ pmPlugins: function pmPlugins() {
33
+ if ((0, _expValEquals.expValEquals)('platform_editor_appearance_shared_state', 'isEnabled', true)) {
34
+ return [{
35
+ name: 'appearancePlugin',
36
+ plugin: function plugin() {
37
+ return (0, _appearancePlugin.createAppearancePlugin)(config === null || config === void 0 ? void 0 : config.appearance);
38
+ }
39
+ }];
40
+ }
41
+ return [];
42
+ },
29
43
  actions: {
30
44
  execute: function execute(command) {
31
45
  var editorView = config === null || config === void 0 ? void 0 : config.getEditorView();
@@ -84,6 +98,27 @@ var corePlugin = exports.corePlugin = function corePlugin(_ref) {
84
98
  dom.scrollIntoView(scrollOptions);
85
99
  return true;
86
100
  },
101
+ updateAppearance: function updateAppearance(newAppearance) {
102
+ var _appearancePluginKey$;
103
+ if (!(0, _expValEquals.expValEquals)('platform_editor_appearance_shared_state', 'isEnabled', true)) {
104
+ return false;
105
+ }
106
+ var editorView = config === null || config === void 0 ? void 0 : config.getEditorView();
107
+ if (!editorView) {
108
+ return false;
109
+ }
110
+ // Avoid dispatching a redundant transaction if appearance hasn't changed
111
+ var currentAppearance = (_appearancePluginKey$ = _appearancePlugin.appearancePluginKey.getState(editorView.state)) === null || _appearancePluginKey$ === void 0 ? void 0 : _appearancePluginKey$.appearance;
112
+ if (currentAppearance === newAppearance) {
113
+ return false;
114
+ }
115
+ var tr = editorView.state.tr.setMeta(_appearancePlugin.appearancePluginKey, {
116
+ appearance: newAppearance
117
+ });
118
+ tr.setMeta('addToHistory', false);
119
+ editorView.dispatch(tr);
120
+ return true;
121
+ },
87
122
  replaceDocument: function replaceDocument(replaceValue, options) {
88
123
  var editorView = config === null || config === void 0 ? void 0 : config.getEditorView();
89
124
  if (!editorView || replaceValue === undefined || replaceValue === null) {
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.appearancePluginKey = void 0;
8
+ exports.createAppearancePlugin = createAppearancePlugin;
9
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
10
+ var _state = require("@atlaskit/editor-prosemirror/state");
11
+ var _safePlugin = require("../../../safe-plugin");
12
+ 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; }
13
+ 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; }
14
+ var appearancePluginKey = exports.appearancePluginKey = new _state.PluginKey('appearancePlugin');
15
+ var DEFAULT_APPEARANCE = 'comment';
16
+ function createAppearancePlugin(initialAppearance) {
17
+ return new _safePlugin.SafePlugin({
18
+ key: appearancePluginKey,
19
+ state: {
20
+ init: function init() {
21
+ return {
22
+ appearance: initialAppearance !== null && initialAppearance !== void 0 ? initialAppearance : DEFAULT_APPEARANCE
23
+ };
24
+ },
25
+ apply: function apply(tr, pluginState) {
26
+ var meta = tr.getMeta(appearancePluginKey);
27
+ if ((meta === null || meta === void 0 ? void 0 : meta.appearance) !== undefined) {
28
+ return _objectSpread(_objectSpread({}, pluginState), {}, {
29
+ appearance: meta.appearance
30
+ });
31
+ }
32
+ return pluginState;
33
+ }
34
+ }
35
+ });
36
+ }
@@ -288,7 +288,8 @@ var EditorPluginInjectionAPI = exports.EditorPluginInjectionAPI = /*#__PURE__*/f
288
288
  var _this2 = this;
289
289
  var getEditorState = _ref6.getEditorState,
290
290
  getEditorView = _ref6.getEditorView,
291
- fireAnalyticsEvent = _ref6.fireAnalyticsEvent;
291
+ fireAnalyticsEvent = _ref6.fireAnalyticsEvent,
292
+ appearance = _ref6.appearance;
292
293
  (0, _classCallCheck2.default)(this, EditorPluginInjectionAPI);
293
294
  (0, _defineProperty2.default)(this, "onEditorViewUpdated", function (_ref7) {
294
295
  var newEditorState = _ref7.newEditorState,
@@ -321,15 +322,39 @@ var EditorPluginInjectionAPI = exports.EditorPluginInjectionAPI = /*#__PURE__*/f
321
322
  this.plugins = new Map();
322
323
  this.actionsAPI = new ActionsAPI();
323
324
  this.commandsAPI = new EditorCommandsAPI();
325
+
324
326
  // Special core plugin that is always added
325
327
  this.addPlugin((0, _corePlugin.corePlugin)({
326
328
  config: {
327
329
  getEditorView: getEditorView,
328
- fireAnalyticsEvent: fireAnalyticsEvent
330
+ fireAnalyticsEvent: fireAnalyticsEvent,
331
+ appearance: appearance
329
332
  }
330
333
  }));
331
334
  }
335
+
336
+ /**
337
+ * Returns PM plugins from internally-registered plugins (e.g. the core plugin)
338
+ * that are not processed through the normal preset builder flow.
339
+ */
340
+ // Ignored via go/ees005
341
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
332
342
  return (0, _createClass2.default)(EditorPluginInjectionAPI, [{
343
+ key: "getInternalPMPlugins",
344
+ value: function getInternalPMPlugins() {
345
+ // Ignored via go/ees005
346
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
347
+ var result = [];
348
+ var corePlugin = this.plugins.get('core');
349
+ if (corePlugin && typeof corePlugin.pmPlugins === 'function') {
350
+ var pmPlugins = corePlugin.pmPlugins();
351
+ if (pmPlugins) {
352
+ result.push.apply(result, (0, _toConsumableArray2.default)(pmPlugins));
353
+ }
354
+ }
355
+ return result;
356
+ }
357
+ }, {
333
358
  key: "createAPI",
334
359
  value: function createAPI() {
335
360
  var sharedStateAPI = this.sharedStateAPI,
@@ -24,7 +24,7 @@ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.
24
24
  * @jsx jsx
25
25
  */ // eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766
26
26
  var packageName = "@atlaskit/editor-common";
27
- var packageVersion = "112.8.1";
27
+ var packageVersion = "112.8.3";
28
28
  var halfFocusRing = 1;
29
29
  var dropOffset = '0, 8';
30
30
  var fadeIn = (0, _react2.keyframes)({
@@ -282,6 +282,11 @@ MediaWrapper.displayName = 'WrapperMediaSingle';
282
282
 
283
283
  var MediaBorderGapFiller = exports.MediaBorderGapFiller = function MediaBorderGapFiller(_ref4) {
284
284
  var borderColor = _ref4.borderColor;
285
+ // [FEATURE FLAG: platform_editor_media_border_radius_fix]
286
+ // Fixes border radius to properly match image with 8px radius
287
+ // To clean up: remove conditional, keep only flag-on behavior ('8px')
288
+ var borderRadius = (0, _platformFeatureFlags.fg)('platform_editor_media_border_radius_fix') ? "var(--ds-radius-large, 8px)" : '1px'; // OLD BEHAVIOR (to be removed when flag is cleaned up)
289
+
285
290
  return (0, _react2.jsx)("div", {
286
291
  style: {
287
292
  // eslint-disable-next-line @atlaskit/ui-styling-standard/enforce-style-prop -- Ignored via go/DSP-18766
@@ -290,7 +295,7 @@ var MediaBorderGapFiller = exports.MediaBorderGapFiller = function MediaBorderGa
290
295
  inset: '0px',
291
296
  border: "0.5px solid ".concat(borderColor),
292
297
  // eslint-disable-next-line @atlaskit/ui-styling-standard/enforce-style-prop -- Ignored via go/DSP-18766
293
- borderRadius: '1px'
298
+ borderRadius: borderRadius
294
299
  }
295
300
  });
296
301
  };
@@ -4,7 +4,7 @@ import { isFedRamp } from './environment';
4
4
  import { normaliseSentryBreadcrumbs, SERIALIZABLE_ATTRIBUTES } from './normalise-sentry-breadcrumbs';
5
5
  const SENTRY_DSN = 'https://0b10c8e02fb44d8796c047b102c9bee8@o55978.ingest.sentry.io/4505129224110080';
6
6
  const packageName = 'editor-common'; // Sentry doesn't accept '/' in its releases https://docs.sentry.io/platforms/javascript/configuration/releases/
7
- const packageVersion = "112.8.1";
7
+ const packageVersion = "112.8.3";
8
8
  const sanitiseSentryEvents = (data, _hint) => {
9
9
  // Remove URL as it has UGC
10
10
  // Ignored via go/ees007
@@ -3,6 +3,7 @@ import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
3
3
  import { getNodeIdProvider } from '../../node-anchor/node-anchor-provider';
4
4
  import { processRawFragmentValue, processRawValue, processRawValueWithoutValidation } from '../../utils/processRawValue';
5
5
  import { editorCommandToPMCommand } from '../editor-commands';
6
+ import { appearancePluginKey, createAppearancePlugin } from './pm-plugins/appearance-plugin';
6
7
  import { createThrottleSchedule, returnDocumentRequest, returnDocumentRequestNoThrowError } from './requestDocument';
7
8
 
8
9
  /**
@@ -18,10 +19,21 @@ export const corePlugin = ({
18
19
  return {
19
20
  name: 'core',
20
21
  getSharedState(state) {
22
+ const pluginState = state && appearancePluginKey.getState(state);
21
23
  return {
22
- schema: state === null || state === void 0 ? void 0 : state.schema
24
+ schema: state === null || state === void 0 ? void 0 : state.schema,
25
+ appearance: expValEquals('platform_editor_appearance_shared_state', 'isEnabled', true) ? pluginState === null || pluginState === void 0 ? void 0 : pluginState.appearance : undefined
23
26
  };
24
27
  },
28
+ pmPlugins() {
29
+ if (expValEquals('platform_editor_appearance_shared_state', 'isEnabled', true)) {
30
+ return [{
31
+ name: 'appearancePlugin',
32
+ plugin: () => createAppearancePlugin(config === null || config === void 0 ? void 0 : config.appearance)
33
+ }];
34
+ }
35
+ return [];
36
+ },
25
37
  actions: {
26
38
  execute: command => {
27
39
  const editorView = config === null || config === void 0 ? void 0 : config.getEditorView();
@@ -82,6 +94,27 @@ export const corePlugin = ({
82
94
  dom.scrollIntoView(scrollOptions);
83
95
  return true;
84
96
  },
97
+ updateAppearance: newAppearance => {
98
+ var _appearancePluginKey$;
99
+ if (!expValEquals('platform_editor_appearance_shared_state', 'isEnabled', true)) {
100
+ return false;
101
+ }
102
+ const editorView = config === null || config === void 0 ? void 0 : config.getEditorView();
103
+ if (!editorView) {
104
+ return false;
105
+ }
106
+ // Avoid dispatching a redundant transaction if appearance hasn't changed
107
+ const currentAppearance = (_appearancePluginKey$ = appearancePluginKey.getState(editorView.state)) === null || _appearancePluginKey$ === void 0 ? void 0 : _appearancePluginKey$.appearance;
108
+ if (currentAppearance === newAppearance) {
109
+ return false;
110
+ }
111
+ const tr = editorView.state.tr.setMeta(appearancePluginKey, {
112
+ appearance: newAppearance
113
+ });
114
+ tr.setMeta('addToHistory', false);
115
+ editorView.dispatch(tr);
116
+ return true;
117
+ },
85
118
  replaceDocument: (replaceValue, options) => {
86
119
  const editorView = config === null || config === void 0 ? void 0 : config.getEditorView();
87
120
  if (!editorView || replaceValue === undefined || replaceValue === null) {
@@ -0,0 +1,24 @@
1
+ import { PluginKey } from '@atlaskit/editor-prosemirror/state';
2
+ import { SafePlugin } from '../../../safe-plugin';
3
+ export const appearancePluginKey = new PluginKey('appearancePlugin');
4
+ const DEFAULT_APPEARANCE = 'comment';
5
+ export function createAppearancePlugin(initialAppearance) {
6
+ return new SafePlugin({
7
+ key: appearancePluginKey,
8
+ state: {
9
+ init: () => ({
10
+ appearance: initialAppearance !== null && initialAppearance !== void 0 ? initialAppearance : DEFAULT_APPEARANCE
11
+ }),
12
+ apply: (tr, pluginState) => {
13
+ const meta = tr.getMeta(appearancePluginKey);
14
+ if ((meta === null || meta === void 0 ? void 0 : meta.appearance) !== undefined) {
15
+ return {
16
+ ...pluginState,
17
+ appearance: meta.appearance
18
+ };
19
+ }
20
+ return pluginState;
21
+ }
22
+ }
23
+ });
24
+ }
@@ -211,7 +211,8 @@ export class EditorPluginInjectionAPI {
211
211
  constructor({
212
212
  getEditorState,
213
213
  getEditorView,
214
- fireAnalyticsEvent
214
+ fireAnalyticsEvent,
215
+ appearance
215
216
  }) {
216
217
  _defineProperty(this, "onEditorViewUpdated", ({
217
218
  newEditorState,
@@ -246,14 +247,36 @@ export class EditorPluginInjectionAPI {
246
247
  this.plugins = new Map();
247
248
  this.actionsAPI = new ActionsAPI();
248
249
  this.commandsAPI = new EditorCommandsAPI();
250
+
249
251
  // Special core plugin that is always added
250
252
  this.addPlugin(corePlugin({
251
253
  config: {
252
254
  getEditorView,
253
- fireAnalyticsEvent
255
+ fireAnalyticsEvent,
256
+ appearance
254
257
  }
255
258
  }));
256
259
  }
260
+
261
+ /**
262
+ * Returns PM plugins from internally-registered plugins (e.g. the core plugin)
263
+ * that are not processed through the normal preset builder flow.
264
+ */
265
+ // Ignored via go/ees005
266
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
267
+ getInternalPMPlugins() {
268
+ // Ignored via go/ees005
269
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
270
+ const result = [];
271
+ const corePlugin = this.plugins.get('core');
272
+ if (corePlugin && typeof corePlugin.pmPlugins === 'function') {
273
+ const pmPlugins = corePlugin.pmPlugins();
274
+ if (pmPlugins) {
275
+ result.push(...pmPlugins);
276
+ }
277
+ }
278
+ return result;
279
+ }
257
280
  createAPI() {
258
281
  const {
259
282
  sharedStateAPI,
@@ -14,7 +14,7 @@ import withAnalyticsEvents from '@atlaskit/analytics-next/withAnalyticsEvents';
14
14
  import { fg } from '@atlaskit/platform-feature-flags';
15
15
  import Layer from '../Layer';
16
16
  const packageName = "@atlaskit/editor-common";
17
- const packageVersion = "112.8.1";
17
+ const packageVersion = "112.8.3";
18
18
  const halfFocusRing = 1;
19
19
  const dropOffset = '0, 8';
20
20
  const fadeIn = keyframes({
@@ -349,6 +349,11 @@ MediaWrapper.displayName = 'WrapperMediaSingle';
349
349
  export const MediaBorderGapFiller = ({
350
350
  borderColor
351
351
  }) => {
352
+ // [FEATURE FLAG: platform_editor_media_border_radius_fix]
353
+ // Fixes border radius to properly match image with 8px radius
354
+ // To clean up: remove conditional, keep only flag-on behavior ('8px')
355
+ const borderRadius = fg('platform_editor_media_border_radius_fix') ? "var(--ds-radius-large, 8px)" : '1px'; // OLD BEHAVIOR (to be removed when flag is cleaned up)
356
+
352
357
  return jsx("div", {
353
358
  style: {
354
359
  // eslint-disable-next-line @atlaskit/ui-styling-standard/enforce-style-prop -- Ignored via go/DSP-18766
@@ -357,7 +362,7 @@ export const MediaBorderGapFiller = ({
357
362
  inset: '0px',
358
363
  border: `0.5px solid ${borderColor}`,
359
364
  // eslint-disable-next-line @atlaskit/ui-styling-standard/enforce-style-prop -- Ignored via go/DSP-18766
360
- borderRadius: '1px'
365
+ borderRadius
361
366
  }
362
367
  });
363
368
  };
@@ -10,7 +10,7 @@ import { isFedRamp } from './environment';
10
10
  import { normaliseSentryBreadcrumbs, SERIALIZABLE_ATTRIBUTES } from './normalise-sentry-breadcrumbs';
11
11
  var SENTRY_DSN = 'https://0b10c8e02fb44d8796c047b102c9bee8@o55978.ingest.sentry.io/4505129224110080';
12
12
  var packageName = 'editor-common'; // Sentry doesn't accept '/' in its releases https://docs.sentry.io/platforms/javascript/configuration/releases/
13
- var packageVersion = "112.8.1";
13
+ var packageVersion = "112.8.3";
14
14
  var sanitiseSentryEvents = function sanitiseSentryEvents(data, _hint) {
15
15
  // Remove URL as it has UGC
16
16
  // Ignored via go/ees007
@@ -3,6 +3,7 @@ import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
3
3
  import { getNodeIdProvider } from '../../node-anchor/node-anchor-provider';
4
4
  import { processRawFragmentValue, processRawValue, processRawValueWithoutValidation } from '../../utils/processRawValue';
5
5
  import { editorCommandToPMCommand } from '../editor-commands';
6
+ import { appearancePluginKey, createAppearancePlugin } from './pm-plugins/appearance-plugin';
6
7
  import { createThrottleSchedule, returnDocumentRequest, returnDocumentRequestNoThrowError } from './requestDocument';
7
8
 
8
9
  /**
@@ -17,10 +18,23 @@ export var corePlugin = function corePlugin(_ref) {
17
18
  return {
18
19
  name: 'core',
19
20
  getSharedState: function getSharedState(state) {
21
+ var pluginState = state && appearancePluginKey.getState(state);
20
22
  return {
21
- schema: state === null || state === void 0 ? void 0 : state.schema
23
+ schema: state === null || state === void 0 ? void 0 : state.schema,
24
+ appearance: expValEquals('platform_editor_appearance_shared_state', 'isEnabled', true) ? pluginState === null || pluginState === void 0 ? void 0 : pluginState.appearance : undefined
22
25
  };
23
26
  },
27
+ pmPlugins: function pmPlugins() {
28
+ if (expValEquals('platform_editor_appearance_shared_state', 'isEnabled', true)) {
29
+ return [{
30
+ name: 'appearancePlugin',
31
+ plugin: function plugin() {
32
+ return createAppearancePlugin(config === null || config === void 0 ? void 0 : config.appearance);
33
+ }
34
+ }];
35
+ }
36
+ return [];
37
+ },
24
38
  actions: {
25
39
  execute: function execute(command) {
26
40
  var editorView = config === null || config === void 0 ? void 0 : config.getEditorView();
@@ -79,6 +93,27 @@ export var corePlugin = function corePlugin(_ref) {
79
93
  dom.scrollIntoView(scrollOptions);
80
94
  return true;
81
95
  },
96
+ updateAppearance: function updateAppearance(newAppearance) {
97
+ var _appearancePluginKey$;
98
+ if (!expValEquals('platform_editor_appearance_shared_state', 'isEnabled', true)) {
99
+ return false;
100
+ }
101
+ var editorView = config === null || config === void 0 ? void 0 : config.getEditorView();
102
+ if (!editorView) {
103
+ return false;
104
+ }
105
+ // Avoid dispatching a redundant transaction if appearance hasn't changed
106
+ var currentAppearance = (_appearancePluginKey$ = appearancePluginKey.getState(editorView.state)) === null || _appearancePluginKey$ === void 0 ? void 0 : _appearancePluginKey$.appearance;
107
+ if (currentAppearance === newAppearance) {
108
+ return false;
109
+ }
110
+ var tr = editorView.state.tr.setMeta(appearancePluginKey, {
111
+ appearance: newAppearance
112
+ });
113
+ tr.setMeta('addToHistory', false);
114
+ editorView.dispatch(tr);
115
+ return true;
116
+ },
82
117
  replaceDocument: function replaceDocument(replaceValue, options) {
83
118
  var editorView = config === null || config === void 0 ? void 0 : config.getEditorView();
84
119
  if (!editorView || replaceValue === undefined || replaceValue === null) {
@@ -0,0 +1,28 @@
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; }
4
+ import { PluginKey } from '@atlaskit/editor-prosemirror/state';
5
+ import { SafePlugin } from '../../../safe-plugin';
6
+ export var appearancePluginKey = new PluginKey('appearancePlugin');
7
+ var DEFAULT_APPEARANCE = 'comment';
8
+ export function createAppearancePlugin(initialAppearance) {
9
+ return new SafePlugin({
10
+ key: appearancePluginKey,
11
+ state: {
12
+ init: function init() {
13
+ return {
14
+ appearance: initialAppearance !== null && initialAppearance !== void 0 ? initialAppearance : DEFAULT_APPEARANCE
15
+ };
16
+ },
17
+ apply: function apply(tr, pluginState) {
18
+ var meta = tr.getMeta(appearancePluginKey);
19
+ if ((meta === null || meta === void 0 ? void 0 : meta.appearance) !== undefined) {
20
+ return _objectSpread(_objectSpread({}, pluginState), {}, {
21
+ appearance: meta.appearance
22
+ });
23
+ }
24
+ return pluginState;
25
+ }
26
+ }
27
+ });
28
+ }
@@ -282,7 +282,8 @@ export var EditorPluginInjectionAPI = /*#__PURE__*/function () {
282
282
  var _this2 = this;
283
283
  var getEditorState = _ref6.getEditorState,
284
284
  getEditorView = _ref6.getEditorView,
285
- fireAnalyticsEvent = _ref6.fireAnalyticsEvent;
285
+ fireAnalyticsEvent = _ref6.fireAnalyticsEvent,
286
+ appearance = _ref6.appearance;
286
287
  _classCallCheck(this, EditorPluginInjectionAPI);
287
288
  _defineProperty(this, "onEditorViewUpdated", function (_ref7) {
288
289
  var newEditorState = _ref7.newEditorState,
@@ -315,15 +316,39 @@ export var EditorPluginInjectionAPI = /*#__PURE__*/function () {
315
316
  this.plugins = new Map();
316
317
  this.actionsAPI = new ActionsAPI();
317
318
  this.commandsAPI = new EditorCommandsAPI();
319
+
318
320
  // Special core plugin that is always added
319
321
  this.addPlugin(corePlugin({
320
322
  config: {
321
323
  getEditorView: getEditorView,
322
- fireAnalyticsEvent: fireAnalyticsEvent
324
+ fireAnalyticsEvent: fireAnalyticsEvent,
325
+ appearance: appearance
323
326
  }
324
327
  }));
325
328
  }
329
+
330
+ /**
331
+ * Returns PM plugins from internally-registered plugins (e.g. the core plugin)
332
+ * that are not processed through the normal preset builder flow.
333
+ */
334
+ // Ignored via go/ees005
335
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
326
336
  return _createClass(EditorPluginInjectionAPI, [{
337
+ key: "getInternalPMPlugins",
338
+ value: function getInternalPMPlugins() {
339
+ // Ignored via go/ees005
340
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
341
+ var result = [];
342
+ var corePlugin = this.plugins.get('core');
343
+ if (corePlugin && typeof corePlugin.pmPlugins === 'function') {
344
+ var pmPlugins = corePlugin.pmPlugins();
345
+ if (pmPlugins) {
346
+ result.push.apply(result, _toConsumableArray(pmPlugins));
347
+ }
348
+ }
349
+ return result;
350
+ }
351
+ }, {
327
352
  key: "createAPI",
328
353
  value: function createAPI() {
329
354
  var sharedStateAPI = this.sharedStateAPI,
@@ -21,7 +21,7 @@ import withAnalyticsEvents from '@atlaskit/analytics-next/withAnalyticsEvents';
21
21
  import { fg } from '@atlaskit/platform-feature-flags';
22
22
  import Layer from '../Layer';
23
23
  var packageName = "@atlaskit/editor-common";
24
- var packageVersion = "112.8.1";
24
+ var packageVersion = "112.8.3";
25
25
  var halfFocusRing = 1;
26
26
  var dropOffset = '0, 8';
27
27
  var fadeIn = keyframes({
@@ -273,6 +273,11 @@ MediaWrapper.displayName = 'WrapperMediaSingle';
273
273
 
274
274
  export var MediaBorderGapFiller = function MediaBorderGapFiller(_ref4) {
275
275
  var borderColor = _ref4.borderColor;
276
+ // [FEATURE FLAG: platform_editor_media_border_radius_fix]
277
+ // Fixes border radius to properly match image with 8px radius
278
+ // To clean up: remove conditional, keep only flag-on behavior ('8px')
279
+ var borderRadius = fg('platform_editor_media_border_radius_fix') ? "var(--ds-radius-large, 8px)" : '1px'; // OLD BEHAVIOR (to be removed when flag is cleaned up)
280
+
276
281
  return jsx("div", {
277
282
  style: {
278
283
  // eslint-disable-next-line @atlaskit/ui-styling-standard/enforce-style-prop -- Ignored via go/DSP-18766
@@ -281,7 +286,7 @@ export var MediaBorderGapFiller = function MediaBorderGapFiller(_ref4) {
281
286
  inset: '0px',
282
287
  border: "0.5px solid ".concat(borderColor),
283
288
  // eslint-disable-next-line @atlaskit/ui-styling-standard/enforce-style-prop -- Ignored via go/DSP-18766
284
- borderRadius: '1px'
289
+ borderRadius: borderRadius
285
290
  }
286
291
  });
287
292
  };
@@ -0,0 +1,9 @@
1
+ import { PluginKey } from '@atlaskit/editor-prosemirror/state';
2
+ import { SafePlugin } from '../../../safe-plugin';
3
+ import type { EditorAppearance } from '../../../types';
4
+ type AppearancePluginState = {
5
+ appearance: EditorAppearance | undefined;
6
+ };
7
+ export declare const appearancePluginKey: PluginKey<AppearancePluginState>;
8
+ export declare function createAppearancePlugin(initialAppearance: EditorAppearance | undefined): SafePlugin<AppearancePluginState>;
9
+ export {};
@@ -1,12 +1,14 @@
1
1
  import type { EditorState } from '@atlaskit/editor-prosemirror/state';
2
2
  import type { EditorView } from '@atlaskit/editor-prosemirror/view';
3
3
  import { type FireAnalyticsCallback } from '../analytics';
4
+ import type { EditorAppearance } from '../types';
4
5
  import type { BasePluginDependenciesAPI, CorePlugin, NextEditorPlugin, PluginDependenciesAPI } from '../types/next-editor-plugin';
5
6
  type NextEditorPluginInitializedType = ReturnType<NextEditorPlugin<any>>;
6
7
  type SharedStateAPIProps = {
7
8
  getEditorState: () => EditorState | undefined;
8
9
  };
9
10
  interface PluginInjectionAPIProps extends SharedStateAPIProps {
11
+ appearance?: EditorAppearance;
10
12
  fireAnalyticsEvent?: FireAnalyticsCallback;
11
13
  getEditorView: () => EditorView | undefined;
12
14
  }
@@ -46,7 +48,15 @@ export declare class EditorPluginInjectionAPI implements PluginInjectionAPIDefin
46
48
  private actionsAPI;
47
49
  private commandsAPI;
48
50
  private plugins;
49
- constructor({ getEditorState, getEditorView, fireAnalyticsEvent }: PluginInjectionAPIProps);
51
+ constructor({ getEditorState, getEditorView, fireAnalyticsEvent, appearance }: PluginInjectionAPIProps);
52
+ /**
53
+ * Returns PM plugins from internally-registered plugins (e.g. the core plugin)
54
+ * that are not processed through the normal preset builder flow.
55
+ */
56
+ getInternalPMPlugins(): Array<{
57
+ name: string;
58
+ plugin: (...args: any[]) => any;
59
+ }>;
50
60
  private createAPI;
51
61
  api(): GenericAPIWithCore;
52
62
  onEditorViewUpdated: ({ newEditorState, oldEditorState }: EditorStateDiff) => void;
@@ -9,6 +9,7 @@ import type { Fragment, Node, Schema, Node as PMNode } from '@atlaskit/editor-pr
9
9
  import type { EditorState } from '@atlaskit/editor-prosemirror/state';
10
10
  import type { EditorView } from '@atlaskit/editor-prosemirror/view';
11
11
  import type { FireAnalyticsCallback } from '../analytics';
12
+ import type { EditorAppearance } from './editor-appearance';
12
13
  import type { EditorCommand, EditorCommandWithMetadata } from './editor-command';
13
14
  import type { EditorPlugin } from './editor-plugin';
14
15
  export interface Transformer<T> {
@@ -115,12 +116,26 @@ export type CorePlugin = NextEditorPlugin<'core', {
115
116
  * @returns (boolean) if scroll was successful
116
117
  */
117
118
  scrollToPos: (pos: number, scrollOptions?: boolean | ScrollIntoViewOptions) => boolean;
119
+ /**
120
+ * Updates the editor appearance in shared state. Dispatches a ProseMirror transaction
121
+ * so that shared state subscribers are correctly notified of the change.
122
+ *
123
+ * @param appearance - The new editor appearance value
124
+ * @returns true if the update was dispatched, false if the experiment is off or the view was unavailable
125
+ */
126
+ updateAppearance: (appearance: EditorAppearance | undefined) => boolean;
118
127
  };
119
128
  pluginConfiguration: {
129
+ appearance?: EditorAppearance;
120
130
  fireAnalyticsEvent?: FireAnalyticsCallback;
121
131
  getEditorView: () => EditorView | undefined;
122
132
  };
123
133
  sharedState: {
134
+ /**
135
+ * The appearance configuration of the editor. Used as fallback when individual
136
+ * plugins don't have explicit appearance configuration.
137
+ */
138
+ appearance: EditorAppearance | undefined;
124
139
  /**
125
140
  * The schema of the editor. It is guarranteed to be static for its lifecycle
126
141
  * so is safe to use `currentState`
@@ -0,0 +1,9 @@
1
+ import { PluginKey } from '@atlaskit/editor-prosemirror/state';
2
+ import { SafePlugin } from '../../../safe-plugin';
3
+ import type { EditorAppearance } from '../../../types';
4
+ type AppearancePluginState = {
5
+ appearance: EditorAppearance | undefined;
6
+ };
7
+ export declare const appearancePluginKey: PluginKey<AppearancePluginState>;
8
+ export declare function createAppearancePlugin(initialAppearance: EditorAppearance | undefined): SafePlugin<AppearancePluginState>;
9
+ export {};
@@ -1,12 +1,14 @@
1
1
  import type { EditorState } from '@atlaskit/editor-prosemirror/state';
2
2
  import type { EditorView } from '@atlaskit/editor-prosemirror/view';
3
3
  import { type FireAnalyticsCallback } from '../analytics';
4
+ import type { EditorAppearance } from '../types';
4
5
  import type { BasePluginDependenciesAPI, CorePlugin, NextEditorPlugin, PluginDependenciesAPI } from '../types/next-editor-plugin';
5
6
  type NextEditorPluginInitializedType = ReturnType<NextEditorPlugin<any>>;
6
7
  type SharedStateAPIProps = {
7
8
  getEditorState: () => EditorState | undefined;
8
9
  };
9
10
  interface PluginInjectionAPIProps extends SharedStateAPIProps {
11
+ appearance?: EditorAppearance;
10
12
  fireAnalyticsEvent?: FireAnalyticsCallback;
11
13
  getEditorView: () => EditorView | undefined;
12
14
  }
@@ -46,7 +48,15 @@ export declare class EditorPluginInjectionAPI implements PluginInjectionAPIDefin
46
48
  private actionsAPI;
47
49
  private commandsAPI;
48
50
  private plugins;
49
- constructor({ getEditorState, getEditorView, fireAnalyticsEvent }: PluginInjectionAPIProps);
51
+ constructor({ getEditorState, getEditorView, fireAnalyticsEvent, appearance }: PluginInjectionAPIProps);
52
+ /**
53
+ * Returns PM plugins from internally-registered plugins (e.g. the core plugin)
54
+ * that are not processed through the normal preset builder flow.
55
+ */
56
+ getInternalPMPlugins(): Array<{
57
+ name: string;
58
+ plugin: (...args: any[]) => any;
59
+ }>;
50
60
  private createAPI;
51
61
  api(): GenericAPIWithCore;
52
62
  onEditorViewUpdated: ({ newEditorState, oldEditorState }: EditorStateDiff) => void;
@@ -9,6 +9,7 @@ import type { Fragment, Node, Schema, Node as PMNode } from '@atlaskit/editor-pr
9
9
  import type { EditorState } from '@atlaskit/editor-prosemirror/state';
10
10
  import type { EditorView } from '@atlaskit/editor-prosemirror/view';
11
11
  import type { FireAnalyticsCallback } from '../analytics';
12
+ import type { EditorAppearance } from './editor-appearance';
12
13
  import type { EditorCommand, EditorCommandWithMetadata } from './editor-command';
13
14
  import type { EditorPlugin } from './editor-plugin';
14
15
  export interface Transformer<T> {
@@ -115,12 +116,26 @@ export type CorePlugin = NextEditorPlugin<'core', {
115
116
  * @returns (boolean) if scroll was successful
116
117
  */
117
118
  scrollToPos: (pos: number, scrollOptions?: boolean | ScrollIntoViewOptions) => boolean;
119
+ /**
120
+ * Updates the editor appearance in shared state. Dispatches a ProseMirror transaction
121
+ * so that shared state subscribers are correctly notified of the change.
122
+ *
123
+ * @param appearance - The new editor appearance value
124
+ * @returns true if the update was dispatched, false if the experiment is off or the view was unavailable
125
+ */
126
+ updateAppearance: (appearance: EditorAppearance | undefined) => boolean;
118
127
  };
119
128
  pluginConfiguration: {
129
+ appearance?: EditorAppearance;
120
130
  fireAnalyticsEvent?: FireAnalyticsCallback;
121
131
  getEditorView: () => EditorView | undefined;
122
132
  };
123
133
  sharedState: {
134
+ /**
135
+ * The appearance configuration of the editor. Used as fallback when individual
136
+ * plugins don't have explicit appearance configuration.
137
+ */
138
+ appearance: EditorAppearance | undefined;
124
139
  /**
125
140
  * The schema of the editor. It is guarranteed to be static for its lifecycle
126
141
  * so is safe to use `currentState`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/editor-common",
3
- "version": "112.8.2",
3
+ "version": "112.8.4",
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/"
@@ -81,8 +81,8 @@
81
81
  "@atlaskit/status": "^3.1.0",
82
82
  "@atlaskit/task-decision": "^19.3.0",
83
83
  "@atlaskit/textfield": "^8.2.0",
84
- "@atlaskit/tmp-editor-statsig": "^44.3.0",
85
- "@atlaskit/tokens": "^11.1.0",
84
+ "@atlaskit/tmp-editor-statsig": "^45.0.0",
85
+ "@atlaskit/tokens": "^11.2.0",
86
86
  "@atlaskit/tooltip": "^21.0.0",
87
87
  "@atlaskit/width-detector": "^5.0.0",
88
88
  "@babel/runtime": "^7.0.0",
@@ -272,6 +272,9 @@
272
272
  },
273
273
  "tinymce_display_unknown_macro_body_content": {
274
274
  "type": "boolean"
275
+ },
276
+ "platform_editor_media_border_radius_fix": {
277
+ "type": "boolean"
275
278
  }
276
279
  }
277
280
  }