@atlaskit/editor-core 238.0.2 → 238.0.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.
@@ -1,12 +1,12 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
- import _defineProperty from "@babel/runtime/helpers/defineProperty";
3
2
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
4
4
  import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
5
- 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; }
6
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
7
5
  function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }
8
6
  function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
9
7
  function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
8
+ 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; }
9
+ 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; }
10
10
  import React, { useCallback, useLayoutEffect, useMemo, useRef, useState, useEffect } from 'react';
11
11
  import { injectIntl } from 'react-intl';
12
12
  // eslint-disable-next-line @atlaskit/platform/prefer-crypto-random-uuid -- Use crypto.randomUUID instead
@@ -30,7 +30,6 @@ import useConstructor from '@atlaskit/editor-common/useConstructor';
30
30
  import usePreviousState from '@atlaskit/editor-common/usePreviousState';
31
31
  import { analyticsEventKey, getAnalyticsEventSeverity } from '@atlaskit/editor-common/utils/analytics';
32
32
  import { isEmptyDocument } from '@atlaskit/editor-common/utils/document';
33
- import { Node as PMNode } from '@atlaskit/editor-prosemirror/model';
34
33
  import { EditorState, Selection, TextSelection } from '@atlaskit/editor-prosemirror/state';
35
34
  import { EditorView } from '@atlaskit/editor-prosemirror/view';
36
35
  import { createSSREditorState } from '@atlaskit/editor-ssr-renderer/create-ssr-editor-state';
@@ -41,7 +40,6 @@ import { addUFOCustomData } from '@atlaskit/react-ufo/add-ufo-custom-data';
41
40
  import { getInteractionId } from '@atlaskit/react-ufo/get-interaction-id';
42
41
  import { abortAll, getActiveInteraction } from '@atlaskit/react-ufo/interaction-metrics';
43
42
  import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
44
- import { expValEqualsNoExposure } from '@atlaskit/tmp-editor-statsig/exp-val-equals-no-exposure';
45
43
  import { useProviders } from '../composable-editor/hooks/useProviders';
46
44
  import { createFeatureFlagsFromProps } from '../utils/feature-flags-from-props';
47
45
  import { getEditorDomSize } from '../utils/getEditorDomSize';
@@ -66,37 +64,6 @@ import { useFireFullWidthEvent } from './ReactEditorView/useFireFullWidthEvent';
66
64
  var EDIT_AREA_ID = 'ak-editor-textarea';
67
65
  var SSR_TRACE_SEGMENT_NAME = 'reactEditorView';
68
66
  var bootStartTime = isPerformanceAPIAvailable() ? performance.now() : undefined;
69
- // `markdown↔rich` toggles drop different node/mark sets, so the unique
70
- // name set is enough to detect when a destructive rebuild is needed.
71
- function sameNames(a, b) {
72
- var setA = new Set(a);
73
- var setB = new Set(b);
74
- if (setA.size !== setB.size) {
75
- return false;
76
- }
77
- var _iterator = _createForOfIteratorHelper(setA),
78
- _step;
79
- try {
80
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
81
- var name = _step.value;
82
- if (!setB.has(name)) {
83
- return false;
84
- }
85
- }
86
- } catch (err) {
87
- _iterator.e(err);
88
- } finally {
89
- _iterator.f();
90
- }
91
- return true;
92
- }
93
- function schemaShapeChanged(current, next) {
94
- return !sameNames(Object.keys(current.nodes), next.nodes.map(function (n) {
95
- return n.name;
96
- })) || !sameNames(Object.keys(current.marks), next.marks.map(function (m) {
97
- return m.name;
98
- }));
99
- }
100
67
  export function ReactEditorView(props) {
101
68
  var _pluginInjectionAPI$c, _media, _linking, _document$querySelect, _props$render, _props$render2;
102
69
  // Should be always the first statement in the component
@@ -404,15 +371,8 @@ export function ReactEditorView(props) {
404
371
  };
405
372
  }, [eventDispatcher]);
406
373
 
407
- // Bumped after `reconfigureState` so the render prop re-reads the
408
- // in-place-mutated `config.current` (contentComponents / toolbar
409
- // components from the rebuilt preset).
410
- var _useState = useState(0),
411
- _useState2 = _slicedToArray(_useState, 2),
412
- bumpConfigVersion = _useState2[1];
413
-
414
374
  // Preset reference last processed by reconfigureState. Used to skip the
415
- // destructive work (plugin filter, schema rebuild) when reconfigure is
375
+ // destructive plugin filter when reconfigure is
416
376
  // called with the same preset.
417
377
  var lastProcessedPresetRef = useRef(null);
