@atlaskit/editor-plugin-layout 11.0.3 → 11.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/cjs/layoutPlugin.js +22 -6
  3. package/dist/cjs/nodeviews/index.js +49 -1
  4. package/dist/cjs/pm-plugins/actions.js +30 -10
  5. package/dist/cjs/pm-plugins/keymap.js +31 -0
  6. package/dist/cjs/pm-plugins/main.js +90 -21
  7. package/dist/cjs/pm-plugins/resizing.js +29 -4
  8. package/dist/cjs/pm-plugins/utils/layout-column-selection.js +36 -12
  9. package/dist/cjs/ui/LayoutColumnMenu/DeleteColumnDropdownItem.js +25 -5
  10. package/dist/cjs/ui/LayoutColumnMenu/InsertColumnDropdownItem.js +7 -1
  11. package/dist/cjs/ui/LayoutColumnMenu/index.js +51 -4
  12. package/dist/cjs/ui/LayoutSSRReactContextsProvider.js +34 -0
  13. package/dist/cjs/ui/global-styles.js +11 -1
  14. package/dist/es2019/layoutPlugin.js +21 -7
  15. package/dist/es2019/nodeviews/index.js +49 -1
  16. package/dist/es2019/pm-plugins/actions.js +26 -11
  17. package/dist/es2019/pm-plugins/keymap.js +26 -0
  18. package/dist/es2019/pm-plugins/main.js +97 -25
  19. package/dist/es2019/pm-plugins/resizing.js +37 -7
  20. package/dist/es2019/pm-plugins/utils/layout-column-selection.js +33 -8
  21. package/dist/es2019/ui/LayoutColumnMenu/DeleteColumnDropdownItem.js +26 -6
  22. package/dist/es2019/ui/LayoutColumnMenu/InsertColumnDropdownItem.js +8 -2
  23. package/dist/es2019/ui/LayoutColumnMenu/index.js +52 -5
  24. package/dist/es2019/ui/LayoutSSRReactContextsProvider.js +28 -0
  25. package/dist/es2019/ui/global-styles.js +9 -1
  26. package/dist/esm/layoutPlugin.js +23 -7
  27. package/dist/esm/nodeviews/index.js +49 -1
  28. package/dist/esm/pm-plugins/actions.js +30 -10
  29. package/dist/esm/pm-plugins/keymap.js +25 -0
  30. package/dist/esm/pm-plugins/main.js +90 -21
  31. package/dist/esm/pm-plugins/resizing.js +29 -4
  32. package/dist/esm/pm-plugins/utils/layout-column-selection.js +35 -11
  33. package/dist/esm/ui/LayoutColumnMenu/DeleteColumnDropdownItem.js +26 -6
  34. package/dist/esm/ui/LayoutColumnMenu/InsertColumnDropdownItem.js +8 -2
  35. package/dist/esm/ui/LayoutColumnMenu/index.js +52 -5
  36. package/dist/esm/ui/LayoutSSRReactContextsProvider.js +27 -0
  37. package/dist/esm/ui/global-styles.js +11 -1
  38. package/dist/types/layoutPluginType.d.ts +5 -7
  39. package/dist/types/nodeviews/index.d.ts +5 -0
  40. package/dist/types/pm-plugins/actions.d.ts +8 -4
  41. package/dist/types/pm-plugins/keymap.d.ts +10 -0
  42. package/dist/types/pm-plugins/resizing.d.ts +2 -1
  43. package/dist/types/pm-plugins/types.d.ts +2 -0
  44. package/dist/types/pm-plugins/utils/layout-column-selection.d.ts +1 -0
  45. package/dist/types/ui/LayoutSSRReactContextsProvider.d.ts +19 -0
  46. package/dist/types-ts4.5/layoutPluginType.d.ts +5 -7
  47. package/dist/types-ts4.5/nodeviews/index.d.ts +5 -0
  48. package/dist/types-ts4.5/pm-plugins/actions.d.ts +8 -4
  49. package/dist/types-ts4.5/pm-plugins/keymap.d.ts +10 -0
  50. package/dist/types-ts4.5/pm-plugins/resizing.d.ts +2 -1
  51. package/dist/types-ts4.5/pm-plugins/types.d.ts +2 -0
  52. package/dist/types-ts4.5/pm-plugins/utils/layout-column-selection.d.ts +1 -0
  53. package/dist/types-ts4.5/ui/LayoutSSRReactContextsProvider.d.ts +19 -0
  54. package/package.json +5 -5
package/CHANGELOG.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # @atlaskit/editor-plugin-layout
2
2
 
3
+ ## 11.1.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`5182f0ffac22f`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/5182f0ffac22f) -
8
+ Add keyboard shortcuts and danger preview to layout column menu actions.
9
+
10
+ Fix keyboard navigation in the layout column menu.
11
+
12
+ ### Patch Changes
13
+
14
+ - Updated dependencies
15
+
16
+ ## 11.0.4
17
+
18
+ ### Patch Changes
19
+
20
+ - [`1f5c61250d103`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/1f5c61250d103) -
21
+ Updating layout plugin to support ssr streaming
22
+
3
23
  ## 11.0.3
4
24
 
5
25
  ### Patch Changes
@@ -19,6 +19,7 @@ var _expValEquals = require("@atlaskit/tmp-editor-statsig/exp-val-equals");
19
19
  var _expValEqualsNoExposure = require("@atlaskit/tmp-editor-statsig/exp-val-equals-no-exposure");
20
20
  var _experiments = require("@atlaskit/tmp-editor-statsig/experiments");
21
21
  var _actions = require("./pm-plugins/actions");
22
+ var _keymap = _interopRequireDefault(require("./pm-plugins/keymap"));
22
23
  var _main = _interopRequireDefault(require("./pm-plugins/main"));
23
24
  var _pluginKey = require("./pm-plugins/plugin-key");
24
25
  var _resizing = _interopRequireDefault(require("./pm-plugins/resizing"));
@@ -57,7 +58,7 @@ var selectIntoLayoutSection = exports.selectIntoLayoutSection = function selectI
57
58
  return tr;
