@atlaskit/editor-plugin-table 7.16.10 → 7.16.12

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 (244) hide show
  1. package/.eslintrc.js +3 -3
  2. package/CHANGELOG.md +1836 -1831
  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 +41 -6
  6. package/dist/cjs/nodeviews/TableResizer.js +7 -7
  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 +19 -13
  14. package/dist/cjs/ui/ui-styles.js +25 -25
  15. package/dist/cjs/utils/merged-cells.js +3 -3
  16. package/dist/es2019/commands/misc.js +3 -3
  17. package/dist/es2019/nodeviews/TableContainer.js +43 -5
  18. package/dist/es2019/nodeviews/TableResizer.js +7 -7
  19. package/dist/es2019/nodeviews/TableRow.js +21 -21
  20. package/dist/es2019/pm-plugins/table-resizing/plugin.js +3 -3
  21. package/dist/es2019/pm-plugins/table-resizing/utils/resize-state.js +4 -4
  22. package/dist/es2019/pm-plugins/table-resizing/utils/scale-table.js +3 -3
  23. package/dist/es2019/ui/FloatingContextualMenu/styles.js +47 -47
  24. package/dist/es2019/ui/FloatingDragMenu/styles.js +30 -30
  25. package/dist/es2019/ui/common-styles.js +808 -814
  26. package/dist/es2019/ui/ui-styles.js +665 -678
  27. package/dist/es2019/utils/merged-cells.js +3 -3
  28. package/dist/esm/commands/misc.js +3 -3
  29. package/dist/esm/nodeviews/TableCell.js +10 -10
  30. package/dist/esm/nodeviews/TableContainer.js +42 -7
  31. package/dist/esm/nodeviews/TableResizer.js +7 -7
  32. package/dist/esm/nodeviews/TableRow.js +23 -23
  33. package/dist/esm/pm-plugins/table-resizing/plugin.js +3 -3
  34. package/dist/esm/pm-plugins/table-resizing/utils/resize-state.js +4 -4
  35. package/dist/esm/pm-plugins/table-resizing/utils/scale-table.js +3 -3
  36. package/dist/esm/ui/FloatingContextualMenu/styles.js +1 -1
  37. package/dist/esm/ui/FloatingDragMenu/styles.js +1 -1
  38. package/dist/esm/ui/common-styles.js +19 -13
  39. package/dist/esm/ui/ui-styles.js +25 -25
  40. package/dist/esm/utils/merged-cells.js +3 -3
  41. package/dist/types/pm-plugins/decorations/utils/index.d.ts +1 -1
  42. package/dist/types/pm-plugins/drag-and-drop/utils/autoscrollers.d.ts +1 -1
  43. package/dist/types/pm-plugins/drag-and-drop/utils/getDragBehaviour.d.ts +1 -1
  44. package/dist/types/pm-plugins/table-resizing/utils/index.d.ts +1 -1
  45. package/dist/types/ui/ColumnResizeWidget/index.d.ts +1 -1
  46. package/dist/types/ui/FloatingAlignmentButtons/FloatingAlignmentButtons.d.ts +1 -1
  47. package/dist/types/ui/FloatingToolbarLabel/FloatingToolbarLabel.d.ts +1 -1
  48. package/dist/types/ui/TableFloatingColumnControls/ColumnDropTargets/ColumnDropTarget.d.ts +1 -1
  49. package/dist/types/ui/TableFloatingControls/CornerControls/index.d.ts +1 -1
  50. package/dist/types/ui/icons/DragHandleDisabledIcon.d.ts +1 -1
  51. package/dist/types-ts4.5/pm-plugins/decorations/utils/index.d.ts +1 -1
  52. package/dist/types-ts4.5/pm-plugins/drag-and-drop/utils/autoscrollers.d.ts +1 -1
  53. package/dist/types-ts4.5/pm-plugins/drag-and-drop/utils/getDragBehaviour.d.ts +1 -1
  54. package/dist/types-ts4.5/pm-plugins/table-resizing/utils/index.d.ts +1 -1
  55. package/dist/types-ts4.5/ui/ColumnResizeWidget/index.d.ts +1 -1
  56. package/dist/types-ts4.5/ui/FloatingAlignmentButtons/FloatingAlignmentButtons.d.ts +1 -1
  57. package/dist/types-ts4.5/ui/FloatingToolbarLabel/FloatingToolbarLabel.d.ts +1 -1
  58. package/dist/types-ts4.5/ui/TableFloatingColumnControls/ColumnDropTargets/ColumnDropTarget.d.ts +1 -1
  59. package/dist/types-ts4.5/ui/TableFloatingControls/CornerControls/index.d.ts +1 -1
  60. package/dist/types-ts4.5/ui/icons/DragHandleDisabledIcon.d.ts +1 -1
  61. package/docs/0-intro.tsx +9 -7
  62. package/package.json +5 -4
  63. package/report.api.md +67 -66
  64. package/src/commands/clear.ts +36 -44
  65. package/src/commands/collapse.ts +8 -8
  66. package/src/commands/column-resize.ts +412 -452
  67. package/src/commands/delete.ts +14 -14
  68. package/src/commands/display-mode.ts +10 -11
  69. package/src/commands/go-to-next-cell.ts +48 -54
  70. package/src/commands/hover.ts +210 -227
  71. package/src/commands/index.ts +35 -35
  72. package/src/commands/insert.ts +208 -235
  73. package/src/commands/misc.ts +655 -748
  74. package/src/commands/referentiality.ts +9 -9
  75. package/src/commands/selection.ts +433 -563
  76. package/src/commands/sort.ts +68 -86
  77. package/src/commands/split-cell.ts +14 -14
  78. package/src/commands/toggle.ts +69 -67
  79. package/src/commands-with-analytics.ts +570 -639
  80. package/src/create-plugin-config.ts +13 -13
  81. package/src/event-handlers.ts +513 -612
  82. package/src/handlers.ts +120 -133
  83. package/src/nodeviews/ExternalDropTargets.tsx +68 -73
  84. package/src/nodeviews/OverflowShadowsObserver.ts +148 -157
  85. package/src/nodeviews/TableCell.ts +47 -54
  86. package/src/nodeviews/TableComponent.tsx +1018 -1112
  87. package/src/nodeviews/TableComponentWithSharedState.tsx +91 -94
  88. package/src/nodeviews/TableContainer.tsx +363 -339
  89. package/src/nodeviews/TableNodeViewBase.ts +19 -24
  90. package/src/nodeviews/TableResizer.tsx +565 -657
  91. package/src/nodeviews/TableRow.ts +580 -629
  92. package/src/nodeviews/TableStickyScrollbar.ts +173 -190
  93. package/src/nodeviews/__mocks__/OverflowShadowsObserver.ts +8 -8
  94. package/src/nodeviews/__mocks__/OverridableMock.ts +14 -15
  95. package/src/nodeviews/table.tsx +345 -375
  96. package/src/nodeviews/types.ts +21 -24
  97. package/src/nodeviews/update-overflow-shadows.ts +8 -14
  98. package/src/plugin.tsx +578 -603
  99. package/src/pm-plugins/analytics/actions.ts +10 -12
  100. package/src/pm-plugins/analytics/commands.ts +31 -37
  101. package/src/pm-plugins/analytics/plugin-factory.ts +4 -2
  102. package/src/pm-plugins/analytics/plugin-key.ts +1 -3
  103. package/src/pm-plugins/analytics/plugin.ts +60 -70
  104. package/src/pm-plugins/analytics/reducer.ts +19 -19
  105. package/src/pm-plugins/analytics/types.ts +10 -10
  106. package/src/pm-plugins/analytics/utils/moved-event.ts +38 -38
  107. package/src/pm-plugins/decorations/plugin.ts +58 -77
  108. package/src/pm-plugins/decorations/utils/column-controls.ts +59 -71
  109. package/src/pm-plugins/decorations/utils/column-resizing.ts +50 -57
  110. package/src/pm-plugins/decorations/utils/compose-decorations.ts +6 -6
  111. package/src/pm-plugins/decorations/utils/index.ts +3 -6
  112. package/src/pm-plugins/decorations/utils/types.ts +7 -12
  113. package/src/pm-plugins/default-table-selection.ts +3 -3
  114. package/src/pm-plugins/drag-and-drop/actions.ts +25 -25
  115. package/src/pm-plugins/drag-and-drop/commands-with-analytics.ts +158 -190
  116. package/src/pm-plugins/drag-and-drop/commands.ts +154 -170
  117. package/src/pm-plugins/drag-and-drop/consts.ts +4 -5
  118. package/src/pm-plugins/drag-and-drop/plugin-factory.ts +23 -20
  119. package/src/pm-plugins/drag-and-drop/plugin-key.ts +1 -3
  120. package/src/pm-plugins/drag-and-drop/plugin.ts +329 -383
  121. package/src/pm-plugins/drag-and-drop/reducer.ts +30 -30
  122. package/src/pm-plugins/drag-and-drop/types.ts +8 -8
  123. package/src/pm-plugins/drag-and-drop/utils/autoscrollers.ts +38 -41
  124. package/src/pm-plugins/drag-and-drop/utils/getDragBehaviour.ts +3 -6
  125. package/src/pm-plugins/drag-and-drop/utils/monitor.ts +57 -70
  126. package/src/pm-plugins/keymap.ts +208 -220
  127. package/src/pm-plugins/main.ts +348 -400
  128. package/src/pm-plugins/plugin-factory.ts +32 -34
  129. package/src/pm-plugins/safari-delete-composition-text-issue-workaround.ts +83 -97
  130. package/src/pm-plugins/sticky-headers/commands.ts +2 -6
  131. package/src/pm-plugins/sticky-headers/plugin-key.ts +1 -3
  132. package/src/pm-plugins/sticky-headers/plugin-state.ts +41 -44
  133. package/src/pm-plugins/sticky-headers/plugin.ts +4 -4
  134. package/src/pm-plugins/sticky-headers/types.ts +8 -8
  135. package/src/pm-plugins/sticky-headers/util.ts +10 -10
  136. package/src/pm-plugins/table-analytics.ts +70 -72
  137. package/src/pm-plugins/table-local-id.ts +180 -184
  138. package/src/pm-plugins/table-resizing/commands.ts +72 -85
  139. package/src/pm-plugins/table-resizing/event-handlers.ts +298 -317
  140. package/src/pm-plugins/table-resizing/plugin-factory.ts +10 -10
  141. package/src/pm-plugins/table-resizing/plugin-key.ts +1 -3
  142. package/src/pm-plugins/table-resizing/plugin.ts +61 -68
  143. package/src/pm-plugins/table-resizing/reducer.ts +30 -33
  144. package/src/pm-plugins/table-resizing/utils/colgroup.ts +84 -84
  145. package/src/pm-plugins/table-resizing/utils/column-state.ts +78 -81
  146. package/src/pm-plugins/table-resizing/utils/content-width.ts +94 -114
  147. package/src/pm-plugins/table-resizing/utils/dom.ts +93 -110
  148. package/src/pm-plugins/table-resizing/utils/index.ts +29 -34
  149. package/src/pm-plugins/table-resizing/utils/misc.ts +94 -119
  150. package/src/pm-plugins/table-resizing/utils/resize-column.ts +93 -106
  151. package/src/pm-plugins/table-resizing/utils/resize-logic.ts +240 -257
  152. package/src/pm-plugins/table-resizing/utils/resize-state.ts +343 -372
  153. package/src/pm-plugins/table-resizing/utils/scale-table.ts +202 -207
  154. package/src/pm-plugins/table-resizing/utils/types.ts +17 -17
  155. package/src/pm-plugins/table-resizing/utils/unit-to-number.ts +1 -2
  156. package/src/pm-plugins/table-selection-keymap.ts +25 -51
  157. package/src/pm-plugins/table-width.ts +191 -204
  158. package/src/pm-plugins/view-mode-sort/index.ts +223 -227
  159. package/src/pm-plugins/view-mode-sort/plugin-key.ts +3 -2
  160. package/src/pm-plugins/view-mode-sort/types.ts +12 -12
  161. package/src/pm-plugins/view-mode-sort/utils.ts +108 -117
  162. package/src/reducer.ts +139 -155
  163. package/src/toolbar.tsx +815 -905
  164. package/src/transforms/column-width.ts +186 -213
  165. package/src/transforms/delete-columns.ts +208 -222
  166. package/src/transforms/delete-rows.ts +117 -121
  167. package/src/transforms/fix-tables.ts +190 -215
  168. package/src/transforms/merge.ts +263 -269
  169. package/src/transforms/replace-table.ts +27 -43
  170. package/src/transforms/split.ts +65 -75
  171. package/src/types.ts +421 -427
  172. package/src/ui/ColumnResizeWidget/index.tsx +40 -47
  173. package/src/ui/DragHandle/HandleIconComponent.tsx +9 -13
  174. package/src/ui/DragHandle/index.tsx +221 -250
  175. package/src/ui/DragPreview/index.tsx +35 -35
  176. package/src/ui/FloatingAlignmentButtons/FloatingAlignmentButtons.tsx +33 -41
  177. package/src/ui/FloatingContextualButton/FixedButton.tsx +154 -157
  178. package/src/ui/FloatingContextualButton/index.tsx +109 -115
  179. package/src/ui/FloatingContextualButton/styles.ts +43 -46
  180. package/src/ui/FloatingContextualMenu/ContextualMenu.tsx +634 -694
  181. package/src/ui/FloatingContextualMenu/index.tsx +83 -101
  182. package/src/ui/FloatingContextualMenu/styles.ts +57 -65
  183. package/src/ui/FloatingDeleteButton/DeleteButton.tsx +37 -37
  184. package/src/ui/FloatingDeleteButton/getPopUpOptions.ts +47 -57
  185. package/src/ui/FloatingDeleteButton/index.tsx +319 -350
  186. package/src/ui/FloatingDragMenu/DragMenu.tsx +555 -596
  187. package/src/ui/FloatingDragMenu/DropdownMenu.tsx +152 -162
  188. package/src/ui/FloatingDragMenu/index.tsx +88 -102
  189. package/src/ui/FloatingDragMenu/styles.ts +51 -54
  190. package/src/ui/FloatingInsertButton/InsertButton.tsx +204 -217
  191. package/src/ui/FloatingInsertButton/getPopupOptions.ts +100 -115
  192. package/src/ui/FloatingInsertButton/index.tsx +248 -292
  193. package/src/ui/FloatingToolbarLabel/FloatingToolbarLabel.tsx +24 -29
  194. package/src/ui/TableFloatingColumnControls/ColumnControls/index.tsx +308 -329
  195. package/src/ui/TableFloatingColumnControls/ColumnDropTargets/ColumnDropTarget.tsx +85 -94
  196. package/src/ui/TableFloatingColumnControls/ColumnDropTargets/index.tsx +46 -46
  197. package/src/ui/TableFloatingColumnControls/index.tsx +116 -136
  198. package/src/ui/TableFloatingControls/CornerControls/ClassicCornerControls.tsx +79 -91
  199. package/src/ui/TableFloatingControls/CornerControls/DragCornerControls.tsx +95 -102
  200. package/src/ui/TableFloatingControls/CornerControls/index.tsx +1 -4
  201. package/src/ui/TableFloatingControls/CornerControls/types.ts +8 -8
  202. package/src/ui/TableFloatingControls/FloatingControlsWithSelection.tsx +50 -50
  203. package/src/ui/TableFloatingControls/NumberColumn/index.tsx +111 -124
  204. package/src/ui/TableFloatingControls/RowControls/ClassicControls.tsx +86 -105
  205. package/src/ui/TableFloatingControls/RowControls/DragControls.tsx +305 -341
  206. package/src/ui/TableFloatingControls/RowDropTarget/index.tsx +72 -75
  207. package/src/ui/TableFloatingControls/index.tsx +191 -193
  208. package/src/ui/TableFullWidthLabel/index.tsx +20 -20
  209. package/src/ui/common-styles.ts +881 -903
  210. package/src/ui/consts.ts +29 -74
  211. package/src/ui/icons/AddColLeftIcon.tsx +33 -39
  212. package/src/ui/icons/AddColRightIcon.tsx +33 -39
  213. package/src/ui/icons/AddRowAboveIcon.tsx +16 -22
  214. package/src/ui/icons/AddRowBelowIcon.tsx +33 -39
  215. package/src/ui/icons/DisplayModeIcon.tsx +31 -31
  216. package/src/ui/icons/DragHandleDisabledIcon.tsx +19 -21
  217. package/src/ui/icons/DragHandleIcon.tsx +12 -12
  218. package/src/ui/icons/DragInMotionIcon.tsx +45 -52
  219. package/src/ui/icons/MergeCellsIcon.tsx +22 -28
  220. package/src/ui/icons/MinimisedHandle.tsx +9 -9
  221. package/src/ui/icons/SplitCellIcon.tsx +30 -36
  222. package/src/ui/ui-styles.ts +769 -798
  223. package/src/utils/alignment.ts +1 -1
  224. package/src/utils/analytics.ts +192 -208
  225. package/src/utils/collapse.ts +55 -64
  226. package/src/utils/column-controls.ts +237 -254
  227. package/src/utils/create.ts +30 -30
  228. package/src/utils/decoration.ts +482 -502
  229. package/src/utils/dom.ts +127 -134
  230. package/src/utils/drag-menu.ts +322 -373
  231. package/src/utils/get-allow-add-column-custom-step.ts +4 -5
  232. package/src/utils/guidelines.ts +10 -21
  233. package/src/utils/index.ts +68 -68
  234. package/src/utils/merged-cells.ts +245 -254
  235. package/src/utils/nodes.ts +91 -106
  236. package/src/utils/paste.ts +119 -135
  237. package/src/utils/row-controls.ts +199 -213
  238. package/src/utils/selection.ts +77 -87
  239. package/src/utils/snapping.ts +84 -97
  240. package/src/utils/table.ts +44 -44
  241. package/src/utils/transforms.ts +5 -5
  242. package/src/utils/update-plugin-state-decorations.ts +5 -9
  243. package/tsconfig.app.json +107 -107
  244. package/tsconfig.dev.json +47 -47
@@ -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
  }