@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
@@ -8,20 +8,20 @@ import { pluginKey } from './plugin-key';
8
8
  import reducer from './reducer';
9
9
 
10
10
  function mapping(
11
- tr: ReadonlyTransaction,
12
- pluginState: ColumnResizingPluginState,
11
+ tr: ReadonlyTransaction,
12
+ pluginState: ColumnResizingPluginState,
13
13
  ): ColumnResizingPluginState {
14
- if (pluginState && pluginState.resizeHandlePos !== null) {
15
- return {
16
- ...pluginState,
17
- resizeHandlePos: tr.mapping.map(pluginState.resizeHandlePos),
18
- };
19
- }
20
- return pluginState;
14
+ if (pluginState && pluginState.resizeHandlePos !== null) {
15
+ return {
16
+ ...pluginState,
17
+ resizeHandlePos: tr.mapping.map(pluginState.resizeHandlePos),
18
+ };
19
+ }
20
+ return pluginState;
21
21
  }
22
22
 
23
23
  const factory = pluginFactory(pluginKey, reducer, {
24
- mapping,
24
+ mapping,
25
25
  });
26
26
 
27
27
  export const createCommand = factory.createCommand;
@@ -2,6 +2,4 @@ import { PluginKey } from '@atlaskit/editor-prosemirror/state';
2
2
 
3
3
  import type { ColumnResizingPluginState } from '../../types';
4
4
 
5
- export const pluginKey = new PluginKey<ColumnResizingPluginState>(
6
- 'tableFlexiColumnResizing',
7
- );
5
+ export const pluginKey = new PluginKey<ColumnResizingPluginState>('tableFlexiColumnResizing');
@@ -3,10 +3,7 @@ import classnames from 'classnames';
3
3
  import type { EditorAnalyticsAPI } from '@atlaskit/editor-common/analytics';
4
4
  import type { Dispatch } from '@atlaskit/editor-common/event-dispatcher';
5
5
  import { SafePlugin } from '@atlaskit/editor-common/safe-plugin';
6
- import type {
7
- GetEditorContainerWidth,
8
- GetEditorFeatureFlags,
9
- } from '@atlaskit/editor-common/types';
6
+ import type { GetEditorContainerWidth, GetEditorFeatureFlags } from '@atlaskit/editor-common/types';
10
7
  import { getBooleanFF } from '@atlaskit/platform-feature-flags';
11
8
 
12
9
  import { TableCssClassName as ClassName } from '../../types';
@@ -20,78 +17,74 @@ import { pluginKey } from './plugin-key';
20
17
  import { getResizeCellPos } from './utils';
21
18
 
