@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
@@ -1,30 +1,20 @@
1
1
  import type { CellAttributes } from '@atlaskit/adf-schema';
2
2
  import {
3
- getParentNodeWidth,
4
- getTableContainerWidth,
5
- layoutToWidth,
3
+ getParentNodeWidth,
4
+ getTableContainerWidth,
5
+ layoutToWidth,
6
6
  } from '@atlaskit/editor-common/node-width';
7
7
  import { calcTableWidth } from '@atlaskit/editor-common/styles';
8
8
  import type { GetEditorContainerWidth } from '@atlaskit/editor-common/types';
9
- import {
10
- getBreakpoint,
11
- mapBreakpointToLayoutMaxWidth,
12
- } from '@atlaskit/editor-common/ui';
13
- import {
14
- calcTableColumnWidths,
15
- containsClassName,
16
- } from '@atlaskit/editor-common/utils';
17
- import type {
18
- NodeSpec,
19
- Node as PMNode,
20
- ResolvedPos,
21
- } from '@atlaskit/editor-prosemirror/model';
9
+ import { getBreakpoint, mapBreakpointToLayoutMaxWidth } from '@atlaskit/editor-common/ui';
10
+ import { calcTableColumnWidths, containsClassName } from '@atlaskit/editor-common/utils';
11
+ import type { NodeSpec, Node as PMNode, ResolvedPos } from '@atlaskit/editor-prosemirror/model';
22
12
  import type { EditorState } from '@atlaskit/editor-prosemirror/state';
23
13
  import type { EditorView } from '@atlaskit/editor-prosemirror/view';
24
14
  import {
25
- akEditorFullWidthLayoutWidth,
26
- akEditorGutterPadding,
27
- akEditorTableNumberColumnWidth,
15
+ akEditorFullWidthLayoutWidth,
16
+ akEditorGutterPadding,
17
+ akEditorTableNumberColumnWidth,
28
18
  } from '@atlaskit/editor-shared-styles';
29
19
 
30
20
  import type { TableOptions } from '../../../nodeviews/types';
@@ -34,108 +24,99 @@ import { MAX_SCALING_PERCENT } from './consts';
34
24
 
35
25
  // Translates named layouts in number values.
36
26
  export function getLayoutSize(
37
- tableLayout: 'default' | 'wide' | 'full-width',
38
- containerWidth: number = 0,
39
- options: TableOptions,
27
+ tableLayout: 'default' | 'wide' | 'full-width',
28
+ containerWidth: number = 0,
29
+ options: TableOptions,
40
30
  ): number {
41
- const { isFullWidthModeEnabled } = options;
42
-
43
- if (isFullWidthModeEnabled) {
44
- return containerWidth
45
- ? Math.min(
46
- containerWidth - akEditorGutterPadding * 2,
47
- akEditorFullWidthLayoutWidth,
48
- )
49
- : akEditorFullWidthLayoutWidth;
50
- }
51
-
52
- const calculatedTableWidth = calcTableWidth(
53
- tableLayout,
54
- containerWidth,
55
- true,
56
- );
57
- if (calculatedTableWidth !== 'inherit') {
58
- return calculatedTableWidth;
59
- }
60
-
61
- return layoutToWidth[tableLayout] || containerWidth;
31
+ const { isFullWidthModeEnabled } = options;
32
+
33
+ if (isFullWidthModeEnabled) {
34
+ return containerWidth
35
+ ? Math.min(containerWidth - akEditorGutterPadding * 2, akEditorFullWidthLayoutWidth)
36
+ : akEditorFullWidthLayoutWidth;
37
+ }
38
+
39
+ const calculatedTableWidth = calcTableWidth(tableLayout, containerWidth, true);
40
+ if (calculatedTableWidth !== 'inherit') {
41
+ return calculatedTableWidth;
42
+ }
43
+
44
+ return layoutToWidth[tableLayout] || containerWidth;
62
45
  }
63
46
 
64
47
  export function getDefaultLayoutMaxWidth(containerWidth?: number): number {
65
- return mapBreakpointToLayoutMaxWidth(getBreakpoint(containerWidth));
48
+ return mapBreakpointToLayoutMaxWidth(getBreakpoint(containerWidth));
66
49
  }
67
50
 
