@atlaskit/editor-plugin-table 7.16.11 → 7.16.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (254) hide show
  1. package/.eslintrc.js +3 -3
  2. package/CHANGELOG.md +16 -0
  3. package/dist/cjs/commands/misc.js +3 -3
  4. package/dist/cjs/nodeviews/TableCell.js +10 -10
  5. package/dist/cjs/nodeviews/TableContainer.js +83 -27
  6. package/dist/cjs/nodeviews/TableResizer.js +40 -19
  7. package/dist/cjs/nodeviews/TableRow.js +23 -23
  8. package/dist/cjs/pm-plugins/table-resizing/plugin.js +3 -3
  9. package/dist/cjs/pm-plugins/table-resizing/utils/resize-state.js +4 -4
  10. package/dist/cjs/pm-plugins/table-resizing/utils/scale-table.js +3 -3
  11. package/dist/cjs/ui/FloatingContextualMenu/styles.js +1 -1
  12. package/dist/cjs/ui/FloatingDragMenu/styles.js +1 -1
  13. package/dist/cjs/ui/common-styles.js +13 -13
  14. package/dist/cjs/ui/ui-styles.js +25 -25
  15. package/dist/cjs/utils/guidelines.js +7 -4
  16. package/dist/cjs/utils/merged-cells.js +3 -3
  17. package/dist/cjs/utils/snapping.js +7 -8
  18. package/dist/es2019/commands/misc.js +3 -3
  19. package/dist/es2019/nodeviews/TableContainer.js +70 -9
  20. package/dist/es2019/nodeviews/TableResizer.js +42 -21
  21. package/dist/es2019/nodeviews/TableRow.js +21 -21
  22. package/dist/es2019/pm-plugins/table-resizing/plugin.js +3 -3
  23. package/dist/es2019/pm-plugins/table-resizing/utils/resize-state.js +4 -4
  24. package/dist/es2019/pm-plugins/table-resizing/utils/scale-table.js +3 -3
  25. package/dist/es2019/ui/FloatingContextualMenu/styles.js +47 -47
  26. package/dist/es2019/ui/FloatingDragMenu/styles.js +30 -30
  27. package/dist/es2019/ui/common-styles.js +802 -816
  28. package/dist/es2019/ui/ui-styles.js +665 -678
  29. package/dist/es2019/utils/guidelines.js +5 -2
  30. package/dist/es2019/utils/merged-cells.js +3 -3
  31. package/dist/es2019/utils/snapping.js +5 -6
  32. package/dist/esm/commands/misc.js +3 -3
  33. package/dist/esm/nodeviews/TableCell.js +10 -10
  34. package/dist/esm/nodeviews/TableContainer.js +85 -29
  35. package/dist/esm/nodeviews/TableResizer.js +42 -21
  36. package/dist/esm/nodeviews/TableRow.js +23 -23
  37. package/dist/esm/pm-plugins/table-resizing/plugin.js +3 -3
  38. package/dist/esm/pm-plugins/table-resizing/utils/resize-state.js +4 -4
  39. package/dist/esm/pm-plugins/table-resizing/utils/scale-table.js +3 -3
  40. package/dist/esm/ui/FloatingContextualMenu/styles.js +1 -1
  41. package/dist/esm/ui/FloatingDragMenu/styles.js +1 -1
  42. package/dist/esm/ui/common-styles.js +13 -13
  43. package/dist/esm/ui/ui-styles.js +25 -25
  44. package/dist/esm/utils/guidelines.js +6 -3
  45. package/dist/esm/utils/merged-cells.js +3 -3
  46. package/dist/esm/utils/snapping.js +6 -7
  47. package/dist/types/nodeviews/TableResizer.d.ts +2 -1
  48. package/dist/types/pm-plugins/decorations/utils/index.d.ts +1 -1
  49. package/dist/types/pm-plugins/drag-and-drop/utils/autoscrollers.d.ts +1 -1
  50. package/dist/types/pm-plugins/drag-and-drop/utils/getDragBehaviour.d.ts +1 -1
  51. package/dist/types/pm-plugins/table-resizing/utils/index.d.ts +1 -1
  52. package/dist/types/ui/ColumnResizeWidget/index.d.ts +1 -1
  53. package/dist/types/ui/FloatingAlignmentButtons/FloatingAlignmentButtons.d.ts +1 -1
  54. package/dist/types/ui/FloatingToolbarLabel/FloatingToolbarLabel.d.ts +1 -1
  55. package/dist/types/ui/TableFloatingColumnControls/ColumnDropTargets/ColumnDropTarget.d.ts +1 -1
  56. package/dist/types/ui/TableFloatingControls/CornerControls/index.d.ts +1 -1
  57. package/dist/types/ui/icons/DragHandleDisabledIcon.d.ts +1 -1
  58. package/dist/types/utils/guidelines.d.ts +2 -1
  59. package/dist/types/utils/snapping.d.ts +3 -2
  60. package/dist/types-ts4.5/nodeviews/TableResizer.d.ts +2 -1
  61. package/dist/types-ts4.5/pm-plugins/decorations/utils/index.d.ts +1 -1
  62. package/dist/types-ts4.5/pm-plugins/drag-and-drop/utils/autoscrollers.d.ts +1 -1
  63. package/dist/types-ts4.5/pm-plugins/drag-and-drop/utils/getDragBehaviour.d.ts +1 -1
  64. package/dist/types-ts4.5/pm-plugins/table-resizing/utils/index.d.ts +1 -1
  65. package/dist/types-ts4.5/ui/ColumnResizeWidget/index.d.ts +1 -1
  66. package/dist/types-ts4.5/ui/FloatingAlignmentButtons/FloatingAlignmentButtons.d.ts +1 -1
  67. package/dist/types-ts4.5/ui/FloatingToolbarLabel/FloatingToolbarLabel.d.ts +1 -1
  68. package/dist/types-ts4.5/ui/TableFloatingColumnControls/ColumnDropTargets/ColumnDropTarget.d.ts +1 -1
  69. package/dist/types-ts4.5/ui/TableFloatingControls/CornerControls/index.d.ts +1 -1
  70. package/dist/types-ts4.5/ui/icons/DragHandleDisabledIcon.d.ts +1 -1
  71. package/dist/types-ts4.5/utils/guidelines.d.ts +2 -1
  72. package/dist/types-ts4.5/utils/snapping.d.ts +3 -2
  73. package/docs/0-intro.tsx +9 -7
  74. package/package.json +3 -3
  75. package/report.api.md +67 -66
  76. package/src/commands/clear.ts +36 -44
  77. package/src/commands/collapse.ts +8 -8
  78. package/src/commands/column-resize.ts +412 -452
  79. package/src/commands/delete.ts +14 -14
  80. package/src/commands/display-mode.ts +10 -11
  81. package/src/commands/go-to-next-cell.ts +48 -54
  82. package/src/commands/hover.ts +210 -227
  83. package/src/commands/index.ts +35 -35
  84. package/src/commands/insert.ts +208 -235
  85. package/src/commands/misc.ts +655 -748
  86. package/src/commands/referentiality.ts +9 -9
  87. package/src/commands/selection.ts +433 -563
  88. package/src/commands/sort.ts +68 -86
  89. package/src/commands/split-cell.ts +14 -14
  90. package/src/commands/toggle.ts +69 -67
  91. package/src/commands-with-analytics.ts +570 -639
  92. package/src/create-plugin-config.ts +13 -13
  93. package/src/event-handlers.ts +513 -612
  94. package/src/handlers.ts +120 -133
  95. package/src/nodeviews/ExternalDropTargets.tsx +68 -73
  96. package/src/nodeviews/OverflowShadowsObserver.ts +148 -157
  97. package/src/nodeviews/TableCell.ts +47 -54
  98. package/src/nodeviews/TableComponent.tsx +1018 -1112
  99. package/src/nodeviews/TableComponentWithSharedState.tsx +91 -94
  100. package/src/nodeviews/TableContainer.tsx +384 -340
  101. package/src/nodeviews/TableNodeViewBase.ts +19 -24
  102. package/src/nodeviews/TableResizer.tsx +642 -653
  103. package/src/nodeviews/TableRow.ts +580 -629
  104. package/src/nodeviews/TableStickyScrollbar.ts +173 -190
  105. package/src/nodeviews/__mocks__/OverflowShadowsObserver.ts +8 -8
  106. package/src/nodeviews/__mocks__/OverridableMock.ts +14 -15
  107. package/src/nodeviews/table.tsx +345 -375
  108. package/src/nodeviews/types.ts +21 -24
  109. package/src/nodeviews/update-overflow-shadows.ts +8 -14
  110. package/src/plugin.tsx +578 -603
  111. package/src/pm-plugins/analytics/actions.ts +10 -12
  112. package/src/pm-plugins/analytics/commands.ts +31 -37
  113. package/src/pm-plugins/analytics/plugin-factory.ts +4 -2
  114. package/src/pm-plugins/analytics/plugin-key.ts +1 -3
  115. package/src/pm-plugins/analytics/plugin.ts +60 -70
  116. package/src/pm-plugins/analytics/reducer.ts +19 -19
  117. package/src/pm-plugins/analytics/types.ts +10 -10
  118. package/src/pm-plugins/analytics/utils/moved-event.ts +38 -38
  119. package/src/pm-plugins/decorations/plugin.ts +58 -77
  120. package/src/pm-plugins/decorations/utils/column-controls.ts +59 -71
  121. package/src/pm-plugins/decorations/utils/column-resizing.ts +50 -57
  122. package/src/pm-plugins/decorations/utils/compose-decorations.ts +6 -6
  123. package/src/pm-plugins/decorations/utils/index.ts +3 -6
  124. package/src/pm-plugins/decorations/utils/types.ts +7 -12
  125. package/src/pm-plugins/default-table-selection.ts +3 -3
  126. package/src/pm-plugins/drag-and-drop/actions.ts +25 -25
  127. package/src/pm-plugins/drag-and-drop/commands-with-analytics.ts +158 -190
  128. package/src/pm-plugins/drag-and-drop/commands.ts +154 -170
  129. package/src/pm-plugins/drag-and-drop/consts.ts +4 -5
  130. package/src/pm-plugins/drag-and-drop/plugin-factory.ts +23 -20
  131. package/src/pm-plugins/drag-and-drop/plugin-key.ts +1 -3
  132. package/src/pm-plugins/drag-and-drop/plugin.ts +329 -383
  133. package/src/pm-plugins/drag-and-drop/reducer.ts +30 -30
  134. package/src/pm-plugins/drag-and-drop/types.ts +8 -8
  135. package/src/pm-plugins/drag-and-drop/utils/autoscrollers.ts +38 -41
  136. package/src/pm-plugins/drag-and-drop/utils/getDragBehaviour.ts +3 -6
  137. package/src/pm-plugins/drag-and-drop/utils/monitor.ts +57 -70
  138. package/src/pm-plugins/keymap.ts +208 -220
  139. package/src/pm-plugins/main.ts +348 -400
  140. package/src/pm-plugins/plugin-factory.ts +32 -34
  141. package/src/pm-plugins/safari-delete-composition-text-issue-workaround.ts +83 -97
  142. package/src/pm-plugins/sticky-headers/commands.ts +2 -6
  143. package/src/pm-plugins/sticky-headers/plugin-key.ts +1 -3
  144. package/src/pm-plugins/sticky-headers/plugin-state.ts +41 -44
  145. package/src/pm-plugins/sticky-headers/plugin.ts +4 -4
  146. package/src/pm-plugins/sticky-headers/types.ts +8 -8
  147. package/src/pm-plugins/sticky-headers/util.ts +10 -10
  148. package/src/pm-plugins/table-analytics.ts +70 -72
  149. package/src/pm-plugins/table-local-id.ts +180 -184
  150. package/src/pm-plugins/table-resizing/commands.ts +72 -85
  151. package/src/pm-plugins/table-resizing/event-handlers.ts +298 -317
  152. package/src/pm-plugins/table-resizing/plugin-factory.ts +10 -10
  153. package/src/pm-plugins/table-resizing/plugin-key.ts +1 -3
  154. package/src/pm-plugins/table-resizing/plugin.ts +61 -68
  155. package/src/pm-plugins/table-resizing/reducer.ts +30 -33
  156. package/src/pm-plugins/table-resizing/utils/colgroup.ts +84 -84
  157. package/src/pm-plugins/table-resizing/utils/column-state.ts +78 -81
  158. package/src/pm-plugins/table-resizing/utils/content-width.ts +94 -114
  159. package/src/pm-plugins/table-resizing/utils/dom.ts +93 -110
  160. package/src/pm-plugins/table-resizing/utils/index.ts +29 -34
  161. package/src/pm-plugins/table-resizing/utils/misc.ts +94 -119
  162. package/src/pm-plugins/table-resizing/utils/resize-column.ts +93 -106
  163. package/src/pm-plugins/table-resizing/utils/resize-logic.ts +240 -257
  164. package/src/pm-plugins/table-resizing/utils/resize-state.ts +343 -372
  165. package/src/pm-plugins/table-resizing/utils/scale-table.ts +202 -207
  166. package/src/pm-plugins/table-resizing/utils/types.ts +17 -17
  167. package/src/pm-plugins/table-resizing/utils/unit-to-number.ts +1 -2
  168. package/src/pm-plugins/table-selection-keymap.ts +25 -51
  169. package/src/pm-plugins/table-width.ts +191 -204
  170. package/src/pm-plugins/view-mode-sort/index.ts +223 -227
  171. package/src/pm-plugins/view-mode-sort/plugin-key.ts +3 -2
  172. package/src/pm-plugins/view-mode-sort/types.ts +12 -12
  173. package/src/pm-plugins/view-mode-sort/utils.ts +108 -117
  174. package/src/reducer.ts +139 -155
  175. package/src/toolbar.tsx +815 -905
  176. package/src/transforms/column-width.ts +186 -213
  177. package/src/transforms/delete-columns.ts +208 -222
  178. package/src/transforms/delete-rows.ts +117 -121
  179. package/src/transforms/fix-tables.ts +190 -215
  180. package/src/transforms/merge.ts +263 -269
  181. package/src/transforms/replace-table.ts +27 -43
  182. package/src/transforms/split.ts +65 -75
  183. package/src/types.ts +421 -427
  184. package/src/ui/ColumnResizeWidget/index.tsx +40 -47
  185. package/src/ui/DragHandle/HandleIconComponent.tsx +9 -13
  186. package/src/ui/DragHandle/index.tsx +221 -250
  187. package/src/ui/DragPreview/index.tsx +35 -35
  188. package/src/ui/FloatingAlignmentButtons/FloatingAlignmentButtons.tsx +33 -41
  189. package/src/ui/FloatingContextualButton/FixedButton.tsx +154 -157
  190. package/src/ui/FloatingContextualButton/index.tsx +109 -115
  191. package/src/ui/FloatingContextualButton/styles.ts +43 -46
  192. package/src/ui/FloatingContextualMenu/ContextualMenu.tsx +634 -694
  193. package/src/ui/FloatingContextualMenu/index.tsx +83 -101
  194. package/src/ui/FloatingContextualMenu/styles.ts +57 -65
  195. package/src/ui/FloatingDeleteButton/DeleteButton.tsx +37 -37
  196. package/src/ui/FloatingDeleteButton/getPopUpOptions.ts +47 -57
  197. package/src/ui/FloatingDeleteButton/index.tsx +319 -350
  198. package/src/ui/FloatingDragMenu/DragMenu.tsx +555 -596
  199. package/src/ui/FloatingDragMenu/DropdownMenu.tsx +152 -162
  200. package/src/ui/FloatingDragMenu/index.tsx +88 -102
  201. package/src/ui/FloatingDragMenu/styles.ts +51 -54
  202. package/src/ui/FloatingInsertButton/InsertButton.tsx +204 -217
  203. package/src/ui/FloatingInsertButton/getPopupOptions.ts +100 -115
  204. package/src/ui/FloatingInsertButton/index.tsx +248 -292
  205. package/src/ui/FloatingToolbarLabel/FloatingToolbarLabel.tsx +24 -29
  206. package/src/ui/TableFloatingColumnControls/ColumnControls/index.tsx +308 -329
  207. package/src/ui/TableFloatingColumnControls/ColumnDropTargets/ColumnDropTarget.tsx +85 -94
  208. package/src/ui/TableFloatingColumnControls/ColumnDropTargets/index.tsx +46 -46
  209. package/src/ui/TableFloatingColumnControls/index.tsx +116 -136
  210. package/src/ui/TableFloatingControls/CornerControls/ClassicCornerControls.tsx +79 -91
  211. package/src/ui/TableFloatingControls/CornerControls/DragCornerControls.tsx +95 -102
  212. package/src/ui/TableFloatingControls/CornerControls/index.tsx +1 -4
  213. package/src/ui/TableFloatingControls/CornerControls/types.ts +8 -8
  214. package/src/ui/TableFloatingControls/FloatingControlsWithSelection.tsx +50 -50
  215. package/src/ui/TableFloatingControls/NumberColumn/index.tsx +111 -124
  216. package/src/ui/TableFloatingControls/RowControls/ClassicControls.tsx +86 -105
  217. package/src/ui/TableFloatingControls/RowControls/DragControls.tsx +305 -341
  218. package/src/ui/TableFloatingControls/RowDropTarget/index.tsx +72 -75
  219. package/src/ui/TableFloatingControls/index.tsx +191 -193
  220. package/src/ui/TableFullWidthLabel/index.tsx +20 -20
  221. package/src/ui/common-styles.ts +880 -912
  222. package/src/ui/consts.ts +29 -74
  223. package/src/ui/icons/AddColLeftIcon.tsx +33 -39
  224. package/src/ui/icons/AddColRightIcon.tsx +33 -39
  225. package/src/ui/icons/AddRowAboveIcon.tsx +16 -22
  226. package/src/ui/icons/AddRowBelowIcon.tsx +33 -39
  227. package/src/ui/icons/DisplayModeIcon.tsx +31 -31
  228. package/src/ui/icons/DragHandleDisabledIcon.tsx +19 -21
  229. package/src/ui/icons/DragHandleIcon.tsx +12 -12
  230. package/src/ui/icons/DragInMotionIcon.tsx +45 -52
  231. package/src/ui/icons/MergeCellsIcon.tsx +22 -28
  232. package/src/ui/icons/MinimisedHandle.tsx +9 -9
  233. package/src/ui/icons/SplitCellIcon.tsx +30 -36
  234. package/src/ui/ui-styles.ts +769 -798
  235. package/src/utils/alignment.ts +1 -1
  236. package/src/utils/analytics.ts +192 -208
  237. package/src/utils/collapse.ts +55 -64
  238. package/src/utils/column-controls.ts +237 -254
  239. package/src/utils/create.ts +30 -30
  240. package/src/utils/decoration.ts +482 -502
  241. package/src/utils/dom.ts +127 -134
  242. package/src/utils/drag-menu.ts +322 -373
  243. package/src/utils/get-allow-add-column-custom-step.ts +4 -5
  244. package/src/utils/guidelines.ts +16 -21
  245. package/src/utils/index.ts +68 -68
  246. package/src/utils/merged-cells.ts +245 -254
  247. package/src/utils/nodes.ts +91 -106
  248. package/src/utils/paste.ts +119 -135
  249. package/src/utils/row-controls.ts +199 -213
  250. package/src/utils/selection.ts +77 -87
  251. package/src/utils/snapping.ts +87 -100
  252. package/src/utils/table.ts +44 -44
  253. package/src/utils/transforms.ts +5 -5
  254. package/src/utils/update-plugin-state-decorations.ts +5 -9