22
19
  export function createPlugin(
23
- dispatch: Dispatch<ColumnResizingPluginState>,
24
- { lastColumnResizable = true }: ColumnResizingPluginState,
25
- getEditorContainerWidth: GetEditorContainerWidth,
26
- getEditorFeatureFlags: GetEditorFeatureFlags,
27
- editorAnalyticsAPI?: EditorAnalyticsAPI,
28
- isTableScalingEnabled?: boolean,
20
+ dispatch: Dispatch<ColumnResizingPluginState>,
21
+ { lastColumnResizable = true }: ColumnResizingPluginState,
22
+ getEditorContainerWidth: GetEditorContainerWidth,
23
+ getEditorFeatureFlags: GetEditorFeatureFlags,
24
+ editorAnalyticsAPI?: EditorAnalyticsAPI,
25
+ isTableScalingEnabled?: boolean,
29
26
  ) {
30
- return new SafePlugin({
31
- key: pluginKey,
32
- state: createPluginState(dispatch, {
33
- lastColumnResizable,
34
- resizeHandlePos: null,
35
- dragging: null,
36
- lastClick: null,
37
- }),
27
+ return new SafePlugin({
28
+ key: pluginKey,
29
+ state: createPluginState(dispatch, {
30
+ lastColumnResizable,
31
+ resizeHandlePos: null,
32
+ dragging: null,
33
+ lastClick: null,
34
+ }),
38
35
 
39
- props: {
40
- attributes(state) {
41
- const pluginState = getPluginState(state);
36
+ props: {
37
+ attributes(state) {
38
+ const pluginState = getPluginState(state);
42
39
 
43
- return {
44
- class: classnames(ClassName.RESIZING_PLUGIN, {
45
- [ClassName.RESIZE_CURSOR]: pluginState.resizeHandlePos !== null,
46
- [ClassName.IS_RESIZING]: !!pluginState.dragging,
47
- }),
48
- };
49
- },
40
+ return {
41
+ class: classnames(ClassName.RESIZING_PLUGIN, {
42
+ [ClassName.RESIZE_CURSOR]: pluginState.resizeHandlePos !== null,
43
+ [ClassName.IS_RESIZING]: !!pluginState.dragging,
44
+ }),
45
+ };
46
+ },
50
47
 
51
- handleDOMEvents: {
52
- mousedown(view, event) {
53
- const { state } = view;
54
- const resizeHandlePos =
55
- // we're setting `resizeHandlePos` via command in unit tests
56
- getPluginState(state).resizeHandlePos ||
57
- getResizeCellPos(view, event as MouseEvent);
48
+ handleDOMEvents: {
49
+ mousedown(view, event) {
50
+ const { state } = view;
51
+ const resizeHandlePos =
52
+ // we're setting `resizeHandlePos` via command in unit tests
53
+ getPluginState(state).resizeHandlePos || getResizeCellPos(view, event as MouseEvent);
58
54
 
59
- const { dragging } = getPluginState(state);
60
- let isColumnKeyboardResizeStarted = false;
61
- if (getBooleanFF('platform.editor.a11y-column-resizing_emcvz')) {
62
- /*
55
+ const { dragging } = getPluginState(state);
56
+ let isColumnKeyboardResizeStarted = false;
57
+ if (getBooleanFF('platform.editor.a11y-column-resizing_emcvz')) {
58
+ /*
63
59
  We need to start listening mouse events if column resize started from keyboard.
64
60
  This will allow continue resizing via mouse
65
61
  */
66
- const { isKeyboardResize } = getTablePluginState(state);
67
- if (isKeyboardResize) {
68
- isColumnKeyboardResizeStarted = isKeyboardResize;
69
- }
70
- }
62
+ const { isKeyboardResize } = getTablePluginState(state);
63
+ if (isKeyboardResize) {
64
+ isColumnKeyboardResizeStarted = isKeyboardResize;
65
+ }
66
+ }
71
67
 
72
- if (
73
- resizeHandlePos !== null &&
74
- (!dragging || isColumnKeyboardResizeStarted)
75
- ) {
76
- if (
77
- handleMouseDown(
78
- view,
79
- event as MouseEvent,
80
- resizeHandlePos,
81
- getEditorContainerWidth,
82
- getEditorFeatureFlags,
83
- isTableScalingEnabled || false,
84
- editorAnalyticsAPI,
85
- )
86
- ) {
87
- const { state, dispatch } = view;
88
- return setResizeHandlePos(resizeHandlePos)(state, dispatch);
89
- }
90
- }
68
+ if (resizeHandlePos !== null && (!dragging || isColumnKeyboardResizeStarted)) {
69
+ if (
70
+ handleMouseDown(
71
+ view,
72
+ event as MouseEvent,
73
+ resizeHandlePos,
74
+ getEditorContainerWidth,
75
+ getEditorFeatureFlags,
76
+ isTableScalingEnabled || false,
77
+ editorAnalyticsAPI,
78
+ )
79
+ ) {
80
+ const { state, dispatch } = view;
81
+ return setResizeHandlePos(resizeHandlePos)(state, dispatch);
82
+ }
83
+ }
91
84
 
92
- return false;
93
- },
94
- },
95
- },
96
- });
85
+ return false;
86
+ },
87
+ },
88
+ },
89
+ });
97
90
  }
@@ -1,40 +1,37 @@
1
- import type {
2
- ColumnResizingPluginAction,
3
- ColumnResizingPluginState,
4
- } from '../../types';
1
+ import type { ColumnResizingPluginAction, ColumnResizingPluginState } from '../../types';
5
2
 