418
378
  var reconfigureState = useCallback(function (props) {
@@ -431,15 +391,10 @@ export function ReactEditorView(props) {
431
391
  var previousPluginNames = new Set(pluginInjectionAPI.current.getRegisteredPluginNames());
432
392
  var editorPlugins = createPluginsList(props.preset, 'allowBlockType' in props.editorProps ? props.editorProps : {}, pluginInjectionAPI.current);
433
393
 
434
- // Capture once, before either downstream block updates the ref —
435
- // both the filter and the schema rebuild are destructive and only
436
- // want to run when the preset has actually changed.
394
+ // Capture once, before the downstream block updates the ref — the
395
+ // filter is destructive and only wants to run when the preset has
396
+ // actually changed.
437
397
  var presetChanged = lastProcessedPresetRef.current !== props.preset;
438
-
439
- // Build a candidate config from the *unfiltered* plugin list so we can
440
- // decide whether the schema rebuild path will run. Both the rebuild
441
- // decision and the drop-filter decision below depend on this answer,
442
- // so it has to be computed up-front.
443
398
  var buildConfig = function buildConfig(plugins) {
444
399
  var _c$pmPlugins;
445
400
  var c = processPluginsList(plugins);
@@ -448,16 +403,6 @@ export function ReactEditorView(props) {
448
403
  };
449
404
  var nextConfig = buildConfig(editorPlugins);
450
405
 
451
- // `state.reconfigure` preserves the original schema, so a preset
452
- // toggle that should change schema (markdown↔rich) needs a fresh
453
- // `EditorState`. Resets all plugin state including undo history.
454
- //
455
- // Compare schema *shape* (node + mark name sets) rather than preset
456
- // identity: consumers commonly recreate the preset object on every
457
- // parent re-render, and a destructive rebuild on a no-op identity
458
- // change tears down all plugin state (e.g. unmounts the AI palette).
459
- var shouldRebuildSchema = presetChanged && schemaShapeChanged(viewRef.current.state.schema, nextConfig) && expValEqualsNoExposure('cc-markdown-mode', 'isEnabled', true);
460
-
461
406
  // `state.reconfigure` keeps the original schema, so switching presets
462
407
  // can leave the editor inconsistent in two ways:
463
408
  // 1. The new preset may add plugins that reference schema nodes or
@@ -466,25 +411,14 @@ export function ReactEditorView(props) {
466
411
  // injection API even when the new preset doesn't re-register
467
412
  // them, so listeners still fire against a state that no longer
468
413
  // has their pmPlugin.
469
- //
470
- // When the schema is being rebuilt below, the new schema is built
471
- // from the *unfiltered* plugin list — so dropping plugins whose
472
- // nodes/marks the OLD schema lacks would wrongly remove the very
473
- // plugins the rebuild is meant to admit. Skip the drop step in that
474
- // case (purpose 1) but always reconcile the injection API
475
- // (purpose 2). When NOT rebuilding, run both — even under the
476
- // `cc-markdown-mode` experiment, otherwise no-op preset identity
477
- // changes would silently leave a broken plugin/schema mismatch.
478
414
  if (presetChanged) {
479
- var dropped = [];
480
- if (!shouldRebuildSchema) {
481
- var _result = filterPluginsForReconfigure(editorPlugins, viewRef.current.state.schema, previousPluginNames);
482
- if (_result.dropped.length > 0) {
483
- editorPlugins = _result.kept;
484
- // Plugin list changed — rebuild candidate config to match.
485
- nextConfig = buildConfig(editorPlugins);
486
- }
487
- dropped = _result.dropped;
415
+ var _filterPluginsForReco = filterPluginsForReconfigure(editorPlugins, viewRef.current.state.schema, previousPluginNames),
416
+ dropped = _filterPluginsForReco.dropped,
417
+ kept = _filterPluginsForReco.kept;
418
+ if (dropped.length > 0) {
419
+ editorPlugins = kept;
420
+ // Plugin list changed — rebuild candidate config to match.
421
+ nextConfig = buildConfig(editorPlugins);
488
422
  }
489
423
  var keptPluginNames = new Set(editorPlugins.map(function (p) {
490
424
  return p === null || p === void 0 ? void 0 : p.name;
@@ -502,71 +436,25 @@ export function ReactEditorView(props) {
502
436
  }
503
437
  config.current = nextConfig;
504
438
  var state = viewRef.current.state;
505
- var newState;
506
- if (shouldRebuildSchema) {
507
- var newSchema = createSchema(config.current);
508
- var newDoc;
509
- try {
510
- newDoc = PMNode.fromJSON(newSchema, state.doc.toJSON());
511
- } catch (e) {
512
- // eslint-disable-next-line no-console
513
- console.error('[reconfigureState] Failed to migrate doc to new schema; resetting to empty doc', e);
514
- var empty = newSchema.topNodeType.createAndFill();
515
- if (!empty) {
516
- throw new Error('reconfigureState: doc migration failed and new schema cannot create an empty top node');
517
- }
518
- newDoc = empty;
519
- }
520
- var newSelection;
521
- try {
522
- newSelection = Selection.fromJSON(newDoc, state.selection.toJSON());
523
- } catch (_unused) {
524
- // Old selection's positions / node types may not map onto the new schema.
525
- newSelection = Selection.atStart(newDoc);
526
- }
527
- var plugins = createPMPlugins({
528
- schema: newSchema,
529
- dispatch: dispatch,
530
- errorReporter: errorReporter,
531
- editorConfig: config.current,
532
- eventDispatcher: eventDispatcher,
533
- providerFactory: props.providerFactory,
534
- portalProviderAPI: props.portalProviderAPI,
535
- nodeViewPortalProviderAPI: props.nodeViewPortalProviderAPI,
536
- dispatchAnalyticsEvent: dispatchAnalyticsEvent,
537
- featureFlags: featureFlags,
538
- getIntl: function getIntl() {
539
- return props.intl;
540
- },
541
- onEditorStateUpdated: pluginInjectionAPI.current.onEditorViewUpdated
542
- });
543
- newState = EditorState.create({
544
- schema: newSchema,
545
- doc: newDoc,
546
- selection: newSelection,
547
- plugins: plugins
548
- });
549
- } else {
550
- var _plugins = createPMPlugins({
551
- schema: state.schema,
552
- dispatch: dispatch,
553
- errorReporter: errorReporter,
554
- editorConfig: config.current,
555
- eventDispatcher: eventDispatcher,
556
- providerFactory: props.providerFactory,
557
- portalProviderAPI: props.portalProviderAPI,
558
- nodeViewPortalProviderAPI: props.nodeViewPortalProviderAPI,
559
- dispatchAnalyticsEvent: dispatchAnalyticsEvent,
560
- featureFlags: featureFlags,
561
- getIntl: function getIntl() {
562
- return props.intl;
563
- },
564
- onEditorStateUpdated: pluginInjectionAPI.current.onEditorViewUpdated
565
- });
566
- newState = state.reconfigure({
567
- plugins: _plugins
568
- });
569
- }
439
+ var plugins = createPMPlugins({
440
+ schema: state.schema,
441
+ dispatch: dispatch,
442
+ errorReporter: errorReporter,
443
+ editorConfig: config.current,
444
+ eventDispatcher: eventDispatcher,
445
+ providerFactory: props.providerFactory,
446
+ portalProviderAPI: props.portalProviderAPI,
447
+ nodeViewPortalProviderAPI: props.nodeViewPortalProviderAPI,
448
+ dispatchAnalyticsEvent: dispatchAnalyticsEvent,
449
+ featureFlags: featureFlags,
450
+ getIntl: function getIntl() {
451
+ return props.intl;
452
+ },
453
+ onEditorStateUpdated: pluginInjectionAPI.current.onEditorViewUpdated
454
+ });
455
+ var newState = state.reconfigure({
456
+ plugins: plugins
457
+ });
570
458
  if (presetChanged) {
571
459
  lastProcessedPresetRef.current = props.preset;
572
460
  }
@@ -577,37 +465,6 @@ export function ReactEditorView(props) {
577
465
  var result = viewRef.current.update(_objectSpread(_objectSpread({}, viewRef.current.props), {}, {
578
466
  state: newState
579
467
  }));
580
-
581
- // The new collab-edit plugin instance starts with `isReady=false`.
582
- // The rebind path in editor-plugin-collab-edit's initialize.ts is
583
- // gated on `provider.getInitPayload`, which the Confluence NCS
584
- // provider does not implement, so the placeholder spinner would
585
- // never clear. Re-seeding here is safe: the prior state must have
586
- // had `isReady=true` for the user to have triggered the toggle.
587
- //
588
- // Must run AFTER `view.update({ state: newState })`: that call resets
589
- // the view's state to the captured `newState` reference, so a
590
- // dispatch placed before it would advance `view.state` to a value
591
- // that `update` then silently overwrites — discarding the meta and
592
- // leaving `isReady=false`.
593
- if (shouldRebuildSchema) {
594
- // `state.collabEditPlugin$` is the property PM derives from the
595
- // collab plugin's PluginKey; cast through `unknown` to read it.
596
- var collabState = viewRef.current.state.collabEditPlugin$;
597
- if (collabState && collabState.isReady !== true) {
598
- viewRef.current.dispatch(viewRef.current.state.tr.setMeta('collabInitialised', true));
599
- }
600
- }
601
-
602
- // EDITOR-6702: gated until we have a broader gate; reconfigure is a
603
- // low-level path so use NoExposure.
604
- if (expValEqualsNoExposure('cc-markdown-mode', 'isEnabled', true)) {
605
- // Force a render so PluginSlot picks up the new preset's content
606
- // components against the new state.
607
- bumpConfigVersion(function (v) {
608
- return v + 1;
609
- });
610
- }
611
468
  return result;
612
469
  }, [blur, dispatchAnalyticsEvent, eventDispatcher, dispatch, errorReporter, featureFlags]);
613
470
  var onEditorViewUpdated = useCallback(function (_ref2) {
@@ -776,10 +633,10 @@ export function ReactEditorView(props) {
776
633
  });
777
634
  return view;
778
635
  }, [getDirectEditorProps, dispatchAnalyticsEvent]);
779
- var _useState3 = useState(undefined),
780
- _useState4 = _slicedToArray(_useState3, 2),
781
- editorView = _useState4[0],
782
- setEditorView = _useState4[1];
636
+ var _useState = useState(undefined),
637
+ _useState2 = _slicedToArray(_useState, 2),
638
+ editorView = _useState2[0],
639
+ setEditorView = _useState2[1];
783
640
 
784
641
  // Detects if the editor is nested inside an extension - ie. it is a Legacy Content Extension (LCE)
785
642
  var isNestedEditor = useRef(null);
@@ -828,19 +685,19 @@ export function ReactEditorView(props) {
828
685
  return function () {
829
686
  if (scrollElement.current) {
830
687
  // eslint-disable-next-line react-hooks/exhaustive-deps
831
- var _iterator2 = _createForOfIteratorHelper(possibleListeners.current),
832
- _step2;
688
+ var _iterator = _createForOfIteratorHelper(possibleListeners.current),
689
+ _step;
833
690
  try {
834
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
691
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
835
692
  var _scrollElement$curren;
836
- var possibleListener = _step2.value;
693
+ var possibleListener = _step.value;
837
694
  // eslint-disable-next-line @repo/internal/dom-events/no-unsafe-event-listeners
838
695
  (_scrollElement$curren = scrollElement.current) === null || _scrollElement$curren === void 0 || _scrollElement$curren.removeEventListener.apply(_scrollElement$curren, _toConsumableArray(possibleListener));
839
696
  }
840
697
  } catch (err) {
841
- _iterator2.e(err);
698
+ _iterator.e(err);
842
699
  } finally {
843
- _iterator2.f();
700
+ _iterator.f();
844
701
  }
845
702
  }
846
703
  scrollElement.current = null;
@@ -852,19 +709,19 @@ export function ReactEditorView(props) {
852
709
  scrollElement.current = document.querySelector('[data-editor-scroll-container]');
853
710
  var cleanupListeners = function cleanupListeners() {
854
711
  // eslint-disable-next-line react-hooks/exhaustive-deps
855
- var _iterator3 = _createForOfIteratorHelper(possibleListeners.current),
856
- _step3;
712
+ var _iterator2 = _createForOfIteratorHelper(possibleListeners.current),
713
+ _step2;
857
714
  try {
858
- for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
715
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
859
716
  var _scrollElement$curren2;
860
- var possibleListener = _step3.value;
717
+ var possibleListener = _step2.value;
861
718
  // eslint-disable-next-line @repo/internal/dom-events/no-unsafe-event-listeners
862
719
  (_scrollElement$curren2 = scrollElement.current) === null || _scrollElement$curren2 === void 0 || _scrollElement$curren2.removeEventListener.apply(_scrollElement$curren2, _toConsumableArray(possibleListener));
863
720
  }
864
721
  } catch (err) {
865
- _iterator3.e(err);
722
+ _iterator2.e(err);
866
723
  } finally {
867
- _iterator3.f();
724
+ _iterator2.f();
868
725
  }
869
726
  };
870
727
  if (scrollElement.current) {
@@ -1,5 +1,6 @@
1
1
  import { SafePlugin } from '@atlaskit/editor-common/safe-plugin';
2
2
  import { PluginKey } from '@atlaskit/editor-prosemirror/state';
3
+ import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
3
4
  var key = new PluginKey('editorStateNotificationPlugin');
4
5
  export var createEditorStateNotificationPlugin = function createEditorStateNotificationPlugin(onEditorStateUpdated, onEditorViewStateUpdatedCallbacks) {
5
6
  var transactions = [];
@@ -12,7 +13,11 @@ export var createEditorStateNotificationPlugin = function createEditorStateNotif
12
13
  };
13
14
  },
14
15
  apply: function apply(tr) {
15
- transactions.push(tr);
16
+ if (!isExperimentEnabled('platform_editor_reduce_memory_leaks')) {
17
+ // Dead accumulator: nothing reads it, so it pins every transaction for the
18
+ // editor's lifetime. Delete it when the experiment ships.
19
+ transactions.push(tr);
20
+ }
16
21
  return {
17
22
  latestTransaction: tr
18
23
  };
@@ -1,11 +1,5 @@
1
1
  ._v5641fxv{transition:max-width .5s cubic-bezier(.15,1,.3,1)}
2
- ._v5642kub{transition:padding 0ms cubic-bezier(.15,1,.3,1)}._101j15vq [data-editor-scroll-container=true]{overflow-y:hidden}
3
- ._11bl1txw >.ak-editor-content-area>[data-testid=plugins-components-wrapper]{display:flex}
4
- ._12glglyw[data-markdown-mode-hide-prosemirror=true]>.ak-editor-content-area>.ProseMirror{display:none}
5
- ._13jk1txw >.ak-editor-content-area{display:flex}
6
- ._13svglyw .ProseMirror>ol:not([data-node-type=actionList]):not([data-node-type=decisionList]){clear:none}
7
- ._13t61wug >.ak-editor-content-area>[data-testid=plugins-components-wrapper]{flex-basis:auto}
8
- ._1593idpf >.ak-editor-content-area>[data-testid=plugins-components-wrapper]{min-height:0}
2
+ ._v5642kub{transition:padding 0ms cubic-bezier(.15,1,.3,1)}._13svglyw .ProseMirror>ol:not([data-node-type=actionList]):not([data-node-type=decisionList]){clear:none}
9
3
  ._16jlkb7n{flex-grow:1}
10
4
  ._17q71osq .fabric-editor--full-width-mode .extension-container.inline{max-width:100%}
11
5
  ._18q6usvi .ProseMirror{box-sizing:border-box}
@@ -16,26 +10,18 @@
16
10
  ._19bvt9kd{padding-left:72px}
17
11
  ._19pk1wug{margin-top:auto}
18
12
  ._19pkidpf{margin-top:0}
19
- ._1a1d1osq >.ak-editor-content-area{height:100%}
20
13
  ._1b7c1kw7 .fabric-editor--full-width-mode td .extension-container.inline{max-width:inherit}
21
14
  ._1bsb1osq{width:100%}
22
15
  ._1e0c1txw{display:flex}
23
- ._1e0cglyw{display:none}
24
- ._1e8kkb7n >.ak-editor-content-area>[data-testid=plugins-components-wrapper]{flex-grow:1}
25
16
  ._1f38dez1{container-name:editor-area}
26
17
  ._1gl01ejb .ProseMirror>p:last-child{margin-bottom:var(--ds-space-300,24px)}
27
18
  ._1k8i1osq .ProseMirror .pm-table-wrapper>table{width:100%}
28
- ._1n5qidpf >.ak-editor-content-area{padding-left:0}
29
19
  ._1nw4glyw .ProseMirror>h1{clear:none}
30
20
  ._1qzyglyw .ProseMirror>h3{clear:none}
31
21
  ._1rnyglyw .ProseMirror>h5{clear:none}
32
22
  ._1tb2idpf .ProseMirror .pm-table-wrapper>table{margin-left:0}
33
- ._1ul9idpf{min-width:0}
34
- ._1vbxidpf >.ak-editor-content-area{min-height:0}
35
23
  ._1wpzesu3{align-self:flex-end}
36
- ._1wrrusvi >.ak-editor-content-area{box-sizing:border-box}
37
24
  ._1wxymslj .fabric-editor--full-width-mode .extension-container{max-width:calc(100% - 4px)}
38
- ._1xouidpf >.ak-editor-content-area{min-width:0}
39
25
  ._2hwx1wug{margin-right:auto}
40
26
  ._2hwxidpf{margin-right:0}
41
27
  ._2lx21bp4{flex-direction:column}
@@ -43,24 +29,16 @@
43
29
  ._4t3i1ap5{height:calc(100% - 105px)}
44
30
  ._4t3i1osq{height:100%}
45
31
  ._4t3ibhu0{height:calc(100% - var(--ak-editor-fullpage-toolbar-height))}
46
- ._4tbp1osq >.ak-editor-content-area{width:100%}
47
- ._71ybidpf >.ak-editor-content-area{padding-right:0}
48
32
  ._7cca15wb{container-type:inline-size}
49
33
  ._7uc0glyw .ProseMirror>ul{clear:none}
50
34
  ._8j6w1lxk.ak-editor-content-area-no-toolbar{height:calc(100% + 1px)}
51
35
  ._8vye1n1a .ProseMirror .pm-table-wrapper>table{margin-right:-1px}
52
36
  ._9dtbmslj .fabric-editor--full-width-mode .multiBodiedExtension--container{max-width:calc(100% - 4px)}
53
- ._amwgglyw[data-markdown-mode-hide-scroll-gutter=true]>.ak-editor-content-area>[data-vc=scroll-gutter]{display:none}
54
- ._bfhkhfxm{background-color:var(--ds-surface-sunken,#f8f8f8)}
55
- ._boivkb7n >.ak-editor-content-area>[data-testid=plugins-components-wrapper]{flex-shrink:1}
56
37
  ._ca0qidpf{padding-top:0}
57
38
  ._ca0qoahv{padding-top:var(--ds-space-600,3pc)}
58
- ._evz0idpf >.ak-editor-content-area{padding-bottom:0}
59
- ._fh67idpf >.ak-editor-content-area{padding-top:0}
60
39
  ._i92uagmp .fabric-editor--full-width-mode:not(:has(#chromeless-editor)) .fabric-editor-breakout-mark{transform:none!important}
61
40
  ._j9k7kb7n .ProseMirror{flex-grow:1}
62
41
  ._l4a11hrf .ProseMirror>*{clear:both}
63
- ._li931osq >.ak-editor-content-area>[data-testid=plugins-components-wrapper]{width:100%}
64
42
  ._n3tdidpf{padding-bottom:0}
65
43
  ._n3tdoahv{padding-bottom:var(--ds-space-600,3pc)}
66
44
  ._njlp131u{contain:layout style inline-size}
@@ -69,10 +47,7 @@
69
47
  ._otyr1wug{margin-bottom:auto}
70
48
  ._otyridpf{margin-bottom:0}
71
49
  ._p12f5kin{max-width:var(--ak-editor-content-area-max-width)}
72
- ._p12fglyw{max-width:none}
73
50
  ._pnffaq80 .fabric-editor--full-width-mode:not(:has(#chromeless-editor)) .fabric-editor-breakout-mark{width:100%!important}
74
- ._q0l01bp4 >.ak-editor-content-area{flex-direction:column}
75
- ._qgzyidpf >.ak-editor-content-area>[data-testid=plugins-components-wrapper]{min-width:0}
76
51
  ._qkfz261p .fabric-editor--full-width-mode:not(:has(#chromeless-editor)) .fabric-editor-breakout-mark{margin-left:unset!important}
77
52
  ._t2fzglyw .ProseMirror>p{clear:none}
78
53
  ._tynl4diq .fabric-editor--full-width-mode [data-layout-section]{max-width:calc(100% + 40px)}
@@ -5,10 +5,8 @@ import React, { useImperativeHandle, useRef } from 'react';
5
5
  import classnames from 'classnames';
6
6
  import { injectIntl } from 'react-intl';
7
7
  import { messages } from '@atlaskit/editor-common/messages/full-page';
8
- import { useSharedPluginStateWithSelector } from '@atlaskit/editor-common/useSharedPluginStateWithSelector';
9
8
  import { akEditorGutterPaddingDynamic, akEditorDefaultLayoutWidth } from '@atlaskit/editor-shared-styles/constants';
10
9
  import { editorExperiment } from '@atlaskit/tmp-editor-statsig/editor-experiment';
11
- import { expValEqualsNoExposure } from '@atlaskit/tmp-editor-statsig/exp-val-equals-no-exposure';
12
10
 
13
11
  // Ignored via go/ees005
14
12
  // eslint-disable-next-line import/no-named-as-default
@@ -41,9 +39,6 @@ var compiledStyles = {
41
39
  contentAreaWrapper: "_1bsb1osq _7cca15wb _1f38dez1 _njlp131u",
42
40
  sidebarArea: "_4t3i1osq _vchhusvi _1wpzesu3 _1hgw1wug _1t1q1if8 _uj9widpf _13hh1y6m",
43
41
  editorContentAreaProsemirrorStyle: "_j9k7kb7n _18q6usvi _l4a11hrf _1nw4glyw _yq1qglyw _1qzyglyw _ongaglyw _1rnyglyw _vtulglyw _13svglyw _t2fzglyw _7uc0glyw _1gl01ejb",
44
- hideEditorContentAreaProsemirrorWithAttributeStyle: "_12glglyw",
45
- hideEditorContentAreaScrollGutterWithAttributeStyle: "_amwgglyw",
46
- hideEditorScrollGutterStyle: "_1e0cglyw",
47
42
  fullWidthNonChromelessBreakoutBlockTableStyle: "_xpemaq80 _pnffaq80 _zr7faq80 _qkfz261p _i92uagmp",
48
43
  editorContentAreaNew: "_19pk1wug _2hwx1wug _otyr1wug _18u01wug _v5641fxv _vwz41tcg _ca0qoahv _n3tdoahv _4t3i1ap5 _1bsb1osq _2lx21bp4 _16jlkb7n _p12f5kin _1uizkqmb",
49
44
  tableFullPageEditorStylesNew: "_1tb2idpf _8vye1n1a _1k8i1osq",
@@ -53,9 +48,7 @@ var compiledStyles = {
53
48
  editorContentGutterStyles: "_ca0qidpf _u5f31ex1 _n3tdidpf _19bv1ex1 _vchhusvi",
54
49
  editorContentReducedGutterStyles: "_1d7gidpf _n2nw1tcg _d329idpf _105p1tcg",
55
50
  contentAreaNew: "_19pkidpf _2hwxidpf _otyridpf _18u0idpf _ca0qidpf _u5f3idpf _n3tdidpf _19bvidpf _v5642kub _1e0c1txw _2lx2vrvc _4t3ibhu0 _vchhusvi _8j6w1lxk",
56
- contentAreaHeightNoToolbar: "_4t3i1osq",
57
- markdownModeContainerBackgroundStyle: "_bfhkhfxm _101j15vq",
58
- markdownModeContentAreaStyle: "_19pkidpf _2hwxidpf _otyridpf _18u0idpf _vchhusvi _4t3i1osq _p12fglyw _1ul9idpf _n3tdidpf _ca0qidpf _1bsb1osq _fh67idpf _71ybidpf _evz0idpf _1n5qidpf _1wrrusvi _13jk1txw _q0l01bp4 _1a1d1osq _1vbxidpf _1xouidpf _4tbp1osq _1e8kkb7n _boivkb7n _13t61wug _11bl1txw _1593idpf _qgzyidpf _li931osq"
51
+ contentAreaHeightNoToolbar: "_4t3i1osq"
59
52
  };
60
53
  export var CONTENT_AREA_TEST_ID = 'ak-editor-fp-content-area';
61
54
  var EDITOR_CONTAINER = 'ak-editor-container';
@@ -85,17 +78,6 @@ var Content = /*#__PURE__*/React.forwardRef(function (props, ref) {
85
78
  }
86
79
  };
87
80
  }, []);
88
- var markdownPluginCurrentView = useSharedPluginStateWithSelector(props.editorAPI, ['markdownMode'], function (states) {
89
- var _states$markdownModeS;
90
- return (_states$markdownModeS = states.markdownModeState) === null || _states$markdownModeS === void 0 ? void 0 : _states$markdownModeS.view;
91
- });
92
- var markdownPluginCurrentIsMarkdownMode = useSharedPluginStateWithSelector(props.editorAPI, ['markdownMode'], function (states) {
93
- var _states$markdownModeS2;
94
- return (_states$markdownModeS2 = states.markdownModeState) === null || _states$markdownModeS2 === void 0 ? void 0 : _states$markdownModeS2.isMarkdownMode;
95
- });
96
- var isMarkdownModeExperimentEnabled = expValEqualsNoExposure('cc-markdown-mode', 'isEnabled', true);
97
- var shouldHideProseMirrorForMarkdownMode = isMarkdownModeExperimentEnabled && markdownPluginCurrentView !== 'preview' && markdownPluginCurrentIsMarkdownMode;
98
- var shouldHideScrollGutterForMarkdownMode = isMarkdownModeExperimentEnabled && markdownPluginCurrentIsMarkdownMode;
99
81
  var content = /*#__PURE__*/React.createElement(EditorContentContainer
100
82
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
101
83
  , {
@@ -111,14 +93,12 @@ var Content = /*#__PURE__*/React.forwardRef(function (props, ref) {
111
93
  editorView: props.editorView,
112
94
  editorDisabled: props.disabled
113
95
  }, /*#__PURE__*/React.createElement("div", {
114
- "data-markdown-mode-hide-prosemirror": shouldHideProseMirrorForMarkdownMode ? 'true' : undefined,
115
- "data-markdown-mode-hide-scroll-gutter": shouldHideScrollGutterForMarkdownMode ? 'true' : undefined,
116
96
  style: {
117
97
  '--ak-editor-content-area-max-width': "".concat(contentAreaMaxWidth, "px")
118
98
  }
119
99
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop
120
100
  ,
121
- className: ax([compiledStyles.editorContentAreaNew, compiledStyles.editorContentAreaProsemirrorStyle, shouldHideProseMirrorForMarkdownMode && compiledStyles.hideEditorContentAreaProsemirrorWithAttributeStyle, shouldHideScrollGutterForMarkdownMode && compiledStyles.hideEditorContentAreaScrollGutterWithAttributeStyle, shouldHideProseMirrorForMarkdownMode && compiledStyles.markdownModeContentAreaStyle, compiledStyles.tableFullPageEditorStylesNew, compiledStyles.fullWidthNonChromelessBreakoutBlockTableStyle,
101
+ className: ax([compiledStyles.editorContentAreaNew, compiledStyles.editorContentAreaProsemirrorStyle, compiledStyles.tableFullPageEditorStylesNew, compiledStyles.fullWidthNonChromelessBreakoutBlockTableStyle,
122
102
  // for breakout resizing, there's no need to restrict the width of codeblocks as they're always wrapped in a breakout mark
123
103
  compiledStyles.editorContentAreaContainerStyleExcludeCodeBlockNew, compiledStyles.editorContentAreaContainerNestedDndStyle, "ak-editor-content-area-region"]),
124
104
  "data-editor-editable-content": true,
@@ -157,15 +137,13 @@ var Content = /*#__PURE__*/React.forwardRef(function (props, ref) {
157
137
  paddingBottom: "".concat((_allowScrollGutter$gu = allowScrollGutter.gutterSize) !== null && _allowScrollGutter$gu !== void 0 ? _allowScrollGutter$gu : '120', "px")
158
138
  },
159
139
  "data-vc": "scroll-gutter",
160
- "data-editor-scroll-gutter": "true",
161
- className: ax([shouldHideScrollGutterForMarkdownMode && compiledStyles.hideEditorScrollGutterStyle])
140
+ "data-editor-scroll-gutter": "true"
162
141
  }) : /*#__PURE__*/React.createElement("div", {
163
142
  id: "editor-scroll-gutter",
164
143
  style: {
165
144
  paddingBottom: "".concat((_allowScrollGutter$gu2 = allowScrollGutter.gutterSize) !== null && _allowScrollGutter$gu2 !== void 0 ? _allowScrollGutter$gu2 : '120', "px")
166
145
  },
167
- "data-vc": "scroll-gutter",
168
- className: ax([shouldHideScrollGutterForMarkdownMode && compiledStyles.hideEditorScrollGutterStyle])
146
+ "data-vc": "scroll-gutter"
169
147
  }))))));
170
148
  return /*#__PURE__*/React.createElement("div", {
171
149
  "data-testid": CONTENT_AREA_TEST_ID,
@@ -174,7 +152,7 @@ var Content = /*#__PURE__*/React.forwardRef(function (props, ref) {
174
152
  }, /*#__PURE__*/React.createElement("div", {
175
153
  "data-testid": EDITOR_CONTAINER,
176
154
  "data-editor-container": 'true',
177
- className: ax([compiledStyles.contentAreaWrapper, shouldHideProseMirrorForMarkdownMode && compiledStyles.markdownModeContainerBackgroundStyle])
155
+ className: ax([compiledStyles.contentAreaWrapper])
178
156
  }, props.UNSAFE_containLayout ? /*#__PURE__*/React.createElement("div", {
179
157
  "data-testid": "editor-contain-size-and-layout-wrapper",
180
158
  className: ax([containLayoutStyles.wrapper])
@@ -1,3 +1,3 @@
1
1
  export var name = "@atlaskit/editor-core";
2
2
  // eslint-disable-next-line @atlaskit/volt-strict-mode/no-multiple-exports
3
- export var version = "238.0.2";
3
+ export var version = "238.0.3";
@@ -19,13 +19,11 @@ import type { ViewMode } from '@atlaskit/editor-plugins/editor-viewmode';
19
19
  import type { EditorView } from '@atlaskit/editor-prosemirror/view';
20
20
  import type EditorActions from '../../../actions';
21
21
  import type { ContentComponents, ReactComponents } from '../../../types/editor-props';
22
- import type { MarkdownModePlugin } from '../../../types/markdown-mode';
23
22
  import type { ScrollContainerRefs } from './types';
24
23
  type EditorAPI = PublicPluginAPI<[
25
24
  OptionalPlugin<ContextPanelPlugin>,
26
25
  BasePlugin,
27
- OptionalPlugin<BlockMenuPlugin>,
28
- OptionalPlugin<MarkdownModePlugin>
26
+ OptionalPlugin<BlockMenuPlugin>
29
27
  ]>;
30
28
  interface FullPageEditorContentAreaProps {
31
29
  appearance: EditorAppearance | undefined;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/editor-core",
3
- "version": "238.0.2",
3
+ "version": "238.0.4",
4
4
  "description": "A package contains Atlassian editor core functionality",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"
@@ -77,7 +77,7 @@
77
77
  "@atlaskit/react-compiler-gating": "^0.2.0",
78
78
  "@atlaskit/react-ufo": "^8.1.0",
79
79
  "@atlaskit/task-decision": "^21.12.0",
80
- "@atlaskit/tmp-editor-statsig": "^240.0.0",
80
+ "@atlaskit/tmp-editor-statsig": "^242.0.0",
81
81
  "@atlaskit/tokens": "^20.6.0",
82
82
  "@atlaskit/tooltip": "^24.4.0",
83
83
  "@atlaskit/width-detector": "^7.2.0",
@@ -158,12 +158,12 @@
158
158
  "@atlaskit/media-integration-test-helpers": "workspace:^",
159
159
  "@atlaskit/media-picker": "^73.2.0",
160
160
  "@atlaskit/media-test-helpers": "^43.0.0",
161
- "@atlaskit/media-ui": "^31.3.0",
161
+ "@atlaskit/media-ui": "^31.4.0",
162
162
  "@atlaskit/modal-dialog": "^17.1.0",
163
163
  "@atlaskit/navigation-system": "^11.3.0",
164
164
  "@atlaskit/popper": "^9.4.0",
165
165
  "@atlaskit/portal": "^7.0.0",
166
- "@atlaskit/profilecard": "^27.1.0",
166
+ "@atlaskit/profilecard": "^27.2.0",
167
167
  "@atlaskit/radio": "^10.2.0",
168
168
  "@atlaskit/renderer": "^151.0.0",
169
169
  "@atlaskit/section-message": "^10.2.0",
@@ -184,7 +184,7 @@
184
184
  "@atlassian/search-provider": "^29.0.0",
185
185
  "@atlassian/structured-docs-types": "workspace:^",
186
186
  "@atlassian/testing-library": "^0.12.0",
187
- "@atlassian/user-profile-card": "^1.45.0",
187
+ "@atlassian/user-profile-card": "^1.46.0",
188
188
  "@emotion/jest": "^11.8.0",
189
189
  "@testing-library/react": "^16.3.0",
190
190
  "@types/diff": "^5.0.2",