58
59
  };
59
60
  var layoutPlugin = exports.layoutPlugin = function layoutPlugin(_ref) {
60
- var _api$analytics2, _api$analytics5;
61
+ var _api$analytics2;
61
62
  var _ref$config = _ref.config,
62
63
  options = _ref$config === void 0 ? {} : _ref$config,
63
64
  api = _ref.api;
@@ -109,13 +110,24 @@ var layoutPlugin = exports.layoutPlugin = function layoutPlugin(_ref) {
109
110
  return (0, _main.default)(options, api === null || api === void 0 || (_api$analytics = api.analytics) === null || _api$analytics === void 0 ? void 0 : _api$analytics.actions);
110
111
  }
111
112
  }];
113
+ if ((0, _expValEqualsNoExposure.expValEqualsNoExposure)('platform_editor_layout_column_menu', 'isEnabled', true)) {
114
+ plugins.push({
115
+ name: 'layoutKeymap',
116
+ plugin: function plugin() {
117
+ return (0, _keymap.default)({
118
+ api: api
119
+ });
120
+ }
121
+ });
122
+ }
112
123
  if ((options.editorAppearance === 'full-page' || options.editorAppearance === 'full-width' || options.editorAppearance === 'max' && (0, _experiments.editorExperiment)('platform_editor_layout_column_resize_handle', true)) && api && (0, _experiments.editorExperiment)('advanced_layouts', true)) {
113
124
  plugins.push({
114
125
  name: 'layoutResizing',
115
126
  plugin: function plugin(_ref2) {
116
127
  var portalProviderAPI = _ref2.portalProviderAPI,
117
- eventDispatcher = _ref2.eventDispatcher;
118
- return (0, _resizing.default)(options, api, portalProviderAPI, eventDispatcher);
128
+ eventDispatcher = _ref2.eventDispatcher,
129
+ getIntl = _ref2.getIntl;
130
+ return (0, _resizing.default)(options, api, portalProviderAPI, eventDispatcher, getIntl());
119
131
  }
120
132
  });
121
133
  }
@@ -378,15 +390,19 @@ var layoutPlugin = exports.layoutPlugin = function layoutPlugin(_ref) {
378
390
  return _pluginKey.pluginKey.getState(editorState);
379
391
  },
380
392
  commands: {
381
- deleteLayoutColumn: (0, _actions.deleteLayoutColumn)(api === null || api === void 0 || (_api$analytics5 = api.analytics) === null || _api$analytics5 === void 0 ? void 0 : _api$analytics5.actions, api),
393
+ deleteLayoutColumn: function deleteLayoutColumn(inputMethod) {
394
+ var _api$analytics5;
395
+ return (0, _actions.deleteLayoutColumn)(api === null || api === void 0 || (_api$analytics5 = api.analytics) === null || _api$analytics5 === void 0 ? void 0 : _api$analytics5.actions, api, inputMethod);
396
+ },
382
397
  distributeLayoutColumns: function distributeLayoutColumns(options) {
383
398
  var _api$analytics6;
384
399
  return (0, _actions.distributeLayoutColumns)(api === null || api === void 0 || (_api$analytics6 = api.analytics) === null || _api$analytics6 === void 0 ? void 0 : _api$analytics6.actions, api)(options);
385
400
  },
386
- insertLayoutColumn: function insertLayoutColumn(side) {
401
+ insertLayoutColumn: function insertLayoutColumn(side, inputMethod) {
387
402
  var _api$analytics7;
388
- return (0, _actions.insertLayoutColumn)(side, api === null || api === void 0 || (_api$analytics7 = api.analytics) === null || _api$analytics7 === void 0 ? void 0 : _api$analytics7.actions, api);
403
+ return (0, _actions.insertLayoutColumn)(side, api === null || api === void 0 || (_api$analytics7 = api.analytics) === null || _api$analytics7 === void 0 ? void 0 : _api$analytics7.actions, api, inputMethod);
389
404
  },
405
+ setLayoutColumnDangerPreview: _actions.setLayoutColumnDangerPreview,
390
406
  setLayoutColumnValign: function setLayoutColumnValign(valign) {
391
407
  var _api$analytics8;
392
408
  return (0, _actions.setLayoutColumnValign)(valign, api === null || api === void 0 || (_api$analytics8 = api.analytics) === null || _api$analytics8 === void 0 ? void 0 : _api$analytics8.actions, api);
@@ -13,8 +13,9 @@ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/ge
13
13
  var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
14
14
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
15
  var _react = _interopRequireWildcard(require("react"));
16
+ var _coreUtils = require("@atlaskit/editor-common/core-utils");
16
17
  var _hooks = require("@atlaskit/editor-common/hooks");
17
- var _reactNodeView = _interopRequireDefault(require("@atlaskit/editor-common/react-node-view"));
18
+ var _reactNodeView = _interopRequireWildcard(require("@atlaskit/editor-common/react-node-view"));
18
19
  var _resizer = require("@atlaskit/editor-common/resizer");
19
20
  var _useSharedPluginStateSelector = require("@atlaskit/editor-common/use-shared-plugin-state-selector");
20
21
  var _model = require("@atlaskit/editor-prosemirror/model");
@@ -22,6 +23,7 @@ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
22
23
  var _expValEquals = require("@atlaskit/tmp-editor-statsig/exp-val-equals");
23
24
  var _experiments = require("@atlaskit/tmp-editor-statsig/experiments");
24
25
  var _utils = require("../pm-plugins/utils");
26
+ var _LayoutSSRReactContextsProvider = require("../ui/LayoutSSRReactContextsProvider");
25
27
  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); }
26
28
  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)); }
27
29
  function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