@@ -8,71 +8,68 @@ import { TableCssClassName as ClassName } from '../../types';
8
8
  import { dragMenuDropdownWidth } from '../consts';
9
9
 
10
10
  export const cellColourPreviewStyles = (selectedColor: string) =>
11
- css({
12
- '&::before': {
13
- background: selectedColor,
14
- },
15
- });
11
+ css({
12
+ '&::before': {
13
+ background: selectedColor,
14
+ },
15
+ });
16
16
 
17
17
  export const elementBeforeIconStyles = css({
18
- marginRight: token('space.negative.075', '-6px'),
19
- display: 'flex',
18
+ marginRight: token('space.negative.075', '-6px'),
19
+ display: 'flex',
20
20
  });
21
21
 
22
22
  // eslint-disable-next-line @atlaskit/design-system/no-css-tagged-template-expression -- needs manual remediation
23
23
  export const dragMenuBackgroundColorStyles = css`
24
- .${ClassName.DRAG_SUBMENU} {
25
- border-radius: ${token('border.radius', '3px')};
26
- background: ${token('elevation.surface.overlay', 'white')};
27
- box-shadow: ${token(
28
- 'elevation.shadow.overlay',
29
- `0 4px 8px -2px ${N60A}, 0 0 1px ${N60A}`,
30
- )};
31
- display: block;
32
- position: absolute;
33
- top: 0;
34
- left: ${dragMenuDropdownWidth}px;
35
- padding: ${token('space.100', '8px')};
24
+ .${ClassName.DRAG_SUBMENU} {
25
+ border-radius: ${token('border.radius', '3px')};
26
+ background: ${token('elevation.surface.overlay', 'white')};
27
+ box-shadow: ${token('elevation.shadow.overlay', `0 4px 8px -2px ${N60A}, 0 0 1px ${N60A}`)};
28
+ display: block;
29
+ position: absolute;
30
+ top: 0;
31
+ left: ${dragMenuDropdownWidth}px;
32
+ padding: ${token('space.100', '8px')};
36
33
 
37
- > div {
38
- padding: 0;
39
- }
40
- }
34
+ > div {
35
+ padding: 0;
36
+ }
37
+ }
41
38
 
42
- .${ClassName.DRAG_SUBMENU_ICON} {
43
- display: flex;
39
+ .${ClassName.DRAG_SUBMENU_ICON} {
40
+ display: flex;
44
41
 
45
- &::before {
46
- content: '';
47
- display: block;
48
- border: 1px solid ${tableBackgroundBorderColor};
49
- border-radius: ${token('border.radius', '3px')};
50
- width: 14px;
51
- height: 14px;
52
- }
42
+ &::before {
43
+ content: '';
44
+ display: block;
45
+ border: 1px solid ${tableBackgroundBorderColor};
46
+ border-radius: ${token('border.radius', '3px')};
47
+ width: 14px;
48
+ height: 14px;
49
+ }
53
50
 
54
- &::after {
55
- content: '›';
56
- margin-left: ${token('space.050', '4px')};
57
- line-height: 14px;
58
- color: ${token('color.icon', N90)};
59
- }
60
- }
51
+ &::after {
52
+ content: '›';
53
+ margin-left: ${token('space.050', '4px')};
54
+ line-height: 14px;
55
+ color: ${token('color.icon', N90)};
56
+ }
57
+ }
61
58
  `;
