@atlaskit/editor-plugin-table 7.16.11 → 7.16.13

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 (254) hide show
  1. package/.eslintrc.js +3 -3
  2. package/CHANGELOG.md +16 -0
  3. package/dist/cjs/commands/misc.js +3 -3
  4. package/dist/cjs/nodeviews/TableCell.js +10 -10
  5. package/dist/cjs/nodeviews/TableContainer.js +83 -27
  6. package/dist/cjs/nodeviews/TableResizer.js +40 -19
  7. package/dist/cjs/nodeviews/TableRow.js +23 -23
  8. package/dist/cjs/pm-plugins/table-resizing/plugin.js +3 -3
  9. package/dist/cjs/pm-plugins/table-resizing/utils/resize-state.js +4 -4
  10. package/dist/cjs/pm-plugins/table-resizing/utils/scale-table.js +3 -3
  11. package/dist/cjs/ui/FloatingContextualMenu/styles.js +1 -1
  12. package/dist/cjs/ui/FloatingDragMenu/styles.js +1 -1
  13. package/dist/cjs/ui/common-styles.js +13 -13
  14. package/dist/cjs/ui/ui-styles.js +25 -25
  15. package/dist/cjs/utils/guidelines.js +7 -4
  16. package/dist/cjs/utils/merged-cells.js +3 -3
  17. package/dist/cjs/utils/snapping.js +7 -8
  18. package/dist/es2019/commands/misc.js +3 -3
  19. package/dist/es2019/nodeviews/TableContainer.js +70 -9
  20. package/dist/es2019/nodeviews/TableResizer.js +42 -21
  21. package/dist/es2019/nodeviews/TableRow.js +21 -21
  22. package/dist/es2019/pm-plugins/table-resizing/plugin.js +3 -3
  23. package/dist/es2019/pm-plugins/table-resizing/utils/resize-state.js +4 -4
  24. package/dist/es2019/pm-plugins/table-resizing/utils/scale-table.js +3 -3
  25. package/dist/es2019/ui/FloatingContextualMenu/styles.js +47 -47
  26. package/dist/es2019/ui/FloatingDragMenu/styles.js +30 -30
  27. package/dist/es2019/ui/common-styles.js +802 -816
  28. package/dist/es2019/ui/ui-styles.js +665 -678
  29. package/dist/es2019/utils/guidelines.js +5 -2
  30. package/dist/es2019/utils/merged-cells.js +3 -3
  31. package/dist/es2019/utils/snapping.js +5 -6
  32. package/dist/esm/commands/misc.js +3 -3
  33. package/dist/esm/nodeviews/TableCell.js +10 -10
  34. package/dist/esm/nodeviews/TableContainer.js +85 -29
  35. package/dist/esm/nodeviews/TableResizer.js +42 -21
  36. package/dist/esm/nodeviews/TableRow.js +23 -23
  37. package/dist/esm/pm-plugins/table-resizing/plugin.js +3 -3
  38. package/dist/esm/pm-plugins/table-resizing/utils/resize-state.js +4 -4
  39. package/dist/esm/pm-plugins/table-resizing/utils/scale-table.js +3 -3
  40. package/dist/esm/ui/FloatingContextualMenu/styles.js +1 -1
  41. package/dist/esm/ui/FloatingDragMenu/styles.js +1 -1
  42. package/dist/esm/ui/common-styles.js +13 -13
  43. package/dist/esm/ui/ui-styles.js +25 -25
  44. package/dist/esm/utils/guidelines.js +6 -3
  45. package/dist/esm/utils/merged-cells.js +3 -3
  46. package/dist/esm/utils/snapping.js +6 -7
  47. package/dist/types/nodeviews/TableResizer.d.ts +2 -1
  48. package/dist/types/pm-plugins/decorations/utils/index.d.ts +1 -1
  49. package/dist/types/pm-plugins/drag-and-drop/utils/autoscrollers.d.ts +1 -1
  50. package/dist/types/pm-plugins/drag-and-drop/utils/getDragBehaviour.d.ts +1 -1
  51. package/dist/types/pm-plugins/table-resizing/utils/index.d.ts +1 -1
  52. package/dist/types/ui/ColumnResizeWidget/index.d.ts +1 -1
  53. package/dist/types/ui/FloatingAlignmentButtons/FloatingAlignmentButtons.d.ts +1 -1
  54. package/dist/types/ui/FloatingToolbarLabel/FloatingToolbarLabel.d.ts +1 -1
  55. package/dist/types/ui/TableFloatingColumnControls/ColumnDropTargets/ColumnDropTarget.d.ts +1 -1
  56. package/dist/types/ui/TableFloatingControls/CornerControls/index.d.ts +1 -1
  57. package/dist/types/ui/icons/DragHandleDisabledIcon.d.ts +1 -1
  58. package/dist/types/utils/guidelines.d.ts +2 -1
  59. package/dist/types/utils/snapping.d.ts +3 -2
  60. package/dist/types-ts4.5/nodeviews/TableResizer.d.ts +2 -1
  61. package/dist/types-ts4.5/pm-plugins/decorations/utils/index.d.ts +1 -1
  62. package/dist/types-ts4.5/pm-plugins/drag-and-drop/utils/autoscrollers.d.ts +1 -1
  63. package/dist/types-ts4.5/pm-plugins/drag-and-drop/utils/getDragBehaviour.d.ts +1 -1
  64. package/dist/types-ts4.5/pm-plugins/table-resizing/utils/index.d.ts +1 -1
  65. package/dist/types-ts4.5/ui/ColumnResizeWidget/index.d.ts +1 -1
  66. package/dist/types-ts4.5/ui/FloatingAlignmentButtons/FloatingAlignmentButtons.d.ts +1 -1
  67. package/dist/types-ts4.5/ui/FloatingToolbarLabel/FloatingToolbarLabel.d.ts +1 -1
  68. package/dist/types-ts4.5/ui/TableFloatingColumnControls/ColumnDropTargets/ColumnDropTarget.d.ts +1 -1
  69. package/dist/types-ts4.5/ui/TableFloatingControls/CornerControls/index.d.ts +1 -1
  70. package/dist/types-ts4.5/ui/icons/DragHandleDisabledIcon.d.ts +1 -1
  71. package/dist/types-ts4.5/utils/guidelines.d.ts +2 -1
  72. package/dist/types-ts4.5/utils/snapping.d.ts +3 -2
  73. package/docs/0-intro.tsx +9 -7
  74. package/package.json +3 -3
  75. package/report.api.md +67 -66
  76. package/src/commands/clear.ts +36 -44
  77. package/src/commands/collapse.ts +8 -8
  78. package/src/commands/column-resize.ts +412 -452
  79. package/src/commands/delete.ts +14 -14
  80. package/src/commands/display-mode.ts +10 -11
  81. package/src/commands/go-to-next-cell.ts +48 -54
  82. package/src/commands/hover.ts +210 -227
  83. package/src/commands/index.ts +35 -35
  84. package/src/commands/insert.ts +208 -235
  85. package/src/commands/misc.ts +655 -748
  86. package/src/commands/referentiality.ts +9 -9
  87. package/src/commands/selection.ts +433 -563
  88. package/src/commands/sort.ts +68 -86
  89. package/src/commands/split-cell.ts +14 -14
  90. package/src/commands/toggle.ts +69 -67
  91. package/src/commands-with-analytics.ts +570 -639
  92. package/src/create-plugin-config.ts +13 -13
  93. package/src/event-handlers.ts +513 -612
  94. package/src/handlers.ts +120 -133
  95. package/src/nodeviews/ExternalDropTargets.tsx +68 -73
  96. package/src/nodeviews/OverflowShadowsObserver.ts +148 -157
  97. package/src/nodeviews/TableCell.ts +47 -54
  98. package/src/nodeviews/TableComponent.tsx +1018 -1112
  99. package/src/nodeviews/TableComponentWithSharedState.tsx +91 -94
  100. package/src/nodeviews/TableContainer.tsx +384 -340
  101. package/src/nodeviews/TableNodeViewBase.ts +19 -24
  102. package/src/nodeviews/TableResizer.tsx +642 -653
  103. package/src/nodeviews/TableRow.ts +580 -629
  104. package/src/nodeviews/TableStickyScrollbar.ts +173 -190
  105. package/src/nodeviews/__mocks__/OverflowShadowsObserver.ts +8 -8
  106. package/src/nodeviews/__mocks__/OverridableMock.ts +14 -15
  107. package/src/nodeviews/table.tsx +345 -375
  108. package/src/nodeviews/types.ts +21 -24
  109. package/src/nodeviews/update-overflow-shadows.ts +8 -14
  110. package/src/plugin.tsx +578 -603
  111. package/src/pm-plugins/analytics/actions.ts +10 -12
  112. package/src/pm-plugins/analytics/commands.ts +31 -37
  113. package/src/pm-plugins/analytics/plugin-factory.ts +4 -2
  114. package/src/pm-plugins/analytics/plugin-key.ts +1 -3
  115. package/src/pm-plugins/analytics/plugin.ts +60 -70
  116. package/src/pm-plugins/analytics/reducer.ts +19 -19
  117. package/src/pm-plugins/analytics/types.ts +10 -10
  118. package/src/pm-plugins/analytics/utils/moved-event.ts +38 -38
  119. package/src/pm-plugins/decorations/plugin.ts +58 -77
  120. package/src/pm-plugins/decorations/utils/column-controls.ts +59 -71
  121. package/src/pm-plugins/decorations/utils/column-resizing.ts +50 -57
  122. package/src/pm-plugins/decorations/utils/compose-decorations.ts +6 -6
  123. package/src/pm-plugins/decorations/utils/index.ts +3 -6
  124. package/src/pm-plugins/decorations/utils/types.ts +7 -12
  125. package/src/pm-plugins/default-table-selection.ts +3 -3
  126. package/src/pm-plugins/drag-and-drop/actions.ts +25 -25
  127. package/src/pm-plugins/drag-and-drop/commands-with-analytics.ts +158 -190
  128. package/src/pm-plugins/drag-and-drop/commands.ts +154 -170
  129. package/src/pm-plugins/drag-and-drop/consts.ts +4 -5
  130. package/src/pm-plugins/drag-and-drop/plugin-factory.ts +23 -20
  131. package/src/pm-plugins/drag-and-drop/plugin-key.ts +1 -3
  132. package/src/pm-plugins/drag-and-drop/plugin.ts +329 -383
  133. package/src/pm-plugins/drag-and-drop/reducer.ts +30 -30
  134. package/src/pm-plugins/drag-and-drop/types.ts +8 -8
  135. package/src/pm-plugins/drag-and-drop/utils/autoscrollers.ts +38 -41
  136. package/src/pm-plugins/drag-and-drop/utils/getDragBehaviour.ts +3 -6
  137. package/src/pm-plugins/drag-and-drop/utils/monitor.ts +57 -70
  138. package/src/pm-plugins/keymap.ts +208 -220
  139. package/src/pm-plugins/main.ts +348 -400
  140. package/src/pm-plugins/plugin-factory.ts +32 -34
  141. package/src/pm-plugins/safari-delete-composition-text-issue-workaround.ts +83 -97
  142. package/src/pm-plugins/sticky-headers/commands.ts +2 -6
  143. package/src/pm-plugins/sticky-headers/plugin-key.ts +1 -3
  144. package/src/pm-plugins/sticky-headers/plugin-state.ts +41 -44
  145. package/src/pm-plugins/sticky-headers/plugin.ts +4 -4
  146. package/src/pm-plugins/sticky-headers/types.ts +8 -8
  147. package/src/pm-plugins/sticky-headers/util.ts +10 -10
  148. package/src/pm-plugins/table-analytics.ts +70 -72
  149. package/src/pm-plugins/table-local-id.ts +180 -184
  150. package/src/pm-plugins/table-resizing/commands.ts +72 -85
  151. package/src/pm-plugins/table-resizing/event-handlers.ts +298 -317
  152. package/src/pm-plugins/table-resizing/plugin-factory.ts +10 -10
  153. package/src/pm-plugins/table-resizing/plugin-key.ts +1 -3
  154. package/src/pm-plugins/table-resizing/plugin.ts +61 -68
  155. package/src/pm-plugins/table-resizing/reducer.ts +30 -33
  156. package/src/pm-plugins/table-resizing/utils/colgroup.ts +84 -84
  157. package/src/pm-plugins/table-resizing/utils/column-state.ts +78 -81
  158. package/src/pm-plugins/table-resizing/utils/content-width.ts +94 -114
  159. package/src/pm-plugins/table-resizing/utils/dom.ts +93 -110
  160. package/src/pm-plugins/table-resizing/utils/index.ts +29 -34
  161. package/src/pm-plugins/table-resizing/utils/misc.ts +94 -119
  162. package/src/pm-plugins/table-resizing/utils/resize-column.ts +93 -106
  163. package/src/pm-plugins/table-resizing/utils/resize-logic.ts +240 -257
  164. package/src/pm-plugins/table-resizing/utils/resize-state.ts +343 -372
  165. package/src/pm-plugins/table-resizing/utils/scale-table.ts +202 -207
  166. package/src/pm-plugins/table-resizing/utils/types.ts +17 -17
  167. package/src/pm-plugins/table-resizing/utils/unit-to-number.ts +1 -2
  168. package/src/pm-plugins/table-selection-keymap.ts +25 -51
  169. package/src/pm-plugins/table-width.ts +191 -204
  170. package/src/pm-plugins/view-mode-sort/index.ts +223 -227
  171. package/src/pm-plugins/view-mode-sort/plugin-key.ts +3 -2
  172. package/src/pm-plugins/view-mode-sort/types.ts +12 -12
  173. package/src/pm-plugins/view-mode-sort/utils.ts +108 -117
  174. package/src/reducer.ts +139 -155
  175. package/src/toolbar.tsx +815 -905
  176. package/src/transforms/column-width.ts +186 -213
  177. package/src/transforms/delete-columns.ts +208 -222
  178. package/src/transforms/delete-rows.ts +117 -121
  179. package/src/transforms/fix-tables.ts +190 -215
  180. package/src/transforms/merge.ts +263 -269
  181. package/src/transforms/replace-table.ts +27 -43
  182. package/src/transforms/split.ts +65 -75
  183. package/src/types.ts +421 -427
  184. package/src/ui/ColumnResizeWidget/index.tsx +40 -47
  185. package/src/ui/DragHandle/HandleIconComponent.tsx +9 -13
  186. package/src/ui/DragHandle/index.tsx +221 -250
  187. package/src/ui/DragPreview/index.tsx +35 -35
  188. package/src/ui/FloatingAlignmentButtons/FloatingAlignmentButtons.tsx +33 -41
  189. package/src/ui/FloatingContextualButton/FixedButton.tsx +154 -157
  190. package/src/ui/FloatingContextualButton/index.tsx +109 -115
  191. package/src/ui/FloatingContextualButton/styles.ts +43 -46
  192. package/src/ui/FloatingContextualMenu/ContextualMenu.tsx +634 -694
  193. package/src/ui/FloatingContextualMenu/index.tsx +83 -101
  194. package/src/ui/FloatingContextualMenu/styles.ts +57 -65
  195. package/src/ui/FloatingDeleteButton/DeleteButton.tsx +37 -37
  196. package/src/ui/FloatingDeleteButton/getPopUpOptions.ts +47 -57
  197. package/src/ui/FloatingDeleteButton/index.tsx +319 -350
  198. package/src/ui/FloatingDragMenu/DragMenu.tsx +555 -596
  199. package/src/ui/FloatingDragMenu/DropdownMenu.tsx +152 -162
  200. package/src/ui/FloatingDragMenu/index.tsx +88 -102
  201. package/src/ui/FloatingDragMenu/styles.ts +51 -54
  202. package/src/ui/FloatingInsertButton/InsertButton.tsx +204 -217
  203. package/src/ui/FloatingInsertButton/getPopupOptions.ts +100 -115
  204. package/src/ui/FloatingInsertButton/index.tsx +248 -292
  205. package/src/ui/FloatingToolbarLabel/FloatingToolbarLabel.tsx +24 -29
  206. package/src/ui/TableFloatingColumnControls/ColumnControls/index.tsx +308 -329
  207. package/src/ui/TableFloatingColumnControls/ColumnDropTargets/ColumnDropTarget.tsx +85 -94
  208. package/src/ui/TableFloatingColumnControls/ColumnDropTargets/index.tsx +46 -46
  209. package/src/ui/TableFloatingColumnControls/index.tsx +116 -136
  210. package/src/ui/TableFloatingControls/CornerControls/ClassicCornerControls.tsx +79 -91
  211. package/src/ui/TableFloatingControls/CornerControls/DragCornerControls.tsx +95 -102
  212. package/src/ui/TableFloatingControls/CornerControls/index.tsx +1 -4
  213. package/src/ui/TableFloatingControls/CornerControls/types.ts +8 -8
  214. package/src/ui/TableFloatingControls/FloatingControlsWithSelection.tsx +50 -50
  215. package/src/ui/TableFloatingControls/NumberColumn/index.tsx +111 -124
  216. package/src/ui/TableFloatingControls/RowControls/ClassicControls.tsx +86 -105
  217. package/src/ui/TableFloatingControls/RowControls/DragControls.tsx +305 -341
  218. package/src/ui/TableFloatingControls/RowDropTarget/index.tsx +72 -75
  219. package/src/ui/TableFloatingControls/index.tsx +191 -193
  220. package/src/ui/TableFullWidthLabel/index.tsx +20 -20
  221. package/src/ui/common-styles.ts +880 -912
  222. package/src/ui/consts.ts +29 -74
  223. package/src/ui/icons/AddColLeftIcon.tsx +33 -39
  224. package/src/ui/icons/AddColRightIcon.tsx +33 -39
  225. package/src/ui/icons/AddRowAboveIcon.tsx +16 -22
  226. package/src/ui/icons/AddRowBelowIcon.tsx +33 -39
  227. package/src/ui/icons/DisplayModeIcon.tsx +31 -31
  228. package/src/ui/icons/DragHandleDisabledIcon.tsx +19 -21
  229. package/src/ui/icons/DragHandleIcon.tsx +12 -12
  230. package/src/ui/icons/DragInMotionIcon.tsx +45 -52
  231. package/src/ui/icons/MergeCellsIcon.tsx +22 -28
  232. package/src/ui/icons/MinimisedHandle.tsx +9 -9
  233. package/src/ui/icons/SplitCellIcon.tsx +30 -36
  234. package/src/ui/ui-styles.ts +769 -798
  235. package/src/utils/alignment.ts +1 -1
  236. package/src/utils/analytics.ts +192 -208
  237. package/src/utils/collapse.ts +55 -64
  238. package/src/utils/column-controls.ts +237 -254
  239. package/src/utils/create.ts +30 -30
  240. package/src/utils/decoration.ts +482 -502
  241. package/src/utils/dom.ts +127 -134
  242. package/src/utils/drag-menu.ts +322 -373
  243. package/src/utils/get-allow-add-column-custom-step.ts +4 -5
  244. package/src/utils/guidelines.ts +16 -21
  245. package/src/utils/index.ts +68 -68
  246. package/src/utils/merged-cells.ts +245 -254
  247. package/src/utils/nodes.ts +91 -106
  248. package/src/utils/paste.ts +119 -135
  249. package/src/utils/row-controls.ts +199 -213
  250. package/src/utils/selection.ts +77 -87
  251. package/src/utils/snapping.ts +87 -100
  252. package/src/utils/table.ts +44 -44
  253. package/src/utils/transforms.ts +5 -5
  254. package/src/utils/update-plugin-state-decorations.ts +5 -9