@@ -140,6 +142,7 @@ var LayoutSectionView = exports.LayoutSectionView = /*#__PURE__*/function (_Reac
140
142
  * @param props.eventDispatcher
141
143
  * @param props.pluginInjectionApi
142
144
  * @param props.options
145
+ * @param props.intl
143
146
  * @example
144
147
  */
145
148
  function LayoutSectionView(props) {
@@ -148,6 +151,7 @@ var LayoutSectionView = exports.LayoutSectionView = /*#__PURE__*/function (_Reac
148
151
  _this = _callSuper(this, LayoutSectionView, [props.node, props.view, props.getPos, props.portalProviderAPI, props.eventDispatcher, props]);
149
152
  _this.isEmpty = isEmptyLayout(_this.node);
150
153
  _this.options = props.options;
154
+ _this.intl = props.intl;
151
155
  return _this;
152
156
  }
153
157
 
@@ -160,6 +164,13 @@ var LayoutSectionView = exports.LayoutSectionView = /*#__PURE__*/function (_Reac
160
164
  return (0, _createClass2.default)(LayoutSectionView, [{
161
165
  key: "getContentDOM",
162
166
  value: function getContentDOM() {
167
+ // Build the layout DOM via the schema's toDOM spec. This is the same
168
+ // path used in both CSR and SSR — the only SSR-specific concern is
169
+ // re-attaching `contentDOM` (= the `[data-layout-section]` element)
170
+ // after the portal's renderToStaticMarkup + innerHTML write detaches
171
+ // it. We handle that by stamping `data-ssr-content-dom-ref` on the
172
+ // outer container so `ReactNodeView.init()` can find a re-attach
173
+ // target inside `domRef` after the portal write.
163
174
  var _ref2 = _model.DOMSerializer.renderSpec(document, toDOM(this.node)),
164
175
  container = _ref2.dom,
165
176
  contentDOM = _ref2.contentDOM;
@@ -172,6 +183,20 @@ var LayoutSectionView = exports.LayoutSectionView = /*#__PURE__*/function (_Reac
172
183
  if ((0, _platformFeatureFlags.fg)('platform_editor_adf_with_localid')) {
173
184
  this.layoutDOM.setAttribute('data-local-id', this.node.attrs.localId);
174
185
  }
186
+
187
+ // SSR streaming re-attach note:
188
+ // In SSR, `init()` appends `container` into `domRef`; the portal's
189
+ // renderToStaticMarkup + innerHTML write then wipes `domRef`,
190
+ // detaching the entire subtree (with PM-serialized children inside
191
+ // `[data-layout-section]`). React's `render()` emits a
192
+ // `<NodeViewContentHole/>` placeholder inside `domRef`; the SSR
193
+ // re-attach logic in `init()` finds it via `[data-ssr-content-dom-ref]`
194
+ // and calls `_handleRef`, which appends `contentDOMWrapper` (the
195
+ // detached `container`) back inside the placeholder. The end result
196
+ // is `domRef > NodeViewContentHole > layout-section-container >
197
+ // [data-layout-section] > [data-layout-column] children` — the
198
+ // layout DOM contract is preserved.
199
+
175
200
  return {
176
201
  dom: container,
177
202
  contentDOM: contentDOM
@@ -206,6 +231,29 @@ var LayoutSectionView = exports.LayoutSectionView = /*#__PURE__*/function (_Reac
206
231
  if (this.layoutDOM) {
207
232
  this.layoutDOM.setAttribute('data-empty-layout', Boolean(this.isEmpty).toString());
208
233
  }
234
+
235
+ // SSR streaming path: render only a `<NodeViewContentHole/>` placeholder
236
+ // so ReactNodeView.init()'s SSR re-attach logic can find the marker
237
+ // (`data-ssr-content-dom-ref`) and re-append the detached
238
+ // contentDOMWrapper — which is the FULL layout structure
239
+ // (`layout-section-container > [data-layout-section] > children`) built
240
+ // in `getContentDOM` via DOMSerializer.renderSpec. This avoids
241
+ // duplicating layout structure between getContentDOM and render(), which
242
+ // previously caused an extra wrapping div between `[data-layout-section]`
243
+ // and the `[data-layout-column]` children and broke the flex layout.
244
+ //
245
+ // The BreakoutResizer is intentionally omitted in SSR — it relies on
246
+ // browser-only APIs and contributes no useful static markup. The
247
+ // LayoutSSRReactContextsProvider wraps the placeholder to inject the
248
+ // editor's IntlShape, defending against any descendants that call
249
+ // `useIntl()` during renderToStaticMarkup.
250
+ if ((0, _coreUtils.isSSR)() && (0, _coreUtils.isSSRStreaming)()) {
251
+ return /*#__PURE__*/_react.default.createElement(_LayoutSSRReactContextsProvider.LayoutSSRReactContextsProvider, {
252
+ intl: this.intl
253
+ }, /*#__PURE__*/_react.default.createElement(_reactNodeView.NodeViewContentHole, {
254
+ ref: forwardRef
255
+ }));
256
+ }
209
257
  if ((0, _expValEquals.expValEquals)('platform_editor_breakout_resizing', 'isEnabled', true)) {
210
258
  return null;
211
259
  }
@@ -7,7 +7,7 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.fixColumnStructure = exports.fixColumnSizes = exports.distributeLayoutColumns = exports.deleteLayoutColumn = exports.deleteActiveLayoutNode = exports.createMultiColumnLayoutSection = exports.createDefaultLayoutSection = exports.TWO_COL_LAYOUTS = exports.THREE_COL_LAYOUTS = exports.ONE_COL_LAYOUTS = exports.LAYOUT_COLUMN_INSERT_META = void 0;
8
8
  exports.forceSectionToPresetLayout = forceSectionToPresetLayout;
9
9
  exports.getEffectiveMaxLayoutColumns = getEffectiveMaxLayoutColumns;
10
- exports.toggleLayoutColumnMenu = exports.setPresetLayout = exports.setLayoutColumnValign = exports.insertLayoutColumnsWithAnalytics = exports.insertLayoutColumns = exports.insertLayoutColumn = exports.getSelectedLayout = exports.getPresetLayout = void 0;
10
+ exports.toggleLayoutColumnMenu = exports.setPresetLayout = exports.setLayoutColumnValign = exports.setLayoutColumnDangerPreview = exports.insertLayoutColumnsWithAnalytics = exports.insertLayoutColumns = exports.insertLayoutColumn = exports.getSelectedLayout = exports.getPresetLayout = void 0;
11
11
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
12
12
  var _analytics = require("@atlaskit/editor-common/analytics");
13
13
  var _editorAnalytics = require("@atlaskit/editor-common/editor-analytics");
@@ -581,12 +581,13 @@ function getEffectiveMaxLayoutColumns() {
581
581
  return (0, _experiments.editorExperiment)('advanced_layouts', true) ? _consts.MAX_LAYOUT_COLUMNS : _consts.MAX_STANDARD_LAYOUT_COLUMNS;
582
582
  }
583
583
  var insertLayoutColumnAt = function insertLayoutColumnAt(side, editorAnalyticsAPI) {
584
+ var inputMethod = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _analytics.INPUT_METHOD.LAYOUT_COLUMN_MENU;
584
585
  return function (_ref4) {
585
586
  var tr = _ref4.tr;
586
587
  if (!(0, _expValEqualsNoExposure.expValEqualsNoExposure)('platform_editor_layout_column_menu', 'isEnabled', true)) {
587
588
  return null;
588
589
  }
589
- var selectedLayoutColumnsResult = (0, _layoutColumnSelection.getSelectedLayoutColumnsFromSelection)(tr.selection);
590
+ var selectedLayoutColumnsResult = (0, _layoutColumnSelection.getLayoutColumnsFromContentSelection)(tr.selection);
590
591
  if (!selectedLayoutColumnsResult || selectedLayoutColumnsResult.selectedLayoutColumns.length === 0) {
591
592
  return null;
592
593
  }
@@ -646,7 +647,7 @@ var insertLayoutColumnAt = function insertLayoutColumnAt(side, editorAnalyticsAP
646
647
  attributes: {
647
648
  columnCount: redistributedWidths.length,
648
649
  endIndex: endIndex,
649
- inputMethod: _analytics.INPUT_METHOD.LAYOUT_COLUMN_MENU,
650
+ inputMethod: inputMethod,
650
651
  selectedCount: selectedColumnCount,
651
652
  side: side,
652
653
  startIndex: startIndex
@@ -658,9 +659,10 @@ var insertLayoutColumnAt = function insertLayoutColumnAt(side, editorAnalyticsAP
658
659
  };
659
660
  };
660
661
  var insertLayoutColumn = exports.insertLayoutColumn = function insertLayoutColumn(side, editorAnalyticsAPI, api) {
662
+ var inputMethod = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : _analytics.INPUT_METHOD.LAYOUT_COLUMN_MENU;
661
663
  return function (_ref5) {
662
664
  var tr = _ref5.tr;
663
- var result = insertLayoutColumnAt(side, editorAnalyticsAPI)({
665
+ var result = insertLayoutColumnAt(side, editorAnalyticsAPI, inputMethod)({
664
666
  tr: tr
665
667
  });
666
668
  if (result) {
@@ -801,25 +803,43 @@ var distributeLayoutColumns = exports.distributeLayoutColumns = function distrib
801
803
  };
802
804
  var toggleLayoutColumnMenu = exports.toggleLayoutColumnMenu = function toggleLayoutColumnMenu(_ref11) {
803
805
  var anchorPos = _ref11.anchorPos,
804
- isOpen = _ref11.isOpen;
806
+ isOpen = _ref11.isOpen,
807
+ openedViaKeyboard = _ref11.openedViaKeyboard;
805
808
  return function (_ref12) {
806
809
  var tr = _ref12.tr;
807
810
  tr.setMeta('toggleLayoutColumnMenu', {
808
811
  anchorPos: anchorPos,
809
- isOpen: isOpen
812
+ isOpen: isOpen,
813
+ openedViaKeyboard: openedViaKeyboard
810
814
  });
811
815
  tr.setMeta('scrollIntoView', false);
812
816
  return tr;
813
817
  };
814
818
  };
815
- var deleteLayoutColumn = exports.deleteLayoutColumn = function deleteLayoutColumn(editorAnalyticsAPI, api) {
819
+ var setLayoutColumnDangerPreview = exports.setLayoutColumnDangerPreview = function setLayoutColumnDangerPreview(show) {
816
820
  return function (_ref13) {
817
- var _api$blockControls4;
821
+ var _selectedLayoutColumn;
818
822
  var tr = _ref13.tr;
823
+ var selectedLayoutColumnsResult = (0, _layoutColumnSelection.getSelectedLayoutColumnsFromSelection)(tr.selection);
824
+ var positions = show ? (_selectedLayoutColumn = selectedLayoutColumnsResult === null || selectedLayoutColumnsResult === void 0 ? void 0 : selectedLayoutColumnsResult.selectedLayoutColumns.map(function (_ref14) {
825
+ var pos = _ref14.pos;
826
+ return pos;
827
+ })) !== null && _selectedLayoutColumn !== void 0 ? _selectedLayoutColumn : [] : null;
828
+ tr.setMeta('layoutColumnDangerPreview', positions);
829
+ tr.setMeta('addToHistory', false);
830
+ tr.setMeta('scrollIntoView', false);
831
+ return tr;
832
+ };
833
+ };
834
+ var deleteLayoutColumn = exports.deleteLayoutColumn = function deleteLayoutColumn(editorAnalyticsAPI, api) {
835
+ var inputMethod = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _analytics.INPUT_METHOD.LAYOUT_COLUMN_MENU;
836
+ return function (_ref15) {
837
+ var _api$blockControls4;
838
+ var tr = _ref15.tr;
819
839
  if (!(0, _expValEqualsNoExposure.expValEqualsNoExposure)('platform_editor_layout_column_menu', 'isEnabled', true)) {
820
840
  return null;
821
841
  }
822
- var selectedLayoutColumnsResult = (0, _layoutColumnSelection.getSelectedLayoutColumnsFromSelection)(tr.selection);
842
+ var selectedLayoutColumnsResult = (0, _layoutColumnSelection.getLayoutColumnsFromContentSelection)(tr.selection);
823
843
  if (!selectedLayoutColumnsResult || selectedLayoutColumnsResult.selectedLayoutColumns.length === 0) {
824
844
  return null;
825
845
  }
@@ -836,7 +856,7 @@ var deleteLayoutColumn = exports.deleteLayoutColumn = function deleteLayoutColum
836
856
  attributes: {
837
857
  columnCount: columnCount,
838
858
  endIndex: endIndex,
839
- inputMethod: _analytics.INPUT_METHOD.LAYOUT_COLUMN_MENU,
859
+ inputMethod: inputMethod,
840
860
  selectedCount: selectedLayoutColumns.length,
841
861
  startIndex: startIndex
842
862
  },
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _analytics = require("@atlaskit/editor-common/analytics");
8
+ var _keymaps = require("@atlaskit/editor-common/keymaps");
9
+ var _actions = require("./actions");
10
+ var bindLayoutColumnShortcut = function bindLayoutColumnShortcut(shortcut, command, list) {
11
+ if (!shortcut) {
12
+ return;
13
+ }
14
+ (0, _keymaps.bindKeymapWithEditorCommand)(shortcut, command, list);
15
+ };
16
+
17
+ /**
18
+ * Creates shortcut handlers for layout column actions.
19
+ */
20
+ function keymapPlugin(_ref) {
21
+ var _api$analytics, _api$analytics2, _api$analytics3, _api$analytics4, _api$analytics5;
22
+ var api = _ref.api;
23
+ var list = {};
24
+ bindLayoutColumnShortcut(_keymaps.addColumnBefore.common, (0, _actions.insertLayoutColumn)('left', api === null || api === void 0 || (_api$analytics = api.analytics) === null || _api$analytics === void 0 ? void 0 : _api$analytics.actions, api, _analytics.INPUT_METHOD.KEYBOARD), list);
25
+ bindLayoutColumnShortcut(_keymaps.addColumnBeforeVO.common, (0, _actions.insertLayoutColumn)('left', api === null || api === void 0 || (_api$analytics2 = api.analytics) === null || _api$analytics2 === void 0 ? void 0 : _api$analytics2.actions, api, _analytics.INPUT_METHOD.KEYBOARD), list);
26
+ bindLayoutColumnShortcut(_keymaps.addColumnAfter.common, (0, _actions.insertLayoutColumn)('right', api === null || api === void 0 || (_api$analytics3 = api.analytics) === null || _api$analytics3 === void 0 ? void 0 : _api$analytics3.actions, api, _analytics.INPUT_METHOD.KEYBOARD), list);
27
+ bindLayoutColumnShortcut(_keymaps.addColumnAfterVO.common, (0, _actions.insertLayoutColumn)('right', api === null || api === void 0 || (_api$analytics4 = api.analytics) === null || _api$analytics4 === void 0 ? void 0 : _api$analytics4.actions, api, _analytics.INPUT_METHOD.KEYBOARD), list);
28
+ bindLayoutColumnShortcut(_keymaps.deleteColumn.common, (0, _actions.deleteLayoutColumn)(api === null || api === void 0 || (_api$analytics5 = api.analytics) === null || _api$analytics5 === void 0 ? void 0 : _api$analytics5.actions, api, _analytics.INPUT_METHOD.KEYBOARD), list);
29
+ return (0, _keymaps.keymap)(list);
30
+ }
31
+ var _default = exports.default = keymapPlugin;
@@ -59,6 +59,18 @@ var getNodeDecoration = function getNodeDecoration(pos, node) {
59
59
  class: 'selected'
60
60
  })];
61
61
  };
62
+ var getDangerPreviewDecorations = function getDangerPreviewDecorations(state, positions) {
63
+ var _positions$flatMap;
64
+ return (_positions$flatMap = positions === null || positions === void 0 ? void 0 : positions.flatMap(function (pos) {
65
+ var node = state.doc.nodeAt(pos);
66
+ if (!node) {
67
+ return [];
68
+ }
69
+ return [_view2.Decoration.node(pos, pos + node.nodeSize, {
70
+ class: 'layout-column-danger-preview'
71
+ })];
72
+ })) !== null && _positions$flatMap !== void 0 ? _positions$flatMap : [];
73
+ };
62
74
  var getInitialPluginState = function getInitialPluginState(options, state) {
63
75
  var maybeLayoutSection = (0, _utils3.getMaybeLayoutSection)(state);
64
76
  var allowBreakout = options.allowBreakout || false;
@@ -74,9 +86,52 @@ var getInitialPluginState = function getInitialPluginState(options, state) {
74
86
  allowSingleColumnLayout: allowSingleColumnLayout,
75
87
  isResizing: false,
76
88
  isLayoutColumnMenuOpen: false,
77
- layoutColumnMenuAnchorPos: undefined
89
+ layoutColumnMenuOpenedViaKeyboard: false,
90
+ layoutColumnMenuAnchorPos: undefined,
91
+ dangerPreviewLayoutColumnPositions: undefined
78
92
  };
79
93
  };
94
+ var reduceLayoutColumnMenuState = function reduceLayoutColumnMenuState(pluginState, action) {
95
+ switch (action.type) {
96
+ case 'toggleLayoutColumnMenu':
97
+ {
98
+ var _action$meta = action.meta,
99
+ anchorPos = _action$meta.anchorPos,
100
+ isOpen = _action$meta.isOpen,
101
+ openedViaKeyboard = _action$meta.openedViaKeyboard;
102
+ var nextIsOpen = isOpen !== null && isOpen !== void 0 ? isOpen : !pluginState.isLayoutColumnMenuOpen;
103
+ return _objectSpread(_objectSpread({}, pluginState), {}, {
104
+ isLayoutColumnMenuOpen: nextIsOpen,
105
+ layoutColumnMenuOpenedViaKeyboard: nextIsOpen ? openedViaKeyboard !== null && openedViaKeyboard !== void 0 ? openedViaKeyboard : false : false,
106
+ layoutColumnMenuAnchorPos: nextIsOpen ? anchorPos : undefined,
107
+ dangerPreviewLayoutColumnPositions: nextIsOpen ? pluginState.dangerPreviewLayoutColumnPositions : undefined
108
+ });
109
+ }
110
+ case 'setDangerPreview':
111
+ return _objectSpread(_objectSpread({}, pluginState), {}, {
112
+ dangerPreviewLayoutColumnPositions: action.positions
113
+ });
114
+ case 'clearDangerPreview':
115
+ return _objectSpread(_objectSpread({}, pluginState), {}, {
116
+ dangerPreviewLayoutColumnPositions: undefined
117
+ });
118
+ case 'setResizeState':
119
+ return _objectSpread(_objectSpread({}, pluginState), {}, {
120
+ isResizing: action.isResizing
121
+ });
122
+ case 'syncSelectionState':
123
+ {
124
+ var maybeLayoutSection = (0, _utils3.getMaybeLayoutSection)(action.state);
125
+ return _objectSpread(_objectSpread({}, pluginState), {}, {
126
+ pos: maybeLayoutSection ? maybeLayoutSection.pos : null,
127
+ selectedLayout: (0, _actions.getSelectedLayout)(maybeLayoutSection && maybeLayoutSection.node,
128
+ // Ignored via go/ees005
129
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
130
+ pluginState.selectedLayout)
131
+ });
132
+ }
133
+ }
134
+ };
80
135
 
81
136
  // To prevent a single-column layout,
82
137
  // if a user attempts to delete a layout column and
@@ -123,28 +178,39 @@ var _default = exports.default = function _default(options, editorAnalyticsAPI)
123
178
  return getInitialPluginState(options, state);
124
179
  },
125
180
  apply: function apply(tr, pluginState, oldState, newState) {
126
- var _columnMenuMeta$isOpe, _tr$getMeta, _pluginKey$getState;
181
+ var _tr$getMeta, _pluginKey$getState;
182
+ var nextPluginState = pluginState;
127
183
  var columnMenuMeta = tr.getMeta('toggleLayoutColumnMenu');
128
- var nextPluginState = columnMenuMeta ? _objectSpread(_objectSpread({}, pluginState), {}, {
129
- isLayoutColumnMenuOpen: (_columnMenuMeta$isOpe = columnMenuMeta.isOpen) !== null && _columnMenuMeta$isOpe !== void 0 ? _columnMenuMeta$isOpe : !pluginState.isLayoutColumnMenuOpen,
130
- layoutColumnMenuAnchorPos: columnMenuMeta.isOpen === false ? undefined : columnMenuMeta.anchorPos
131
- }) : pluginState;
184
+ var dangerPreviewMeta = tr.getMeta('layoutColumnDangerPreview');
185
+ if (columnMenuMeta) {
186
+ nextPluginState = reduceLayoutColumnMenuState(nextPluginState, {
187
+ meta: columnMenuMeta,
188
+ type: 'toggleLayoutColumnMenu'
189
+ });
190
+ }
191
+ if (tr.getMeta('layoutColumnDangerPreview') !== undefined) {
192
+ nextPluginState = reduceLayoutColumnMenuState(nextPluginState, {
193
+ positions: dangerPreviewMeta !== null && dangerPreviewMeta !== void 0 ? dangerPreviewMeta : undefined,
194
+ type: 'setDangerPreview'
195
+ });
196
+ }
197
+ if (tr.docChanged) {
198
+ nextPluginState = reduceLayoutColumnMenuState(nextPluginState, {
199
+ type: 'clearDangerPreview'
200
+ });
201
+ }
132
202
  var isResizing = (0, _experiments.editorExperiment)('single_column_layouts', true) ? (_tr$getMeta = tr.getMeta('is-resizer-resizing')) !== null && _tr$getMeta !== void 0 ? _tr$getMeta : (_pluginKey$getState = _pluginKey.pluginKey.getState(oldState)) === null || _pluginKey$getState === void 0 ? void 0 : _pluginKey$getState.isResizing : false;
203
+ nextPluginState = reduceLayoutColumnMenuState(nextPluginState, {
204
+ isResizing: isResizing,
205
+ type: 'setResizeState'
206
+ });
133
207
  if (tr.docChanged || tr.selectionSet) {
134
- var maybeLayoutSection = (0, _utils3.getMaybeLayoutSection)(newState);
135
- var newPluginState = _objectSpread(_objectSpread({}, nextPluginState), {}, {
136
- pos: maybeLayoutSection ? maybeLayoutSection.pos : null,
137
- isResizing: isResizing,
138
- selectedLayout: (0, _actions.getSelectedLayout)(maybeLayoutSection && maybeLayoutSection.node,
139
- // Ignored via go/ees005
140
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
141
- pluginState.selectedLayout)
208
+ return reduceLayoutColumnMenuState(nextPluginState, {
209
+ state: newState,
210
+ type: 'syncSelectionState'
142
211
  });
143
- return newPluginState;
144
212
  }
145
- return _objectSpread(_objectSpread({}, nextPluginState), {}, {
146
- isResizing: isResizing
147
- });
213
+ return nextPluginState;
148
214
  }
149
215
  },
150
216
  props: {
@@ -154,14 +220,17 @@ var _default = exports.default = function _default(options, editorAnalyticsAPI)
154
220
  if ((0, _experiments.editorExperiment)('advanced_layouts', true) && (0, _experiments.editorExperiment)('platform_editor_layout_column_resize_handle', true) && isLayoutResizingPluginAvailable) {
155
221
  var dividerDecorations = (0, _columnResizeDivider.getColumnDividerDecorations)(state, editorViewRef, editorAnalyticsAPI);
156
222
  var selectedDecorations = layoutState.pos !== null ? getNodeDecoration(layoutState.pos, state.doc.nodeAt(layoutState.pos)) : [];
157
- var allDecorations = [].concat((0, _toConsumableArray2.default)(selectedDecorations), (0, _toConsumableArray2.default)(dividerDecorations));
223
+ var _dangerPreviewDecorations = getDangerPreviewDecorations(state, layoutState.dangerPreviewLayoutColumnPositions);
224
+ var allDecorations = [].concat((0, _toConsumableArray2.default)(selectedDecorations), (0, _toConsumableArray2.default)(dividerDecorations), (0, _toConsumableArray2.default)(_dangerPreviewDecorations));
158
225
  if (allDecorations.length > 0) {
159
226
  return _view2.DecorationSet.create(state.doc, allDecorations);
160
227
  }
161
228
  return undefined;
162
229
  }
163
- if (layoutState.pos !== null) {
164
- return _view2.DecorationSet.create(state.doc, getNodeDecoration(layoutState.pos, state.doc.nodeAt(layoutState.pos)));
230
+ var dangerPreviewDecorations = getDangerPreviewDecorations(state, layoutState.dangerPreviewLayoutColumnPositions);
231
+ if (layoutState.pos !== null || dangerPreviewDecorations.length > 0) {
232
+ var _selectedDecorations = layoutState.pos !== null ? getNodeDecoration(layoutState.pos, state.doc.nodeAt(layoutState.pos)) : [];
233
+ return _view2.DecorationSet.create(state.doc, [].concat((0, _toConsumableArray2.default)(_selectedDecorations), (0, _toConsumableArray2.default)(dangerPreviewDecorations)));
165
234
  }
166
235
  return undefined;
167
236
  },
@@ -8,6 +8,8 @@ exports.pluginKey = exports.default = void 0;
8
8
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
9
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
10
10
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
11
+ var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
12
+ var _coreUtils = require("@atlaskit/editor-common/core-utils");
11
13
  var _safePlugin = require("@atlaskit/editor-common/safe-plugin");
12
14
  var _model = require("@atlaskit/editor-prosemirror/model");
13
15
  var _state = require("@atlaskit/editor-prosemirror/state");
@@ -26,6 +28,28 @@ var pluginKey = exports.pluginKey = new _state.PluginKey('layoutResizingPlugin')
26
28
  * (e.g. setting flex-basis to give real-time visual feedback without dispatching
27
29
  * PM transactions) are not "corrected" back by ProseMirror's DOM reconciliation.
28
30
  */
31
+ var isLayoutElementLike = function isLayoutElementLike(element) {
32
+ if ((0, _coreUtils.isSSR)() && (0, _coreUtils.isSSRStreaming)()) {
33
+ // In SSR environments, `HTMLElement` is undefined globally so a plain
34
+ // `instanceof HTMLElement` check is always `false`. That makes the
35
+ // `DOMSerializer.renderSpec(...)` result get rejected by the guard below and
36
+ // the NodeView falls back to a bare `<div>`, losing every schema-defined
37
+ // attribute (`data-layout-column`, `style="flex-basis:..."`,
38
+ // `data-column-width`, plus the inner `<div data-layout-content="true">`
39
+ // wrapper) and breaking the layout's flex sizing in SSR output.
40
+ //
41
+ // To unblock SSR streaming without changing CSR semantics, we gate the check:
42
+ // - In SSR (and only when `platform_editor_editor_ssr_streaming` is enabled),
43
+ // use a duck-typed check that mirrors `safe-plugin`'s `isHTMLElement`.
44
+ // - Everywhere else, keep the original `instanceof HTMLElement` check exactly
45
+ // as it was so we don't accidentally widen acceptance in CSR.
46
+ if (element === null || element === undefined) {
47
+ return false;
48
+ }
49
+ return (0, _typeof2.default)(element) === 'object' && 'innerHTML' in element && 'style' in element && 'classList' in element;
50
+ }
51
+ return element instanceof HTMLElement;
52
+ };
29
53
  var LayoutColumnView = /*#__PURE__*/function () {
30
54
  function LayoutColumnView(node, view, getPos) {
31
55
  (0, _classCallCheck2.default)(this, LayoutColumnView);
@@ -43,7 +67,7 @@ var LayoutColumnView = /*#__PURE__*/function () {
43
67
  var _DOMSerializer$render = _model.DOMSerializer.renderSpec(document, nodeType.spec.toDOM(node)),
44
68
  dom = _DOMSerializer$render.dom,
45
69
  contentDOM = _DOMSerializer$render.contentDOM;
46
- if (!(dom instanceof HTMLElement) || !(contentDOM instanceof HTMLElement)) {
70
+ if (!isLayoutElementLike(dom) || !isLayoutElementLike(contentDOM)) {
47
71
  var _fallbackDiv = document.createElement('div');
48
72
  this.dom = _fallbackDiv;
49
73
  this.contentDOM = _fallbackDiv;
@@ -71,7 +95,7 @@ var LayoutColumnView = /*#__PURE__*/function () {
71
95
  }
72
96
  }]);
73
97
  }();
74
- var _default = exports.default = function _default(options, pluginInjectionApi, portalProviderAPI, eventDispatcher) {
98
+ var _default = exports.default = function _default(options, pluginInjectionApi, portalProviderAPI, eventDispatcher, intl) {
75
99
  return new _safePlugin.SafePlugin({
76
100
  key: pluginKey,
77
101
  props: {
@@ -84,10 +108,11 @@ var _default = exports.default = function _default(options, pluginInjectionApi,
84
108
  portalProviderAPI: portalProviderAPI,
85
109
  eventDispatcher: eventDispatcher,
86
110
  pluginInjectionApi: pluginInjectionApi,
87
- options: options
111
+ options: options,
112
+ intl: intl
88
113
  }).init();
89
114
  }
90
- }, (0, _experiments.editorExperiment)('platform_editor_layout_column_resize_handle', true) ? {
115
+ }, (0, _experiments.editorExperiment)('platform_editor_layout_column_resize_handle', true) || (0, _coreUtils.isSSR)() && (0, _coreUtils.isSSRStreaming)() ? {
91
116
  layoutColumn: function layoutColumn(node, view, getPos) {
92
117
  return new LayoutColumnView(node, view, getPos);
93
118
  }
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.getSelectedLayoutColumnsFromSelection = exports.getLayoutColumnValign = exports.getLayoutColumnMenuAnchorPos = exports.getAllLayoutColumnsFromSelection = void 0;
6
+ exports.getSelectedLayoutColumnsFromSelection = exports.getLayoutColumnsFromContentSelection = exports.getLayoutColumnValign = exports.getLayoutColumnMenuAnchorPos = exports.getAllLayoutColumnsFromSelection = void 0;
7
7
  var _state = require("@atlaskit/editor-prosemirror/state");
8
8
  var _utils = require("@atlaskit/editor-prosemirror/utils");
9
9
  var findLayoutSectionFromSelection = function findLayoutSectionFromSelection(selection) {
@@ -28,7 +28,7 @@ var findLayoutColumnsFromLayoutSection = function findLayoutColumnsFromLayoutSec
28
28
  };
29
29
  });
30
30
  };
31
- var getSelectedLayoutColumnsFromSelection = exports.getSelectedLayoutColumnsFromSelection = function getSelectedLayoutColumnsFromSelection(selection) {
31
+ var getSelectedLayoutColumns = function getSelectedLayoutColumns(selection, isColumnSelected) {
32
32
  var layoutSection = findLayoutSectionFromSelection(selection);
33
33
  if (!layoutSection) {
34
34
  return undefined;
@@ -41,17 +41,15 @@ var getSelectedLayoutColumnsFromSelection = exports.getSelectedLayoutColumnsFrom
41
41
  }
42
42
  var startIndex = -1;
43
43
  var endIndex = -1;
44
- var selectedLayoutColumns = allLayoutColumns.filter(function (_ref2, index) {
45
- var node = _ref2.node,
46
- pos = _ref2.pos;
47
- var isSelected = selection.from <= pos && selection.to >= pos + node.nodeSize;
48
- if (isSelected) {
44
+ var selectedLayoutColumns = allLayoutColumns.filter(function (column, index) {
45
+ if (isColumnSelected(column, index)) {
49
46
  if (startIndex === -1) {
50
47
  startIndex = index;
51
48
  }
52
49
  endIndex = index;
50
+ return true;
53
51
  }
54
- return isSelected;
52
+ return false;
55
53
  });
56
54
  return {
57
55
  layoutSectionNode: layoutSectionNode,
@@ -61,6 +59,32 @@ var getSelectedLayoutColumnsFromSelection = exports.getSelectedLayoutColumnsFrom
61
59
  endIndex: endIndex
62
60
  };
63
61
  };
62
+ var getSelectedLayoutColumnsFromSelection = exports.getSelectedLayoutColumnsFromSelection = function getSelectedLayoutColumnsFromSelection(selection) {
63
+ return getSelectedLayoutColumns(selection, function (_ref2) {
64
+ var node = _ref2.node,
65
+ pos = _ref2.pos;
66
+ // NodeSelection on a layout column is clearly selected.
67
+ if (selection instanceof _state.NodeSelection && selection.node === node) {
68
+ return true;
69
+ }
70
+
71
+ // For TextSelection, only count columns that are fully contained within the selection
72
+ // (not partial text selections inside a column).
73
+ var nodeEndPos = pos + node.nodeSize;
74
+ return !selection.empty && selection.from <= pos && selection.to >= nodeEndPos;
75
+ });
76
+ };
77
+ var getLayoutColumnsFromContentSelection = exports.getLayoutColumnsFromContentSelection = function getLayoutColumnsFromContentSelection(selection) {
78
+ return getSelectedLayoutColumns(selection, function (_ref3) {
79
+ var node = _ref3.node,
80
+ pos = _ref3.pos;
81
+ if (selection instanceof _state.NodeSelection && selection.node === node) {
82
+ return true;
83
+ }
84
+ var nodeEndPos = pos + node.nodeSize;
85
+ return selection.empty ? selection.from > pos && selection.from < nodeEndPos : selection.from < nodeEndPos && selection.to > pos;
86
+ });
87
+ };
64
88
  var getAllLayoutColumnsFromSelection = exports.getAllLayoutColumnsFromSelection = function getAllLayoutColumnsFromSelection(selection) {
65
89
  var layoutSection = findLayoutSectionFromSelection(selection);
66
90
  if (!layoutSection) {
@@ -79,8 +103,8 @@ var getAllLayoutColumnsFromSelection = exports.getAllLayoutColumnsFromSelection
79
103
  };
80
104
  };
81
105
  var getLayoutColumnValign = exports.getLayoutColumnValign = function getLayoutColumnValign(layoutColumn) {
82
- var _ref3;
83
- return layoutColumn ? (_ref3 = layoutColumn.attrs.valign) !== null && _ref3 !== void 0 ? _ref3 : 'top' : undefined;
106
+ var _ref4;
107
+ return layoutColumn ? (_ref4 = layoutColumn.attrs.valign) !== null && _ref4 !== void 0 ? _ref4 : 'top' : undefined;
84
108
  };
85
109
  var getLayoutColumnMenuAnchorPos = exports.getLayoutColumnMenuAnchorPos = function getLayoutColumnMenuAnchorPos(selection, anchorPosFromHandle) {
86
110
  var _clickedSelectedColum, _selectedLayoutColumn;
@@ -88,8 +112,8 @@ var getLayoutColumnMenuAnchorPos = exports.getLayoutColumnMenuAnchorPos = functi
88
112
  if (!selectedLayoutColumns) {
89
113
  return undefined;
90
114
  }
91
- var clickedSelectedColumn = selectedLayoutColumns.selectedLayoutColumns.find(function (_ref4) {
92
- var pos = _ref4.pos;
115
+ var clickedSelectedColumn = selectedLayoutColumns.selectedLayoutColumns.find(function (_ref5) {
116
+ var pos = _ref5.pos;
93
117
  return pos === anchorPosFromHandle;
94
118
  });
95
119
  return (_clickedSelectedColum = clickedSelectedColumn === null || clickedSelectedColumn === void 0 ? void 0 : clickedSelectedColumn.pos) !== null && _clickedSelectedColum !== void 0 ? _clickedSelectedColum : (_selectedLayoutColumn = selectedLayoutColumns.selectedLayoutColumns[0]) === null || _selectedLayoutColumn === void 0 ? void 0 : _selectedLayoutColumn.pos;