@atlaskit/editor-plugin-table 22.4.14 → 22.4.16

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 (213) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/dist/cjs/nodeviews/TableComponent.js +2 -2
  3. package/dist/cjs/nodeviews/table.js +2 -2
  4. package/dist/cjs/nodeviews/toDOM.js +2 -2
  5. package/dist/cjs/pm-plugins/commands/active-table-menu.js +51 -0
  6. package/dist/cjs/pm-plugins/commands/commands-with-analytics.js +42 -10
  7. package/dist/cjs/pm-plugins/commands/index.js +13 -0
  8. package/dist/cjs/pm-plugins/drag-and-drop/commands-with-analytics.js +2 -0
  9. package/dist/cjs/pm-plugins/drag-and-drop/plugin.js +4 -0
  10. package/dist/cjs/pm-plugins/handlers.js +8 -1
  11. package/dist/cjs/pm-plugins/main.js +4 -3
  12. package/dist/cjs/pm-plugins/reducer.js +2 -0
  13. package/dist/cjs/pm-plugins/table-width.js +2 -2
  14. package/dist/cjs/pm-plugins/transforms/content-mode.js +3 -2
  15. package/dist/cjs/pm-plugins/utils/tableMode/apply-measured-width-to-all-tables.js +70 -0
  16. package/dist/cjs/pm-plugins/utils/tableMode/apply-measured-width-to-selected-table.js +41 -0
  17. package/dist/cjs/pm-plugins/utils/tableMode/is-content-mode-supported.js +12 -0
  18. package/dist/cjs/pm-plugins/utils/tableMode/measure-table-with-auto-layout.js +113 -0
  19. package/dist/cjs/pm-plugins/utils/tableMode/smart-adjust/constants.js +10 -0
  20. package/dist/cjs/pm-plugins/utils/tableMode/smart-adjust/distribute-column-widths.js +83 -0
  21. package/dist/cjs/pm-plugins/utils/tableMode/smart-adjust/run-smart-adjust.js +56 -0
  22. package/dist/cjs/tablePlugin.js +1 -0
  23. package/dist/cjs/ui/ContentComponent.js +1 -1
  24. package/dist/cjs/ui/FloatingContextualButton/index.js +28 -9
  25. package/dist/cjs/ui/FloatingContextualMenu/CellMenuPopup.js +58 -73
  26. package/dist/cjs/ui/FloatingContextualMenu/index.js +26 -12
  27. package/dist/cjs/ui/FloatingDragMenu/index.js +21 -8
  28. package/dist/cjs/ui/TableFloatingColumnControls/ColumnControls/index.js +13 -5
  29. package/dist/cjs/ui/TableFloatingControls/RowControls/DragControls.js +14 -5
  30. package/dist/cjs/ui/TableMenu/cell/getCellMenuComponents.js +8 -3
  31. package/dist/cjs/ui/TableMenu/cell/items/MergeCellsItem.js +16 -1
  32. package/dist/cjs/ui/TableMenu/cell/items/SplitCellItem.js +16 -1
  33. package/dist/cjs/ui/TableMenu/column/items/AddColumnLeftItem.js +4 -4
  34. package/dist/cjs/ui/TableMenu/column/items/AddColumnRightItem.js +4 -4
  35. package/dist/cjs/ui/TableMenu/column/items/DeleteColumnItem.js +2 -3
  36. package/dist/cjs/ui/TableMenu/column/items/DistributeColumnsItem.js +2 -3
  37. package/dist/cjs/ui/TableMenu/column/items/HeaderColumnToggleItem.js +2 -3
  38. package/dist/cjs/ui/TableMenu/column/items/MoveColumnLeftItem.js +2 -3
  39. package/dist/cjs/ui/TableMenu/column/items/MoveColumnRightItem.js +2 -3
  40. package/dist/cjs/ui/TableMenu/column/items/SortDecreasingItem.js +2 -3
  41. package/dist/cjs/ui/TableMenu/column/items/SortIncreasingItem.js +2 -3
  42. package/dist/cjs/ui/TableMenu/row/items/AddRowAboveItem.js +4 -4
  43. package/dist/cjs/ui/TableMenu/row/items/AddRowBelowItem.js +4 -4
  44. package/dist/cjs/ui/TableMenu/row/items/DeleteRowItem.js +2 -3
  45. package/dist/cjs/ui/TableMenu/row/items/HeaderRowToggleItem.js +2 -3
  46. package/dist/cjs/ui/TableMenu/row/items/MoveRowDownItem.js +2 -3
  47. package/dist/cjs/ui/TableMenu/row/items/MoveRowUpItem.js +2 -3
  48. package/dist/cjs/ui/TableMenu/row/items/NumberedRowsToggleItem.js +4 -3
  49. package/dist/cjs/ui/TableMenu/shared/TableMenu.compiled.css +0 -2
  50. package/dist/cjs/ui/TableMenu/shared/TableMenu.js +8 -9
  51. package/dist/cjs/ui/TableMenu/shared/getSharedItems.js +3 -1
  52. package/dist/cjs/ui/TableMenu/shared/getTableMenuComponents.js +1 -1
  53. package/dist/cjs/ui/TableMenu/shared/items/BackgroundColorItem.js +30 -4
  54. package/dist/cjs/ui/TableMenu/shared/items/ClearCellsItem.js +4 -3
  55. package/dist/cjs/ui/toolbar.js +4 -3
  56. package/dist/es2019/nodeviews/TableComponent.js +1 -1
  57. package/dist/es2019/nodeviews/table.js +1 -1
  58. package/dist/es2019/nodeviews/toDOM.js +1 -1
  59. package/dist/es2019/pm-plugins/commands/active-table-menu.js +39 -0
  60. package/dist/es2019/pm-plugins/commands/commands-with-analytics.js +31 -2
  61. package/dist/es2019/pm-plugins/commands/index.js +1 -0
  62. package/dist/es2019/pm-plugins/drag-and-drop/commands-with-analytics.js +2 -0
  63. package/dist/es2019/pm-plugins/drag-and-drop/plugin.js +4 -0
  64. package/dist/es2019/pm-plugins/handlers.js +8 -1
  65. package/dist/es2019/pm-plugins/main.js +2 -1
  66. package/dist/es2019/pm-plugins/reducer.js +5 -0
  67. package/dist/es2019/pm-plugins/table-width.js +1 -1
  68. package/dist/es2019/pm-plugins/transforms/content-mode.js +2 -1
  69. package/dist/es2019/pm-plugins/utils/tableMode/apply-measured-width-to-all-tables.js +70 -0
  70. package/dist/es2019/pm-plugins/utils/tableMode/apply-measured-width-to-selected-table.js +38 -0
  71. package/dist/es2019/pm-plugins/utils/tableMode/is-content-mode-supported.js +7 -0
  72. package/dist/es2019/pm-plugins/utils/tableMode/measure-table-with-auto-layout.js +97 -0
  73. package/dist/es2019/pm-plugins/utils/tableMode/smart-adjust/constants.js +4 -0
  74. package/dist/es2019/pm-plugins/utils/tableMode/smart-adjust/distribute-column-widths.js +63 -0
  75. package/dist/es2019/pm-plugins/utils/tableMode/smart-adjust/run-smart-adjust.js +47 -0
  76. package/dist/es2019/tablePlugin.js +1 -0
  77. package/dist/es2019/ui/ContentComponent.js +1 -1
  78. package/dist/es2019/ui/FloatingContextualButton/index.js +29 -9
  79. package/dist/es2019/ui/FloatingContextualMenu/CellMenuPopup.js +60 -77
  80. package/dist/es2019/ui/FloatingContextualMenu/index.js +27 -12
  81. package/dist/es2019/ui/FloatingDragMenu/index.js +22 -8
  82. package/dist/es2019/ui/TableFloatingColumnControls/ColumnControls/index.js +12 -4
  83. package/dist/es2019/ui/TableFloatingControls/RowControls/DragControls.js +13 -4
  84. package/dist/es2019/ui/TableMenu/cell/getCellMenuComponents.js +9 -3
  85. package/dist/es2019/ui/TableMenu/cell/items/MergeCellsItem.js +18 -2
  86. package/dist/es2019/ui/TableMenu/cell/items/SplitCellItem.js +18 -2
  87. package/dist/es2019/ui/TableMenu/column/items/AddColumnLeftItem.js +3 -3
  88. package/dist/es2019/ui/TableMenu/column/items/AddColumnRightItem.js +3 -3
  89. package/dist/es2019/ui/TableMenu/column/items/DeleteColumnItem.js +2 -3
  90. package/dist/es2019/ui/TableMenu/column/items/DistributeColumnsItem.js +2 -3
  91. package/dist/es2019/ui/TableMenu/column/items/HeaderColumnToggleItem.js +2 -3
  92. package/dist/es2019/ui/TableMenu/column/items/MoveColumnLeftItem.js +2 -3
  93. package/dist/es2019/ui/TableMenu/column/items/MoveColumnRightItem.js +2 -3
  94. package/dist/es2019/ui/TableMenu/column/items/SortDecreasingItem.js +2 -3
  95. package/dist/es2019/ui/TableMenu/column/items/SortIncreasingItem.js +2 -3
  96. package/dist/es2019/ui/TableMenu/row/items/AddRowAboveItem.js +3 -3
  97. package/dist/es2019/ui/TableMenu/row/items/AddRowBelowItem.js +3 -3
  98. package/dist/es2019/ui/TableMenu/row/items/DeleteRowItem.js +2 -3
  99. package/dist/es2019/ui/TableMenu/row/items/HeaderRowToggleItem.js +2 -3
  100. package/dist/es2019/ui/TableMenu/row/items/MoveRowDownItem.js +2 -3
  101. package/dist/es2019/ui/TableMenu/row/items/MoveRowUpItem.js +2 -3
  102. package/dist/es2019/ui/TableMenu/row/items/NumberedRowsToggleItem.js +3 -2
  103. package/dist/es2019/ui/TableMenu/shared/TableMenu.compiled.css +0 -2
  104. package/dist/es2019/ui/TableMenu/shared/TableMenu.js +8 -9
  105. package/dist/es2019/ui/TableMenu/shared/getSharedItems.js +3 -1
  106. package/dist/es2019/ui/TableMenu/shared/getTableMenuComponents.js +1 -1
  107. package/dist/es2019/ui/TableMenu/shared/items/BackgroundColorItem.js +33 -4
  108. package/dist/es2019/ui/TableMenu/shared/items/ClearCellsItem.js +4 -3
  109. package/dist/es2019/ui/toolbar.js +2 -1
  110. package/dist/esm/nodeviews/TableComponent.js +1 -1
  111. package/dist/esm/nodeviews/table.js +1 -1
  112. package/dist/esm/nodeviews/toDOM.js +1 -1
  113. package/dist/esm/pm-plugins/commands/active-table-menu.js +45 -0
  114. package/dist/esm/pm-plugins/commands/commands-with-analytics.js +41 -10
  115. package/dist/esm/pm-plugins/commands/index.js +1 -0
  116. package/dist/esm/pm-plugins/drag-and-drop/commands-with-analytics.js +2 -0
  117. package/dist/esm/pm-plugins/drag-and-drop/plugin.js +4 -0
  118. package/dist/esm/pm-plugins/handlers.js +8 -1
  119. package/dist/esm/pm-plugins/main.js +2 -1
  120. package/dist/esm/pm-plugins/reducer.js +2 -0
  121. package/dist/esm/pm-plugins/table-width.js +1 -1
  122. package/dist/esm/pm-plugins/transforms/content-mode.js +2 -1
  123. package/dist/esm/pm-plugins/utils/tableMode/apply-measured-width-to-all-tables.js +65 -0
  124. package/dist/esm/pm-plugins/utils/tableMode/apply-measured-width-to-selected-table.js +36 -0
  125. package/dist/esm/pm-plugins/utils/tableMode/is-content-mode-supported.js +6 -0
  126. package/dist/esm/pm-plugins/utils/tableMode/measure-table-with-auto-layout.js +107 -0
  127. package/dist/esm/pm-plugins/utils/tableMode/smart-adjust/constants.js +4 -0
  128. package/dist/esm/pm-plugins/utils/tableMode/smart-adjust/distribute-column-widths.js +77 -0
  129. package/dist/esm/pm-plugins/utils/tableMode/smart-adjust/run-smart-adjust.js +49 -0
  130. package/dist/esm/tablePlugin.js +1 -0
  131. package/dist/esm/ui/ContentComponent.js +1 -1
  132. package/dist/esm/ui/FloatingContextualButton/index.js +29 -10
  133. package/dist/esm/ui/FloatingContextualMenu/CellMenuPopup.js +60 -75
  134. package/dist/esm/ui/FloatingContextualMenu/index.js +26 -12
  135. package/dist/esm/ui/FloatingDragMenu/index.js +21 -8
  136. package/dist/esm/ui/TableFloatingColumnControls/ColumnControls/index.js +12 -4
  137. package/dist/esm/ui/TableFloatingControls/RowControls/DragControls.js +13 -4
  138. package/dist/esm/ui/TableMenu/cell/getCellMenuComponents.js +8 -3
  139. package/dist/esm/ui/TableMenu/cell/items/MergeCellsItem.js +16 -2
  140. package/dist/esm/ui/TableMenu/cell/items/SplitCellItem.js +16 -2
  141. package/dist/esm/ui/TableMenu/column/items/AddColumnLeftItem.js +4 -4
  142. package/dist/esm/ui/TableMenu/column/items/AddColumnRightItem.js +4 -4
  143. package/dist/esm/ui/TableMenu/column/items/DeleteColumnItem.js +2 -3
  144. package/dist/esm/ui/TableMenu/column/items/DistributeColumnsItem.js +2 -3
  145. package/dist/esm/ui/TableMenu/column/items/HeaderColumnToggleItem.js +2 -3
  146. package/dist/esm/ui/TableMenu/column/items/MoveColumnLeftItem.js +2 -3
  147. package/dist/esm/ui/TableMenu/column/items/MoveColumnRightItem.js +2 -3
  148. package/dist/esm/ui/TableMenu/column/items/SortDecreasingItem.js +2 -3
  149. package/dist/esm/ui/TableMenu/column/items/SortIncreasingItem.js +2 -3
  150. package/dist/esm/ui/TableMenu/row/items/AddRowAboveItem.js +4 -4
  151. package/dist/esm/ui/TableMenu/row/items/AddRowBelowItem.js +4 -4
  152. package/dist/esm/ui/TableMenu/row/items/DeleteRowItem.js +2 -3
  153. package/dist/esm/ui/TableMenu/row/items/HeaderRowToggleItem.js +2 -3
  154. package/dist/esm/ui/TableMenu/row/items/MoveRowDownItem.js +2 -3
  155. package/dist/esm/ui/TableMenu/row/items/MoveRowUpItem.js +2 -3
  156. package/dist/esm/ui/TableMenu/row/items/NumberedRowsToggleItem.js +4 -3
  157. package/dist/esm/ui/TableMenu/shared/TableMenu.compiled.css +0 -2
  158. package/dist/esm/ui/TableMenu/shared/TableMenu.js +8 -9
  159. package/dist/esm/ui/TableMenu/shared/getSharedItems.js +3 -1
  160. package/dist/esm/ui/TableMenu/shared/getTableMenuComponents.js +1 -1
  161. package/dist/esm/ui/TableMenu/shared/items/BackgroundColorItem.js +30 -4
  162. package/dist/esm/ui/TableMenu/shared/items/ClearCellsItem.js +4 -3
  163. package/dist/esm/ui/toolbar.js +2 -1
  164. package/dist/types/entry-points/types.d.ts +1 -1
  165. package/dist/types/pm-plugins/commands/active-table-menu.d.ts +6 -0
  166. package/dist/types/pm-plugins/commands/commands-with-analytics.d.ts +3 -1
  167. package/dist/types/pm-plugins/commands/index.d.ts +1 -0
  168. package/dist/types/pm-plugins/transforms/content-mode.d.ts +1 -0
  169. package/dist/types/pm-plugins/utils/tableMode/apply-measured-width-to-all-tables.d.ts +8 -0
  170. package/dist/types/pm-plugins/utils/tableMode/apply-measured-width-to-selected-table.d.ts +6 -0
  171. package/dist/types/pm-plugins/utils/tableMode/is-content-mode-supported.d.ts +7 -0
  172. package/dist/types/pm-plugins/utils/tableMode/measure-table-with-auto-layout.d.ts +2 -0
  173. package/dist/types/pm-plugins/utils/tableMode/smart-adjust/constants.d.ts +4 -0
  174. package/dist/types/pm-plugins/utils/tableMode/smart-adjust/distribute-column-widths.d.ts +8 -0
  175. package/dist/types/pm-plugins/utils/tableMode/smart-adjust/run-smart-adjust.d.ts +7 -0
  176. package/dist/types/types/index.d.ts +21 -1
  177. package/dist/types/ui/FloatingContextualButton/index.d.ts +2 -0
  178. package/dist/types/ui/FloatingContextualMenu/CellMenuPopup.d.ts +7 -5
  179. package/dist/types/ui/FloatingContextualMenu/index.d.ts +0 -1
  180. package/dist/types/ui/TableMenu/cell/getCellMenuComponents.d.ts +2 -1
  181. package/dist/types/ui/TableMenu/cell/items/MergeCellsItem.d.ts +2 -1
  182. package/dist/types/ui/TableMenu/cell/items/SplitCellItem.d.ts +2 -1
  183. package/dist/types/ui/TableMenu/column/getColumnMenuComponents.d.ts +1 -1
  184. package/dist/types/ui/TableMenu/shared/TableMenuContext.d.ts +2 -0
  185. package/dist/types/ui/TableMenu/shared/items/BackgroundColorItem.d.ts +2 -1
  186. package/dist/types-ts4.5/entry-points/types.d.ts +1 -1
  187. package/dist/types-ts4.5/pm-plugins/commands/active-table-menu.d.ts +6 -0
  188. package/dist/types-ts4.5/pm-plugins/commands/commands-with-analytics.d.ts +3 -1
  189. package/dist/types-ts4.5/pm-plugins/commands/index.d.ts +1 -0
  190. package/dist/types-ts4.5/pm-plugins/transforms/content-mode.d.ts +1 -0
  191. package/dist/types-ts4.5/pm-plugins/utils/tableMode/apply-measured-width-to-all-tables.d.ts +8 -0
  192. package/dist/types-ts4.5/pm-plugins/utils/tableMode/apply-measured-width-to-selected-table.d.ts +6 -0
  193. package/dist/types-ts4.5/pm-plugins/utils/tableMode/is-content-mode-supported.d.ts +7 -0
  194. package/dist/types-ts4.5/pm-plugins/utils/tableMode/measure-table-with-auto-layout.d.ts +2 -0
  195. package/dist/types-ts4.5/pm-plugins/utils/tableMode/smart-adjust/constants.d.ts +4 -0
  196. package/dist/types-ts4.5/pm-plugins/utils/tableMode/smart-adjust/distribute-column-widths.d.ts +8 -0
  197. package/dist/types-ts4.5/pm-plugins/utils/tableMode/smart-adjust/run-smart-adjust.d.ts +7 -0
  198. package/dist/types-ts4.5/types/index.d.ts +21 -1
  199. package/dist/types-ts4.5/ui/FloatingContextualButton/index.d.ts +2 -0
  200. package/dist/types-ts4.5/ui/FloatingContextualMenu/CellMenuPopup.d.ts +7 -5
  201. package/dist/types-ts4.5/ui/FloatingContextualMenu/index.d.ts +0 -1
  202. package/dist/types-ts4.5/ui/TableMenu/cell/getCellMenuComponents.d.ts +2 -1
  203. package/dist/types-ts4.5/ui/TableMenu/cell/items/MergeCellsItem.d.ts +2 -1
  204. package/dist/types-ts4.5/ui/TableMenu/cell/items/SplitCellItem.d.ts +2 -1
  205. package/dist/types-ts4.5/ui/TableMenu/column/getColumnMenuComponents.d.ts +1 -1
  206. package/dist/types-ts4.5/ui/TableMenu/shared/TableMenuContext.d.ts +2 -0
  207. package/dist/types-ts4.5/ui/TableMenu/shared/items/BackgroundColorItem.d.ts +2 -1
  208. package/package.json +10 -7
  209. package/dist/cjs/pm-plugins/utils/tableMode.js +0 -162
  210. package/dist/es2019/pm-plugins/utils/tableMode.js +0 -158
  211. package/dist/esm/pm-plugins/utils/tableMode.js +0 -156
  212. package/dist/types/pm-plugins/utils/tableMode.d.ts +0 -26
  213. package/dist/types-ts4.5/pm-plugins/utils/tableMode.d.ts +0 -26