68
51
  // Does the current position point at a cell.
69
52
  export function pointsAtCell($pos: ResolvedPos) {
70
- return (
71
- ($pos.parent.type.spec as NodeSpec & { tableRole: string }).tableRole ===
72
- 'row' && $pos.nodeAfter
73
- );
53
+ return (
54
+ ($pos.parent.type.spec as NodeSpec & { tableRole: string }).tableRole === 'row' &&
55
+ $pos.nodeAfter
56
+ );
74
57
  }
75
58
 
76
59
  // Get the current col width, handles colspan.
77
60
  export function currentColWidth(
78
- view: EditorView,
79
- cellPos: number,
80
- { colspan, colwidth }: CellAttributes,
61
+ view: EditorView,
62
+ cellPos: number,
63
+ { colspan, colwidth }: CellAttributes,
81
64
  ): number {
82
- let width = colwidth && colwidth[colwidth.length - 1];
83
- if (width) {
84
- return width;
85
- }
86
- // Not fixed, read current width from DOM
87
- let domWidth = (view.domAtPos(cellPos + 1).node as HTMLElement).offsetWidth;
88
- let parts = colspan || 0;
89
- if (colwidth) {
90
- for (let i = 0; i < (colspan || 0); i++) {
91
- if (colwidth[i]) {
92
- domWidth -= colwidth[i];
93
- parts--;
94
- }
95
- }
96
- }
97
-
98
- return domWidth / parts;
65
+ let width = colwidth && colwidth[colwidth.length - 1];
66
+ if (width) {
67
+ return width;
68
+ }
69
+ // Not fixed, read current width from DOM
70
+ let domWidth = (view.domAtPos(cellPos + 1).node as HTMLElement).offsetWidth;
71
+ let parts = colspan || 0;
72
+ if (colwidth) {
73
+ for (let i = 0; i < (colspan || 0); i++) {
74
+ if (colwidth[i]) {
75
+ domWidth -= colwidth[i];
76
+ parts--;
77
+ }
78
+ }
79
+ }
80
+
81
+ return domWidth / parts;
99
82
  }
100
83
 
101
84
  // Attempts to find a parent TD/TH depending on target element.
102
85
  export function domCellAround(target: HTMLElement | null): HTMLElement | null {
103
- while (target && target.nodeName !== 'TD' && target.nodeName !== 'TH') {
104
- target = containsClassName(target, 'ProseMirror')
105
- ? null
106
- : (target.parentNode as HTMLElement | null);
107
- }
108
- return target;
86
+ while (target && target.nodeName !== 'TD' && target.nodeName !== 'TH') {
87
+ target = containsClassName(target, 'ProseMirror')
88
+ ? null
89
+ : (target.parentNode as HTMLElement | null);
90
+ }
91
+ return target;
109
92
  }
110
93
 
111
94
  interface getTableMaxWidthProps {
112
- table: PMNode;
113
- tableStart: number;
114
- state: EditorState;
115
- layout: 'default' | 'wide' | 'full-width';
116
- getEditorContainerWidth: GetEditorContainerWidth;
95
+ table: PMNode;
96
+ tableStart: number;
97
+ state: EditorState;
98
+ layout: 'default' | 'wide' | 'full-width';
99
+ getEditorContainerWidth: GetEditorContainerWidth;
117
100
  }
118
101
 
119
102
  export const getTableMaxWidth = ({
120
- table,
121
- tableStart,
122
- state,
123
- layout,
124
- getEditorContainerWidth,
103
+ table,
104
+ tableStart,
105
+ state,
106
+ layout,
107
+ getEditorContainerWidth,
125
108
  }: getTableMaxWidthProps) => {
126
- const containerWidth = getEditorContainerWidth();
127
- const parentWidth = getParentNodeWidth(tableStart, state, containerWidth);
109
+ const containerWidth = getEditorContainerWidth();
110
+ const parentWidth = getParentNodeWidth(tableStart, state, containerWidth);
128
111
 
129
- let maxWidth =
130
- parentWidth ||
131
- table.attrs.width ||
132
- getLayoutSize(layout, containerWidth.width, {});
112
+ let maxWidth =
113
+ parentWidth || table.attrs.width || getLayoutSize(layout, containerWidth.width, {});
133
114
 
134
- if (table.attrs.isNumberColumnEnabled) {
135
- maxWidth -= akEditorTableNumberColumnWidth;
136
- }
115
+ if (table.attrs.isNumberColumnEnabled) {
116
+ maxWidth -= akEditorTableNumberColumnWidth;
117
+ }
137
118
 
138
- return maxWidth as number;
119
+ return maxWidth as number;
139
120
  };
