@atlaskit/editor-plugin-table 12.1.14 → 12.2.0

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 (137) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/afm-cc/tsconfig.json +6 -0
  3. package/afm-dev-agents/tsconfig.json +6 -0
  4. package/afm-jira/tsconfig.json +6 -0
  5. package/afm-passionfruit/tsconfig.json +120 -0
  6. package/afm-post-office/tsconfig.json +6 -0
  7. package/afm-rovo-extension/tsconfig.json +6 -0
  8. package/afm-townsquare/tsconfig.json +6 -0
  9. package/afm-volt/tsconfig.json +13 -4
  10. package/dist/cjs/nodeviews/TableComponent.js +77 -26
  11. package/dist/cjs/nodeviews/TableContainer.js +270 -10
  12. package/dist/cjs/nodeviews/TableResizer.js +9 -2
  13. package/dist/cjs/nodeviews/TableRow.js +24 -1
  14. package/dist/cjs/nodeviews/table-node-views.js +1 -1
  15. package/dist/cjs/nodeviews/table.js +22 -7
  16. package/dist/cjs/nodeviews/toDOM.js +23 -7
  17. package/dist/cjs/pm-plugins/main.js +57 -22
  18. package/dist/cjs/pm-plugins/table-resizing/utils/colgroup.js +72 -1
  19. package/dist/cjs/pm-plugins/table-resizing/utils/misc.js +70 -1
  20. package/dist/cjs/tablePlugin.js +17 -3
  21. package/dist/cjs/ui/TableFloatingControls/NumberColumn/index.js +2 -7
  22. package/dist/es2019/nodeviews/TableComponent.js +80 -26
  23. package/dist/es2019/nodeviews/TableContainer.js +256 -2
  24. package/dist/es2019/nodeviews/TableResizer.js +9 -2
  25. package/dist/es2019/nodeviews/TableRow.js +24 -1
  26. package/dist/es2019/nodeviews/table-node-views.js +1 -1
  27. package/dist/es2019/nodeviews/table.js +21 -6
  28. package/dist/es2019/nodeviews/toDOM.js +24 -8
  29. package/dist/es2019/pm-plugins/main.js +57 -22
  30. package/dist/es2019/pm-plugins/table-resizing/utils/colgroup.js +72 -3
  31. package/dist/es2019/pm-plugins/table-resizing/utils/misc.js +70 -1
  32. package/dist/es2019/tablePlugin.js +17 -3
  33. package/dist/es2019/ui/TableFloatingControls/NumberColumn/index.js +5 -14
  34. package/dist/esm/nodeviews/TableComponent.js +77 -26
  35. package/dist/esm/nodeviews/TableContainer.js +270 -10
  36. package/dist/esm/nodeviews/TableResizer.js +9 -2
  37. package/dist/esm/nodeviews/TableRow.js +24 -1
  38. package/dist/esm/nodeviews/table-node-views.js +1 -1
  39. package/dist/esm/nodeviews/table.js +22 -7
  40. package/dist/esm/nodeviews/toDOM.js +24 -8
  41. package/dist/esm/pm-plugins/main.js +57 -22
  42. package/dist/esm/pm-plugins/table-resizing/utils/colgroup.js +74 -3
  43. package/dist/esm/pm-plugins/table-resizing/utils/misc.js +70 -1
  44. package/dist/esm/tablePlugin.js +17 -3
  45. package/dist/esm/ui/TableFloatingControls/NumberColumn/index.js +1 -6
  46. package/dist/types/nodeviews/ExternalDropTargets.d.ts +1 -1
  47. package/dist/types/nodeviews/TableComponent.d.ts +1 -0
  48. package/dist/types/nodeviews/TableContainer.d.ts +7 -2
  49. package/dist/types/nodeviews/TableResizer.d.ts +1 -1
  50. package/dist/types/nodeviews/TableRow.d.ts +3 -1
  51. package/dist/types/nodeviews/table.d.ts +1 -1
  52. package/dist/types/nodeviews/toDOM.d.ts +5 -0
  53. package/dist/types/nodeviews/types.d.ts +1 -0
  54. package/dist/types/pm-plugins/analytics/commands.d.ts +2 -2
  55. package/dist/types/pm-plugins/analytics/plugin-factory.d.ts +1 -1
  56. package/dist/types/pm-plugins/analytics/utils/moved-event.d.ts +1 -1
  57. package/dist/types/pm-plugins/commands/column-resize.d.ts +10 -10
  58. package/dist/types/pm-plugins/commands/commands-with-analytics.d.ts +1 -1
  59. package/dist/types/pm-plugins/commands/go-to-next-cell.d.ts +1 -1
  60. package/dist/types/pm-plugins/commands/misc.d.ts +2 -2
  61. package/dist/types/pm-plugins/commands/selection.d.ts +6 -6
  62. package/dist/types/pm-plugins/drag-and-drop/commands-with-analytics.d.ts +3 -3
  63. package/dist/types/pm-plugins/drag-and-drop/commands.d.ts +1 -1
  64. package/dist/types/pm-plugins/drag-and-drop/plugin-factory.d.ts +1 -1
  65. package/dist/types/pm-plugins/plugin-factory.d.ts +1 -1
  66. package/dist/types/pm-plugins/sticky-headers/plugin-state.d.ts +1 -1
  67. package/dist/types/pm-plugins/table-resizing/plugin-factory.d.ts +1 -1
  68. package/dist/types/pm-plugins/table-resizing/utils/colgroup.d.ts +1 -0
  69. package/dist/types/pm-plugins/table-resizing/utils/misc.d.ts +41 -0
  70. package/dist/types/pm-plugins/utils/create.d.ts +10 -10
  71. package/dist/types/pm-plugins/utils/decoration.d.ts +3 -3
  72. package/dist/types/pm-plugins/utils/dom.d.ts +2 -2
  73. package/dist/types/pm-plugins/utils/drag-menu.d.ts +3 -3
  74. package/dist/types/pm-plugins/utils/merged-cells.d.ts +3 -2
  75. package/dist/types/tablePluginType.d.ts +2 -0
  76. package/dist/types/ui/DragHandle/index.d.ts +4 -14
  77. package/dist/types/ui/TableFloatingColumnControls/ColumnControls/index.d.ts +1 -7
  78. package/dist/types/ui/TableFloatingControls/CornerControls/DragCornerControls.d.ts +4 -14
  79. package/dist/types/ui/TableFloatingControls/RowControls/DragControls.d.ts +1 -1
  80. package/dist/types/ui/TableFloatingControls/index.d.ts +1 -7
  81. package/dist/types/ui/global-styles.d.ts +2 -8
  82. package/dist/types/ui/hooks/useInternalTablePluginStateSelector.d.ts +1 -1
  83. package/dist/types-ts4.5/nodeviews/ExternalDropTargets.d.ts +1 -1
  84. package/dist/types-ts4.5/nodeviews/TableComponent.d.ts +1 -0
  85. package/dist/types-ts4.5/nodeviews/TableContainer.d.ts +7 -2
  86. package/dist/types-ts4.5/nodeviews/TableResizer.d.ts +1 -1
  87. package/dist/types-ts4.5/nodeviews/TableRow.d.ts +3 -1
  88. package/dist/types-ts4.5/nodeviews/table.d.ts +1 -1
  89. package/dist/types-ts4.5/nodeviews/toDOM.d.ts +5 -0
  90. package/dist/types-ts4.5/nodeviews/types.d.ts +1 -0
  91. package/dist/types-ts4.5/pm-plugins/analytics/commands.d.ts +2 -2
  92. package/dist/types-ts4.5/pm-plugins/analytics/plugin-factory.d.ts +1 -1
  93. package/dist/types-ts4.5/pm-plugins/analytics/utils/moved-event.d.ts +1 -1
  94. package/dist/types-ts4.5/pm-plugins/commands/column-resize.d.ts +10 -10
  95. package/dist/types-ts4.5/pm-plugins/commands/commands-with-analytics.d.ts +1 -1
  96. package/dist/types-ts4.5/pm-plugins/commands/go-to-next-cell.d.ts +1 -1
  97. package/dist/types-ts4.5/pm-plugins/commands/misc.d.ts +2 -2
  98. package/dist/types-ts4.5/pm-plugins/commands/selection.d.ts +6 -6
  99. package/dist/types-ts4.5/pm-plugins/drag-and-drop/commands-with-analytics.d.ts +3 -3
  100. package/dist/types-ts4.5/pm-plugins/drag-and-drop/commands.d.ts +1 -1
  101. package/dist/types-ts4.5/pm-plugins/drag-and-drop/plugin-factory.d.ts +1 -1
  102. package/dist/types-ts4.5/pm-plugins/plugin-factory.d.ts +1 -1
  103. package/dist/types-ts4.5/pm-plugins/sticky-headers/plugin-state.d.ts +1 -1
  104. package/dist/types-ts4.5/pm-plugins/table-resizing/plugin-factory.d.ts +1 -1
  105. package/dist/types-ts4.5/pm-plugins/table-resizing/utils/colgroup.d.ts +1 -0
  106. package/dist/types-ts4.5/pm-plugins/table-resizing/utils/misc.d.ts +41 -0
  107. package/dist/types-ts4.5/pm-plugins/utils/create.d.ts +10 -10
  108. package/dist/types-ts4.5/pm-plugins/utils/decoration.d.ts +3 -3
  109. package/dist/types-ts4.5/pm-plugins/utils/dom.d.ts +2 -2
  110. package/dist/types-ts4.5/pm-plugins/utils/drag-menu.d.ts +3 -3
  111. package/dist/types-ts4.5/pm-plugins/utils/merged-cells.d.ts +3 -2
  112. package/dist/types-ts4.5/tablePluginType.d.ts +2 -0
  113. package/dist/types-ts4.5/ui/DragHandle/index.d.ts +4 -14
  114. package/dist/types-ts4.5/ui/TableFloatingColumnControls/ColumnControls/index.d.ts +1 -7
  115. package/dist/types-ts4.5/ui/TableFloatingControls/CornerControls/DragCornerControls.d.ts +4 -14
  116. package/dist/types-ts4.5/ui/TableFloatingControls/RowControls/DragControls.d.ts +1 -1
  117. package/dist/types-ts4.5/ui/TableFloatingControls/index.d.ts +1 -7
  118. package/dist/types-ts4.5/ui/global-styles.d.ts +2 -8
  119. package/dist/types-ts4.5/ui/hooks/useInternalTablePluginStateSelector.d.ts +1 -1
  120. package/package.json +10 -11
  121. package/src/nodeviews/TableComponent.tsx +113 -23
  122. package/src/nodeviews/TableContainer.tsx +331 -2
  123. package/src/nodeviews/TableResizer.tsx +10 -5
  124. package/src/nodeviews/TableRow.ts +38 -1
  125. package/src/nodeviews/table-node-views.ts +1 -1
  126. package/src/nodeviews/table.tsx +23 -0
  127. package/src/nodeviews/toDOM.ts +75 -9
  128. package/src/nodeviews/types.ts +1 -0
  129. package/src/pm-plugins/main.ts +41 -18
  130. package/src/pm-plugins/table-resizing/utils/colgroup.ts +139 -6
  131. package/src/pm-plugins/table-resizing/utils/misc.ts +87 -0
  132. package/src/tablePlugin.tsx +21 -0
  133. package/src/tablePluginType.ts +2 -0
  134. package/src/ui/TableFloatingControls/NumberColumn/index.tsx +5 -14
  135. package/tsconfig.app.json +6 -0
  136. package/types/package.json +1 -1
  137. package/ui/common-styles/package.json +1 -1