6
3
  export default (
7
- pluginState: ColumnResizingPluginState,
8
- action: ColumnResizingPluginAction,
4
+ pluginState: ColumnResizingPluginState,
5
+ action: ColumnResizingPluginAction,
9
6
  ): ColumnResizingPluginState => {
10
- switch (action.type) {
11
- case 'STOP_RESIZING':
12
- return {
13
- ...pluginState,
14
- resizeHandlePos: null,
15
- dragging: null,
16
- };
7
+ switch (action.type) {
8
+ case 'STOP_RESIZING':
9
+ return {
10
+ ...pluginState,
11
+ resizeHandlePos: null,
12
+ dragging: null,
13
+ };
17
14
 
18
- case 'SET_RESIZE_HANDLE_POSITION':
19
- return {
20
- ...pluginState,
21
- resizeHandlePos: action.data.resizeHandlePos,
22
- };
15
+ case 'SET_RESIZE_HANDLE_POSITION':
16
+ return {
17
+ ...pluginState,
18
+ resizeHandlePos: action.data.resizeHandlePos,
19
+ };
23
20
 
24
- case 'SET_DRAGGING':
25
- return {
26
- ...pluginState,
27
- dragging: action.data.dragging,
28
- };
21
+ case 'SET_DRAGGING':
22
+ return {
23
+ ...pluginState,
24
+ dragging: action.data.dragging,
25
+ };
29
26
 
30
- case 'SET_LAST_CLICK':
31
- const { lastClick } = action.data;
32
- return {
33
- ...pluginState,
34
- lastClick,
35
- resizeHandlePos: lastClick ? pluginState.resizeHandlePos : null,
36
- };
37
- default:
38
- return pluginState;
39
- }
27
+ case 'SET_LAST_CLICK':
28
+ const { lastClick } = action.data;
29
+ return {
30
+ ...pluginState,
31
+ lastClick,
32
+ resizeHandlePos: lastClick ? pluginState.resizeHandlePos : null,
33
+ };
34
+ default:
35
+ return pluginState;
36
+ }
40
37
  };
@@ -15,85 +15,85 @@ type Col = Array<string | { [name: string]: string }>;
15
15
  * overflow.
16
16
  */
17
17
  export const getColWidthFix = (colwidth: number, tableColumnCount: number) =>
18
- colwidth - 1 / tableColumnCount;
18
+ colwidth - 1 / tableColumnCount;
19
19
 
20
20
  export const generateColgroup = (table: PmNode, tableRef?: HTMLElement) => {
21
- const cols: Col[] = [];
21
+ const cols: Col[] = [];
22
22
 
23
- const map = TableMap.get(table);
24
- table.content.firstChild!.content.forEach((cell) => {
25
- const colspan = cell.attrs.colspan || 1;
26
- if (Array.isArray(cell.attrs.colwidth)) {
27
- // We slice here to guard against our colwidth array having more entries
28
- // Than the we actually span. We'll patch the document at a later point.
29
- if (tableRef) {
30
- const scalePercent = getTableScalingPercent(table, tableRef);
31
- cell.attrs.colwidth.slice(0, colspan).forEach((width) => {
32
- const fixedColWidth = getColWidthFix(width, map.width);
33
- const scaledWidth = fixedColWidth * scalePercent;
34
- const finalWidth = Math.max(scaledWidth, tableCellMinWidth);
35
- cols.push([
36
- 'col',
37
- {
38
- style: `width: ${finalWidth}px;`,
39
- },
40
- ]);
41
- });
42
- } else {
43
- cell.attrs.colwidth.slice(0, colspan).forEach((width) => {
44
- cols.push([
45
- 'col',
46
- {
47
- style: `width: ${getColWidthFix(
48
- width ? Math.max(width, tableCellMinWidth) : tableCellMinWidth,
49
- map.width,
50
- )}px;`,
51
- },
52
- ]);
53
- });
54
- }
55
- } else {
56
- // When we have merged cells on the first row (firstChild),
57
- // We want to ensure we're creating the appropriate amount of
58
- // cols the table still has.
59
- cols.push(
60
- ...Array.from({ length: colspan }, (_) => [
61
- 'col',
62
- { style: `width: ${tableCellMinWidth}px;` },
63
- ]),
64
- );
65
- }
66
- });
23
+ const map = TableMap.get(table);
24
+ table.content.firstChild!.content.forEach((cell) => {
25
+ const colspan = cell.attrs.colspan || 1;
26
+ if (Array.isArray(cell.attrs.colwidth)) {
27
+ // We slice here to guard against our colwidth array having more entries
28
+ // Than the we actually span. We'll patch the document at a later point.
29
+ if (tableRef) {
30
+ const scalePercent = getTableScalingPercent(table, tableRef);
31
+ cell.attrs.colwidth.slice(0, colspan).forEach((width) => {
32
+ const fixedColWidth = getColWidthFix(width, map.width);
33
+ const scaledWidth = fixedColWidth * scalePercent;
34
+ const finalWidth = Math.max(scaledWidth, tableCellMinWidth);
35
+ cols.push([
36
+ 'col',
37
+ {
38
+ style: `width: ${finalWidth}px;`,
39
+ },
40
+ ]);
41
+ });
42
+ } else {
43
+ cell.attrs.colwidth.slice(0, colspan).forEach((width) => {
44
+ cols.push([
45
+ 'col',
46
+ {
47
+ style: `width: ${getColWidthFix(
48
+ width ? Math.max(width, tableCellMinWidth) : tableCellMinWidth,
49
+ map.width,
50
+ )}px;`,
51
+ },
52
+ ]);
53
+ });
54
+ }
55
+ } else {
56
+ // When we have merged cells on the first row (firstChild),
57
+ // We want to ensure we're creating the appropriate amount of
58
+ // cols the table still has.
59
+ cols.push(
60
+ ...Array.from({ length: colspan }, (_) => [
61
+ 'col',
62
+ { style: `width: ${tableCellMinWidth}px;` },
63
+ ]),
64
+ );
65
+ }
66
+ });
67
67
 
68
- return cols;
68
+ return cols;
69
69
  };