@@ -2,30 +2,27 @@ import { TableSortOrder as SortOrder } from '@atlaskit/custom-steps';
2
2
  import { INPUT_METHOD } from '@atlaskit/editor-common/analytics';
3
3
  import type { EditorAnalyticsAPI } from '@atlaskit/editor-common/analytics';
4
4
  import {
5
- addColumnAfter,
6
- addColumnBefore,
7
- addRowAfter,
8
- addRowBefore,
9
- backspace,
10
- deleteColumn,
11
- deleteRow,
12
- moveColumnLeft,
13
- moveColumnRight,
14
- moveRowDown,
15
- moveRowUp,
16
- tooltip,
5
+ addColumnAfter,
6
+ addColumnBefore,
7
+ addRowAfter,
8
+ addRowBefore,
9
+ backspace,
10
+ deleteColumn,
11
+ deleteRow,
12
+ moveColumnLeft,
13
+ moveColumnRight,
14
+ moveRowDown,
15
+ moveRowUp,
16
+ tooltip,
17
17
  } from '@atlaskit/editor-common/keymaps';
18
18
  import type {
19
- Command,
20
- CommandDispatch,
21
- DropdownOptionT,
22
- GetEditorContainerWidth,
23
- IconProps,
19
+ Command,
20
+ CommandDispatch,
21
+ DropdownOptionT,
22
+ GetEditorContainerWidth,
23
+ IconProps,
24
24
  } from '@atlaskit/editor-common/types';