@@ -25,6 +25,7 @@ import { hasTableBeenResized, hasTableColumnBeenResized } from './colgroup';
25
25
  import {
26
26
  MAX_SCALING_PERCENT,
27
27
  MAX_SCALING_PERCENT_TABLES_WITH_FIXED_COLUMN_WIDTHS_OPTION,
28
+ TABLE_MAX_WIDTH,
28
29
  } from './consts';
29
30
 
30
31
  // Translates named layouts in number values.
@@ -138,6 +139,92 @@ export const getTableContainerElementWidth = (table: PMNode) => {
138
139
  return getTableContainerWidth(table);
139
140
  };
140
141
 
142
+ // eslint-disable-next-line jsdoc/require-example
143
+ /**
144
+ * This function is used to set the max width for table resizer container.
145
+ * @param isCommentEditor Whether the editor is in comment mode.
146
+ * @param isChromelessEditor Whether the editor is chromeless.
147
+ * @param isTableScalingEnabled Whether table scaling is enabled.
148
+ * @returns The CSS max-width value
149
+ */
150
+ export const getTableResizerContainerMaxWidthInCSS = (
151
+ isCommentEditor?: boolean,
152
+ isChromelessEditor?: boolean,
153
+ isTableScalingEnabled?: boolean,
154
+ ): string => {
155
+ const maxResizerWidthForNonCommentEditor = isTableScalingEnabled
156
+ ? `min(calc(100cqw - calc(var(--ak-editor--large-gutter-padding) * 2)), ${TABLE_MAX_WIDTH}px)`
157
+ : `min(calc(100cqw - calc(var(--ak-editor--large-gutter-padding) * 2) - var(--ak-editor--resizer-handle-spacing)), ${TABLE_MAX_WIDTH}px)`;
158
+ return isCommentEditor || isChromelessEditor ? '100%' : maxResizerWidthForNonCommentEditor;
159
+ };
160
+
161
+ // eslint-disable-next-line jsdoc/require-example
162
+ /**
163
+ * This function is used in NodeView for TableResizer to set the max width for table resizer container
164
+ * @param node The ProseMirror node representing the table.
165
+ * @param isCommentEditor Whether the editor is in comment mode.
166
+ * @param isChromelessEditor Whether the editor is chromeless.
167
+ * @returns The CSS max-width value for the table resizer container.
168
+ */
169
+ export const getTableResizerItemWidth = (
170
+ node: PMNode,
171
+ isCommentEditor?: boolean,
172
+ isChromelessEditor?: boolean,
173
+ ): number | undefined => {
174
+ const tableWidthAttribute = getTableContainerWidth(node);
175
+ if (!node.attrs.width && (isCommentEditor || isChromelessEditor)) {
176
+ // width undefined would make .resizer-item width to be `auto`
177
+ return undefined;
178
+ }
179
+ return tableWidthAttribute;
180
+ };
181
+
182
+ // eslint-disable-next-line jsdoc/require-example
183
+ /**
184
+ * This function is used to set the CSS width value for the table resizer-item.
185
+ * Because comment and chromeless editors don't have container-type: inline-size set,
186
+ * we need to calculate the width based on the table node width.
187
+ * If the table node width is not set, it will return 'auto'.
188
+ * This is used in table toDOM
189
+ * @param node The ProseMirror node representing the table.
190
+ * @param isCommentEditor Whether the editor is in comment mode.
191
+ * @param isChromelessEditor Whether the editor is chromeless.
192
+ * @returns The CSS width value for the table container.
193
+ */
194
+ export const getTableResizerItemWidthInCSS = (
195
+ node: PMNode,
196
+ isCommentEditor?: boolean,
197
+ isChromelessEditor?: boolean,
198
+ ): string => {
199
+ const tableWidthAttribute = getTableResizerItemWidth(node, isCommentEditor, isChromelessEditor);
200
+ return tableWidthAttribute ? `${tableWidthAttribute}px` : 'auto';
201
+ };
202
+
203
+ // eslint-disable-next-line jsdoc/require-example
204
+ /**
205
+ * This function is used to set the table width --ak-editor-table-width CSS property for full page editor.
206
+ * Which is applied to the table resizer container.
207
+ * For Full page appearance, we don't need to use containerWidth from JS, as we can use cqw value.
208
+ * So we set dynamic containerWidth from JS to CSS property.
209
+ * @param node The ProseMirror node representing the table.
210
+ * @param isCommentEditor Whether the editor is in comment mode.
211
+ * @param isChromelessEditor Whether the editor is chromeless.
212
+ * @param isTableScalingEnabled Whether table scaling is enabled.
213
+ * @param tableWidthFromJS The width of the container element. In toDOM it'd be undefined, but will have a value from nodeView.
214
+ * @returns The CSS width value for the table.
215
+ */
216
+ export const getTableResizerContainerForFullPageWidthInCSS = (
217
+ node: PMNode,
218
+ isTableScalingEnabled?: boolean,
219
+ ): string => {
220
+ const tableWidth = getTableContainerElementWidth(node);
221
+ // for full page appearance
222
+ if (isTableScalingEnabled) {
223
+ return `min(calc(100cqw - calc(var(--ak-editor--large-gutter-padding) * 2)), ${tableWidth}px)`;
224
+ }
225
+ return `min(calc(100cqw - calc(var(--ak-editor--large-gutter-padding) * 2) - var(--ak-editor--resizer-handle-spacing)), ${tableWidth}px)`;
226
+ };
227
+
141
228
  export const getTableScalingPercent = (
142
229
  table: PMNode,
143
230
  tableRef: HTMLElement | null,
@@ -309,6 +309,19 @@ const tablePlugin: TablePlugin = ({ config: options, api }) => {
309
309
  // TODO: ED-25901 - We need to move this into a plugin config option so we don't accidentally enable nested nodes in Jira
310
310
  const isNestingSupported = Boolean(options?.tableOptions?.allowNestedTables);
311
311
 
312
+ const isTableFixedColumnWidthsOptionEnabled =
313
+ options?.getEditorFeatureFlags?.().tableWithFixedColumnWidthsOption || false;
314
+
315
+ const shouldUseIncreasedScalingPercent =
316
+ options?.isTableScalingEnabled &&
317
+ (isTableFixedColumnWidthsOptionEnabled ||
318
+ // When in comment editor, we need the scaling percent to be 40% while tableWithFixedColumnWidthsOption is not visible
319
+ options?.isCommentEditor);
320
+
321
+ const isTableScalingEnabled = options?.isTableScalingEnabled;
322
+ const isCommentEditor = options?.isCommentEditor;
323
+ const isChromelessEditor = options?.isChromelessEditor;
324
+
312
325
  return isNestingSupported
313
326
  ? [
314
327
  {
@@ -318,6 +331,10 @@ const tablePlugin: TablePlugin = ({ config: options, api }) => {
318
331
  tableResizingEnabled: Boolean(options?.tableOptions.allowTableResizing),
319
332
  getEditorContainerWidth: defaultGetEditorContainerWidth,
320
333
  isNestingSupported,
334
+ isTableScalingEnabled,
335
+ shouldUseIncreasedScalingPercent,
336
+ isCommentEditor,
337
+ isChromelessEditor,
321
338
  }),
322
339
  },
323
340
  { name: 'tableHeader', node: tableHeaderWithNestedTable },
@@ -332,6 +349,10 @@ const tablePlugin: TablePlugin = ({ config: options, api }) => {
332
349
  tableResizingEnabled: Boolean(options?.tableOptions.allowTableResizing),
333
350
  getEditorContainerWidth: defaultGetEditorContainerWidth,
334
351
  isNestingSupported,
352
+ isTableScalingEnabled,
353
+ shouldUseIncreasedScalingPercent,
354
+ isCommentEditor,
355
+ isChromelessEditor,
335
356
  }),
336
357
  },