62
59
 
63
60
  export const toggleStyles = css({
64
- display: 'flex',
65
- "input[type='checkbox']": {
66
- width: '30px',
67
- height: '14px',
68
- pointerEvents: 'initial',
69
- cursor: 'pointer',
70
- },
71
- '> label': {
72
- margin: '0px',
73
- pointerEvents: 'none',
74
- '> span': {
75
- pointerEvents: 'none',
76
- },
77
- },
61
+ display: 'flex',
62
+ "input[type='checkbox']": {
63
+ width: '30px',
64
+ height: '14px',
65
+ pointerEvents: 'initial',
66
+ cursor: 'pointer',
67
+ },
68
+ '> label': {
69
+ margin: '0px',
70
+ pointerEvents: 'none',
71
+ '> span': {
72
+ pointerEvents: 'none',
73
+ },
74
+ },
78
75
  });
@@ -6,11 +6,7 @@ import classnames from 'classnames';
6
6
  import type { WrappedComponentProps } from 'react-intl-next';
7
7
  import { injectIntl } from 'react-intl-next';
8
8
 
9
- import {
10
- addColumnAfter,
11
- addRowAfter,
12
- ToolTipContent,
13
- } from '@atlaskit/editor-common/keymaps';
9
+ import { addColumnAfter, addRowAfter, ToolTipContent } from '@atlaskit/editor-common/keymaps';
14
10
  import { tableMessages as messages } from '@atlaskit/editor-common/messages';