70
70
 
71
71
  export const insertColgroupFromNode = (
72
- tableRef: HTMLTableElement | null,
73
- table: PmNode,
74
- isTableScalingEnabled = false,
75
- shouldRemove = true,
72
+ tableRef: HTMLTableElement | null,
73
+ table: PmNode,
74
+ isTableScalingEnabled = false,
75
+ shouldRemove = true,
76
76
  ): HTMLCollection => {
77
- let colgroup = tableRef?.querySelector('colgroup') as HTMLElement;
78
- if (colgroup && shouldRemove) {
79
- tableRef?.removeChild(colgroup);
80
- }
77
+ let colgroup = tableRef?.querySelector('colgroup') as HTMLElement;
78
+ if (colgroup && shouldRemove) {
79
+ tableRef?.removeChild(colgroup);
80
+ }
81
81
 
82
- colgroup = renderColgroupFromNode(
83
- table,
84
- isTableScalingEnabled ? tableRef ?? undefined : undefined,
85
- );
86
- if (shouldRemove) {
87
- tableRef?.insertBefore(colgroup, tableRef?.firstChild);
88
- }
82
+ colgroup = renderColgroupFromNode(
83
+ table,
84
+ isTableScalingEnabled ? tableRef ?? undefined : undefined,
85
+ );
86
+ if (shouldRemove) {
87
+ tableRef?.insertBefore(colgroup, tableRef?.firstChild);
88
+ }
89
89
 
90
- return colgroup.children;
90
+ return colgroup.children;
91
91
  };
92
92
 
93
93
  export const hasTableBeenResized = (table: PmNode) => {
94
- return !!getFragmentBackingArray(table.content.firstChild!.content).find(
95
- (cell) => cell.attrs.colwidth,
96
- );
94
+ return !!getFragmentBackingArray(table.content.firstChild!.content).find(
95
+ (cell) => cell.attrs.colwidth,
96
+ );
97
97
  };
98
98
 
99
99
  /**
@@ -103,31 +103,31 @@ export const hasTableBeenResized = (table: PmNode) => {
103
103
  * @returns true if all column width is equal to tableCellMinWidth or null, false otherwise
104
104
  */
105
105
  export const isMinCellWidthTable = (table: PmNode) => {
106
- const cellArray = getFragmentBackingArray(table.content.firstChild!.content);
107
- const isTableMinCellWidth = cellArray.every((cell) => {
108
- return (
109
- (cell.attrs.colwidth && cell.attrs.colwidth[0] === tableCellMinWidth) ||
110
- cell.attrs.colwidth === null
111
- );
112
- });
106
+ const cellArray = getFragmentBackingArray(table.content.firstChild!.content);
107
+ const isTableMinCellWidth = cellArray.every((cell) => {
108
+ return (
109
+ (cell.attrs.colwidth && cell.attrs.colwidth[0] === tableCellMinWidth) ||
110
+ cell.attrs.colwidth === null
111
+ );
112
+ });
113
113
 
114
- return isTableMinCellWidth;
114
+ return isTableMinCellWidth;
115
115
  };
116
116
 