337
358
  { name: 'tableHeader', node: tableHeader },
@@ -15,6 +15,7 @@ import type { ExtensionPlugin } from '@atlaskit/editor-plugin-extension';
15
15
  import type { FeatureFlagsPlugin } from '@atlaskit/editor-plugin-feature-flags';
16
16
  import type { GuidelinePlugin } from '@atlaskit/editor-plugin-guideline';
17
17
  import type { InteractionPlugin } from '@atlaskit/editor-plugin-interaction';
18
+ import type { LimitedModePlugin } from '@atlaskit/editor-plugin-limited-mode';
18
19
  import type { SelectionPlugin } from '@atlaskit/editor-plugin-selection';
19
20
  import type { WidthPlugin } from '@atlaskit/editor-plugin-width';
20
21
 
@@ -76,6 +77,7 @@ export type TablePluginDependencies = [
76
77
  ContentInsertionPlugin,
77
78
  WidthPlugin,
78
79
  SelectionPlugin,
80
+ OptionalPlugin<LimitedModePlugin>,
79
81
  OptionalPlugin<GuidelinePlugin>,
80
82
  OptionalPlugin<BatchAttributeUpdatesPlugin>,
81
83
  OptionalPlugin<AccessibilityUtilsPlugin>,
@@ -5,7 +5,6 @@ import classnames from 'classnames';
5
5
  import { Selection } from '@atlaskit/editor-prosemirror/state';
6
6
  import type { EditorView } from '@atlaskit/editor-prosemirror/view';
7
7
  import { isRowSelected } from '@atlaskit/editor-tables/utils';
8
- import { fg } from '@atlaskit/platform-feature-flags';
9
8
 
10
9
  import { clearHoverSelection } from '../../../pm-plugins/commands';
11
10
  import { getRowHeights } from '../../../pm-plugins/utils/row-controls';
@@ -142,18 +141,10 @@ export default class NumberColumn extends Component<Props, any> {
142
141
  isRowSelected(index)(editorView.state.selection) ||
143
142
  ((hoveredRows || []).indexOf(index) !== -1 && !isResizing);
144
143
 
145
- if (fg('platform_editor_nested_tables_number_column_fixes')) {
146
- return classnames(ClassName.NUMBERED_COLUMN_BUTTON, {
147
- [ClassName.NUMBERED_COLUMN_BUTTON_DISABLED]: isButtonDisabled,
148
- [ClassName.HOVERED_CELL_IN_DANGER]: tableActive && isActive && isInDanger,
149
- [ClassName.HOVERED_CELL_ACTIVE]: tableActive && isActive,
150
- });
151
- } else {
152
- return classnames(ClassName.NUMBERED_COLUMN_BUTTON, {
153
- [ClassName.NUMBERED_COLUMN_BUTTON_DISABLED]: isButtonDisabled,
154
- [ClassName.HOVERED_CELL_IN_DANGER]: isActive && isInDanger,
155
- [ClassName.HOVERED_CELL_ACTIVE]: isActive,
156
- });
157
- }
144
+ return classnames(ClassName.NUMBERED_COLUMN_BUTTON, {
145
+ [ClassName.NUMBERED_COLUMN_BUTTON_DISABLED]: isButtonDisabled,
146
+ [ClassName.HOVERED_CELL_IN_DANGER]: tableActive && isActive && isInDanger,
147
+ [ClassName.HOVERED_CELL_ACTIVE]: tableActive && isActive,
148
+ });
158
149
  };
159
150
  }
