@atlaskit/editor-plugin-table 7.16.11 → 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 (242) hide show
  1. package/.eslintrc.js +3 -3
  2. package/CHANGELOG.md +8 -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 +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 +13 -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 +802 -816
  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 +13 -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 +2 -2
  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 +880 -912
  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
@@ -10,9 +10,9 @@ import { getBooleanFF } from '@atlaskit/platform-feature-flags';
10
10
 
11
11
  import type { ResizeState } from '../pm-plugins/table-resizing/utils';
12
12
  import {
13
- getTableContainerElementWidth,
14
- getTableElementWidth,
15
- hasTableBeenResized,
13
+ getTableContainerElementWidth,
14
+ getTableElementWidth,
15
+ hasTableBeenResized,
16
16
  } from '../pm-plugins/table-resizing/utils';
17
17
  import { isMinCellWidthTable } from '../pm-plugins/table-resizing/utils/colgroup';
18
18
  import { getResizeState } from '../pm-plugins/table-resizing/utils/resize-state';
@@ -26,79 +26,72 @@ import { scaleTableTo } from '../pm-plugins/table-resizing/utils/scale-table';
26
26
  * @returns
27
27
  */
28
28
  export const updateColumnWidths =
29
- (resizeState: ResizeState, table: PMNode, start: number) =>
30
- (tr: Transaction): Transaction => {
31
- const map = TableMap.get(table);
32
- const updatedCellsAttrs: { [key: number]: CellAttributes } = {};
33
-
34
- // calculating new attributes for each cell
35
- for (let columnIndex = 0; columnIndex < map.width; columnIndex++) {
36
- for (let rowIndex = 0; rowIndex < map.height; rowIndex++) {
37
- let { width } = resizeState.cols[columnIndex];
38
- if (resizeState.isScaled) {
39
- // Ensure that the width is an integer if the table has been scaled
40
- width = Math.floor(width);
41
- }
42
- const mapIndex = rowIndex * map.width + columnIndex;
43
- const cellPos = map.map[mapIndex];
44
- const attrs = updatedCellsAttrs[cellPos] || {
45
- ...table.nodeAt(cellPos)!.attrs,
46
- };
47
- const colspan = attrs.colspan || 1;
48
-
49
- if (attrs.colwidth && attrs.colwidth.length > colspan) {
50
- attrs.colwidth = attrs.colwidth.slice(0, colspan);
51
- }
52
-
53
- // Rowspanning cell that has already been handled
54
- if (rowIndex && map.map[mapIndex] === map.map[mapIndex - map.width]) {
55
- continue;
56
- }
57
- const colspanIndex =
58
- colspan === 1 ? 0 : columnIndex - map.colCount(cellPos);
59
- if (attrs.colwidth && attrs.colwidth[colspanIndex] === width) {
60
- continue;
61
- }
62
-
63
- let colwidths = attrs.colwidth
64
- ? attrs.colwidth.slice()
65
- : Array.from({ length: colspan }, (_) => 0);
66
-
67
- colwidths[colspanIndex] = width;
68
- if (colwidths.length > colspan) {
69
- colwidths = colwidths.slice(0, colspan);
70
- }
71
- updatedCellsAttrs[cellPos] = {
72
- ...attrs,
73
- colwidth: colwidths.includes(0) ? undefined : colwidths,
74
- };
75
- }
76
- }
77
-
78
- // updating all cells with new attributes
79
- const seen: { [key: number]: boolean } = {};
80
- for (let rowIndex = 0; rowIndex < map.height; rowIndex++) {
81
- for (let columnIndex = 0; columnIndex < map.width; columnIndex++) {
82
- const mapIndex = rowIndex * map.width + columnIndex;
83
- const pos = map.map[mapIndex];
84
- const cell = table.nodeAt(pos);
85
- if (!seen[pos] && cell) {
86
- if (updatedCellsAttrs[pos]) {
87
- tr.step(
88
- new AttrStep(
89
- pos + start,
90
- 'colwidth',
91
- updatedCellsAttrs[pos].colwidth,
92
- ),
93
- );
94
- }
95
- seen[pos] = true;
96
- }
97
- }
98
- }
99
-
100
- return tr;
101
- };
29
+ (resizeState: ResizeState, table: PMNode, start: number) =>
30
+ (tr: Transaction): Transaction => {
31
+ const map = TableMap.get(table);
32
+ const updatedCellsAttrs: { [key: number]: CellAttributes } = {};
33
+
34
+ // calculating new attributes for each cell
35
+ for (let columnIndex = 0; columnIndex < map.width; columnIndex++) {
36
+ for (let rowIndex = 0; rowIndex < map.height; rowIndex++) {
37
+ let { width } = resizeState.cols[columnIndex];
38
+ if (resizeState.isScaled) {
39
+ // Ensure that the width is an integer if the table has been scaled
40
+ width = Math.floor(width);
41
+ }
42
+ const mapIndex = rowIndex * map.width + columnIndex;
43
+ const cellPos = map.map[mapIndex];
44
+ const attrs = updatedCellsAttrs[cellPos] || {
45
+ ...table.nodeAt(cellPos)!.attrs,
46
+ };
47
+ const colspan = attrs.colspan || 1;
48
+
49
+ if (attrs.colwidth && attrs.colwidth.length > colspan) {
50
+ attrs.colwidth = attrs.colwidth.slice(0, colspan);
51
+ }
52
+
53
+ // Rowspanning cell that has already been handled
54
+ if (rowIndex && map.map[mapIndex] === map.map[mapIndex - map.width]) {
55
+ continue;
56
+ }
57
+ const colspanIndex = colspan === 1 ? 0 : columnIndex - map.colCount(cellPos);
58
+ if (attrs.colwidth && attrs.colwidth[colspanIndex] === width) {
59
+ continue;
60
+ }
61
+
62
+ let colwidths = attrs.colwidth
63
+ ? attrs.colwidth.slice()
64
+ : Array.from({ length: colspan }, (_) => 0);
65
+
66
+ colwidths[colspanIndex] = width;
67
+ if (colwidths.length > colspan) {
68
+ colwidths = colwidths.slice(0, colspan);
69
+ }
70
+ updatedCellsAttrs[cellPos] = {
71
+ ...attrs,
72
+ colwidth: colwidths.includes(0) ? undefined : colwidths,
73
+ };
74
+ }
75
+ }
76
+
77
+ // updating all cells with new attributes
78
+ const seen: { [key: number]: boolean } = {};
79
+ for (let rowIndex = 0; rowIndex < map.height; rowIndex++) {
80
+ for (let columnIndex = 0; columnIndex < map.width; columnIndex++) {
81
+ const mapIndex = rowIndex * map.width + columnIndex;
82
+ const pos = map.map[mapIndex];
83
+ const cell = table.nodeAt(pos);
84
+ if (!seen[pos] && cell) {
85
+ if (updatedCellsAttrs[pos]) {
86
+ tr.step(new AttrStep(pos + start, 'colwidth', updatedCellsAttrs[pos].colwidth));
87
+ }
88
+ seen[pos] = true;
89
+ }
90
+ }
91
+ }
92
+
93
+ return tr;
94
+ };
102
95
 