140
121
 
141
122
  /**
@@ -144,37 +125,31 @@ export const getTableMaxWidth = ({
144
125
  * @returns calculated width of <table /> element derived from sum of colwidths on tableCell or tableHeader nodes or falls back to container width
145
126
  */
146
127
  export const getTableElementWidth = (table: PMNode) => {
147
- if (hasTableBeenResized(table)) {
148
- // TODO: is there a scenario where ADF columns are SMALLER than container width?
149
- return calcTableColumnWidths(table).reduce((sum, width) => sum + width, 0);
150
- }
128
+ if (hasTableBeenResized(table)) {
129
+ // TODO: is there a scenario where ADF columns are SMALLER than container width?
130
+ return calcTableColumnWidths(table).reduce((sum, width) => sum + width, 0);
131
+ }
151
132
 
152
- return getTableContainerElementWidth(table);
133
+ return getTableContainerElementWidth(table);
153
134
  };
154
135
 
155
136
  export const getTableContainerElementWidth = (table: PMNode) => {
156
- return getTableContainerWidth(table);
137
+ return getTableContainerWidth(table);
157
138
  };
158
139
 
159
- export const getTableScalingPercent = (
160
- table: PMNode,
161
- tableRef: HTMLElement | null,
162
- ) => {
163
- const tableWidth = getTableContainerElementWidth(table);
164
- let renderWidth = tableRef?.parentElement?.clientWidth || tableWidth;
165
- // minus 1 here to avoid any 1px scroll in Firefox
166
- let scalePercent = (renderWidth - 1) / tableWidth;
167
- scalePercent = Math.max(scalePercent, 1 - MAX_SCALING_PERCENT);
168
- return Math.min(scalePercent, 1);
140
+ export const getTableScalingPercent = (table: PMNode, tableRef: HTMLElement | null) => {
141
+ const tableWidth = getTableContainerElementWidth(table);
142
+ let renderWidth = tableRef?.parentElement?.clientWidth || tableWidth;
143
+ // minus 1 here to avoid any 1px scroll in Firefox
144
+ let scalePercent = (renderWidth - 1) / tableWidth;
145
+ scalePercent = Math.max(scalePercent, 1 - MAX_SCALING_PERCENT);
146
+ return Math.min(scalePercent, 1);
169
147
  };
170
148
 
171
- export const getStaticTableScalingPercent = (
172
- table: PMNode,
173
- tableRenderWidth: number,
174
- ) => {
175
- const tableWidth = getTableContainerElementWidth(table);
176
- // minus 1 here to avoid any 1px scroll in Firefox
177
- let scalePercent = (tableRenderWidth - 1) / tableWidth;
178
- scalePercent = Math.max(scalePercent, 1 - MAX_SCALING_PERCENT);
179
- return Math.min(scalePercent, 1);
149
+ export const getStaticTableScalingPercent = (table: PMNode, tableRenderWidth: number) => {
150
+ const tableWidth = getTableContainerElementWidth(table);
151
+ // minus 1 here to avoid any 1px scroll in Firefox
152
+ let scalePercent = (tableRenderWidth - 1) / tableWidth;
153
+ scalePercent = Math.max(scalePercent, 1 - MAX_SCALING_PERCENT);
154
+ return Math.min(scalePercent, 1);
180
155
  };
@@ -9,124 +9,111 @@ import { updateColgroup } from './resize-state';
9
9
  import type { ResizeState } from './types';
10
10
 
11
11
  export const resizeColumn = (
12
- resizeState: ResizeState,
13
- colIndex: number,
14
- amount: number,
15
- tableRef: HTMLElement | null,
16
- tableNode: PmNode,
17
- selectedColumns?: number[],
18
- isTableScalingEnabled = false,
12
+ resizeState: ResizeState,
13
+ colIndex: number,
14
+ amount: number,
15
+ tableRef: HTMLElement | null,
16
+ tableNode: PmNode,
17
+ selectedColumns?: number[],
18
+ isTableScalingEnabled = false,
19
19
  ): ResizeState => {
20
- let scalePercent = 1;
21
- let resizeAmount = amount;
20
+ let scalePercent = 1;
21
+ let resizeAmount = amount;
22
22
 
23
- if (isTableScalingEnabled) {
24
- scalePercent = getTableScalingPercent(tableNode, tableRef);
25
- resizeAmount = amount / scalePercent;
26
- }
23
+ if (isTableScalingEnabled) {
24
+ scalePercent = getTableScalingPercent(tableNode, tableRef);
25
+ resizeAmount = amount / scalePercent;
26
+ }
27
27
 
28
- const newState =
29
- resizeAmount > 0
30
- ? growColumn(resizeState, colIndex, resizeAmount, selectedColumns)
31
- : resizeAmount < 0
32
- ? shrinkColumn(resizeState, colIndex, resizeAmount, selectedColumns)
33
- : resizeState;
28
+ const newState =
29
+ resizeAmount > 0
30
+ ? growColumn(resizeState, colIndex, resizeAmount, selectedColumns)
31
+ : resizeAmount < 0
32
+ ? shrinkColumn(resizeState, colIndex, resizeAmount, selectedColumns)
33
+ : resizeState;
34
34
 
35
- updateColgroup(newState, tableRef, tableNode, isTableScalingEnabled);
35
+ updateColgroup(newState, tableRef, tableNode, isTableScalingEnabled);
36
36
 
37
- return newState;
37
+ return newState;
38
38
  };
39
39
 
40
40
  // try not scale table during resize
41
41
  export const resizeColumnAndTable = (
42
- resizeState: ResizeState,
43
- colIndex: number,
44
- amount: number,
45
- tableRef: HTMLElement,
46
- tableNode: PmNode,
47
- selectedColumns?: number[],
48
- isTableScalingEnabled = false,
49
- originalTableWidth?: number,
42
+ resizeState: ResizeState,
43
+ colIndex: number,
44
+ amount: number,
45
+ tableRef: HTMLElement,
46
+ tableNode: PmNode,
47
+ selectedColumns?: number[],
48
+ isTableScalingEnabled = false,
49
+ originalTableWidth?: number,
50
50
  ): ResizeState => {
51
- // TODO: can we use document state, and apply scaling factor?
52
- const tableWidth = tableRef.clientWidth;
53
- const tableContainerWidth = tableRef.closest(
54
- '.pm-table-container',
55
- )?.clientWidth;
56
-
57
- const isOverflowed = !!(
58
- tableWidth &&
59
- tableContainerWidth &&
60
- tableWidth > tableContainerWidth
61
- );
62
-
63
- let resizeAmount = amount * 2;
64
-
65
- // todo: reimplement - use getTableScalingPercentFrozen to get scaled percent before table width changes dynamically
66
- // let scalePercent = 1;
67
- // if (isTableScalingEnabled) {
68
- // import from ./misc
69
- // scalePercent = getStaticTableScalingPercent(
70
- // tableNode,
71
- // originalTableWidth || resizeState.maxSize,
72
- // );
73
- // resizeAmount = amount / scalePercent;
74
- // }
75
-
76
- // need to look at the resize amount and try to adjust the colgroups
77
- if (isOverflowed) {
78
- resizeAmount =
79
- amount < 0
80
- ? amount
81
- : resizeAmount -
82
- (tableNode.attrs.width + resizeAmount - tableContainerWidth) / 2;
83
- } else {
84
- resizeAmount =
85
- amount > 0 && tableContainerWidth
86
- ? resizeAmount -
87
- (tableNode.attrs.width + resizeAmount - tableContainerWidth) / 2
88
- : resizeAmount;
89
- }
90
-
91
- const newState = updateAffectedColumn(resizeState, colIndex, resizeAmount);
92
-
93
- // this function only updates the colgroup in DOM, it reverses the scalePercent
94
- // todo: change isScalingEnabled to true when reimplementing scaling
95
- updateColgroup(newState, tableRef, tableNode, false);
96
-
97
- // use the difference in width from affected column to update overall table width
98
- const delta =
99
- newState.cols[colIndex].width - resizeState.cols[colIndex].width;
100
-
101
- if (!isOverflowed) {
102
- updateTablePreview(delta, tableRef, tableNode);
103
- }
104
-
105
- return {
106
- ...newState,
107
- tableWidth: isOverflowed
108
- ? tableContainerWidth
109
- : resizeState.tableWidth + delta,
110
- };
51
+ // TODO: can we use document state, and apply scaling factor?
52
+ const tableWidth = tableRef.clientWidth;
53
+ const tableContainerWidth = tableRef.closest('.pm-table-container')?.clientWidth;
54
+
55
+ const isOverflowed = !!(tableWidth && tableContainerWidth && tableWidth > tableContainerWidth);
56
+
57
+ let resizeAmount = amount * 2;
58
+
59
+ // todo: reimplement - use getTableScalingPercentFrozen to get scaled percent before table width changes dynamically
60
+ // let scalePercent = 1;
61
+ // if (isTableScalingEnabled) {
62
+ // import from ./misc
63
+ // scalePercent = getStaticTableScalingPercent(
64
+ // tableNode,
65
+ // originalTableWidth || resizeState.maxSize,
66
+ // );
67
+ // resizeAmount = amount / scalePercent;
68
+ // }
69
+
70
+ // need to look at the resize amount and try to adjust the colgroups
71
+ if (isOverflowed) {
72
+ resizeAmount =
73
+ amount < 0
74
+ ? amount
75
+ : resizeAmount - (tableNode.attrs.width + resizeAmount - tableContainerWidth) / 2;
76
+ } else {
77
+ resizeAmount =
78
+ amount > 0 && tableContainerWidth
79
+ ? resizeAmount - (tableNode.attrs.width + resizeAmount - tableContainerWidth) / 2
80
+ : resizeAmount;
81
+ }
82
+
83
+ const newState = updateAffectedColumn(resizeState, colIndex, resizeAmount);
84
+
85
+ // this function only updates the colgroup in DOM, it reverses the scalePercent
86
+ // todo: change isScalingEnabled to true when reimplementing scaling
87
+ updateColgroup(newState, tableRef, tableNode, false);
88
+
89
+ // use the difference in width from affected column to update overall table width
90
+ const delta = newState.cols[colIndex].width - resizeState.cols[colIndex].width;
91
+
92
+ if (!isOverflowed) {
93
+ updateTablePreview(delta, tableRef, tableNode);
94
+ }
95
+
96
+ return {
97
+ ...newState,
98
+ tableWidth: isOverflowed ? tableContainerWidth : resizeState.tableWidth + delta,
99
+ };
111
100
  };
112
101
 
113
102
  const updateTablePreview = (
114
- resizeAmount: number,
115
- tableRef: HTMLElement | null,
116
- tableNode: PmNode,
103
+ resizeAmount: number,
104
+ tableRef: HTMLElement | null,
105
+ tableNode: PmNode,
117
106
  ) => {
118
- const currentWidth = getTableContainerElementWidth(tableNode);
119
- const resizingContainer = tableRef?.closest(
120
- `.${ClassName.TABLE_RESIZER_CONTAINER}`,
121
- );
122
- const resizingItem = resizingContainer?.querySelector('.resizer-item');
123
-
124
- if (resizingItem) {
125
- const newWidth = `${currentWidth + resizeAmount}px`;
126
- if (tableRef) {
127
- tableRef.style.width = newWidth;
128
- }
129
- (resizingContainer as HTMLElement).style.width = newWidth;
130
- (resizingItem as HTMLElement).style.width = newWidth;
131
- }
107
+ const currentWidth = getTableContainerElementWidth(tableNode);
108
+ const resizingContainer = tableRef?.closest(`.${ClassName.TABLE_RESIZER_CONTAINER}`);
109
+ const resizingItem = resizingContainer?.querySelector('.resizer-item');
110
+
111
+ if (resizingItem) {
112
+ const newWidth = `${currentWidth + resizeAmount}px`;
113
+ if (tableRef) {
114
+ tableRef.style.width = newWidth;
115
+ }
116
+ (resizingContainer as HTMLElement).style.width = newWidth;
117
+ (resizingItem as HTMLElement).style.width = newWidth;
118
+ }
132
119
  };