package/tsconfig.app.json CHANGED
@@ -71,6 +71,9 @@
71
71
  {
72
72
  "path": "../editor-plugin-interaction/tsconfig.app.json"
73
73
  },
74
+ {
75
+ "path": "../editor-plugin-limited-mode/tsconfig.app.json"
76
+ },
74
77
  {
75
78
  "path": "../editor-plugin-selection/tsconfig.app.json"
76
79
  },
@@ -92,6 +95,9 @@
92
95
  {
93
96
  "path": "../../platform/feature-flags/tsconfig.app.json"
94
97
  },
98
+ {
99
+ "path": "../../platform/feature-flags-react/tsconfig.app.json"
100
+ },
95
101
  {
96
102
  "path": "../../pragmatic-drag-and-drop/core/tsconfig.app.json"
97
103
  },
@@ -8,7 +8,7 @@
8
8
  ],
9
9
  "types": "../dist/types/types/index.d.ts",
10
10
  "typesVersions": {
11
- ">=4.5 <5.4": {
11
+ ">=4.5 <5.9": {
12
12
  "*": [
13
13
  "../dist/types-ts4.5/types/index.d.ts"
14
14
  ]
@@ -8,7 +8,7 @@
8
8
  ],
9
9
  "types": "../../dist/types/ui/common-styles.d.ts",
10
10
  "typesVersions": {
11
- ">=4.5 <5.4": {
11
+ ">=4.5 <5.9": {
12
12
  "*": [
13
13
  "../../dist/types-ts4.5/ui/common-styles.d.ts"
14
14
  ]