25
- import type {
26
- EditorState,
27
- Selection,
28
- } from '@atlaskit/editor-prosemirror/state';
25
+ import type { EditorState, Selection } from '@atlaskit/editor-prosemirror/state';
29
26
  import type { EditorView } from '@atlaskit/editor-prosemirror/view';
30
27
  import type { Rect, TableMap } from '@atlaskit/editor-tables/table-map';
31
28
  import ArrowDownIcon from '@atlaskit/icon/glyph/arrow-down';
@@ -40,393 +37,345 @@ import HipchatChevronDoubleUpIcon from '@atlaskit/icon/glyph/hipchat/chevron-dou
40
37
  import { getBooleanFF } from '@atlaskit/platform-feature-flags';
41
38
 
42
39
  import {
43
- deleteColumnsWithAnalytics,
44
- deleteRowsWithAnalytics,
45
- distributeColumnsWidthsWithAnalytics,
46
- emptyMultipleCellsWithAnalytics,
47
- insertColumnWithAnalytics,
48
- insertRowWithAnalytics,
49
- sortColumnWithAnalytics,
40
+ deleteColumnsWithAnalytics,
41
+ deleteRowsWithAnalytics,
42
+ distributeColumnsWidthsWithAnalytics,
43
+ emptyMultipleCellsWithAnalytics,
44
+ insertColumnWithAnalytics,
45
+ insertRowWithAnalytics,
46
+ sortColumnWithAnalytics,
50
47
  } from '../commands-with-analytics';
