@atlaskit/editor-common 103.11.2 → 103.12.1

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 (41) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/afm-cc/tsconfig.json +3 -0
  3. package/dist/cjs/analytics/types/enums.js +1 -0
  4. package/dist/cjs/element-browser/components/ElementList/ElementList.js +4 -4
  5. package/dist/cjs/monitoring/error.js +1 -1
  6. package/dist/cjs/ui/DropList/index.js +1 -1
  7. package/dist/cjs/ui/TableSelector/index.js +270 -0
  8. package/dist/cjs/ui/TableSelector/table-selector.js +162 -0
  9. package/dist/cjs/ui/WidthProvider/index.js +1 -0
  10. package/dist/cjs/ui/index.js +7 -0
  11. package/dist/cjs/utils/get-dom-ref-from-selection.js +38 -0
  12. package/dist/es2019/analytics/types/enums.js +1 -0
  13. package/dist/es2019/element-browser/components/ElementList/ElementList.js +1 -1
  14. package/dist/es2019/monitoring/error.js +1 -1
  15. package/dist/es2019/ui/DropList/index.js +1 -1
  16. package/dist/es2019/ui/TableSelector/index.js +265 -0
  17. package/dist/es2019/ui/TableSelector/table-selector.js +154 -0
  18. package/dist/es2019/ui/WidthProvider/index.js +1 -0
  19. package/dist/es2019/ui/index.js +2 -1
  20. package/dist/es2019/utils/get-dom-ref-from-selection.js +32 -0
  21. package/dist/esm/analytics/types/enums.js +1 -0
  22. package/dist/esm/element-browser/components/ElementList/ElementList.js +1 -1
  23. package/dist/esm/monitoring/error.js +1 -1
  24. package/dist/esm/ui/DropList/index.js +1 -1
  25. package/dist/esm/ui/TableSelector/index.js +264 -0
  26. package/dist/esm/ui/TableSelector/table-selector.js +154 -0
  27. package/dist/esm/ui/WidthProvider/index.js +1 -0
  28. package/dist/esm/ui/index.js +2 -1
  29. package/dist/esm/utils/get-dom-ref-from-selection.js +32 -0
  30. package/dist/types/analytics/types/enums.d.ts +1 -0
  31. package/dist/types/ui/TableSelector/index.d.ts +28 -0
  32. package/dist/types/ui/TableSelector/table-selector.d.ts +31 -0
  33. package/dist/types/ui/index.d.ts +1 -0
  34. package/dist/types/utils/get-dom-ref-from-selection.d.ts +4 -0
  35. package/dist/types-ts4.5/analytics/types/enums.d.ts +1 -0
  36. package/dist/types-ts4.5/ui/TableSelector/index.d.ts +28 -0
  37. package/dist/types-ts4.5/ui/TableSelector/table-selector.d.ts +31 -0
  38. package/dist/types-ts4.5/ui/index.d.ts +1 -0
  39. package/dist/types-ts4.5/utils/get-dom-ref-from-selection.d.ts +4 -0
  40. package/get-dom-ref-from-selection/package.json +17 -0
  41. package/package.json +7 -2