15
11
  import { tableMarginTop } from '@atlaskit/editor-common/styles';
16
12
  import { closestElement } from '@atlaskit/editor-common/utils';
@@ -23,242 +19,233 @@ import { TableCssClassName as ClassName } from '../../types';
23
19
  import { tableToolbarSize } from '../consts';
24
20
 
25
21
  export interface ButtonProps {
26
- type: TableDirection;
27
- tableRef: HTMLElement;
28
- onMouseDown: (event: SyntheticEvent<HTMLButtonElement>) => void;
29
- hasStickyHeaders: boolean;
22
+ type: TableDirection;
23
+ tableRef: HTMLElement;
24
+ onMouseDown: (event: SyntheticEvent<HTMLButtonElement>) => void;
25
+ hasStickyHeaders: boolean;
30
26
  }
31
27
 
32
28
  const getInsertLineHeight = (
33
- tableRef: HTMLElement,
34
- hasStickyHeaders: boolean,
35
- isDragAndDropEnabled?: boolean,
29
+ tableRef: HTMLElement,
30
+ hasStickyHeaders: boolean,
31
+ isDragAndDropEnabled?: boolean,
36
32
  ) => {
37
- // The line gets height 100% from the table,
38
- // but since we have an overflow on the left,
39
- // we should add an offset to make up for it.
40
- const LINE_OFFSET = 3;
41
-
42
- const ADDITIONAL_HEIGHT = hasStickyHeaders
43
- ? tableRef.getBoundingClientRect().top -
44
- tableMarginTop * (isDragAndDropEnabled ? 3 : 4) -
45
- LINE_OFFSET
46
- : tableToolbarSize + LINE_OFFSET;
47
- return tableRef.offsetHeight + ADDITIONAL_HEIGHT;
33
+ // The line gets height 100% from the table,
34
+ // but since we have an overflow on the left,
35
+ // we should add an offset to make up for it.
36
+ const LINE_OFFSET = 3;
37
+
38
+ const ADDITIONAL_HEIGHT = hasStickyHeaders
39
+ ? tableRef.getBoundingClientRect().top -
40
+ tableMarginTop * (isDragAndDropEnabled ? 3 : 4) -
41
+ LINE_OFFSET
42
+ : tableToolbarSize + LINE_OFFSET;
43
+ return tableRef.offsetHeight + ADDITIONAL_HEIGHT;
48
44
  };