51
48
  import { moveSourceWithAnalytics } from '../pm-plugins/drag-and-drop/commands-with-analytics';
52
49
  import { getNewResizeStateFromSelectedColumns } from '../pm-plugins/table-resizing/utils/resize-state';
53
50
  import { getClosestSelectionRect } from '../toolbar';
54
51
  import type { DraggableData, DraggableType, TableDirection } from '../types';
55
- import {
56
- AddColLeftIcon,
57
- AddColRightIcon,
58
- AddRowAboveIcon,
59
- AddRowBelowIcon,
60
- } from '../ui/icons';
52
+ import { AddColLeftIcon, AddColRightIcon, AddRowAboveIcon, AddRowBelowIcon } from '../ui/icons';
61
53
 
62
54
  import {
63
- hasMergedCellsInColumn,
64
- hasMergedCellsInRow,
65
- hasMergedCellsInSelection,
66
- hasMergedCellsWithColumnNextToColumnIndex,
67
- hasMergedCellsWithRowNextToRowIndex,
55
+ hasMergedCellsInColumn,
56
+ hasMergedCellsInRow,
57
+ hasMergedCellsInSelection,
58
+ hasMergedCellsWithColumnNextToColumnIndex,
59
+ hasMergedCellsWithRowNextToRowIndex,
68
60
  } from './merged-cells';
69
61
  import { getSelectedColumnIndexes, getSelectedRowIndexes } from './selection';
70
62
 
71
- export const getTargetIndex = (
72
- selectedIndexes: number[],
73
- direction: DraggableData['direction'],
74
- ) => Math[direction < 0 ? 'min' : 'max'](...selectedIndexes) + direction;
63
+ export const getTargetIndex = (selectedIndexes: number[], direction: DraggableData['direction']) =>
64
+ Math[direction < 0 ? 'min' : 'max'](...selectedIndexes) + direction;
75
65
 