117
117
  function renderColgroupFromNode(
118
- table: PmNode,
119
- maybeTableRef: HTMLElement | undefined,
118
+ table: PmNode,
119
+ maybeTableRef: HTMLElement | undefined,
120
120
  ): HTMLElement {
121
- const rendered = DOMSerializer.renderSpec(document, [
122
- 'colgroup',
123
- {},
124
- ...generateColgroup(table, maybeTableRef),
125
- ]);
121
+ const rendered = DOMSerializer.renderSpec(document, [
122
+ 'colgroup',
123
+ {},
124
+ ...generateColgroup(table, maybeTableRef),
125
+ ]);
126
126
 
127
- return rendered.dom as HTMLElement;
127
+ return rendered.dom as HTMLElement;
128
128
  }
129
129
 
130
130
  export const getColgroupChildrenLength = (table: PmNode): number => {
131
- const map = TableMap.get(table);
132
- return map.width;
131
+ const map = TableMap.get(table);
132
+ return map.width;
133
133
  };
@@ -7,115 +7,112 @@ import { contentWidth } from './content-width';
7
7
  import { unitToNumber } from './unit-to-number';
8
8
 
9
9
  export interface ColumnState {
10
- index: number;
11
- width: number;
12
- minWidth: number;
10
+ index: number;
11
+ width: number;
12
+ minWidth: number;
13
13
  }
14
14
 
15
15
  // Reads `width` and `minWidth` of each column from DOM and returns `ColumnState` containing those values
16
16
  export const getColumnStateFromDOM = (
17
- cells: HTMLElement[],
18
- index: number,
19
- minWidth: number,
17
+ cells: HTMLElement[],
18
+ index: number,
19
+ minWidth: number,
20
20
  ): ColumnState => {
21
- const width = calculateColumnWidth(cells, calculateColumnWidthCallback);
22
-
23
- const minColumnWidth =
24
- width < minWidth
25
- ? // for newly created column (where width < minWidth) we set minWidth = tableNewColumnMinWidth (140px atm)
26
- tableNewColumnMinWidth
27
- : calculateColumnWidth(cells, calculateColumnMinWidthCallback(minWidth));
28
-
29
- return {
30
- index,
31
- width: width < minWidth ? tableNewColumnMinWidth : width,
32
- minWidth: minColumnWidth,
33
- };
21
+ const width = calculateColumnWidth(cells, calculateColumnWidthCallback);
22
+
23
+ const minColumnWidth =
24
+ width < minWidth
25
+ ? // for newly created column (where width < minWidth) we set minWidth = tableNewColumnMinWidth (140px atm)
26
+ tableNewColumnMinWidth
27
+ : calculateColumnWidth(cells, calculateColumnMinWidthCallback(minWidth));
28
+
29
+ return {
30
+ index,
31
+ width: width < minWidth ? tableNewColumnMinWidth : width,
32
+ minWidth: minColumnWidth,
33
+ };
34
34
  };
35
35
 
36
36
  export const getFreeSpace = (state: ColumnState) => {
37
- return Math.max(state.width - state.minWidth, 0);
37
+ return Math.max(state.width - state.minWidth, 0);
38
38
  };
39
39
 
40
40
  // Returns DOM refs of all cells in a column by `columnIndex`
41
41
  export const getCellsRefsInColumn = (
42
- columnIndex: number,
43
- table: PMNode,
44
- tableStart: number,
45
- domAtPos: (pos: number) => { node: Node; offset: number },
42
+ columnIndex: number,
43
+ table: PMNode,
44
+ tableStart: number,
45
+ domAtPos: (pos: number) => { node: Node; offset: number },
46
46
  ): HTMLElement[] => {
47
- const map = TableMap.get(table);
48
- const cellsPositions = map.cellsInRect({
49
- left: columnIndex,
50
- right: columnIndex + 1,
51
- top: 0,
52
- bottom: map.height,
53
- });
54
- const cells: HTMLElement[] = [];
55
- cellsPositions.forEach((pos) => {
56
- const col = findDomRefAtPos(pos + tableStart, domAtPos) as HTMLElement;
57
- if (col) {
58
- cells.push(col);
59
- }
60
- });
61
- return cells;
47
+ const map = TableMap.get(table);
48
+ const cellsPositions = map.cellsInRect({
49
+ left: columnIndex,
50
+ right: columnIndex + 1,
51
+ top: 0,
52
+ bottom: map.height,
53
+ });
54
+ const cells: HTMLElement[] = [];
55
+ cellsPositions.forEach((pos) => {
56
+ const col = findDomRefAtPos(pos + tableStart, domAtPos) as HTMLElement;
57
+ if (col) {
58
+ cells.push(col);
59
+ }
60
+ });
61
+ return cells;
62
62
  };