49
45
 
50
46
  const getToolbarSize = (tableRef: HTMLElement): number => {
51
- const parent = closestElement(tableRef, `.${ClassName.TABLE_CONTAINER}`);
52
- if (parent) {
53
- return parent.querySelector(`.${ClassName.NUMBERED_COLUMN}`)
54
- ? tableToolbarSize + akEditorTableNumberColumnWidth - 1
55
- : tableToolbarSize;
56
- }
57
-
58
- return tableToolbarSize;
47
+ const parent = closestElement(tableRef, `.${ClassName.TABLE_CONTAINER}`);
48
+ if (parent) {
49
+ return parent.querySelector(`.${ClassName.NUMBERED_COLUMN}`)
50
+ ? tableToolbarSize + akEditorTableNumberColumnWidth - 1
51
+ : tableToolbarSize;
52
+ }
53
+
54
+ return tableToolbarSize;
59
55
  };
60
56
 
61
- const getNumberColumnWidth = (
62
- tableRef: HTMLElement,
63
- isDragAndDropEnabled?: boolean,
64
- ): number => {
65
- const parent = closestElement(tableRef, `.${ClassName.TABLE_CONTAINER}`);
66
- if (parent && isDragAndDropEnabled) {
67
- return parent.querySelector(`.${ClassName.NUMBERED_COLUMN}`)
68
- ? akEditorTableNumberColumnWidth - 1
69
- : 0;
70
- }
71
- return 0;
57
+ const getNumberColumnWidth = (tableRef: HTMLElement, isDragAndDropEnabled?: boolean): number => {
58
+ const parent = closestElement(tableRef, `.${ClassName.TABLE_CONTAINER}`);
59
+ if (parent && isDragAndDropEnabled) {
60
+ return parent.querySelector(`.${ClassName.NUMBERED_COLUMN}`)
61
+ ? akEditorTableNumberColumnWidth - 1
62
+ : 0;
63
+ }
64
+ return 0;
72
65
  };
73
66
 
74
- const getInsertLineWidth = (
75
- tableRef: HTMLElement,
76
- isDragAndDropEnabled?: boolean,
77
- ) => {
78
- // The line gets width 100% from the table,
79
- // but since we have an overflow on the left,
80
- // we should add an offset to make up for it.
81
- const LINE_OFFSET = 4;
82
- const DRAG_LINE_OFFSET = 6;
83
- const { parentElement, offsetWidth } = tableRef;
84
- const parentOffsetWidth = parentElement!.offsetWidth;
85
- const { scrollLeft } = parentElement!;
86
- const diff = offsetWidth - parentOffsetWidth;
87
- const toolbarSize = isDragAndDropEnabled ? 0 : getToolbarSize(tableRef);
88
- const lineOffset = isDragAndDropEnabled ? DRAG_LINE_OFFSET : LINE_OFFSET;
89
-
90
- return (
91
- Math.min(
92
- offsetWidth + toolbarSize,
93
- parentOffsetWidth + toolbarSize - Math.max(scrollLeft - diff, 0),
94
- ) +
95
- lineOffset +
96
- getNumberColumnWidth(tableRef, isDragAndDropEnabled)
97
- );
67
+ const getInsertLineWidth = (tableRef: HTMLElement, isDragAndDropEnabled?: boolean) => {
68
+ // The line gets width 100% from the table,
69
+ // but since we have an overflow on the left,
70
+ // we should add an offset to make up for it.
71
+ const LINE_OFFSET = 4;
72
+ const DRAG_LINE_OFFSET = 6;
73
+ const { parentElement, offsetWidth } = tableRef;
74
+ const parentOffsetWidth = parentElement!.offsetWidth;
75
+ const { scrollLeft } = parentElement!;
76
+ const diff = offsetWidth - parentOffsetWidth;
77
+ const toolbarSize = isDragAndDropEnabled ? 0 : getToolbarSize(tableRef);
78
+ const lineOffset = isDragAndDropEnabled ? DRAG_LINE_OFFSET : LINE_OFFSET;
79
+
80
+ return (
81
+ Math.min(
82
+ offsetWidth + toolbarSize,
83
+ parentOffsetWidth + toolbarSize - Math.max(scrollLeft - diff, 0),
84
+ ) +
85
+ lineOffset +
86
+ getNumberColumnWidth(tableRef, isDragAndDropEnabled)
87
+ );
98
88
  };
99
89
 
100
90
  const tooltipMessageByType = (type: TableDirection) => {
101
- return type === 'row' ? messages.insertRow : messages.insertColumn;
91
+ return type === 'row' ? messages.insertRow : messages.insertColumn;
102
92
  };
103
93
 
104
94
  export const InsertButtonForDragAndDrop = ({
105
- onMouseDown,
106
- tableRef,
107
- type,
108
- intl: { formatMessage },
109
- hasStickyHeaders,
95
+ onMouseDown,
96
+ tableRef,
97
+ type,
98
+ intl: { formatMessage },
99
+ hasStickyHeaders,
110
100
  }: ButtonProps & WrappedComponentProps) => {
111
- const isRow = type === 'row';
112
-
113
- const content = (
114
- <Tooltip
115
- content={
116
- <ToolTipContent
117
- description={formatMessage(
118
- isRow ? messages.insertRowDrag : messages.insertColumnDrag,
119
- )}
120
- keymap={isRow ? addRowAfter : addColumnAfter}
121
- />
122
- }
123
- position="top"
124
- >
125
- <>
126
- <div
127
- // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
128
- className={classnames(ClassName.DRAG_CONTROLS_INSERT_BUTTON_INNER, {
129
- [ClassName.DRAG_CONTROLS_INSERT_BUTTON_INNER_ROW]: isRow,
130
- [ClassName.DRAG_CONTROLS_INSERT_BUTTON_INNER_COLUMN]: !isRow,
131
- })}
132
- >
133
- <button
134
- type="button"
135
- // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
136
- className={ClassName.DRAG_CONTROLS_INSERT_BUTTON}
137
- onMouseDown={onMouseDown}
138
- >
139
- <svg
140
- // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
141
- className={ClassName.CONTROLS_BUTTON_ICON}
142
- width="16"
143
- height="16"
144
- viewBox="0 0 16 16"
145
- fill="none"
146
- xmlns="http://www.w3.org/2000/svg"
147
- >
148
- <path
149
- d="M8 4C7.44771 4 7 4.44771 7 5V7H5C4.44771 7 4 7.44771 4 8C4 8.55229 4.44771 9 5 9H7V11C7 11.5523 7.44771 12 8 12C8.55229 12 9 11.5523 9 11V9H11C11.5523 9 12 8.55229 12 8C12 7.44771 11.5523 7 11 7H9V5C9 4.44771 8.55229 4 8 4Z"
150
- fill="currentColor"
151
- />
152
- </svg>
153
- </button>
154
- </div>
155
- <div
156
- // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
157
- className={ClassName.CONTROLS_INSERT_LINE}
158
- // eslint-disable-next-line @atlaskit/ui-styling-standard/enforce-style-prop -- Ignored via go/DSP-18766
159
- style={
160
- type === 'row'
161
- ? {
162
- width: getInsertLineWidth(tableRef, true),
163
- left: token('space.150', '12px'),
164
- }
165
- : {
166
- height:
167
- getInsertLineHeight(tableRef, hasStickyHeaders, true) - 8,
168
- // eslint-disable-next-line @atlaskit/design-system/ensure-design-token-usage/preview
169
- top: '-3px',
170
- }
171
- }
172
- />
173
- </>
174
- </Tooltip>
175
- );
176
-
177
- const floatingButtonClassName = isRow
178
- ? ClassName.CONTROLS_FLOATING_BUTTON_ROW
179
- : ClassName.CONTROLS_FLOATING_BUTTON_COLUMN;
180
-
181
- return (
182
- // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
183
- <div className={floatingButtonClassName}>
184
- <div
185
- // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
186
- className={`${ClassName.DRAG_CONTROLS_INSERT_BUTTON_WRAP} ${ClassName.CONTROLS_INSERT_ROW}`}
187
- >
188
- {content}
189
- </div>
190
- </div>
191
- );
101
+ const isRow = type === 'row';
102
+
103
+ const content = (
104
+ <Tooltip
105
+ content={
106
+ <ToolTipContent
107
+ description={formatMessage(isRow ? messages.insertRowDrag : messages.insertColumnDrag)}
108
+ keymap={isRow ? addRowAfter : addColumnAfter}
109
+ />
110
+ }
111
+ position="top"
112
+ >
113
+ <>
114
+ <div
115
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
116
+ className={classnames(ClassName.DRAG_CONTROLS_INSERT_BUTTON_INNER, {
117
+ [ClassName.DRAG_CONTROLS_INSERT_BUTTON_INNER_ROW]: isRow,
118
+ [ClassName.DRAG_CONTROLS_INSERT_BUTTON_INNER_COLUMN]: !isRow,
119
+ })}
120
+ >
121
+ <button
122
+ type="button"
123
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
124
+ className={ClassName.DRAG_CONTROLS_INSERT_BUTTON}
125
+ onMouseDown={onMouseDown}
126
+ >
127
+ <svg
128
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
129
+ className={ClassName.CONTROLS_BUTTON_ICON}
130
+ width="16"
131
+ height="16"
132
+ viewBox="0 0 16 16"
133
+ fill="none"
134
+ xmlns="http://www.w3.org/2000/svg"
135
+ >
136
+ <path
137
+ d="M8 4C7.44771 4 7 4.44771 7 5V7H5C4.44771 7 4 7.44771 4 8C4 8.55229 4.44771 9 5 9H7V11C7 11.5523 7.44771 12 8 12C8.55229 12 9 11.5523 9 11V9H11C11.5523 9 12 8.55229 12 8C12 7.44771 11.5523 7 11 7H9V5C9 4.44771 8.55229 4 8 4Z"
138
+ fill="currentColor"
139
+ />
140
+ </svg>
141
+ </button>
142
+ </div>
143
+ <div
144
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
145
+ className={ClassName.CONTROLS_INSERT_LINE}
146
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/enforce-style-prop -- Ignored via go/DSP-18766
147
+ style={
148
+ type === 'row'
149
+ ? {
150
+ width: getInsertLineWidth(tableRef, true),
151
+ left: token('space.150', '12px'),
152
+ }
153
+ : {
154
+ height: getInsertLineHeight(tableRef, hasStickyHeaders, true) - 8,
155
+ // eslint-disable-next-line @atlaskit/design-system/ensure-design-token-usage/preview
156
+ top: '-3px',
157
+ }
158
+ }
159
+ />
160
+ </>
161
+ </Tooltip>
162
+ );
163
+
164
+ const floatingButtonClassName = isRow
165
+ ? ClassName.CONTROLS_FLOATING_BUTTON_ROW
166
+ : ClassName.CONTROLS_FLOATING_BUTTON_COLUMN;
167
+
168
+ return (
169
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
170
+ <div className={floatingButtonClassName}>
171
+ <div
172
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
173
+ className={`${ClassName.DRAG_CONTROLS_INSERT_BUTTON_WRAP} ${ClassName.CONTROLS_INSERT_ROW}`}
174
+ >
175
+ {content}
176
+ </div>
177
+ </div>
178
+ );
192
179
  };
193
180
 
194
181
  export const DragAndDropInsertButton = injectIntl(InsertButtonForDragAndDrop);
195
182
 
196
183
  const InsertButton = ({
197
- onMouseDown,
198
- tableRef,
199
- type,
200
- intl: { formatMessage },
201
- hasStickyHeaders,
184
+ onMouseDown,
185
+ tableRef,
186
+ type,
187
+ intl: { formatMessage },
188
+ hasStickyHeaders,
202
189
  }: ButtonProps & WrappedComponentProps) => {
203
- const content = (
204
- <Tooltip
205
- content={
206
- <ToolTipContent
207
- description={formatMessage(tooltipMessageByType(type))}
208
- keymap={type === 'row' ? addRowAfter : addColumnAfter}
209
- />
210
- }
211
- position="top"
212
- >
213
- <>
214
- {/* eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766 */}
215
- <div className={ClassName.CONTROLS_INSERT_BUTTON_INNER}>
216
- <button
217
- type="button"
218
- // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
219
- className={ClassName.CONTROLS_INSERT_BUTTON}
220
- onMouseDown={onMouseDown}
221
- >
222
- {/* eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766 */}
223
- <svg className={ClassName.CONTROLS_BUTTON_ICON}>
224
- <path
225
- d="M10 4a1 1 0 0 1 1 1v4h4a1 1 0 0 1 0 2h-4v4a1 1 0 0 1-2 0v-4H5a1 1 0 1 1 0-2h4V5a1 1 0 0 1 1-1z"
226
- fill="currentColor"
227
- fillRule="evenodd"
228
- />
229
- </svg>
230
- </button>
231
- </div>
232
- <div
233
- // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
234
- className={ClassName.CONTROLS_INSERT_LINE}
235
- // eslint-disable-next-line @atlaskit/ui-styling-standard/enforce-style-prop -- Ignored via go/DSP-18766
236
- style={
237
- type === 'row'
238
- ? { width: getInsertLineWidth(tableRef) }
239
- : { height: getInsertLineHeight(tableRef, hasStickyHeaders) }
240
- }
241
- />
242
- </>
243
- </Tooltip>
244
- );
245
-
246
- const floatingButtonClassName =
247
- type === 'column'
248
- ? ClassName.CONTROLS_FLOATING_BUTTON_COLUMN
249
- : ClassName.CONTROLS_FLOATING_BUTTON_ROW;
250
-
251
- return (
252
- // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
253
- <div className={floatingButtonClassName}>
254
- <div
255
- // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
256
- className={`${ClassName.CONTROLS_INSERT_BUTTON_WRAP} ${ClassName.CONTROLS_INSERT_ROW}`}
257
- >
258
- {content}
259
- </div>
260
- </div>
261
- );
190
+ const content = (
191
+ <Tooltip
192
+ content={
193
+ <ToolTipContent
194
+ description={formatMessage(tooltipMessageByType(type))}
195
+ keymap={type === 'row' ? addRowAfter : addColumnAfter}
196
+ />
197
+ }
198
+ position="top"
199
+ >
200
+ <>
201
+ {/* eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766 */}
202
+ <div className={ClassName.CONTROLS_INSERT_BUTTON_INNER}>
203
+ <button
204
+ type="button"
205
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
206
+ className={ClassName.CONTROLS_INSERT_BUTTON}
207
+ onMouseDown={onMouseDown}
208
+ >
209
+ {/* eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766 */}
210
+ <svg className={ClassName.CONTROLS_BUTTON_ICON}>
211
+ <path
212
+ d="M10 4a1 1 0 0 1 1 1v4h4a1 1 0 0 1 0 2h-4v4a1 1 0 0 1-2 0v-4H5a1 1 0 1 1 0-2h4V5a1 1 0 0 1 1-1z"
213
+ fill="currentColor"
214
+ fillRule="evenodd"
215
+ />
216
+ </svg>
217
+ </button>
218
+ </div>
219
+ <div
220
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
221
+ className={ClassName.CONTROLS_INSERT_LINE}
222
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/enforce-style-prop -- Ignored via go/DSP-18766
223
+ style={
224
+ type === 'row'
225
+ ? { width: getInsertLineWidth(tableRef) }
226
+ : { height: getInsertLineHeight(tableRef, hasStickyHeaders) }
227
+ }
228
+ />
229
+ </>
230
+ </Tooltip>
231
+ );
232
+
233
+ const floatingButtonClassName =
234
+ type === 'column'
235
+ ? ClassName.CONTROLS_FLOATING_BUTTON_COLUMN
236
+ : ClassName.CONTROLS_FLOATING_BUTTON_ROW;
237
+
238
+ return (
239
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
240
+ <div className={floatingButtonClassName}>
241
+ <div
242
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-classname-prop -- Ignored via go/DSP-18766
243
+ className={`${ClassName.CONTROLS_INSERT_BUTTON_WRAP} ${ClassName.CONTROLS_INSERT_ROW}`}
244
+ >
245
+ {content}
246
+ </div>
247
+ </div>
248
+ );
262
249
  };
263
250
 
264
251
  export default injectIntl(InsertButton);