@atlaskit/editor-plugin-table 7.16.10 → 7.16.12

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