@@ -0,0 +1,264 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
4
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
5
+ /**
6
+ * @jsxRuntime classic
7
+ * @jsx jsx
8
+ */
9
+
10
+ import { useCallback, useEffect, useRef, useState } from 'react';
11
+
12
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766
13
+ import { css, jsx } from '@emotion/react';
14
+ import { bind } from 'bind-event-listener';
15
+ import { akEditorMenuZIndex } from '@atlaskit/editor-shared-styles';
16
+ import { fg } from '@atlaskit/platform-feature-flags';
17
+ import { N0, N30A, N60A } from '@atlaskit/theme/colors';
18
+ import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
19
+ import { withReactEditorViewOuterListeners as withOuterListeners } from '../../ui-react';
20
+ import Popup from '../Popup';
21
+ import tableSelectorPopup, { TABLE_SELECTOR_BUTTON_GAP, TABLE_SELECTOR_BUTTON_SIZE } from './table-selector';
22
+ var TABLE_SELECTOR_PADDING_TOP = 8;
23
+ var TABLE_SELECTOR_PADDING_SIDE = 10;
24
+ var DEFAULT_TABLE_SELECTOR_ROWS = 5;
25
+ var DEFAULT_TABLE_SELECTOR_COLS = 10;
26
+ var DEFAULT_TABLE_SELECTOR_SELECTION_SIZE = 1;
27
+ var DEFAULT_MAX_TABLE_SELECTOR_ROWS = 10;
28
+ var TableSelectorWithListeners = withOuterListeners(tableSelectorPopup);
29
+ var initialSizeState = {
30
+ col: DEFAULT_TABLE_SELECTOR_SELECTION_SIZE,
31
+ row: DEFAULT_TABLE_SELECTOR_SELECTION_SIZE,
32
+ maxCol: DEFAULT_TABLE_SELECTOR_COLS,
33
+ maxRow: DEFAULT_TABLE_SELECTOR_ROWS
34
+ };
35
+ var tableSelectorPopupWrapperStyles = css({
36
+ borderRadius: "var(--ds-border-radius, 3px)",
37
+ backgroundColor: "var(--ds-surface-overlay, ".concat(N0, ")"),
38
+ boxShadow: "var(--ds-shadow-overlay, ".concat("0 0 0 1px ".concat(N30A, ", 0 2px 1px ").concat(N30A, ", 0 0 20px -6px ").concat(N60A), ")"),
39
+ padding: "".concat("var(--ds-space-100, ".concat("".concat(TABLE_SELECTOR_PADDING_TOP, "px"), ")"), " ", TABLE_SELECTOR_PADDING_SIDE, "px")
40
+ });
41
+ export var TableSelectorPopup = function TableSelectorPopup(props) {
42
+ var _useState = useState(_objectSpread(_objectSpread({}, initialSizeState), props.defaultSize)),
43
+ _useState2 = _slicedToArray(_useState, 2),
44
+ size = _useState2[0],
45
+ setSize = _useState2[1];
46
+ var tablePopupRef = useRef(null);
47
+ // If popup opened by keyboard enable keyboard mode
48
+ var isKeyboardMode = useRef(props.isOpenedByKeyboard);
49
+ var enableKeyboardMode = useCallback(function () {
50
+ if (!isKeyboardMode.current) {
51
+ isKeyboardMode.current = true;
52
+ }
53
+ }, [isKeyboardMode]);
54
+ var disableKeyboardMode = useCallback(function () {
55
+ if (isKeyboardMode.current) {
56
+ isKeyboardMode.current = false;
57
+ }
58
+ }, [isKeyboardMode]);
59
+
60
+ // Mouse move is used to allow selection changes outside of the popup and is more reactive to changes.
61
+ var handleMouseMove = useCallback(function (e) {
62
+ if (!tablePopupRef.current) {
63
+ return;
64
+ }
65
+ disableKeyboardMode();
66
+ var tablePopup = tablePopupRef.current;
67
+ var _tablePopup$getBoundi = tablePopup.getBoundingClientRect(),
68
+ left = _tablePopup$getBoundi.left,
69
+ top = _tablePopup$getBoundi.top;
70
+
71
+ // Mouse position on popup
72
+ var selectedWidth = e.clientX - left;
73
+ var selectedHeight = e.clientY - top;
74
+
75
+ // Calculate number grid cells selected
76
+ var selectedGridCols = Math.ceil((selectedWidth - TABLE_SELECTOR_PADDING_SIDE + TABLE_SELECTOR_BUTTON_GAP) / (TABLE_SELECTOR_BUTTON_GAP + TABLE_SELECTOR_BUTTON_SIZE));
77
+ var selectedGridRows = Math.ceil((selectedHeight - TABLE_SELECTOR_PADDING_TOP + TABLE_SELECTOR_BUTTON_GAP) / (TABLE_SELECTOR_BUTTON_GAP + TABLE_SELECTOR_BUTTON_SIZE));
78
+ // Keep the selected rows and columns within the defined bounds
79
+ var gridRows = DEFAULT_TABLE_SELECTOR_ROWS;
80
+ if (selectedGridCols < 1) {
81
+ selectedGridCols = 1;
82
+ }
83
+ if (selectedGridCols > size.maxCol) {
84
+ selectedGridCols = size.maxCol;
85
+ }
86
+ if (selectedGridRows < 1) {
87
+ selectedGridRows = 1;
88
+ }
89
+
90
+ // Expand grid when row selection is greater than the default grid size
91
+ if (selectedGridRows >= DEFAULT_TABLE_SELECTOR_ROWS && selectedGridRows < DEFAULT_MAX_TABLE_SELECTOR_ROWS) {
92
+ gridRows = selectedGridRows + 1;
93
+ }
94
+ if (selectedGridRows >= DEFAULT_MAX_TABLE_SELECTOR_ROWS) {
95
+ selectedGridRows = DEFAULT_MAX_TABLE_SELECTOR_ROWS;
96
+ gridRows = DEFAULT_MAX_TABLE_SELECTOR_ROWS;
97
+ }
98
+ if (selectedGridCols !== size.col || selectedGridRows !== size.row) {
99
+ setSize({
100
+ col: selectedGridCols,
101
+ row: selectedGridRows,
102
+ maxCol: DEFAULT_TABLE_SELECTOR_COLS,
103
+ maxRow: gridRows
104
+ });
105
+ }
106
+ }, [disableKeyboardMode, size, setSize]);
107
+ var decreasingSequence = function decreasingSequence(maxNumber, prevNumber) {
108
+ var nextNumber = prevNumber - 1;
109
+ if (prevNumber === 1) {
110
+ nextNumber = maxNumber;
111
+ }
112
+ return nextNumber;
113
+ };
114
+ var getMaxRow = function getMaxRow(prevSize, eventKey) {
115
+ switch (eventKey) {
116
+ case 'ArrowDown':
117
+ // Expand the grid size when last row selected
118
+ if (prevSize.maxRow < DEFAULT_MAX_TABLE_SELECTOR_ROWS && prevSize.row >= DEFAULT_TABLE_SELECTOR_ROWS - 1) {
119
+ return prevSize.maxRow + 1;
120
+ }
121
+ if (prevSize.row === DEFAULT_MAX_TABLE_SELECTOR_ROWS) {
122
+ return DEFAULT_TABLE_SELECTOR_ROWS;
123
+ }
124
+ return prevSize.maxRow;
125
+ case 'ArrowLeft':
126
+ var moveToPrevRow = prevSize.col === 1 && prevSize.row > 1;
127
+ var moveToLastRow = prevSize.row === 1 && prevSize.col === 1;
128
+ // Expand the popup to max size when selected row wraps around to last row
129
+ if (moveToLastRow) {
130
+ return DEFAULT_MAX_TABLE_SELECTOR_ROWS;
131
+ }
132
+ // Decrease the popup when decreased row selection
133
+ if (prevSize.maxRow > DEFAULT_TABLE_SELECTOR_ROWS && moveToPrevRow) {
134
+ return prevSize.row;
135
+ }
136
+ return prevSize.maxRow;
137
+ case 'ArrowUp':
138
+ if (prevSize.row === 1) {
139
+ return DEFAULT_MAX_TABLE_SELECTOR_ROWS;
140
+ // Decrease the popup size when decreased row selection
141
+ } else if (prevSize.maxRow > DEFAULT_TABLE_SELECTOR_ROWS) {
142
+ return prevSize.row;
143
+ }
144
+ return prevSize.maxRow;
145
+ case 'ArrowRight':
146
+ var moveToNextRow = prevSize.col === DEFAULT_TABLE_SELECTOR_COLS;
147
+ var increaseMaxRow = prevSize.maxRow < DEFAULT_MAX_TABLE_SELECTOR_ROWS && moveToNextRow && prevSize.row + 1 === prevSize.maxRow;
148
+
149
+ // Decrease popup size for wrap around to selection 1 x 1
150
+ if (prevSize.row === DEFAULT_MAX_TABLE_SELECTOR_ROWS && prevSize.col === DEFAULT_TABLE_SELECTOR_COLS) {
151
+ return DEFAULT_TABLE_SELECTOR_ROWS;
152
+ // Decrease the popup size when decreased row selection
153
+ } else if (increaseMaxRow) {
154
+ return prevSize.maxRow + 1;
155
+ }
156
+ return prevSize.maxRow;
157
+ default:
158
+ return prevSize.maxRow;
159
+ }
160
+ };
161
+ var handleInitialButtonFocus = useCallback(function () {
162
+ if (isKeyboardMode.current !== true) {
163
+ enableKeyboardMode();
164
+ setSize(initialSizeState);
165
+ }
166
+ }, [enableKeyboardMode, setSize]);
167
+ var handleKeyDown = useCallback(
168
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
169
+ function (event) {
170
+ if (event.key === 'ArrowDown') {
171
+ enableKeyboardMode();
172
+ setSize(function (prevSize) {
173
+ return _objectSpread(_objectSpread({}, prevSize), {}, {
174
+ row: prevSize.row % prevSize.maxRow + 1,
175
+ maxRow: getMaxRow(prevSize, event.key)
176
+ });
177
+ });
178
+ if (editorExperiment('platform_editor_controls', 'variant1') && fg('platform_editor_controls_table_picker')) {
179
+ event.preventDefault();
180
+ }
181
+ }
182
+ if (event.key === 'ArrowRight') {
183
+ enableKeyboardMode();
184
+ setSize(function (prevSize) {
185
+ var moveToNextRow = prevSize.col === DEFAULT_TABLE_SELECTOR_COLS;
186
+ return _objectSpread(_objectSpread({}, prevSize), {}, {
187
+ col: prevSize.col % DEFAULT_TABLE_SELECTOR_COLS + 1,
188
+ row: moveToNextRow ? prevSize.row % prevSize.maxRow + 1 : prevSize.row,
189
+ maxRow: getMaxRow(prevSize, event.key)
190
+ });
191
+ });
192
+ }
193
+ if (event.key === 'ArrowLeft') {
194
+ enableKeyboardMode();
195
+ setSize(function (prevSize) {
196
+ var getRow = function getRow(prevRow, prevCol) {
197
+ var row = prevRow;
198
+ // Move to previous row for wrap around
199
+ if (prevSize.col === 1 && prevSize.row > 1) {
200
+ return prevRow - 1;
201
+ // Increase the selection to max size when selected row and column wraps around
202
+ } else if (prevRow === 1 && prevCol === 1) {
203
+ return DEFAULT_MAX_TABLE_SELECTOR_ROWS;
204
+ }
205
+ return row;
206
+ };
207
+ return _objectSpread(_objectSpread({}, prevSize), {}, {
208
+ col: decreasingSequence(prevSize.maxCol, prevSize.col),
209
+ row: getRow(prevSize.row, prevSize.col),
210
+ maxRow: getMaxRow(prevSize, event.key)
211
+ });
212
+ });
213
+ }
214
+ if (event.key === 'ArrowUp') {
215
+ enableKeyboardMode();
216
+ setSize(function (prevSize) {
217
+ var moveToLastRow = prevSize.row === 1;
218
+ return _objectSpread(_objectSpread({}, prevSize), {}, {
219
+ row: moveToLastRow ? DEFAULT_MAX_TABLE_SELECTOR_ROWS : decreasingSequence(prevSize.maxRow, prevSize.row),
220
+ maxRow: getMaxRow(prevSize, event.key)
221
+ });
222
+ });
223
+ if (editorExperiment('platform_editor_controls', 'variant1') && fg('platform_editor_controls_table_picker')) {
224
+ event.preventDefault();
225
+ }
226
+ }
227
+ }, [enableKeyboardMode, setSize]);
228
+ useEffect(function () {
229
+ var unbind;
230
+ var target = props.allowOutsideSelection ? window : tablePopupRef.current;
231
+ if (target) {
232
+ unbind = bind(target, {
233
+ type: 'mousemove',
234
+ listener: handleMouseMove
235
+ });
236
+ }
237
+ return unbind;
238
+ }, [handleMouseMove, props.allowOutsideSelection, tablePopupRef]);
239
+ return jsx(Popup, {
240
+ target: props.target,
241
+ offset: [0, 3],
242
+ mountTo: props.popupsMountPoint,
243
+ boundariesElement: props.popupsBoundariesElement,
244
+ scrollableElement: props.popupsScrollableElement,
245
+ focusTrap: true,
246
+ onUnmount: props.onUnmount,
247
+ zIndex: akEditorMenuZIndex
248
+ }, jsx("div", {
249
+ css: tableSelectorPopupWrapperStyles,
250
+ ref: tablePopupRef
251
+ }, jsx(TableSelectorWithListeners, {
252
+ handleClickOutside: props.handleClickOutside,
253
+ handleEscapeKeydown: props.handleEscapeKeydown,
254
+ maxCols: size.maxCol,
255
+ maxRows: size.maxRow,
256
+ onSelection: props.onSelection,
257
+ selectedCol: size.col,
258
+ selectedRow: size.row,
259
+ onKeyDown: handleKeyDown,
260
+ isFocused: isKeyboardMode.current,
261
+ handleInitialButtonFocus: handleInitialButtonFocus
262
+ })));
263
+ };
264
+ export default TableSelectorPopup;
@@ -0,0 +1,154 @@
1
+ /**
2
+ * @jsxRuntime classic
3
+ * @jsx jsx
4
+ */
5
+ import { useContext, useEffect, useMemo, useRef } from 'react';
6
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766
7
+ import { css, jsx } from '@emotion/react';
8
+ import { injectIntl } from 'react-intl-next';
9
+ import { fg } from '@atlaskit/platform-feature-flags';
10
+ import { Stack } from '@atlaskit/primitives/compiled';
11
+ import { B100 } from '@atlaskit/theme/colors';
12
+ import { editorExperiment } from '@atlaskit/tmp-editor-statsig/experiments';
13
+ import { toolbarInsertBlockMessages as messages } from '../../messages';
14
+ import { OutsideClickTargetRefContext } from '../../ui-react';
15
+ export var TABLE_SELECTOR_BUTTON_GAP = 2;
16
+ export var TABLE_SELECTOR_BUTTON_SIZE = 17;
17
+ var selectedButtonStyles = css({
18
+ backgroundColor: "var(--ds-background-accent-blue-subtlest, #579DFF)",
19
+ border: "1px solid ".concat("var(--ds-background-accent-blue-subtle, #579DFF)")
20
+ });
21
+ var buttonStyles = css({
22
+ height: "".concat(TABLE_SELECTOR_BUTTON_SIZE, "px"),
23
+ width: "".concat(TABLE_SELECTOR_BUTTON_SIZE, "px"),
24
+ border: "1px solid ".concat("var(--ds-border, #091e4224)"),
25
+ backgroundColor: "var(--ds-background-input, #ffffff)",
26
+ borderRadius: '3px',
27
+ cursor: 'pointer',
28
+ display: 'block',
29
+ '&:focus': {
30
+ outline: 'none',
31
+ border: "1px solid ".concat("var(--ds-border-focused, ".concat(B100, ")")),
32
+ boxShadow: "0 0 0 0.5px ".concat("var(--ds-border-focused, ".concat(B100, ")"))
33
+ }
34
+ });
35
+ var selectionSizeTextStyles = css({
36
+ // eslint-disable-next-line @atlaskit/design-system/use-tokens-typography
37
+ lineHeight: '14px',
38
+ display: 'flex',
39
+ justifyContent: 'center',
40
+ marginTop: "var(--ds-space-075, 5px)",
41
+ padding: "var(--ds-space-075, 10px)"
42
+ });
43
+ var TableSelectorButton = function TableSelectorButton(_ref) {
44
+ var row = _ref.row,
45
+ col = _ref.col,
46
+ isActive = _ref.isActive,
47
+ _onClick = _ref.onClick,
48
+ label = _ref.label,
49
+ onKeyDown = _ref.onKeyDown,
50
+ isFocused = _ref.isFocused,
51
+ handleInitialButtonFocus = _ref.handleInitialButtonFocus;
52
+ var btnRef = useRef(null);
53
+ useEffect(function () {
54
+ if (btnRef.current) {
55
+ if (isFocused) {
56
+ btnRef.current.focus({
57
+ preventScroll: editorExperiment('platform_editor_controls', 'variant1') && fg('platform_editor_controls_table_picker') ? true : undefined
58
+ });
59
+ } else {
60
+ btnRef.current.blur();
61
+ }
62
+ }
63
+ }, [isFocused, btnRef]);
64
+ var handleFocus = col === 1 && row === 1 ? function () {
65
+ return handleInitialButtonFocus();
66
+ } : undefined;
67
+ return jsx("button", {
68
+ type: "button",
69
+ css: [buttonStyles, isActive ? selectedButtonStyles : undefined],
70
+ onClick: function onClick() {
71
+ return _onClick(row, col);
72
+ },
73
+ "aria-label": label,
74
+ onKeyDown: onKeyDown,
75
+ ref: btnRef,
76
+ onFocus: handleFocus
77
+ });
78
+ };
79
+ var createArray = function createArray(maxCols, maxRows) {
80
+ var arr = [];
81
+ for (var i = 1; i < maxRows + 1; i++) {
82
+ for (var j = 1; j < maxCols + 1; j++) {
83
+ arr.push({
84
+ col: j,
85
+ row: i
86
+ });
87
+ }
88
+ }
89
+ return arr;
90
+ };
91
+ var gridWrapperStyles = function gridWrapperStyles(_ref2) {
92
+ var maxCols = _ref2.maxCols,
93
+ maxRows = _ref2.maxRows;
94
+ return css({
95
+ display: 'grid',
96
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-unsafe-values -- Ignored via go/DSP-18766
97
+ gridTemplateColumns: "repeat(".concat(maxCols, ", 1fr)"),
98
+ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-unsafe-values -- Ignored via go/DSP-18766
99
+ gridTemplateRows: "repeat(".concat(maxRows, ", 1fr)"),
100
+ gap: "".concat("var(--ds-space-025, ".concat("".concat(TABLE_SELECTOR_BUTTON_GAP, "px"), ")"))
101
+ });
102
+ };
103
+ var TableSelectorPopup = function TableSelectorPopup(_ref3) {
104
+ var maxCols = _ref3.maxCols,
105
+ maxRows = _ref3.maxRows,
106
+ onSelection = _ref3.onSelection,
107
+ selectedCol = _ref3.selectedCol,
108
+ selectedRow = _ref3.selectedRow,
109
+ onKeyDown = _ref3.onKeyDown,
110
+ isFocused = _ref3.isFocused,
111
+ handleInitialButtonFocus = _ref3.handleInitialButtonFocus,
112
+ formatMessage = _ref3.intl.formatMessage;
113
+ var buttons = useMemo(function () {
114
+ return createArray(maxCols, maxRows);
115
+ }, [maxCols, maxRows]);
116
+ var setOutsideClickTargetRef = useContext(OutsideClickTargetRefContext);
117
+ return jsx(Stack, {
118
+ ref: setOutsideClickTargetRef
119
+ }, jsx("div", {
120
+ "aria-label": "".concat(formatMessage(messages.tableSizeSelectorPopup)),
121
+ css:
122
+ // eslint-disable-next-line @atlaskit/design-system/consistent-css-prop-usage
123
+ gridWrapperStyles({
124
+ maxCols: maxCols,
125
+ maxRows: maxRows
126
+ })
127
+ }, buttons.map(function (_ref4, index) {
128
+ var col = _ref4.col,
129
+ row = _ref4.row;
130
+ var isCurrentFocused = isFocused && selectedCol === col && selectedRow === row;
131
+ var isActive = selectedCol >= col && selectedRow >= row ? true : false;
132
+ return jsx(TableSelectorButton
133
+ // Ignored via go/ees005
134
+ // eslint-disable-next-line react/no-array-index-key
135
+ , {
136
+ key: index,
137
+ isActive: isActive,
138
+ col: col,
139
+ row: row,
140
+ onClick: onSelection,
141
+ label: "".concat(formatMessage(messages.tableSizeSelectorButton, {
142
+ numberOfColumns: col,
143
+ numberOfRows: row
144
+ })),
145
+ onKeyDown: onKeyDown,
146
+ isFocused: isCurrentFocused,
147
+ handleInitialButtonFocus: handleInitialButtonFocus
148
+ });
149
+ })), jsx("span", {
150
+ css: selectionSizeTextStyles,
151
+ "aria-hidden": true
152
+ }, "".concat(selectedCol, " x ").concat(selectedRow)));
153
+ };
154
+ export default injectIntl(TableSelectorPopup);
@@ -79,6 +79,7 @@ export var WidthProvider = function WidthProvider(_ref) {
79
79
  if (!isMountedRef.current) {
80
80
  return;
81
81
  }
82
+ widthRef.current = nextWidth;
82
83
  setWidth(nextWidth);
83
84
  });