63
63
 
64
64
  // calculates column widths based on `cells` DOM refs
65
65
  export const calculateColumnWidth = (
66
- cells: HTMLElement[],
67
- calculateColumnWidthCb: (
68
- css: CSSStyleDeclaration,
69
- cellRef: HTMLElement,
70
- colSpan: number,
71
- ) => number,
66
+ cells: HTMLElement[],
67
+ calculateColumnWidthCb: (
68
+ css: CSSStyleDeclaration,
69
+ cellRef: HTMLElement,
70
+ colSpan: number,
71
+ ) => number,
72
72
  ): number => {
73
- let maxColWidth = 0;
74
- let colSpanWidth = 0;
73
+ let maxColWidth = 0;
74
+ let colSpanWidth = 0;
75
75
 
76
- cells.forEach((cellRef) => {
77
- const css = getComputedStyle(cellRef);
78
- const colspan = Number(cellRef.getAttribute('colspan') || 1);
76
+ cells.forEach((cellRef) => {
77
+ const css = getComputedStyle(cellRef);
78
+ const colspan = Number(cellRef.getAttribute('colspan') || 1);
79
79
 
80
- if (colspan > 1) {
81
- colSpanWidth = calculateColumnWidthCb(css, cellRef, colspan);
82
- return;
83
- }
80
+ if (colspan > 1) {
81
+ colSpanWidth = calculateColumnWidthCb(css, cellRef, colspan);
82
+ return;
83
+ }
84
84
 
85
- if (css) {
86
- const colWidth = calculateColumnWidthCb(css, cellRef, colspan);
87
- maxColWidth = Math.max(colWidth, maxColWidth);
88
- }
89
- });
85
+ if (css) {
86
+ const colWidth = calculateColumnWidthCb(css, cellRef, colspan);
87
+ maxColWidth = Math.max(colWidth, maxColWidth);
88
+ }
89
+ });
90
90
 
91
- return maxColWidth || colSpanWidth;
91
+ return maxColWidth || colSpanWidth;
92
92
  };
93
93
 
94
- export const addContainerLeftRightPadding = (
95
- amount: number,
96
- css: CSSStyleDeclaration,
97
- ): number =>
98
- amount + unitToNumber(css.paddingLeft) + unitToNumber(css.paddingRight);
94
+ export const addContainerLeftRightPadding = (amount: number, css: CSSStyleDeclaration): number =>
95
+ amount + unitToNumber(css.paddingLeft) + unitToNumber(css.paddingRight);
99
96
 
100
97
  function calculateColumnWidthCallback(css: CSSStyleDeclaration): number {
101
- return unitToNumber(css.width);
98
+ return unitToNumber(css.width);
102
99
  }
103
100
 
104
101
  function calculateColumnMinWidthCallback(
105
- minColumnWidth: number,
102
+ minColumnWidth: number,
106
103
  ): (css: CSSStyleDeclaration, cellRef: HTMLElement, colSpan: number) => number {
107
- return (css, cellRef, colSpan) => {
108
- if (colSpan && colSpan > 1) {
109
- return unitToNumber(css.width);
110
- }
111
-
112
- const { minWidth: minContentWidth } = contentWidth(cellRef, cellRef);
113
- // Override the min width, if there is content that can't collapse
114
- // Past a certain width.
115
- return Math.max(
116
- addContainerLeftRightPadding(minContentWidth, css),
117
- minContentWidth,
118
- minColumnWidth,
119
- );
120
- };
104
+ return (css, cellRef, colSpan) => {
105
+ if (colSpan && colSpan > 1) {
106
+ return unitToNumber(css.width);
107
+ }
108
+
109
+ const { minWidth: minContentWidth } = contentWidth(cellRef, cellRef);
110
+ // Override the min width, if there is content that can't collapse
111
+ // Past a certain width.
112
+ return Math.max(
113
+ addContainerLeftRightPadding(minContentWidth, css),
114
+ minContentWidth,
115
+ minColumnWidth,
116
+ );
117
+ };
121
118
  }