76
66
  export const canMove = (
77
- sourceType: DraggableType,
78
- direction: DraggableData['direction'],
79
- totalItemsOfSourceTypeCount: number,
80
- selection: Selection,
81
- selectionRect?: Rect,
67
+ sourceType: DraggableType,
68
+ direction: DraggableData['direction'],
69
+ totalItemsOfSourceTypeCount: number,
70
+ selection: Selection,
71
+ selectionRect?: Rect,
82
72
  ) => {
83
- if (!selectionRect) {
84
- return false;
85
- }
73
+ if (!selectionRect) {
74
+ return false;
75
+ }
86
76
 
87
- const isRow = sourceType === 'table-row';
88
- const selectedIndexes = isRow
89
- ? getSelectedRowIndexes(selectionRect)
90
- : getSelectedColumnIndexes(selectionRect);
91
- const targetIndex = getTargetIndex(selectedIndexes, direction);
77
+ const isRow = sourceType === 'table-row';
78
+ const selectedIndexes = isRow
79
+ ? getSelectedRowIndexes(selectionRect)
80
+ : getSelectedColumnIndexes(selectionRect);
81
+ const targetIndex = getTargetIndex(selectedIndexes, direction);
92
82
 
93
- const isValidTargetIndex =
94
- targetIndex >= 0 && targetIndex < totalItemsOfSourceTypeCount;
95
- if (!isValidTargetIndex) {
96
- return false;
97
- }
83
+ const isValidTargetIndex = targetIndex >= 0 && targetIndex < totalItemsOfSourceTypeCount;
84
+ if (!isValidTargetIndex) {
85
+ return false;
86
+ }
98
87
 
99
- // We can't move column when target has merged cells with other columns
100
- // We can't move row when target has merged cells with other rows
101
- const hasMergedCellsInTarget = isRow
102
- ? hasMergedCellsWithRowNextToRowIndex(targetIndex, selection)
103
- : hasMergedCellsWithColumnNextToColumnIndex(targetIndex, selection);
104
- if (hasMergedCellsInTarget) {
105
- return false;
106
- }
88
+ // We can't move column when target has merged cells with other columns
89
+ // We can't move row when target has merged cells with other rows
90
+ const hasMergedCellsInTarget = isRow
91
+ ? hasMergedCellsWithRowNextToRowIndex(targetIndex, selection)
92
+ : hasMergedCellsWithColumnNextToColumnIndex(targetIndex, selection);
93
+ if (hasMergedCellsInTarget) {
94
+ return false;
95
+ }
107
96
 
108
- if (
109
- getBooleanFF('platform.editor.table.drag-move-options-logic-update_fp7xw')
110
- ) {
111
- // We can't move if selection in the source is not a rectangle
112
- if (
113
- hasMergedCellsInSelection(
114
- selectedIndexes,
115
- isRow ? 'row' : 'column',
116
- )(selection)
117
- ) {
118
- return false;
119
- }
120
- } else {
121
- // Currently we can't move in any direction if there are merged cells in the source
122
- const hasMergedCellsInSource = isRow
123
- ? hasMergedCellsInRow(selectedIndexes)(selection)
124
- : hasMergedCellsInColumn(selectedIndexes)(selection);
97
+ if (getBooleanFF('platform.editor.table.drag-move-options-logic-update_fp7xw')) {
98
+ // We can't move if selection in the source is not a rectangle
99
+ if (hasMergedCellsInSelection(selectedIndexes, isRow ? 'row' : 'column')(selection)) {
100
+ return false;
101
+ }
102
+ } else {
103
+ // Currently we can't move in any direction if there are merged cells in the source
104
+ const hasMergedCellsInSource = isRow
105
+ ? hasMergedCellsInRow(selectedIndexes)(selection)
106
+ : hasMergedCellsInColumn(selectedIndexes)(selection);
125
107
 
126
- if (hasMergedCellsInSource) {
127
- return false;
128
- }
129
- }
108
+ if (hasMergedCellsInSource) {
109
+ return false;
110
+ }
111
+ }
130
112
 
131
- return true;
113
+ return true;
132
114
  };
133
115
 
134
116
  const isDistributeColumnsEnabled = (state: EditorState) => {
135
- const rect = getClosestSelectionRect(state);
136
- if (rect) {
137
- const selectedColIndexes = getSelectedColumnIndexes(rect);
138
- return selectedColIndexes.length > 1;
139
- }
140
- return false;
117
+ const rect = getClosestSelectionRect(state);
118
+ if (rect) {
119
+ const selectedColIndexes = getSelectedColumnIndexes(rect);
120
+ return selectedColIndexes.length > 1;
121
+ }
122
+ return false;
141
123
  };
142
124
 
143
125
  export type DragMenuOptionIdType =
144
- | 'add_row_above'
145
- | 'add_row_below'
146
- | 'add_column_left'
147
- | 'add_column_right'
148
- | 'distribute_columns'
149
- | 'clear_cells'
150
- | 'delete_row'
151
- | 'delete_column'
152
- | 'move_column_left'
153
- | 'move_column_right'
154
- | 'move_row_up'
155
- | 'move_row_down'
156
- | 'sort_column_asc'
157
- | 'sort_column_desc';
126
+ | 'add_row_above'
127
+ | 'add_row_below'
128
+ | 'add_column_left'
129
+ | 'add_column_right'
130
+ | 'distribute_columns'
131
+ | 'clear_cells'
132
+ | 'delete_row'
133
+ | 'delete_column'
134
+ | 'move_column_left'
135
+ | 'move_column_right'
136
+ | 'move_row_up'
137
+ | 'move_row_down'
138
+ | 'sort_column_asc'
139
+ | 'sort_column_desc';
158
140
 
159
141
  export interface DragMenuConfig extends DropdownOptionT<Command> {
160
- id: DragMenuOptionIdType;
161
- icon?: React.ComponentType<React.PropsWithChildren<IconProps>>;
162
- keymap?: string;
142
+ id: DragMenuOptionIdType;
143
+ icon?: React.ComponentType<React.PropsWithChildren<IconProps>>;
144
+ keymap?: string;
163
145
  }
164
146
 