84
85
  }, []);
@@ -42,4 +42,5 @@ export { ToolbarDropdownWrapper } from './Toolbar/DropdownWrapper';
42
42
  export { ToolbarExpandIcon } from './Toolbar/ExpandIcon';
43
43
  export { ToolbarSeparator } from './Toolbar/Separator';
44
44
  export { default as DropList } from './DropList';
45
- export { sharedMultiBodiedExtensionStyles } from './MultiBodiedExtension';
45
+ export { sharedMultiBodiedExtensionStyles } from './MultiBodiedExtension';
46
+ export { default as TableSelectorPopup } from './TableSelector';
@@ -0,0 +1,32 @@
1
+ import { findDomRefAtPos } from '@atlaskit/editor-prosemirror/utils';
2
+ import { ACTION, ACTION_SUBJECT, EVENT_TYPE } from '../analytics';
3
+ export var getDomRefFromSelection = function getDomRefFromSelection(view, actionSubjectId, dispatchAnalyticsEvent) {
4
+ try {
5
+ var domRef = findDomRefAtPos(view.state.selection.from, view.domAtPos.bind(view));
6
+ if (domRef instanceof HTMLElement) {
7
+ // If element is not a paragraph, we need to find the closest paragraph parent
8
+ if (domRef.nodeName !== 'P') {
9
+ var paragraphRef = domRef.closest('p');
10
+ if (paragraphRef) {
11
+ return paragraphRef;
12
+ }
13
+ }
14
+ return domRef;
15
+ } else {
16
+ throw new Error('Invalid DOM reference');
17
+ }
18
+ } catch (error) {
19
+ if (dispatchAnalyticsEvent) {
20
+ var payload = {
21
+ action: ACTION.ERRORED,
22
+ actionSubject: ACTION_SUBJECT.PICKER,
23
+ actionSubjectId: actionSubjectId,
24
+ eventType: EVENT_TYPE.OPERATIONAL,
25
+ attributes: {
26
+ error: 'Error getting DOM reference from selection'
27
+ }
28
+ };
29
+ dispatchAnalyticsEvent(payload);
30
+ }
31
+ }
32
+ };
@@ -419,6 +419,7 @@ export declare enum ACTION_SUBJECT_ID {
419
419
  PICKER_MEDIA = "mediaPicker",
420
420
  PICKER_COLOR = "colorPicker",
421
421
  PICKER_EMOJI = "emojiPicker",
422
+ PICKER_TABLE_SIZE = "tableSizePicker",
422
423
  DOCKED_PRIMARY_TOOLBAR = "dockedPrimaryToolbar",
423
424
  PLACEHOLDER_TEXT = "placeholderText",
424
425
  POST_QUERY_SEARCH_RESULTS = "postQuerySearchResults",
@@ -0,0 +1,28 @@
1
+ /**
2
+ * @jsxRuntime classic
3
+ * @jsx jsx
4
+ */
5
+ import { type SyntheticEvent } from 'react';
6
+ import { jsx } from '@emotion/react';
7
+ export interface OnTableSizeSelection {
8
+ (rowsCount: number, colsCount: number, event?: SyntheticEvent): void;
9
+ }
10
+ type SimpleEventHandler<T> = (event: T) => void;
11
+ export interface TableSelectorPopupProps {
12
+ onUnmount?: () => void;
13
+ onSelection: OnTableSizeSelection;
14
+ target?: HTMLElement;
15
+ popupsMountPoint?: HTMLElement;
16
+ popupsBoundariesElement?: HTMLElement;
17
+ popupsScrollableElement?: HTMLElement;
18
+ handleClickOutside?: SimpleEventHandler<MouseEvent>;
19
+ handleEscapeKeydown?: SimpleEventHandler<KeyboardEvent>;
20
+ isOpenedByKeyboard: boolean;
21
+ defaultSize?: {
22
+ row: number;
23
+ col: number;
24
+ };
25
+ allowOutsideSelection?: boolean;
26
+ }
27
+ export declare const TableSelectorPopup: (props: TableSelectorPopupProps) => jsx.JSX.Element;
28
+ export default TableSelectorPopup;
@@ -0,0 +1,31 @@
1
+ import type { KeyboardEventHandler, SyntheticEvent } from 'react';
2
+ import type { WrappedComponentProps } from 'react-intl-next';
3
+ export declare const TABLE_SELECTOR_BUTTON_GAP = 2;
4
+ export declare const TABLE_SELECTOR_BUTTON_SIZE = 17;
5
+ export interface TableSelectorButtonProps {
6
+ row: number;
7
+ col: number;
8
+ isActive: boolean;
9
+ onClick: OnTableSizeSelection;
10
+ label: string;
11
+ onKeyDown: KeyboardEventHandler<HTMLButtonElement>;
12
+ isFocused: boolean;
13
+ handleInitialButtonFocus: () => void;
14
+ }
15
+ export interface OnTableSizeSelection {
16
+ (rowsCount: number, colsCount: number, event?: SyntheticEvent): void;
17
+ }
18
+ interface TableSelectorPopupProps {
19
+ maxCols: number;
20
+ maxRows: number;
21
+ onSelection: OnTableSizeSelection;
22
+ selectedCol: number;
23
+ selectedRow: number;
24
+ onKeyDown: KeyboardEventHandler<HTMLButtonElement>;
25
+ isFocused: boolean;
26
+ handleInitialButtonFocus: () => void;
27
+ }
28
+ declare const _default: import("react").FC<import("react-intl-next").WithIntlProps<TableSelectorPopupProps & WrappedComponentProps>> & {
29
+ WrappedComponent: import("react").ComponentType<TableSelectorPopupProps & WrappedComponentProps>;
30
+ };
31
+ export default _default;
@@ -54,3 +54,4 @@ export { default as DropList, type Props as DropListProps } from './DropList';
54
54
  export type { UseStickyToolbarType } from './Toolbar';
55
55
  export type { OpenChangedEvent } from './DropList';
56
56
  export { sharedMultiBodiedExtensionStyles } from './MultiBodiedExtension';
57
+ export { default as TableSelectorPopup, type TableSelectorPopupProps } from './TableSelector';
@@ -0,0 +1,4 @@
1
+ import type { EditorView } from '@atlaskit/editor-prosemirror/view';
2
+ import type { DispatchAnalyticsEvent } from '../analytics';
3
+ import { ACTION_SUBJECT_ID } from '../analytics';
4
+ export declare const getDomRefFromSelection: (view: EditorView, actionSubjectId: ACTION_SUBJECT_ID.PICKER_MEDIA | ACTION_SUBJECT_ID.PICKER_TABLE_SIZE | ACTION_SUBJECT_ID.PICKER_EMOJI, dispatchAnalyticsEvent?: DispatchAnalyticsEvent) => HTMLElement | undefined;
@@ -419,6 +419,7 @@ export declare enum ACTION_SUBJECT_ID {
419
419
  PICKER_MEDIA = "mediaPicker",
420
420
  PICKER_COLOR = "colorPicker",
421
421
  PICKER_EMOJI = "emojiPicker",
422
+ PICKER_TABLE_SIZE = "tableSizePicker",
422
423
  DOCKED_PRIMARY_TOOLBAR = "dockedPrimaryToolbar",
423
424
  PLACEHOLDER_TEXT = "placeholderText",
424
425
  POST_QUERY_SEARCH_RESULTS = "postQuerySearchResults",
@@ -0,0 +1,28 @@
1
+ /**
2
+ * @jsxRuntime classic
3
+ * @jsx jsx
4
+ */
5
+ import { type SyntheticEvent } from 'react';
6
+ import { jsx } from '@emotion/react';
7
+ export interface OnTableSizeSelection {
8
+ (rowsCount: number, colsCount: number, event?: SyntheticEvent): void;
9
+ }
10
+ type SimpleEventHandler<T> = (event: T) => void;
11
+ export interface TableSelectorPopupProps {
12
+ onUnmount?: () => void;
13
+ onSelection: OnTableSizeSelection;
14
+ target?: HTMLElement;
15
+ popupsMountPoint?: HTMLElement;
16
+ popupsBoundariesElement?: HTMLElement;
17
+ popupsScrollableElement?: HTMLElement;
18
+ handleClickOutside?: SimpleEventHandler<MouseEvent>;
19
+ handleEscapeKeydown?: SimpleEventHandler<KeyboardEvent>;
20
+ isOpenedByKeyboard: boolean;
21
+ defaultSize?: {
22
+ row: number;
23
+ col: number;
24
+ };
25
+ allowOutsideSelection?: boolean;
26
+ }
27
+ export declare const TableSelectorPopup: (props: TableSelectorPopupProps) => jsx.JSX.Element;
28
+ export default TableSelectorPopup;
@@ -0,0 +1,31 @@
1
+ import type { KeyboardEventHandler, SyntheticEvent } from 'react';
2
+ import type { WrappedComponentProps } from 'react-intl-next';
3
+ export declare const TABLE_SELECTOR_BUTTON_GAP = 2;
4
+ export declare const TABLE_SELECTOR_BUTTON_SIZE = 17;
5
+ export interface TableSelectorButtonProps {
6
+ row: number;
7
+ col: number;
8
+ isActive: boolean;
9
+ onClick: OnTableSizeSelection;
10
+ label: string;
11
+ onKeyDown: KeyboardEventHandler<HTMLButtonElement>;
12
+ isFocused: boolean;
13
+ handleInitialButtonFocus: () => void;
14
+ }
15
+ export interface OnTableSizeSelection {
16
+ (rowsCount: number, colsCount: number, event?: SyntheticEvent): void;
17
+ }
18
+ interface TableSelectorPopupProps {
19
+ maxCols: number;
20
+ maxRows: number;
21
+ onSelection: OnTableSizeSelection;
22
+ selectedCol: number;
23
+ selectedRow: number;
24
+ onKeyDown: KeyboardEventHandler<HTMLButtonElement>;
25
+ isFocused: boolean;
26
+ handleInitialButtonFocus: () => void;
27
+ }
28
+ declare const _default: import("react").FC<import("react-intl-next").WithIntlProps<TableSelectorPopupProps & WrappedComponentProps>> & {
29
+ WrappedComponent: import("react").ComponentType<TableSelectorPopupProps & WrappedComponentProps>;
30
+ };
31
+ export default _default;
@@ -54,3 +54,4 @@ export { default as DropList, type Props as DropListProps } from './DropList';
54
54
  export type { UseStickyToolbarType } from './Toolbar';
55
55
  export type { OpenChangedEvent } from './DropList';
56
56
  export { sharedMultiBodiedExtensionStyles } from './MultiBodiedExtension';
57
+ export { default as TableSelectorPopup, type TableSelectorPopupProps } from './TableSelector';
@@ -0,0 +1,4 @@
1
+ import type { EditorView } from '@atlaskit/editor-prosemirror/view';
2
+ import type { DispatchAnalyticsEvent } from '../analytics';
3
+ import { ACTION_SUBJECT_ID } from '../analytics';
4
+ export declare const getDomRefFromSelection: (view: EditorView, actionSubjectId: ACTION_SUBJECT_ID.PICKER_MEDIA | ACTION_SUBJECT_ID.PICKER_TABLE_SIZE | ACTION_SUBJECT_ID.PICKER_EMOJI, dispatchAnalyticsEvent?: DispatchAnalyticsEvent) => HTMLElement | undefined;
@@ -0,0 +1,17 @@
1
+ {
2
+ "name": "@atlaskit/editor-common/get-dom-ref-from-selection",
3
+ "main": "../dist/cjs/utils/get-dom-ref-from-selection.js",
4
+ "module": "../dist/esm/utils/get-dom-ref-from-selection.js",
5
+ "module:es2019": "../dist/es2019/utils/get-dom-ref-from-selection.js",
6
+ "sideEffects": [
7
+ "**/*.compiled.css"
8
+ ],
9
+ "types": "../dist/types/utils/get-dom-ref-from-selection.d.ts",
10
+ "typesVersions": {
11
+ ">=4.5 <5.4": {
12
+ "*": [
13
+ "../dist/types-ts4.5/utils/get-dom-ref-from-selection.d.ts"
14
+ ]
15
+ }
16
+ }
17
+ }