103
96
  /**
104
97
  * This function is called when user inserts/deletes a column in a table to;
@@ -111,140 +104,120 @@ export const updateColumnWidths =
111
104
  * @returns Updated transaction with rescaled columns for a given table
112
105
  */
113
106
  export const rescaleColumns =
114
- (isTableScalingEnabled = false) =>
115
- (table: ContentNodeWithPos, view: EditorView | undefined) =>
116
- (tr: Transaction): Transaction => {
117
- if (!view) {
118
- return tr;
119
- }
120
-
121
- const newTable = tr.doc.nodeAt(table.pos);
122
- const domAtPos = view.domAtPos.bind(view);
123
- const maybeTable = domAtPos(table.start).node;
124
- const maybeTableElement = getBooleanFF(
125
- 'platform.editor.explicit-html-element-check',
126
- )
127
- ? maybeTable instanceof HTMLElement
128
- ? maybeTable
129
- : null
130
- : (maybeTable as HTMLElement | null);
131
- const tableRef = maybeTableElement?.closest('table');
132
-
133
- if (!tableRef || !newTable) {
134
- return tr;
135
- }
136
-
137
- const isResized = hasTableBeenResized(table.node);
138
-
139
- let previousTableInfo = {
140
- width: 0,
141
- possibleMaxWidth: 0,
142
- isResized,
143
- };
144
-
145
- const tableDepth = view.state.doc.resolve(table.pos).depth;
146
- let shouldScale = isTableScalingEnabled && tableDepth === 0;
147
- if (
148
- shouldScale &&
149
- getBooleanFF('platform.editor.table.preserve-widths-with-lock-button')
150
- ) {
151
- shouldScale = newTable.attrs.displayMode !== 'fixed';
152
- }
153
-
154
- if (shouldScale) {
155
- previousTableInfo = {
156
- width: getTableElementWidth(table.node),
157
- possibleMaxWidth: getTableContainerElementWidth(table.node),
158
- isResized,
159
- };
160
- } else {
161
- previousTableInfo = {
162
- // when table is resized the tableRef client width will be 1px larger than colGroup, which is used in calculations
163
- width: isResized ? tableRef.clientWidth - 1 : tableRef.clientWidth,
164
- /** the is the width the table can reach before overflowing */
165
- possibleMaxWidth: tableRef?.parentElement?.clientWidth || 0,
166
- isResized,
167
- };
168
- }
169
-
170
- // determine the new table, based on new width
171
- const newTableInfo = {
172
- noOfColumns: TableMap.get(newTable).width,
173
- };
174
-
175
- if (!newTableInfo.noOfColumns || newTableInfo.noOfColumns <= 0) {
176
- return tr;
177
- }
178
-
179
- const averageColumnWidth =
180
- previousTableInfo.width / newTableInfo.noOfColumns;
181
-
182
- // If the table has not been resized (i.e. all columns will have the same width) and every column width is bigger than the minimum column width
183
- // we skip updating the size of columns here.
184
- if (
185
- !previousTableInfo.isResized &&
186
- averageColumnWidth > tableCellMinWidth
187
- ) {
188
- return tr;
189
- }
190
-
191
- const wasTableInOverflow =
192
- previousTableInfo.width > previousTableInfo.possibleMaxWidth;
193
-
194
- // If the table has not been resized, and each column width is smaller than the minimum column width
195
- // Or if the table has been resized, but each column width is either 48px or null
196
- // we update the table to have 48px for each column
197
- if (
198
- (!previousTableInfo.isResized &&
199
- averageColumnWidth <= tableCellMinWidth) ||
200
- (previousTableInfo.isResized && isMinCellWidthTable(table.node))
201
- ) {
202
- const widths = new Array(newTableInfo.noOfColumns).fill(
203
- tableCellMinWidth,
204
- );
205
- const cols = widths.map((_, index) => ({
206
- width: tableCellMinWidth,
207
- minWidth: tableCellMinWidth,
208
- index,
209
- }));
210
-
211
- const minWidthResizeState = {
212
- cols,
213
- widths,
214
- maxSize: previousTableInfo.possibleMaxWidth,
215
- tableWidth: previousTableInfo.width,
216
- overflow: wasTableInOverflow,
217
- };
218
- return updateColumnWidths(
219
- minWidthResizeState,
220
- table.node,
221
- table.start,
222
- )(tr);
223
- }
224
-
225
- let resizeState = getResizeState({
226
- minWidth: tableCellMinWidth,
227
- table: table.node,
228
- start: table.start,
229
- tableRef,
230
- domAtPos,
231
- maxSize: previousTableInfo.possibleMaxWidth,
232
- isTableScalingEnabled: shouldScale,
233
- });
234
-
235
- // Two scenarios that require scaling:
236
- // 1. If the new table width will result in the table going into overflow
237
- // we resize the cells to avoid it (e.g. adding a column)
238
- // 2. If the new table width will be shorter than the parent width, scale columns to fit parent
239
- if (
240
- (!wasTableInOverflow && resizeState.overflow) ||
241
- resizeState.tableWidth < resizeState.maxSize
242
- ) {
243
- resizeState = scaleTableTo(
244
- resizeState,
245
- previousTableInfo.possibleMaxWidth,
246
- );
247
- }
248
-
249
- return updateColumnWidths(resizeState, table.node, table.start)(tr);
250
- };
107
+ (isTableScalingEnabled = false) =>
108
+ (table: ContentNodeWithPos, view: EditorView | undefined) =>
109
+ (tr: Transaction): Transaction => {
110
+ if (!view) {
111
+ return tr;
112
+ }
113
+
114
+ const newTable = tr.doc.nodeAt(table.pos);
115
+ const domAtPos = view.domAtPos.bind(view);
116
+ const maybeTable = domAtPos(table.start).node;
117
+ const maybeTableElement = getBooleanFF('platform.editor.explicit-html-element-check')
118
+ ? maybeTable instanceof HTMLElement
119
+ ? maybeTable
120
+ : null
121
+ : (maybeTable as HTMLElement | null);
122
+ const tableRef = maybeTableElement?.closest('table');
123
+
124
+ if (!tableRef || !newTable) {
125
+ return tr;
126
+ }
127
+
128
+ const isResized = hasTableBeenResized(table.node);
129
+
130
+ let previousTableInfo = {
131
+ width: 0,
132
+ possibleMaxWidth: 0,
133
+ isResized,
134
+ };
135
+
136
+ const tableDepth = view.state.doc.resolve(table.pos).depth;
137
+ let shouldScale = isTableScalingEnabled && tableDepth === 0;
138
+ if (shouldScale && getBooleanFF('platform.editor.table.preserve-widths-with-lock-button')) {
139
+ shouldScale = newTable.attrs.displayMode !== 'fixed';
140
+ }
141
+
142
+ if (shouldScale) {
143
+ previousTableInfo = {
144
+ width: getTableElementWidth(table.node),
145
+ possibleMaxWidth: getTableContainerElementWidth(table.node),
146
+ isResized,
147
+ };
148
+ } else {
149
+ previousTableInfo = {
150
+ // when table is resized the tableRef client width will be 1px larger than colGroup, which is used in calculations
151
+ width: isResized ? tableRef.clientWidth - 1 : tableRef.clientWidth,
152
+ /** the is the width the table can reach before overflowing */
153
+ possibleMaxWidth: tableRef?.parentElement?.clientWidth || 0,
154
+ isResized,
155
+ };
156
+ }
157
+
158
+ // determine the new table, based on new width
159
+ const newTableInfo = {
160
+ noOfColumns: TableMap.get(newTable).width,
161
+ };
162
+
163
+ if (!newTableInfo.noOfColumns || newTableInfo.noOfColumns <= 0) {
164
+ return tr;
165
+ }
166
+
167
+ const averageColumnWidth = previousTableInfo.width / newTableInfo.noOfColumns;
168
+
169
+ // If the table has not been resized (i.e. all columns will have the same width) and every column width is bigger than the minimum column width
170
+ // we skip updating the size of columns here.
171
+ if (!previousTableInfo.isResized && averageColumnWidth > tableCellMinWidth) {
172
+ return tr;
173
+ }
174
+
175
+ const wasTableInOverflow = previousTableInfo.width > previousTableInfo.possibleMaxWidth;
176
+
177
+ // If the table has not been resized, and each column width is smaller than the minimum column width
178
+ // Or if the table has been resized, but each column width is either 48px or null
179
+ // we update the table to have 48px for each column
180
+ if (
181
+ (!previousTableInfo.isResized && averageColumnWidth <= tableCellMinWidth) ||
182
+ (previousTableInfo.isResized && isMinCellWidthTable(table.node))
183
+ ) {
184
+ const widths = new Array(newTableInfo.noOfColumns).fill(tableCellMinWidth);
185
+ const cols = widths.map((_, index) => ({
186
+ width: tableCellMinWidth,
187
+ minWidth: tableCellMinWidth,
188
+ index,
189
+ }));
190
+
191
+ const minWidthResizeState = {
192
+ cols,
193
+ widths,
194
+ maxSize: previousTableInfo.possibleMaxWidth,
195
+ tableWidth: previousTableInfo.width,
196
+ overflow: wasTableInOverflow,
197
+ };
198
+ return updateColumnWidths(minWidthResizeState, table.node, table.start)(tr);
199
+ }
200
+
201
+ let resizeState = getResizeState({
202
+ minWidth: tableCellMinWidth,
203
+ table: table.node,
204
+ start: table.start,
205
+ tableRef,
206
+ domAtPos,
207
+ maxSize: previousTableInfo.possibleMaxWidth,
208
+ isTableScalingEnabled: shouldScale,
209
+ });
210
+
211
+ // Two scenarios that require scaling:
212
+ // 1. If the new table width will result in the table going into overflow
213
+ // we resize the cells to avoid it (e.g. adding a column)
214
+ // 2. If the new table width will be shorter than the parent width, scale columns to fit parent
215
+ if (
216
+ (!wasTableInOverflow && resizeState.overflow) ||
217
+ resizeState.tableWidth < resizeState.maxSize
218
+ ) {
219
+ resizeState = scaleTableTo(resizeState, previousTableInfo.possibleMaxWidth);
220
+ }
221
+
222
+ return updateColumnWidths(resizeState, table.node, table.start)(tr);
223
+ };