165
147
  const defaultSelectionRect = { left: 0, top: 0, right: 0, bottom: 0 };
166
148
 
167
149
  export const getDragMenuConfig = (
168
- direction: TableDirection,
169
- getEditorContainerWidth: GetEditorContainerWidth,
170
- canDrag: boolean,
171
- hasMergedCellsInTable: boolean,
172
- editorView: EditorView,
173
- tableMap?: TableMap,
174
- index?: number,
175
- targetCellPosition?: number,
176
- selectionRect?: Rect,
177
- editorAnalyticsAPI?: EditorAnalyticsAPI,
178
- isHeaderRowRequired?: boolean,
179
- isTableScalingEnabled = false,
180
- tableDuplicateCellColouring = false,
150
+ direction: TableDirection,
151
+ getEditorContainerWidth: GetEditorContainerWidth,
152
+ canDrag: boolean,
153
+ hasMergedCellsInTable: boolean,
154
+ editorView: EditorView,
155
+ tableMap?: TableMap,
156
+ index?: number,
157
+ targetCellPosition?: number,
158
+ selectionRect?: Rect,
159
+ editorAnalyticsAPI?: EditorAnalyticsAPI,
160
+ isHeaderRowRequired?: boolean,
161
+ isTableScalingEnabled = false,
162
+ tableDuplicateCellColouring = false,
181
163
  ): DragMenuConfig[] => {
182
- const addOptions =
183
- direction === 'row'
184
- ? [
185
- {
186
- label: 'above',
187
- offset: 0,
188
- icon: AddRowAboveIcon,
189
- keymap: addRowBefore,
190
- },
191
- {
192
- label: 'below',
193
- offset: 1,
194
- icon: AddRowBelowIcon,
195
- keymap: addRowAfter,
196
- },
197
- ]
198
- : [
199
- {
200
- label: 'left',
201
- offset: 0,
202
- icon: AddColLeftIcon,
203
- keymap: addColumnBefore,
204
- },
205
- {
206
- label: 'right',
207
- offset: 1,
208
- icon: AddColRightIcon,
209
- keymap: addColumnAfter,
210
- },
211
- ];
164
+ const addOptions =
165
+ direction === 'row'
166
+ ? [
167
+ {
168
+ label: 'above',
169
+ offset: 0,
170
+ icon: AddRowAboveIcon,
171
+ keymap: addRowBefore,
172
+ },
173
+ {
174
+ label: 'below',
175
+ offset: 1,
176
+ icon: AddRowBelowIcon,
177
+ keymap: addRowAfter,
178
+ },
179
+ ]
180
+ : [
181
+ {
182
+ label: 'left',
183
+ offset: 0,
184
+ icon: AddColLeftIcon,
185
+ keymap: addColumnBefore,
186
+ },
187
+ {
188
+ label: 'right',
189
+ offset: 1,
190
+ icon: AddColRightIcon,
191
+ keymap: addColumnAfter,
192
+ },
193
+ ];
212
194
 
213
- const { selection } = editorView.state;
214
- const moveOptions =
215
- direction === 'row'
216
- ? [
217
- {
218
- label: 'up',
219
- icon: ArrowUpIcon,
220
- keymap: moveRowUp,
221
- canMove:
222
- canDrag &&
223
- canMove(
224
- 'table-row',
225
- -1,
226
- tableMap?.height ?? 0,
227
- selection,
228
- selectionRect,
229
- ),
230
- getOriginIndexes: getSelectedRowIndexes,
231
- getTargetIndex: (selectionRect: Rect) => selectionRect.top - 1,
232
- },
233
- {
234
- label: 'down',
235
- icon: ArrowDownIcon,
236
- keymap: moveRowDown,
237
- canMove:
238
- canDrag &&
239
- canMove(
240
- 'table-row',
241
- 1,
242
- tableMap?.height ?? 0,
243
- selection,
244
- selectionRect,
245
- ),
246
- getOriginIndexes: getSelectedRowIndexes,
247
- getTargetIndex: (selectionRect: Rect) => selectionRect.bottom,
248
- },
249
- ]
250
- : [
251
- {
252
- label: 'left',
253
- icon: ArrowLeftIcon,
254
- keymap: moveColumnLeft,
255
- canMove:
256
- canDrag &&
257
- canMove(
258
- 'table-column',
259
- -1,
260
- tableMap?.width ?? 0,
261
- selection,
262
- selectionRect,
263
- ),
264
- getOriginIndexes: getSelectedColumnIndexes,
265
- getTargetIndex: (selectionRect: Rect) => selectionRect.left - 1,
266
- },
267
- {
268
- label: 'right',
269
- icon: ArrowRightIcon,
270
- keymap: moveColumnRight,
271
- canMove:
272
- canDrag &&
273
- canMove(
274
- 'table-column',
275
- 1,
276
- tableMap?.width ?? 0,
277
- selection,
278
- selectionRect,
279
- ),
280
- getOriginIndexes: getSelectedColumnIndexes,
281
- getTargetIndex: (selectionRect: Rect) => selectionRect.right,
282
- },
283
- ];
195
+ const { selection } = editorView.state;
196
+ const moveOptions =
197
+ direction === 'row'
198
+ ? [
199
+ {
200
+ label: 'up',
201
+ icon: ArrowUpIcon,
202
+ keymap: moveRowUp,
203
+ canMove:
204
+ canDrag && canMove('table-row', -1, tableMap?.height ?? 0, selection, selectionRect),
205
+ getOriginIndexes: getSelectedRowIndexes,
206
+ getTargetIndex: (selectionRect: Rect) => selectionRect.top - 1,
207
+ },
208
+ {
209
+ label: 'down',
210
+ icon: ArrowDownIcon,
211
+ keymap: moveRowDown,
212
+ canMove:
213
+ canDrag && canMove('table-row', 1, tableMap?.height ?? 0, selection, selectionRect),
214
+ getOriginIndexes: getSelectedRowIndexes,
215
+ getTargetIndex: (selectionRect: Rect) => selectionRect.bottom,
216
+ },
217
+ ]
218
+ : [
219
+ {
220
+ label: 'left',
221
+ icon: ArrowLeftIcon,
222
+ keymap: moveColumnLeft,
223
+ canMove:
224
+ canDrag &&
225
+ canMove('table-column', -1, tableMap?.width ?? 0, selection, selectionRect),
226
+ getOriginIndexes: getSelectedColumnIndexes,
227
+ getTargetIndex: (selectionRect: Rect) => selectionRect.left - 1,
228
+ },
229
+ {
230
+ label: 'right',
231
+ icon: ArrowRightIcon,
232
+ keymap: moveColumnRight,
233
+ canMove:
234
+ canDrag && canMove('table-column', 1, tableMap?.width ?? 0, selection, selectionRect),
235
+ getOriginIndexes: getSelectedColumnIndexes,
236
+ getTargetIndex: (selectionRect: Rect) => selectionRect.right,
237
+ },
238
+ ];
284
239
 
285
- const sortOptions =
286
- direction === 'column'
287
- ? [
288
- {
289
- label: 'increasing',
290
- order: SortOrder.ASC,
291
- icon: HipchatChevronDoubleUpIcon,
292
- },
293
- {
294
- label: 'decreasing',
295
- order: SortOrder.DESC,
296
- icon: HipchatChevronDoubleDownIcon,
297
- },
298
- ]
299
- : [];
300
- return [
301
- ...addOptions.map(({ label, offset, icon, keymap }) => ({
302
- id: `add_${direction}_${label}`,
303
- title: `Add ${direction} ${label}`,
304
- icon,
305
- onClick: (state: EditorState, dispatch?: CommandDispatch) => {
306
- if (direction === 'row') {
307
- insertRowWithAnalytics(
308
- editorAnalyticsAPI,
309
- tableDuplicateCellColouring,
310
- )(INPUT_METHOD.TABLE_CONTEXT_MENU, {
311
- index: (index ?? 0) + offset,
312
- moveCursorToInsertedRow: true,
313
- })(state, dispatch);
314
- } else {
315
- insertColumnWithAnalytics(
316
- editorAnalyticsAPI,
317
- isTableScalingEnabled,
318
- tableDuplicateCellColouring,
319
- )(INPUT_METHOD.TABLE_CONTEXT_MENU, (index ?? 0) + offset)(
320
- state,
321
- dispatch,
322
- editorView,
323
- );
324
- }
325
- return true;
326
- },
327
- keymap: keymap && tooltip(keymap),
328
- })),
329
- direction === 'column'
330
- ? {
331
- id: 'distribute_columns',
332
- title: 'Distribute columns',
333
- disabled: !isDistributeColumnsEnabled(editorView.state),
334
- onClick: (state: EditorState, dispatch?: CommandDispatch) => {
335
- const selectionRect = getClosestSelectionRect(state);
336
- if (selectionRect) {
337
- const newResizeState = getNewResizeStateFromSelectedColumns(
338
- selectionRect,
339
- state,
340
- editorView.domAtPos.bind(editorView),
341
- getEditorContainerWidth,
342
- isTableScalingEnabled,
343
- );
240
+ const sortOptions =
241
+ direction === 'column'
242
+ ? [
243
+ {
244
+ label: 'increasing',
245
+ order: SortOrder.ASC,
246
+ icon: HipchatChevronDoubleUpIcon,
247
+ },
248
+ {
249
+ label: 'decreasing',
250
+ order: SortOrder.DESC,
251
+ icon: HipchatChevronDoubleDownIcon,
252
+ },
253
+ ]
254
+ : [];
255
+ return [
256
+ ...addOptions.map(({ label, offset, icon, keymap }) => ({
257
+ id: `add_${direction}_${label}`,
258
+ title: `Add ${direction} ${label}`,
259
+ icon,
260
+ onClick: (state: EditorState, dispatch?: CommandDispatch) => {
261
+ if (direction === 'row') {
262
+ insertRowWithAnalytics(editorAnalyticsAPI, tableDuplicateCellColouring)(
263
+ INPUT_METHOD.TABLE_CONTEXT_MENU,
264
+ {
265
+ index: (index ?? 0) + offset,
266
+ moveCursorToInsertedRow: true,
267
+ },
268
+ )(state, dispatch);
269
+ } else {
270
+ insertColumnWithAnalytics(
271
+ editorAnalyticsAPI,
272
+ isTableScalingEnabled,
273
+ tableDuplicateCellColouring,
274
+ )(INPUT_METHOD.TABLE_CONTEXT_MENU, (index ?? 0) + offset)(state, dispatch, editorView);
275
+ }
276
+ return true;
277
+ },
278
+ keymap: keymap && tooltip(keymap),
279
+ })),
280
+ direction === 'column'
281
+ ? {
282
+ id: 'distribute_columns',
283
+ title: 'Distribute columns',
284
+ disabled: !isDistributeColumnsEnabled(editorView.state),
285
+ onClick: (state: EditorState, dispatch?: CommandDispatch) => {
286
+ const selectionRect = getClosestSelectionRect(state);
287
+ if (selectionRect) {
288
+ const newResizeState = getNewResizeStateFromSelectedColumns(
289
+ selectionRect,
290
+ state,
291
+ editorView.domAtPos.bind(editorView),
292
+ getEditorContainerWidth,
293
+ isTableScalingEnabled,
294
+ );
344
295
 
345
- if (newResizeState) {
346
- distributeColumnsWidthsWithAnalytics(editorAnalyticsAPI)(
347
- INPUT_METHOD.TABLE_CONTEXT_MENU,
348
- newResizeState,
349
- )(state, dispatch);
350
- return true;
351
- }
352
- return false;
353
- }
354
- return false;
355
- },
356
- icon: EditorLayoutThreeEqualIcon,
357
- }
358
- : undefined,
359
- {
360
- id: 'clear_cells',
361
- title: 'Clear cells',
362
- onClick: (state: EditorState, dispatch?: CommandDispatch) => {
363
- emptyMultipleCellsWithAnalytics(editorAnalyticsAPI)(
364
- INPUT_METHOD.TABLE_CONTEXT_MENU,
365
- targetCellPosition,
366
- )(state, dispatch);
367
- return true;
368
- },
369
- icon: CrossCircleIcon,
370
- keymap: tooltip(backspace),
371
- },
372
- {
373
- id: `delete_${direction}`,
374
- title: `Delete ${direction}`,
375
- onClick: (state: EditorState, dispatch?: CommandDispatch) => {
376
- if (direction === 'row') {
377
- deleteRowsWithAnalytics(editorAnalyticsAPI)(
378
- INPUT_METHOD.TABLE_CONTEXT_MENU,
379
- selectionRect ?? defaultSelectionRect,
380
- !!isHeaderRowRequired,
381
- )(state, dispatch);
382
- } else {
383
- deleteColumnsWithAnalytics(editorAnalyticsAPI, isTableScalingEnabled)(
384
- INPUT_METHOD.TABLE_CONTEXT_MENU,
385
- selectionRect ?? defaultSelectionRect,
386
- )(state, dispatch, editorView);
387
- }
388
- return true;
389
- },
390
- icon: RemoveIcon,
391
- keymap: direction === 'row' ? tooltip(deleteRow) : tooltip(deleteColumn),
392
- },
393
- ...moveOptions.map(
394
- ({ label, canMove, icon, keymap, getOriginIndexes, getTargetIndex }) => ({
395
- id: `move_${direction}_${label}`,
396
- title: `Move ${direction} ${label}`,
397
- disabled: !canMove,
398
- icon,
399
- onClick: (state: EditorState, dispatch?: CommandDispatch) => {
400
- if (canMove) {
401
- requestAnimationFrame(() => {
402
- moveSourceWithAnalytics(editorAnalyticsAPI)(
403
- INPUT_METHOD.TABLE_CONTEXT_MENU,
404
- `table-${direction}`,
405
- getOriginIndexes(selectionRect!),
406
- getTargetIndex(selectionRect!),
407
- )(editorView.state, editorView.dispatch);
408
- });
409
- return true;
410
- }
411
- return false;
412
- },
413
- keymap: keymap && tooltip(keymap),
414
- }),
415
- ),
296
+ if (newResizeState) {
297
+ distributeColumnsWidthsWithAnalytics(editorAnalyticsAPI)(
298
+ INPUT_METHOD.TABLE_CONTEXT_MENU,
299
+ newResizeState,
300
+ )(state, dispatch);
301
+ return true;
302
+ }
303
+ return false;
304
+ }
305
+ return false;
306
+ },
307
+ icon: EditorLayoutThreeEqualIcon,
308
+ }
309
+ : undefined,
310
+ {
311
+ id: 'clear_cells',
312
+ title: 'Clear cells',
313
+ onClick: (state: EditorState, dispatch?: CommandDispatch) => {
314
+ emptyMultipleCellsWithAnalytics(editorAnalyticsAPI)(
315
+ INPUT_METHOD.TABLE_CONTEXT_MENU,
316
+ targetCellPosition,
317
+ )(state, dispatch);
318
+ return true;
319
+ },
320
+ icon: CrossCircleIcon,
321
+ keymap: tooltip(backspace),
322
+ },
323
+ {
324
+ id: `delete_${direction}`,
325
+ title: `Delete ${direction}`,
326
+ onClick: (state: EditorState, dispatch?: CommandDispatch) => {
327
+ if (direction === 'row') {
328
+ deleteRowsWithAnalytics(editorAnalyticsAPI)(
329
+ INPUT_METHOD.TABLE_CONTEXT_MENU,
330
+ selectionRect ?? defaultSelectionRect,
331
+ !!isHeaderRowRequired,
332
+ )(state, dispatch);
333
+ } else {
334
+ deleteColumnsWithAnalytics(editorAnalyticsAPI, isTableScalingEnabled)(
335
+ INPUT_METHOD.TABLE_CONTEXT_MENU,
336
+ selectionRect ?? defaultSelectionRect,
337
+ )(state, dispatch, editorView);
338
+ }
339
+ return true;
340
+ },
341
+ icon: RemoveIcon,
342
+ keymap: direction === 'row' ? tooltip(deleteRow) : tooltip(deleteColumn),
343
+ },
344
+ ...moveOptions.map(({ label, canMove, icon, keymap, getOriginIndexes, getTargetIndex }) => ({
345
+ id: `move_${direction}_${label}`,
346
+ title: `Move ${direction} ${label}`,
347
+ disabled: !canMove,
348
+ icon,
349
+ onClick: (state: EditorState, dispatch?: CommandDispatch) => {
350
+ if (canMove) {
351
+ requestAnimationFrame(() => {
352
+ moveSourceWithAnalytics(editorAnalyticsAPI)(
353
+ INPUT_METHOD.TABLE_CONTEXT_MENU,
354
+ `table-${direction}`,
355
+ getOriginIndexes(selectionRect!),
356
+ getTargetIndex(selectionRect!),
357
+ )(editorView.state, editorView.dispatch);
358
+ });
359
+ return true;
360
+ }
361
+ return false;
362
+ },
363
+ keymap: keymap && tooltip(keymap),
364
+ })),
416
365
 
417
- ...sortOptions.map(({ label, order, icon }) => ({
418
- id: `sort_column_${order}`,
419
- title: `Sort ${label}`,
420
- disabled: hasMergedCellsInTable,
421
- icon,
422
- onClick: (state: EditorState, dispatch?: CommandDispatch) => {
423
- sortColumnWithAnalytics(editorAnalyticsAPI)(
424
- INPUT_METHOD.TABLE_CONTEXT_MENU,
425
- index ?? 0,
426
- order,
427
- )(state, dispatch);
428
- return true;
429
- },
430
- })),
431
- ].filter(Boolean) as DragMenuConfig[];
366
+ ...sortOptions.map(({ label, order, icon }) => ({
367
+ id: `sort_column_${order}`,
368
+ title: `Sort ${label}`,
369
+ disabled: hasMergedCellsInTable,
370
+ icon,
371
+ onClick: (state: EditorState, dispatch?: CommandDispatch) => {
372
+ sortColumnWithAnalytics(editorAnalyticsAPI)(
373
+ INPUT_METHOD.TABLE_CONTEXT_MENU,
374
+ index ?? 0,
375
+ order,
376
+ )(state, dispatch);
377
+ return true;
378
+ },
379
+ })),
380
+ ].filter(Boolean) as DragMenuConfig[];
432
381
  };