@@ -0,0 +1,113 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.measureTableWithAutoLayout = void 0;
7
+ var _styles = require("@atlaskit/editor-common/styles");
8
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
9
+ var _contentMode = require("../../transforms/content-mode");
10
+ var _runSmartAdjust = require("./smart-adjust/run-smart-adjust");
11
+ var measureTableWithAutoLayout = exports.measureTableWithAutoLayout = function measureTableWithAutoLayout(tableRef, editorContainerWidth) {
12
+ var cols = Array.from(tableRef.querySelectorAll(':scope > colgroup > col'));
13
+ var contentWrap = tableRef.closest(".".concat(_styles.TableSharedCssClassName.TABLE_VIEW_CONTENT_WRAP));
14
+ var resizerContainer = contentWrap === null || contentWrap === void 0 ? void 0 : contentWrap.querySelector(".".concat(_styles.TableSharedCssClassName.TABLE_RESIZER_CONTAINER));
15
+ var resizerItem = resizerContainer === null || resizerContainer === void 0 ? void 0 : resizerContainer.querySelector('.resizer-item.display-handle');
16
+ var prevTableWidth = tableRef.style.width;
17
+ var prevTableLayout = tableRef.style.tableLayout;
18
+ var prevColWidths = cols.map(function (col) {
19
+ return col.style.width;
20
+ });
21
+ var prevResizerItemWidth = resizerItem === null || resizerItem === void 0 ? void 0 : resizerItem.style.width;
22
+ tableRef.style.width = '';
23
+ tableRef.style.tableLayout = 'auto';
24
+ cols.forEach(function (col) {
25
+ return col.style.width = '';
26
+ });
27
+ if ((0, _platformFeatureFlags.fg)('platform_editor_table_fit_to_content_smart_adjust')) {
28
+ var hadTableSticky = tableRef.classList.contains(_styles.TableSharedCssClassName.TABLE_STICKY);
29
+ var prevTableMarginTop = tableRef.style.marginTop;
30
+ if (hadTableSticky) {
31
+ tableRef.classList.remove(_styles.TableSharedCssClassName.TABLE_NATIVE_STICKY);
32
+ }
33
+ if (prevTableMarginTop) {
34
+ tableRef.style.marginTop = '';
35
+ }
36
+ var stickyRows = Array.from(tableRef.querySelectorAll("tr.sticky, tr.".concat(_styles.TableSharedCssClassName.TABLE_NATIVE_STICKY)));
37
+ var prevStickyRowState = stickyRows.map(function (row) {
38
+ return {
39
+ row: row,
40
+ hadSticky: row.classList.contains('sticky'),
41
+ hadNative: row.classList.contains(_styles.TableSharedCssClassName.TABLE_NATIVE_STICKY),
42
+ width: row.style.width,
43
+ top: row.style.top,
44
+ position: row.style.position,
45
+ gridTemplateColumns: row.style.gridTemplateColumns
46
+ };
47
+ });
48
+ stickyRows.forEach(function (row) {
49
+ row.classList.remove('sticky');
50
+ row.classList.remove(_styles.TableSharedCssClassName.TABLE_NATIVE_STICKY);
51
+ row.style.width = '';
52
+ row.style.top = '';
53
+ row.style.position = '';
54
+ row.style.gridTemplateColumns = '';
55
+ });
56
+ try {
57
+ return (0, _runSmartAdjust.runSmartAdjust)(tableRef, resizerContainer, resizerItem, editorContainerWidth);
58
+ } finally {
59
+ tableRef.style.width = prevTableWidth;
60
+ tableRef.style.tableLayout = prevTableLayout;
61
+ cols.forEach(function (col, i) {
62
+ return col.style.width = prevColWidths[i];
63
+ });
64
+ if (hadTableSticky) {
65
+ tableRef.classList.add(_styles.TableSharedCssClassName.TABLE_STICKY);
66
+ }
67
+ if (prevTableMarginTop) {
68
+ tableRef.style.marginTop = prevTableMarginTop;
69
+ }
70
+ prevStickyRowState.forEach(function (state) {
71
+ if (state.hadSticky) {
72
+ state.row.classList.add('sticky');
73
+ }
74
+ if (state.hadNative) {
75
+ state.row.classList.add(_styles.TableSharedCssClassName.TABLE_NATIVE_STICKY);
76
+ }
77
+ if (state.width) {
78
+ state.row.style.width = state.width;
79
+ }
80
+ if (state.top) {
81
+ state.row.style.top = state.top;
82
+ }
83
+ if (state.position) {
84
+ state.row.style.position = state.position;
85
+ }
86
+ if (state.gridTemplateColumns) {
87
+ state.row.style.gridTemplateColumns = state.gridTemplateColumns;
88
+ }
89
+ });
90
+ (0, _runSmartAdjust.restoreResizerContainer)(resizerContainer);
91
+ if (resizerItem) {
92
+ resizerItem.style.width = prevResizerItemWidth !== null && prevResizerItemWidth !== void 0 ? prevResizerItemWidth : '';
93
+ }
94
+ }
95
+ }
96
+ if (resizerContainer) {
97
+ resizerContainer.style.width = 'var(--ak-editor-table-width)';
98
+ resizerContainer.style.setProperty('--ak-editor-table-width', 'max-content');
99
+ }
100
+ if (resizerItem) {
101
+ resizerItem.style.width = 'max-content';
102
+ }
103
+ var measurement = (0, _contentMode.getTableMeasurement)(tableRef);
104
+ tableRef.style.width = prevTableWidth;
105
+ tableRef.style.tableLayout = prevTableLayout;
106
+ cols.forEach(function (col, i) {
107
+ return col.style.width = prevColWidths[i];
108
+ });
109
+ if (resizerItem) {
110
+ resizerItem.style.width = prevResizerItemWidth !== null && prevResizerItemWidth !== void 0 ? prevResizerItemWidth : '';
111
+ }
112
+ return measurement;
113
+ };
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.EVEN_SHARE_RATIO = void 0;
7
+ /** Each column's max width is `MAX × (usableWidth / numCols)`. */
8
+ var EVEN_SHARE_RATIO = exports.EVEN_SHARE_RATIO = {
9
+ MAX: 2
10
+ };
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.sumWidths = exports.distributeByEvenShareRatio = void 0;
7
+ var _styles = require("@atlaskit/editor-common/styles");
8
+ var _editorSharedStyles = require("@atlaskit/editor-shared-styles");
9
+ var _constants = require("./constants");
10
+ var sumWidths = exports.sumWidths = function sumWidths(widths) {
11
+ return widths.reduce(function (sum, width) {
12
+ return sum + width;
13
+ }, 0);
14
+ };
15
+
16
+ // 2px absorbs sub-pixel rounding in `getRenderedColgroupColumnWidths`.
17
+ var SUB_PIXEL_ROUNDING_ALLOWANCE = 2;
18
+
19
+ /**
20
+ * Clamps each desired width to `[tableCellMinWidth, MAX × evenShare]`. Greedy
21
+ * columns (paragraphs) hit the ceiling and wrap; small columns stay at their
22
+ * natural width. Leftover canvas budget grows ceiling-hitters up to their
23
+ * desired; overflow reclaims from ceiling-hitters only.
24
+ */
25
+ var distributeByEvenShareRatio = exports.distributeByEvenShareRatio = function distributeByEvenShareRatio(desiredWidths, editorContainerWidth) {
26
+ if (desiredWidths.length === 0 || !isFinite(editorContainerWidth) || editorContainerWidth <= 0) {
27
+ return desiredWidths;
28
+ }
29
+ var usableWidth = Math.max(editorContainerWidth - (0, _editorSharedStyles.akEditorGutterPaddingDynamic)() * 2, _styles.tableCellMinWidth * desiredWidths.length);
30
+ var evenShare = usableWidth / desiredWidths.length;
31
+ var ceiling = _constants.EVEN_SHARE_RATIO.MAX * evenShare;
32
+ var isCompactColumn = function isCompactColumn(width) {
33
+ return width <= ceiling;
34
+ };
35
+ var desiredCeil = desiredWidths.map(function (desired) {
36
+ return Math.max(_styles.tableCellMinWidth, Math.ceil(desired) + SUB_PIXEL_ROUNDING_ALLOWANCE);
37
+ });
38
+ var capped = desiredCeil.map(function (desired) {
39
+ return isCompactColumn(desired) ? desired : Math.min(ceiling, desired);
40
+ });
41
+ var sum = sumWidths(capped);
42
+
43
+ // Underflow: grow non-protected ceiling-hitters into the leftover, up to their desired.
44
+ if (sum < usableWidth) {
45
+ var leftover = usableWidth - sum;
46
+ var growthHeadroom = capped.map(function (width, index) {
47
+ return !isCompactColumn(desiredCeil[index]) && width >= ceiling ? Math.max(desiredCeil[index] - width, 0) : 0;
48
+ });
49
+ var totalHeadroom = sumWidths(growthHeadroom);
50
+ if (totalHeadroom > 0) {
51
+ var totalGrowth = Math.min(leftover, totalHeadroom);
52
+ return capped.map(function (width, index) {
53
+ var headroom = growthHeadroom[index];
54
+ if (headroom <= 0) {
55
+ return width;
56
+ }
57
+ return width + headroom / totalHeadroom * totalGrowth;
58
+ });
59
+ }
60
+ return capped;
61
+ }
62
+ if (sum === usableWidth) {
63
+ return capped;
64
+ }
65
+
66
+ // Overflow: reclaim from non-protected ceiling-hitters only.
67
+ var overage = sum - usableWidth;
68
+ var slacks = capped.map(function (width, index) {
69
+ return !isCompactColumn(desiredCeil[index]) && width >= ceiling ? Math.max(width - _styles.tableCellMinWidth, 0) : 0;
70
+ });
71
+ var totalSlack = sumWidths(slacks);
72
+ if (totalSlack <= 0) {
73
+ return capped;
74
+ }
75
+ return capped.map(function (width, index) {
76
+ var slack = slacks[index];
77
+ if (slack <= 0) {
78
+ return width;
79
+ }
80
+ var share = slack / totalSlack * Math.min(overage, totalSlack);
81
+ return Math.max(width - share, _styles.tableCellMinWidth);
82
+ });
83
+ };
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.runSmartAdjust = exports.restoreResizerContainer = void 0;
8
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
+ var _contentMode = require("../../../transforms/content-mode");
10
+ var _distributeColumnWidths = require("./distribute-column-widths");
11
+ 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; }
12
+ 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; }
13
+ var measureWithIntrinsicWidth = function measureWithIntrinsicWidth(tableRef, resizerContainer, resizerItem) {
14
+ if (resizerContainer) {
15
+ resizerContainer.style.width = 'var(--ak-editor-table-width)';
16
+ resizerContainer.style.setProperty('--ak-editor-table-width', 'max-content');
17
+ }
18
+ if (resizerItem) {
19
+ resizerItem.style.width = 'max-content';
20
+ }
21
+ var prevTableWidth = tableRef.style.width;
22
+ var prevTableMaxWidth = tableRef.style.maxWidth;
23
+ var prevTableMinWidth = tableRef.style.minWidth;
24
+ tableRef.style.setProperty('width', 'max-content', 'important');
25
+ tableRef.style.setProperty('max-width', 'none', 'important');
26
+ tableRef.style.setProperty('min-width', '0', 'important');
27
+ try {
28
+ return (0, _contentMode.getTableMeasurement)(tableRef);
29
+ } finally {
30
+ tableRef.style.width = prevTableWidth;
31
+ tableRef.style.maxWidth = prevTableMaxWidth;
32
+ tableRef.style.minWidth = prevTableMinWidth;
33
+ }
34
+ };
35
+ var restoreResizerContainer = exports.restoreResizerContainer = function restoreResizerContainer(resizerContainer) {
36
+ if (!resizerContainer) {
37
+ return;
38
+ }
39
+ resizerContainer.style.width = 'var(--ak-editor-table-width)';
40
+ resizerContainer.style.removeProperty('--ak-editor-table-width');
41
+ };
42
+
43
+ /**
44
+ * Smart-adjust: measure unconstrained max-content per column, then clamp via
45
+ * `distributeByEvenShareRatio`.
46
+ */
47
+ var runSmartAdjust = exports.runSmartAdjust = function runSmartAdjust(tableRef, resizerContainer, resizerItem, editorContainerWidthFromApi) {
48
+ var preferredMeasurement = measureWithIntrinsicWidth(tableRef, resizerContainer, resizerItem);
49
+ var desiredWidths = preferredMeasurement.colWidths;
50
+ var editorContainerWidth = editorContainerWidthFromApi !== null && editorContainerWidthFromApi !== void 0 ? editorContainerWidthFromApi : (0, _distributeColumnWidths.sumWidths)(desiredWidths);
51
+ var colWidths = (0, _distributeColumnWidths.distributeByEvenShareRatio)(desiredWidths, editorContainerWidth);
52
+ return _objectSpread(_objectSpread({}, preferredMeasurement), {}, {
53
+ colWidths: colWidths,
54
+ tableWidth: (0, _distributeColumnWidths.sumWidths)(colWidths)
55
+ });
56
+ };
@@ -152,6 +152,7 @@ var tablePlugin = function tablePlugin(_ref) {
152
152
  insertRowButtonIndex: tablePluginState.insertRowButtonIndex,
153
153
  tableWrapperTarget: tablePluginState.tableWrapperTarget,
154
154
  isCellMenuOpenByKeyboard: tablePluginState.isCellMenuOpenByKeyboard,
155
+ activeTableMenu: tablePluginState.activeTableMenu,
155
156
  stickyHeader: stickyHeader,
156
157
  dragMenuDirection: dragAndDropState === null || dragAndDropState === void 0 ? void 0 : dragAndDropState.dragMenuDirection,
157
158
  dragMenuIndex: dragAndDropState === null || dragAndDropState === void 0 ? void 0 : dragAndDropState.dragMenuIndex,
@@ -98,6 +98,7 @@ var ContentComponentInternal = function ContentComponentInternal(_ref) {
98
98
  return null;
99
99
  }
100
100
  return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, targetCellPosition && (tableRef || isCellMenuOpenByKeyboard) && !isResizing && options && options.allowContextualMenu && /*#__PURE__*/_react.default.createElement(_FloatingContextualButton.default, {
101
+ api: api,
101
102
  isNumberColumnEnabled: tableNode && tableNode.attrs.isNumberColumnEnabled,
102
103
  editorView: editorView,
103
104
  tableNode: tableNode,
@@ -133,7 +134,6 @@ var ContentComponentInternal = function ContentComponentInternal(_ref) {
133
134
  editorView: editorView,
134
135
  mountPoint: popupsMountPoint,
135
136
  boundariesElement: popupsBoundariesElement,
136
- targetCellPosition: targetCellPosition,
137
137
  isOpen: Boolean(isContextualMenuOpen) && !isResizing,
138
138
  pluginConfig: pluginConfig,
139
139
  editorAnalyticsAPI: editorAnalyticsAPI,
@@ -11,6 +11,7 @@ var _react2 = require("@emotion/react");
11
11
  var _reactIntl = require("react-intl");
12
12
  var _analytics = require("@atlaskit/editor-common/analytics");
13
13
  var _errorBoundary = require("@atlaskit/editor-common/error-boundary");
14
+ var _hooks = require("@atlaskit/editor-common/hooks");
14
15
  var _keymaps = require("@atlaskit/editor-common/keymaps");
15
16
  var _messages = require("@atlaskit/editor-common/messages");
16
17
  var _ui = require("@atlaskit/editor-common/ui");
@@ -44,7 +45,8 @@ var anchorStyles = (0, _react2.css)({
44
45
  zIndex: CONTEXTUAL_MENU_BUTTON_Z_INDEX
45
46
  });
46
47
  var FloatingContextualButtonInner = /*#__PURE__*/_react.default.memo(function (props) {
47
- var editorView = props.editorView,
48
+ var api = props.api,
49
+ editorView = props.editorView,
48
50
  isContextualMenuOpen = props.isContextualMenuOpen,
49
51
  mountPoint = props.mountPoint,
50
52
  scrollableElement = props.scrollableElement,
@@ -53,12 +55,22 @@ var FloatingContextualButtonInner = /*#__PURE__*/_react.default.memo(function (p
53
55
  targetCellPosition = props.targetCellPosition,
54
56
  isCellMenuOpenByKeyboard = props.isCellMenuOpenByKeyboard,
55
57
  formatMessage = props.intl.formatMessage; // : Props & WrappedComponentProps
56
-
58
+ var _useSharedPluginState = (0, _hooks.useSharedPluginStateWithSelector)(api, ['table'], function (states) {
59
+ var _states$tableState;
60
+ return {
61
+ activeTableMenu: (_states$tableState = states.tableState) === null || _states$tableState === void 0 ? void 0 : _states$tableState.activeTableMenu
62
+ };
63
+ }),
64
+ activeTableMenu = _useSharedPluginState.activeTableMenu;
65
+ var isCellMenuOpen = (0, _expValEquals.expValEquals)('platform_editor_table_menu_updates', 'isEnabled', true) ? (activeTableMenu === null || activeTableMenu === void 0 ? void 0 : activeTableMenu.type) === 'cell' : isContextualMenuOpen;
57
66
  var handleClick = function handleClick() {
58
67
  var state = editorView.state,
59
68
  dispatch = editorView.dispatch;
60
69
  if ((0, _expValEquals.expValEquals)('platform_editor_table_menu_updates', 'isEnabled', true)) {
61
- (0, _commands.toggleContextualMenu)()(state, dispatch);
70
+ (0, _commands.toggleActiveTableMenu)({
71
+ type: 'cell',
72
+ openedBy: 'mouse'
73
+ })(state, dispatch);
62
74
  return;
63
75
  }
64
76
 
@@ -74,13 +86,20 @@ var FloatingContextualButtonInner = /*#__PURE__*/_react.default.memo(function (p
74
86
  var domAtPos = editorView.domAtPos.bind(editorView);
75
87
  var targetCellRef = (0, _utils.findDomRefAtPos)(targetCellPosition, domAtPos);
76
88
  (0, _react.useEffect)(function () {
77
- if (isCellMenuOpenByKeyboard && !isContextualMenuOpen) {
89
+ if (isCellMenuOpenByKeyboard && !isCellMenuOpen) {
78
90
  var state = editorView.state,
79
91
  dispatch = editorView.dispatch;
80
92
  // open the menu when the keyboard shortcut is pressed
93
+ if ((0, _expValEquals.expValEquals)('platform_editor_table_menu_updates', 'isEnabled', true)) {
94
+ (0, _commands.toggleActiveTableMenu)({
95
+ type: 'cell',
96
+ openedBy: 'keyboard'
97
+ })(state, dispatch);
98
+ return;
99
+ }
81
100
  (0, _commands.toggleContextualMenu)()(state, dispatch);
82
101
  }
83
- }, [isCellMenuOpenByKeyboard, isContextualMenuOpen, editorView]);
102
+ }, [isCellMenuOpenByKeyboard, isCellMenuOpen, editorView]);
84
103
  if (!targetCellRef || !(targetCellRef instanceof HTMLElement)) {
85
104
  return null;
86
105
  }
@@ -90,12 +109,12 @@ var FloatingContextualButtonInner = /*#__PURE__*/_react.default.memo(function (p
90
109
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/design-system/consistent-css-prop-usage -- Ignored via go/DSP-18766
91
110
  (0, _styles.tableFloatingCellButtonStyles)(),
92
111
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/design-system/consistent-css-prop-usage -- Ignored via go/DSP-18766
93
- isContextualMenuOpen && (0, _styles.tableFloatingCellButtonSelectedStyles)()]
112
+ isCellMenuOpen && (0, _styles.tableFloatingCellButtonSelectedStyles)()]
94
113
  }, (0, _react2.jsx)(_uiMenu.ToolbarButton
95
114
  // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
96
115
  , {
97
116
  className: _types.TableCssClassName.CONTEXTUAL_MENU_BUTTON,
98
- selected: isContextualMenuOpen,
117
+ selected: isCellMenuOpen,
99
118
  title: labelCellOptions,
100
119
  keymap: _keymaps.focusToContextMenuTrigger,
101
120
  onClick: handleClick,
@@ -105,7 +124,7 @@ var FloatingContextualButtonInner = /*#__PURE__*/_react.default.memo(function (p
105
124
  size: "small"
106
125
  }),
107
126
  "aria-label": labelCellOptions,
108
- "aria-expanded": isContextualMenuOpen
127
+ "aria-expanded": isCellMenuOpen
109
128
  }));
110
129
  var parentSticky = targetCellRef.parentElement && targetCellRef.parentElement.className.indexOf('sticky') > -1;
111
130
  var parentStickyNative = targetCellRef.parentElement && ((0, _platformFeatureFlags.fg)('platform_editor_table_sticky_header_patch_4') ? tableWrapper === null || tableWrapper === void 0 ? void 0 : tableWrapper.classList.contains(_types.TableCssClassName.TABLE_NODE_WRAPPER_NO_OVERFLOW) : targetCellRef.parentElement.classList.contains(_types.TableCssClassName.NATIVE_STICKY));
@@ -160,7 +179,7 @@ var FloatingContextualButtonInner = /*#__PURE__*/_react.default.memo(function (p
160
179
  targetCellPosition: targetCellPosition,
161
180
  targetCellRef: targetCellRef,
162
181
  mountTo: tableWrapper,
163
- isContextualMenuOpen: isContextualMenuOpen
182
+ isContextualMenuOpen: isCellMenuOpen
164
183
  }, button);
165
184
  }
166
185
  return (0, _react2.jsx)(_ui.Popup, {
@@ -6,99 +6,84 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.CellMenuPopup = void 0;
8
8
  var _react = _interopRequireWildcard(require("react"));
9
- var _bindEventListener = require("bind-event-listener");
10
- var _hooks = require("@atlaskit/editor-common/hooks");
9
+ var _ui = require("@atlaskit/editor-common/ui");
10
+ var _uiReact = require("@atlaskit/editor-common/ui-react");
11
11
  var _userIntent = require("@atlaskit/editor-common/user-intent");
12
12
  var _commands = require("../../pm-plugins/commands");
13
+ var _pluginFactory = require("../../pm-plugins/plugin-factory");
13
14
  var _types = require("../../types");
15
+ var _consts = require("../consts");
14
16
  var _keys = require("../TableMenu/cell/keys");
17
+ var _consts2 = require("../TableMenu/shared/consts");
15
18
  var _TableMenu = require("../TableMenu/shared/TableMenu");
16
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
+ var PopupWithListeners = (0, _uiReact.withReactEditorViewOuterListeners)(_ui.Popup);
21
+ var NESTED_DROPDOWN_SELECTOR = '[data-toolbar-nested-dropdown-menu]';
22
+ var CELL_MENU_TRIGGER_SELECTOR = ".".concat(_types.TableCssClassName.CONTEXTUAL_MENU_BUTTON);
17
23
  var CellMenuPopup = exports.CellMenuPopup = function CellMenuPopup(_ref) {
18
24
  var api = _ref.api,
25
+ boundariesElement = _ref.boundariesElement,
19
26
  editorView = _ref.editorView,
20
- isCellMenuOpenByKeyboard = _ref.isCellMenuOpenByKeyboard,
21
- isOpen = _ref.isOpen,
22
- targetCellRef = _ref.targetCellRef;
23
- var tableMenuRef = (0, _react.useRef)(null);
24
- var _useSharedPluginState = (0, _hooks.useSharedPluginStateWithSelector)(api, ['userIntent'], function (states) {
25
- var _states$userIntentSta;
26
- return {
27
- currentUserIntent: (_states$userIntentSta = states.userIntentState) === null || _states$userIntentSta === void 0 ? void 0 : _states$userIntentSta.currentUserIntent
28
- };
29
- }),
30
- currentUserIntent = _useSharedPluginState.currentUserIntent;
27
+ mountPoint = _ref.mountPoint,
28
+ scrollableElement = _ref.scrollableElement,
29
+ targetCellRef = _ref.targetCellRef,
30
+ zIndex = _ref.zIndex;
31
+ var popupContentRef = (0, _react.useRef)(null);
32
+ var setOutsideClickTargetRef = (0, _react.useContext)(_uiReact.OutsideClickTargetRefContext);
33
+ var handlePopupRef = (0, _react.useCallback)(function (el) {
34
+ popupContentRef.current = el;
35
+ setOutsideClickTargetRef === null || setOutsideClickTargetRef === void 0 || setOutsideClickTargetRef(el);
36
+ }, [setOutsideClickTargetRef]);
31
37
  var closeCellMenu = (0, _react.useCallback)(function () {
32
- var state = editorView.state,
33
- dispatch = editorView.dispatch,
34
- dom = editorView.dom;
35
- (0, _commands.toggleContextualMenu)()(state, dispatch);
38
+ var _getPluginState = (0, _pluginFactory.getPluginState)(editorView.state),
39
+ isCellMenuOpenByKeyboard = _getPluginState.isCellMenuOpenByKeyboard;
40
+ (0, _commands.closeActiveTableMenu)()(editorView.state, editorView.dispatch);
36
41
  if (isCellMenuOpenByKeyboard) {
37
- (0, _commands.setFocusToCellMenu)(false)(state, dispatch);
38
- dom.focus();
42
+ (0, _commands.setFocusToCellMenu)(false)(editorView.state, editorView.dispatch);
39
43
  }
40
- }, [editorView, isCellMenuOpenByKeyboard]);
41
- (0, _react.useEffect)(function () {
42
- if (!isOpen || currentUserIntent !== 'tableDragMenuPopupOpen') {
43
- return;
44
+ }, [editorView]);
45
+ var isEventInsideCellMenu = (0, _react.useCallback)(function (event) {
46
+ var _popupContentRef$curr;
47
+ var target = event.target;
48
+ if (!(target instanceof Node)) {
49
+ return false;
44
50
  }
45
- closeCellMenu();
46
- }, [closeCellMenu, currentUserIntent, isOpen]);
47
- (0, _react.useEffect)(function () {
48
- if (!isOpen) {
49
- return;
51
+ if ((_popupContentRef$curr = popupContentRef.current) !== null && _popupContentRef$curr !== void 0 && _popupContentRef$curr.contains(target)) {
52
+ return true;
50
53
  }
51
- if (!(targetCellRef instanceof HTMLElement)) {
54
+ return target instanceof Element && Boolean(target.closest(NESTED_DROPDOWN_SELECTOR) || target.closest(CELL_MENU_TRIGGER_SELECTOR));
55
+ }, []);
56
+ var handleCellMenuClickOutside = (0, _react.useCallback)(function (event) {
57
+ if (isEventInsideCellMenu(event)) {
52
58
  return;
53
59
  }
54
- var ownerDocument = targetCellRef.ownerDocument;
55
- var handlePointerDown = function handlePointerDown(event) {
56
- var _tableMenuRef$current;
57
- var target = event.target;
58
- if (!(target instanceof Node)) {
59
- return;
60
- }
61
- if ((_tableMenuRef$current = tableMenuRef.current) !== null && _tableMenuRef$current !== void 0 && _tableMenuRef$current.contains(target)) {
62
- return;
63
- }
64
- var cellMenuButton = ownerDocument.querySelector(".".concat(_types.TableCssClassName.CONTEXTUAL_MENU_BUTTON));
65
- if (cellMenuButton !== null && cellMenuButton !== void 0 && cellMenuButton.contains(target)) {
66
- return;
67
- }
68
- closeCellMenu();
69
- };
70
- var handleKeyDown = function handleKeyDown(event) {
71
- if (event.key === 'Escape') {
72
- closeCellMenu();
73
- }
74
- };
75
- var unbindPointerDown = (0, _bindEventListener.bind)(ownerDocument, {
76
- type: 'pointerdown',
77
- listener: handlePointerDown,
78
- options: {
79
- capture: true
80
- }
81
- });
82
- var unbindKeyDown = (0, _bindEventListener.bind)(ownerDocument, {
83
- type: 'keydown',
84
- listener: handleKeyDown,
85
- options: {
86
- capture: true
87
- }
88
- });
89
- return function () {
90
- unbindPointerDown();
91
- unbindKeyDown();
92
- };
93
- }, [closeCellMenu, isOpen, targetCellRef]);
94
- return /*#__PURE__*/_react.default.createElement(_userIntent.UserIntentPopupWrapper, {
60
+ closeCellMenu();
61
+ }, [closeCellMenu, isEventInsideCellMenu]);
62
+ return /*#__PURE__*/_react.default.createElement(PopupWithListeners, {
63
+ alignX: "right",
64
+ alignY: "top",
65
+ target: targetCellRef,
66
+ mountTo: mountPoint,
67
+ boundariesElement: boundariesElement,
68
+ scrollableElement: scrollableElement,
69
+ fitHeight: _consts.tablePopupMenuFitHeight,
70
+ fitWidth: _consts2.TABLE_MENU_WIDTH,
71
+ zIndex: zIndex,
72
+ forcePlacement: true
73
+ // eslint-disable-next-line @atlassian/perf-linting/no-unstable-inline-props -- Ignored via go/ees017 (to be fixed)
74
+ ,
75
+ offset: [-7, 0],
76
+ stick: true,
77
+ handleClickOutside: handleCellMenuClickOutside,
78
+ handleEscapeKeydown: closeCellMenu
79
+ }, /*#__PURE__*/_react.default.createElement("div", {
80
+ ref: handlePopupRef
81
+ }, /*#__PURE__*/_react.default.createElement(_userIntent.UserIntentPopupWrapper, {
95
82
  api: api,
96
83
  userIntent: "tableContextualMenuPopupOpen"
97
- }, /*#__PURE__*/_react.default.createElement("div", {
98
- ref: tableMenuRef
99
84
  }, /*#__PURE__*/_react.default.createElement(_TableMenu.TableMenu, {
100
85
  api: api,
101
86
  editorView: editorView,
102
87
  surface: _keys.CELL_MENU
103
- })));
88
+ }))));
104
89
  };
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.default = void 0;
8
8
  var _react = require("@emotion/react");
9
+ var _hooks = require("@atlaskit/editor-common/hooks");
9
10
  var _ui = require("@atlaskit/editor-common/ui");
10
11
  var _utils = require("@atlaskit/editor-prosemirror/utils");
11
12
  var _editorSharedStyles = require("@atlaskit/editor-shared-styles");
@@ -13,7 +14,6 @@ var _utils2 = require("@atlaskit/editor-tables/utils");
13
14
  var _expValEquals = require("@atlaskit/tmp-editor-statsig/exp-val-equals");
14
15
  var _pluginFactory = require("../../pm-plugins/plugin-factory");
15
16
  var _consts = require("../consts");
16
- var _consts2 = require("../TableMenu/shared/consts");
17
17
  var _CellMenuPopup = require("./CellMenuPopup");
18
18
  var _ContextualMenu = _interopRequireDefault(require("./ContextualMenu"));
19
19
  var _styles = require("./styles");
@@ -40,6 +40,14 @@ var FloatingContextualMenu = function FloatingContextualMenu(_ref) {
40
40
  isCommentEditor = _ref.isCommentEditor,
41
41
  api = _ref.api,
42
42
  isDragMenuOpen = _ref.isDragMenuOpen;
43
+ var _useSharedPluginState = (0, _hooks.useSharedPluginStateWithSelector)(api, ['table'], function (states) {
44
+ var _states$tableState;
45
+ return {
46
+ activeTableMenu: (_states$tableState = states.tableState) === null || _states$tableState === void 0 ? void 0 : _states$tableState.activeTableMenu
47
+ };
48
+ }),
49
+ activeTableMenu = _useSharedPluginState.activeTableMenu;
50
+ var isCellMenuOpen = (0, _expValEquals.expValEquals)('platform_editor_table_menu_updates', 'isEnabled', true) ? (activeTableMenu === null || activeTableMenu === void 0 ? void 0 : activeTableMenu.type) === 'cell' : isOpen;
43
51
  if (!editorView) {
44
52
  return null;
45
53
  }
@@ -47,7 +55,7 @@ var FloatingContextualMenu = function FloatingContextualMenu(_ref) {
47
55
  // TargetCellPosition could be outdated: https://product-fabric.atlassian.net/browse/ED-8129
48
56
  var _getPluginState = (0, _pluginFactory.getPluginState)(editorView.state),
49
57
  targetCellPosition = _getPluginState.targetCellPosition;
50
- if (!isOpen || !targetCellPosition || editorView.state.doc.nodeSize <= targetCellPosition) {
58
+ if (!isCellMenuOpen || !targetCellPosition || editorView.state.doc.nodeSize <= targetCellPosition) {
51
59
  return null;
52
60
  }
53
61
  var selection = editorView.state.selection;
@@ -64,6 +72,20 @@ var FloatingContextualMenu = function FloatingContextualMenu(_ref) {
64
72
  return null;
65
73
  }
66
74
  var parentSticky = targetCellRef.parentElement && targetCellRef.parentElement.className.indexOf('sticky') > -1;
75
+ if ((0, _expValEquals.expValEquals)('platform_editor_table_menu_updates', 'isEnabled', true)) {
76
+ return (0, _react.jsx)(_CellMenuPopup.CellMenuPopup, {
77
+ api: api,
78
+ boundariesElement: boundariesElement,
79
+ editorView: editorView,
80
+ mountPoint: mountPoint,
81
+ scrollableElement: scrollableElement
82
+ // Ignored via go/ees005
83
+ // eslint-disable-next-line @atlaskit/editor/no-as-casting
84
+ ,
85
+ targetCellRef: targetCellRef,
86
+ zIndex: parentSticky ? _editorSharedStyles.akEditorFloatingDialogZIndex : _editorSharedStyles.akEditorFloatingOverlapPanelZIndex
87
+ });
88
+ }
67
89
  return (0, _react.jsx)(_ui.Popup, {
68
90
  alignX: "right",
69
91
  alignY: "top"
@@ -75,7 +97,7 @@ var FloatingContextualMenu = function FloatingContextualMenu(_ref) {
75
97
  boundariesElement: boundariesElement,
76
98
  scrollableElement: scrollableElement,
77
99
  fitHeight: _consts.tablePopupMenuFitHeight,
78
- fitWidth: (0, _expValEquals.expValEquals)('platform_editor_table_menu_updates', 'isEnabled', true) ? _consts2.TABLE_MENU_WIDTH : _consts.contextualMenuDropdownWidthDnD
100
+ fitWidth: _consts.contextualMenuDropdownWidthDnD
79
101
  // z-index value below is to ensure that this menu is above other floating menu
80
102
  // in table, but below floating dialogs like typeaheads, pickers, etc.
81
103
  ,
@@ -85,15 +107,7 @@ var FloatingContextualMenu = function FloatingContextualMenu(_ref) {
85
107
  ,
86
108
  offset: [-7, 0],
87
109
  stick: true
88
- }, (0, _expValEquals.expValEquals)('platform_editor_table_menu_updates', 'isEnabled', true) ? (0, _react.jsx)(_CellMenuPopup.CellMenuPopup, {
89
- api: api,
90
- editorView: editorView,
91
- isCellMenuOpenByKeyboard: isCellMenuOpenByKeyboard,
92
- isOpen: isOpen,
93
- targetCellRef: targetCellRef
94
- }) :
95
- // eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/design-system/consistent-css-prop-usage -- Ignored via go/DSP-18766
96
- (0, _react.jsx)("div", {
110
+ }, (0, _react.jsx)("div", {
97
111
  css: (0, _styles.tablePopupStyles)()
98
112
  }, (0, _react.jsx)(_ContextualMenu.default, {
99
113
  editorView: editorView