@atlaskit/editor-common 109.12.0 → 109.13.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,20 @@
1
1
  # @atlaskit/editor-common
2
2
 
3
+ ## 109.13.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`23e11d126d7c9`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/23e11d126d7c9) -
8
+ EDITOR-1312: Add new AIFC error messages.
9
+
10
+ ### Patch Changes
11
+
12
+ - [`6d186dc817ef9`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/6d186dc817ef9) -
13
+ [ux] ED-26884 fix bug where resize columns for nested table results in a scrollbar
14
+ - [`407e1dc11eeed`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/407e1dc11eeed) -
15
+ Minor changes to border radius values.
16
+ - Updated dependencies
17
+
3
18
  ## 109.12.0
4
19
 
5
20
  ### Minor Changes
@@ -13,11 +13,6 @@ var aiFailedStateMessages = exports.aiFailedStateMessages = (0, _reactIntlNext.d
13
13
  defaultMessage: 'Your prompt or content might not comply with our Acceptable Use Policy. Please review both and refer to our <link>Acceptable Use Policy</link> if needed. If the problem persists, consider trying a different prompt or content.',
14
14
  description: 'Message to indicate to user their prompt or content (this can be a range of content, such as a selection or document -- we used content to keep it vague -- as this will change without user knowing) has been detected as violating Atlassians acceptable use policy. Note the markdown link -- this is expected to remain as markdown as this string is converted to html.'
15
15
  },
16
- cmdPaletteAupViolationMessage: {
17
- id: 'fabric.editor.ai.experience.cmdPaletteAupViolationMessage',
18
- defaultMessage: "We couldn’t complete that request because it doesn't comply with our <link>Acceptable Use Policy</link>.",
19
- description: 'Message to indicate to user their prompt or content (this can be a range of content, such as a selection or document -- we used content to keep it vague -- as this will change without user knowing) has been detected as violating Atlassians acceptable use policy. Note the markdown link -- this is expected to remain as markdown as this string is converted to html.'
20
- },
21
16
  documentInsertError: {
22
17
  id: 'fabric.editor.ai.experience-application.documentInsertError',
23
18
  defaultMessage: "We're having trouble inserting the response. Close the dialog and try again.",
@@ -38,11 +33,6 @@ var aiFailedStateMessages = exports.aiFailedStateMessages = (0, _reactIntlNext.d
38
33
  defaultMessage: "We couldn\u2019t get a response, please try again.",
39
34
  description: "We couldn't get a response due to an api error (ie. the backend responded with an error, or got a timeout)"
40
35
  },
41
- cmdPaletteApiError: {
42
- id: 'fabric.editor.ai.experience.cmdPaletteApiError',
43
- defaultMessage: "An error occurred while generating your response.",
44
- description: "We couldn't get a response due to an api error (ie. the backend responded with an error, or got a timeout)"
45
- },
46
36
  elevateDisabledGenerateError: {
47
37
  id: 'fabric.editor.ai.experience.elevateDisabledGenetateError',
48
38
  defaultMessage: "Free generate is disabled in Elevate at this time.",
@@ -67,5 +57,50 @@ var aiFailedStateMessages = exports.aiFailedStateMessages = (0, _reactIntlNext.d
67
57
  id: 'fabric.editor.ai.experience.adfStreamingError',
68
58
  defaultMessage: "Our apologies, we couldn't get a response.",
69
59
  description: "This error message is displayed when error(s) are encountered during processing of LLM response in ADF format."
60
+ },
61
+ aifcAupViolationMessage: {
62
+ id: 'fabric.editor.ai.experience.aifcAupViolationMessage',
63
+ defaultMessage: 'Content does not comply with our <link>Acceptable Use Policy</link>.',
64
+ description: 'Error message to indicate to user their prompt or content (this can be a range of content, such as a selection or document -- we used content to keep it vague -- as this will change without user knowing) has been detected as violating Atlassians acceptable use policy.'
65
+ },
66
+ aifcApiError: {
67
+ id: 'fabric.editor.ai.experience.aifcApiError',
68
+ defaultMessage: 'An unknown error occurred.',
69
+ description: 'Message for users when a non-retryable API error occurs.'
70
+ },
71
+ aifcApiErrorRetry: {
72
+ id: 'fabric.editor.ai.experience.aifcApiErrorRetry',
73
+ defaultMessage: 'An unknown error occurred. Please reload and try again.',
74
+ description: 'Message for users when an API error occurs'
75
+ },
76
+ aifcTokenLimitExceeded: {
77
+ id: 'fabric.editor.ai.experience.aifcTokenLimitExceeded',
78
+ defaultMessage: 'There’s too much content to process. Select less content and try again.',
79
+ description: 'Message to users that displays when their request has exceeded the maximum input or output limit.'
80
+ },
81
+ aifcInputTooShortError: {
82
+ id: 'fabric.editor.ai.experience.aifcInputTooShortError',
83
+ defaultMessage: 'More content needed to complete your request. Please select more content and try again.',
84
+ description: 'Error message when the input was too short to process.'
85
+ },
86
+ aifcHipaaContentError: {
87
+ id: 'fabric.editor.ai.experience.aifcHipaaContentError',
88
+ defaultMessage: 'Your content contains links to HIPAA restricted content. Remove links and try again.',
89
+ description: 'Error message when HIPAA links have been detected.'
90
+ },
91
+ aifcRateLimitEnforced: {
92
+ id: 'fabric.editor.ai.experience.aifcRateLimitEnforced',
93
+ defaultMessage: 'You’ve reached the <link>maximum number of requests</link>. Try again in 5 minutes.',
94
+ description: 'Message to users that rate limiting has been enforced.'
95
+ },
96
+ aifcInternalServerError: {
97
+ id: 'fabric.editor.ai.experience.aifcInternalServerError',
98
+ defaultMessage: 'Our apologies, we couldn’t get a response. Try again in 5 minutes or <link>check Rovo status</link>.',
99
+ description: 'Error message when a Rovo internal server occurs.'
100
+ },
101
+ aifcAdfStreamingError: {
102
+ id: 'fabric.editor.ai.experience.aifcAdfStreamingError',
103
+ defaultMessage: 'Our apologies, we couldn’t get a response.',
104
+ description: 'This error message is displayed when error(s) are encountered during processing of LLM response in ADF format.'
70
105
  }
71
106
  });
@@ -16,7 +16,7 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
16
16
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
17
17
  var SENTRY_DSN = 'https://0b10c8e02fb44d8796c047b102c9bee8@o55978.ingest.sentry.io/4505129224110080';
18
18
  var packageName = 'editor-common'; // Sentry doesn't accept '/' in its releases https://docs.sentry.io/platforms/javascript/configuration/releases/
19
- var packageVersion = "109.11.4";
19
+ var packageVersion = "109.12.0";
20
20
  var sanitiseSentryEvents = function sanitiseSentryEvents(data, _hint) {
21
21
  // Remove URL as it has UGC
22
22
  // Ignored via go/ees007
@@ -6,11 +6,15 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.layoutToWidth = exports.getTableWidthWithNumberColumn = exports.getTableContainerWidth = exports.getParentNodeWidth = void 0;
7
7
  var _utils = require("@atlaskit/editor-prosemirror/utils");
8
8
  var _editorSharedStyles = require("@atlaskit/editor-shared-styles");
9
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
10
+ var _expValEquals = require("@atlaskit/tmp-editor-statsig/exp-val-equals");
9
11
  var _extension = require("../styles/shared/extension");
10
12
  var _layout = require("../styles/shared/layout");
11
13
  var _table = require("../styles/shared/table");
12
14
  var _breakout = require("../utils/breakout");
13
15
  var GRID_SIZE = 8;
16
+ var NESTED_DND_GUTTER_OFFSET = 8;
17
+ var NESTED_DND_MARGIN_OFFSET = 12;
14
18
  var layoutToWidth = exports.layoutToWidth = {
15
19
  // eslint-disable-next-line @atlaskit/editor/no-re-export
16
20
  default: _editorSharedStyles.akEditorDefaultLayoutWidth,
@@ -39,7 +43,8 @@ var getParentNodeWidth = exports.getParentNodeWidth = function getParentNodeWidt
39
43
  if (breakoutMark && breakoutMark.attrs.mode) {
40
44
  layout = breakoutMark.attrs.mode;
41
45
  }
42
- var parentWidth = calcBreakoutNodeWidth(layout, containerWidth, isFullWidthModeEnabled);
46
+ var breakoutWidth = breakoutMark ? breakoutMark.attrs.width : undefined;
47
+ var parentWidth = calcBreakoutNodeWidth(layout, containerWidth, isFullWidthModeEnabled, breakoutWidth);
43
48
 
44
49
  // Please, do not copy or use this kind of code below
45
50
  // @ts-ignore
@@ -53,13 +58,17 @@ var getParentNodeWidth = exports.getParentNodeWidth = function getParentNodeWidt
53
58
  };
54
59
  switch (node.type) {
55
60
  case schema.nodes.layoutSection:
56
- parentWidth += _editorSharedStyles.akLayoutGutterOffset * 2; // extra width that gets added to layout
61
+ // the extra width of the layout does not add to the width of the area the table can be inside
62
+ if (!(0, _expValEquals.expValEquals)('platform_editor_nested_table_refresh_width_fix', 'isEnabled', true)) {
63
+ parentWidth += _editorSharedStyles.akLayoutGutterOffset * 2; // extra width that gets added to layout
64
+ }
57
65
 
58
66
  // Calculate width of parent layout column when
59
67
  // Parallel layout with viewport greater than 1024px
60
68
  // OR side panel of an extension is open and change the node width to smaller than containerWidth
61
69
  if (containerWidth.width > _editorSharedStyles.gridMediumMaxWidth || ((_contextPanelPluginKe = contextPanelPluginKey.getState(state)) === null || _contextPanelPluginKe === void 0 ? void 0 : _contextPanelPluginKe.contents.length) > 0 && ((_contextPanelPluginKe2 = contextPanelPluginKey.getState(state)) === null || _contextPanelPluginKe2 === void 0 ? void 0 : _contextPanelPluginKe2.contents[0]) !== undefined) {
62
- parentWidth -= (_layout.LAYOUT_SECTION_MARGIN + 2) * (node.childCount - 1); // margin between sections
70
+ // margin between sections
71
+ parentWidth -= (0, _expValEquals.expValEquals)('platform_editor_nested_table_refresh_width_fix', 'isEnabled', true) && (0, _platformFeatureFlags.fg)('platform_editor_nested_dnd_styles_changes') ? (_layout.LAYOUT_SECTION_MARGIN + NESTED_DND_MARGIN_OFFSET + 2) * (node.childCount - 1) : (_layout.LAYOUT_SECTION_MARGIN + 2) * (node.childCount - 1);
63
72
  var $pos = state.doc.resolve(pos);
64
73
  var column = (0, _utils.findParentNodeOfTypeClosestToPos)($pos, [state.schema.nodes.layoutColumn]);
65
74
  if (column && column.node && !isNaN(column.node.attrs.width)) {
@@ -69,7 +78,7 @@ var getParentNodeWidth = exports.getParentNodeWidth = function getParentNodeWidt
69
78
  }
70
79
 
71
80
  // account for the padding of the parent node
72
- parentWidth -= _layout.LAYOUT_COLUMN_PADDING * 2;
81
+ parentWidth -= (0, _expValEquals.expValEquals)('platform_editor_nested_table_refresh_width_fix', 'isEnabled', true) && (0, _platformFeatureFlags.fg)('platform_editor_nested_dnd_styles_changes') ? (_layout.LAYOUT_COLUMN_PADDING + NESTED_DND_GUTTER_OFFSET) * 2 : _layout.LAYOUT_COLUMN_PADDING * 2;
73
82
  break;
74
83
  case schema.nodes.bodiedExtension:
75
84
  parentWidth -= _extension.BODIED_EXT_PADDING * 2;
@@ -111,7 +120,13 @@ var getNestedParentNode = function getNestedParentNode(tablePos, state) {
111
120
  var parent = (0, _utils.findParentNodeOfTypeClosestToPos)($pos, [state.schema.nodes.bodiedExtension, state.schema.nodes.extensionFrame, state.schema.nodes.layoutSection, state.schema.nodes.expand, state.schema.nodes.tableCell, state.schema.nodes.tableHeader]);
112
121
  return parent ? parent.node : null;
113
122
  };
114
- var calcBreakoutNodeWidth = function calcBreakoutNodeWidth(layout, containerWidth, isFullWidthModeEnabled) {
123
+ var calcBreakoutNodeWidth = function calcBreakoutNodeWidth(layout, containerWidth, isFullWidthModeEnabled, breakoutWidth) {
124
+ if (breakoutWidth && (0, _expValEquals.expValEquals)('platform_editor_nested_table_refresh_width_fix', 'isEnabled', true)) {
125
+ return isFullWidthModeEnabled ? Math.min(containerWidth.lineLength, breakoutWidth) :
126
+ // container width minus breakout padding
127
+ // --ak-editor--breakout-full-page-guttering-padding = (--ak-editor--large-gutter-padding * 2) + --ak-editor--default-gutter-padding
128
+ Math.min(containerWidth.width - ((0, _editorSharedStyles.akEditorGutterPaddingDynamic)() * 2 + _editorSharedStyles.akEditorGutterPadding), breakoutWidth);
129
+ }
115
130
  return isFullWidthModeEnabled ? Math.min(containerWidth.lineLength, _editorSharedStyles.akEditorFullWidthLayoutWidth) : (0, _breakout.absoluteBreakoutWidth)(layout, containerWidth.width);
116
131
  };
117
132
  var getTableContainerWidth = exports.getTableContainerWidth = function getTableContainerWidth(node) {
@@ -24,7 +24,7 @@ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.
24
24
  * @jsx jsx
25
25
  */ // eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766
26
26
  var packageName = "@atlaskit/editor-common";
27
- var packageVersion = "109.11.4";
27
+ var packageVersion = "109.12.0";
28
28
  var halfFocusRing = 1;
29
29
  var dropOffset = '0, 8';
30
30
  var fadeIn = (0, _react2.keyframes)({
@@ -6,11 +6,6 @@ export const aiFailedStateMessages = defineMessages({
6
6
  defaultMessage: 'Your prompt or content might not comply with our Acceptable Use Policy. Please review both and refer to our <link>Acceptable Use Policy</link> if needed. If the problem persists, consider trying a different prompt or content.',
7
7
  description: 'Message to indicate to user their prompt or content (this can be a range of content, such as a selection or document -- we used content to keep it vague -- as this will change without user knowing) has been detected as violating Atlassians acceptable use policy. Note the markdown link -- this is expected to remain as markdown as this string is converted to html.'
8
8
  },
9
- cmdPaletteAupViolationMessage: {
10
- id: 'fabric.editor.ai.experience.cmdPaletteAupViolationMessage',
11
- defaultMessage: "We couldn’t complete that request because it doesn't comply with our <link>Acceptable Use Policy</link>.",
12
- description: 'Message to indicate to user their prompt or content (this can be a range of content, such as a selection or document -- we used content to keep it vague -- as this will change without user knowing) has been detected as violating Atlassians acceptable use policy. Note the markdown link -- this is expected to remain as markdown as this string is converted to html.'
13
- },
14
9
  documentInsertError: {
15
10
  id: 'fabric.editor.ai.experience-application.documentInsertError',
16
11
  defaultMessage: `We're having trouble inserting the response. Close the dialog and try again.`,
@@ -31,11 +26,6 @@ export const aiFailedStateMessages = defineMessages({
31
26
  defaultMessage: `We couldn’t get a response, please try again.`,
32
27
  description: `We couldn't get a response due to an api error (ie. the backend responded with an error, or got a timeout)`
33
28
  },
34
- cmdPaletteApiError: {
35
- id: 'fabric.editor.ai.experience.cmdPaletteApiError',
36
- defaultMessage: `An error occurred while generating your response.`,
37
- description: `We couldn't get a response due to an api error (ie. the backend responded with an error, or got a timeout)`
38
- },
39
29
  elevateDisabledGenerateError: {
40
30
  id: 'fabric.editor.ai.experience.elevateDisabledGenetateError',
41
31
  defaultMessage: `Free generate is disabled in Elevate at this time.`,
@@ -60,5 +50,50 @@ export const aiFailedStateMessages = defineMessages({
60
50
  id: 'fabric.editor.ai.experience.adfStreamingError',
61
51
  defaultMessage: `Our apologies, we couldn't get a response.`,
62
52
  description: `This error message is displayed when error(s) are encountered during processing of LLM response in ADF format.`
53
+ },
54
+ aifcAupViolationMessage: {
55
+ id: 'fabric.editor.ai.experience.aifcAupViolationMessage',
56
+ defaultMessage: 'Content does not comply with our <link>Acceptable Use Policy</link>.',
57
+ description: 'Error message to indicate to user their prompt or content (this can be a range of content, such as a selection or document -- we used content to keep it vague -- as this will change without user knowing) has been detected as violating Atlassians acceptable use policy.'
58
+ },
59
+ aifcApiError: {
60
+ id: 'fabric.editor.ai.experience.aifcApiError',
61
+ defaultMessage: 'An unknown error occurred.',
62
+ description: 'Message for users when a non-retryable API error occurs.'
63
+ },
64
+ aifcApiErrorRetry: {
65
+ id: 'fabric.editor.ai.experience.aifcApiErrorRetry',
66
+ defaultMessage: 'An unknown error occurred. Please reload and try again.',
67
+ description: 'Message for users when an API error occurs'
68
+ },
69
+ aifcTokenLimitExceeded: {
70
+ id: 'fabric.editor.ai.experience.aifcTokenLimitExceeded',
71
+ defaultMessage: 'There’s too much content to process. Select less content and try again.',
72
+ description: 'Message to users that displays when their request has exceeded the maximum input or output limit.'
73
+ },
74
+ aifcInputTooShortError: {
75
+ id: 'fabric.editor.ai.experience.aifcInputTooShortError',
76
+ defaultMessage: 'More content needed to complete your request. Please select more content and try again.',
77
+ description: 'Error message when the input was too short to process.'
78
+ },
79
+ aifcHipaaContentError: {
80
+ id: 'fabric.editor.ai.experience.aifcHipaaContentError',
81
+ defaultMessage: 'Your content contains links to HIPAA restricted content. Remove links and try again.',
82
+ description: 'Error message when HIPAA links have been detected.'
83
+ },
84
+ aifcRateLimitEnforced: {
85
+ id: 'fabric.editor.ai.experience.aifcRateLimitEnforced',
86
+ defaultMessage: 'You’ve reached the <link>maximum number of requests</link>. Try again in 5 minutes.',
87
+ description: 'Message to users that rate limiting has been enforced.'
88
+ },
89
+ aifcInternalServerError: {
90
+ id: 'fabric.editor.ai.experience.aifcInternalServerError',
91
+ defaultMessage: 'Our apologies, we couldn’t get a response. Try again in 5 minutes or <link>check Rovo status</link>.',
92
+ description: 'Error message when a Rovo internal server occurs.'
93
+ },
94
+ aifcAdfStreamingError: {
95
+ id: 'fabric.editor.ai.experience.aifcAdfStreamingError',
96
+ defaultMessage: 'Our apologies, we couldn’t get a response.',
97
+ description: 'This error message is displayed when error(s) are encountered during processing of LLM response in ADF format.'
63
98
  }
64
99
  });
@@ -1,7 +1,7 @@
1
1
  import { isFedRamp } from './environment';
2
2
  const SENTRY_DSN = 'https://0b10c8e02fb44d8796c047b102c9bee8@o55978.ingest.sentry.io/4505129224110080';
3
3
  const packageName = 'editor-common'; // Sentry doesn't accept '/' in its releases https://docs.sentry.io/platforms/javascript/configuration/releases/
4
- const packageVersion = "109.11.4";
4
+ const packageVersion = "109.12.0";
5
5
  const sanitiseSentryEvents = (data, _hint) => {
6
6
  // Remove URL as it has UGC
7
7
  // Ignored via go/ees007
@@ -1,10 +1,14 @@
1
1
  import { findParentNodeOfTypeClosestToPos } from '@atlaskit/editor-prosemirror/utils';
2
- import { akEditorDefaultLayoutWidth, akEditorFullWidthLayoutWidth, akEditorWideLayoutWidth, akLayoutGutterOffset, gridMediumMaxWidth } from '@atlaskit/editor-shared-styles';
2
+ import { akEditorDefaultLayoutWidth, akEditorFullWidthLayoutWidth, akEditorGutterPadding, akEditorGutterPaddingDynamic, akEditorWideLayoutWidth, akLayoutGutterOffset, gridMediumMaxWidth } from '@atlaskit/editor-shared-styles';
3
+ import { fg } from '@atlaskit/platform-feature-flags';
4
+ import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
3
5
  import { BODIED_EXT_PADDING } from '../styles/shared/extension';
4
6
  import { LAYOUT_COLUMN_PADDING, LAYOUT_SECTION_MARGIN } from '../styles/shared/layout';
5
7
  import { tableCellPadding } from '../styles/shared/table';
6
8
  import { absoluteBreakoutWidth } from '../utils/breakout';
7
9
  const GRID_SIZE = 8;
10
+ const NESTED_DND_GUTTER_OFFSET = 8;
11
+ const NESTED_DND_MARGIN_OFFSET = 12;
8
12
  export const layoutToWidth = {
9
13
  // eslint-disable-next-line @atlaskit/editor/no-re-export
10
14
  default: akEditorDefaultLayoutWidth,
@@ -35,7 +39,8 @@ export const getParentNodeWidth = (pos, state, containerWidth, isFullWidthModeEn
35
39
  if (breakoutMark && breakoutMark.attrs.mode) {
36
40
  layout = breakoutMark.attrs.mode;
37
41
  }
38
- let parentWidth = calcBreakoutNodeWidth(layout, containerWidth, isFullWidthModeEnabled);
42
+ const breakoutWidth = breakoutMark ? breakoutMark.attrs.width : undefined;
43
+ let parentWidth = calcBreakoutNodeWidth(layout, containerWidth, isFullWidthModeEnabled, breakoutWidth);
39
44
 
40
45
  // Please, do not copy or use this kind of code below
41
46
  // @ts-ignore
@@ -49,13 +54,17 @@ export const getParentNodeWidth = (pos, state, containerWidth, isFullWidthModeEn
49
54
  };
50
55
  switch (node.type) {
51
56
  case schema.nodes.layoutSection:
52
- parentWidth += akLayoutGutterOffset * 2; // extra width that gets added to layout
57
+ // the extra width of the layout does not add to the width of the area the table can be inside
58
+ if (!expValEquals('platform_editor_nested_table_refresh_width_fix', 'isEnabled', true)) {
59
+ parentWidth += akLayoutGutterOffset * 2; // extra width that gets added to layout
60
+ }
53
61
 
54
62
  // Calculate width of parent layout column when
55
63
  // Parallel layout with viewport greater than 1024px
56
64
  // OR side panel of an extension is open and change the node width to smaller than containerWidth
57
65
  if (containerWidth.width > gridMediumMaxWidth || ((_contextPanelPluginKe = contextPanelPluginKey.getState(state)) === null || _contextPanelPluginKe === void 0 ? void 0 : _contextPanelPluginKe.contents.length) > 0 && ((_contextPanelPluginKe2 = contextPanelPluginKey.getState(state)) === null || _contextPanelPluginKe2 === void 0 ? void 0 : _contextPanelPluginKe2.contents[0]) !== undefined) {
58
- parentWidth -= (LAYOUT_SECTION_MARGIN + 2) * (node.childCount - 1); // margin between sections
66
+ // margin between sections
67
+ parentWidth -= expValEquals('platform_editor_nested_table_refresh_width_fix', 'isEnabled', true) && fg('platform_editor_nested_dnd_styles_changes') ? (LAYOUT_SECTION_MARGIN + NESTED_DND_MARGIN_OFFSET + 2) * (node.childCount - 1) : (LAYOUT_SECTION_MARGIN + 2) * (node.childCount - 1);
59
68
  const $pos = state.doc.resolve(pos);
60
69
  const column = findParentNodeOfTypeClosestToPos($pos, [state.schema.nodes.layoutColumn]);
61
70
  if (column && column.node && !isNaN(column.node.attrs.width)) {
@@ -65,7 +74,7 @@ export const getParentNodeWidth = (pos, state, containerWidth, isFullWidthModeEn
65
74
  }
66
75
 
67
76
  // account for the padding of the parent node
68
- parentWidth -= LAYOUT_COLUMN_PADDING * 2;
77
+ parentWidth -= expValEquals('platform_editor_nested_table_refresh_width_fix', 'isEnabled', true) && fg('platform_editor_nested_dnd_styles_changes') ? (LAYOUT_COLUMN_PADDING + NESTED_DND_GUTTER_OFFSET) * 2 : LAYOUT_COLUMN_PADDING * 2;
69
78
  break;
70
79
  case schema.nodes.bodiedExtension:
71
80
  parentWidth -= BODIED_EXT_PADDING * 2;
@@ -105,7 +114,13 @@ const getNestedParentNode = (tablePos, state) => {
105
114
  const parent = findParentNodeOfTypeClosestToPos($pos, [state.schema.nodes.bodiedExtension, state.schema.nodes.extensionFrame, state.schema.nodes.layoutSection, state.schema.nodes.expand, state.schema.nodes.tableCell, state.schema.nodes.tableHeader]);
106
115
  return parent ? parent.node : null;
107
116
  };
108
- const calcBreakoutNodeWidth = (layout, containerWidth, isFullWidthModeEnabled) => {
117
+ const calcBreakoutNodeWidth = (layout, containerWidth, isFullWidthModeEnabled, breakoutWidth) => {
118
+ if (breakoutWidth && expValEquals('platform_editor_nested_table_refresh_width_fix', 'isEnabled', true)) {
119
+ return isFullWidthModeEnabled ? Math.min(containerWidth.lineLength, breakoutWidth) :
120
+ // container width minus breakout padding
121
+ // --ak-editor--breakout-full-page-guttering-padding = (--ak-editor--large-gutter-padding * 2) + --ak-editor--default-gutter-padding
122
+ Math.min(containerWidth.width - (akEditorGutterPaddingDynamic() * 2 + akEditorGutterPadding), breakoutWidth);
123
+ }
109
124
  return isFullWidthModeEnabled ? Math.min(containerWidth.lineLength, akEditorFullWidthLayoutWidth) : absoluteBreakoutWidth(layout, containerWidth.width);
110
125
  };
111
126
  export const getTableContainerWidth = node => {
@@ -14,7 +14,7 @@ import withAnalyticsEvents from '@atlaskit/analytics-next/withAnalyticsEvents';
14
14
  import { fg } from '@atlaskit/platform-feature-flags';
15
15
  import Layer from '../Layer';
16
16
  const packageName = "@atlaskit/editor-common";
17
- const packageVersion = "109.11.4";
17
+ const packageVersion = "109.12.0";
18
18
  const halfFocusRing = 1;
19
19
  const dropOffset = '0, 8';
20
20
  const fadeIn = keyframes({
@@ -6,11 +6,6 @@ export var aiFailedStateMessages = defineMessages({
6
6
  defaultMessage: 'Your prompt or content might not comply with our Acceptable Use Policy. Please review both and refer to our <link>Acceptable Use Policy</link> if needed. If the problem persists, consider trying a different prompt or content.',
7
7
  description: 'Message to indicate to user their prompt or content (this can be a range of content, such as a selection or document -- we used content to keep it vague -- as this will change without user knowing) has been detected as violating Atlassians acceptable use policy. Note the markdown link -- this is expected to remain as markdown as this string is converted to html.'
8
8
  },
9
- cmdPaletteAupViolationMessage: {
10
- id: 'fabric.editor.ai.experience.cmdPaletteAupViolationMessage',
11
- defaultMessage: "We couldn’t complete that request because it doesn't comply with our <link>Acceptable Use Policy</link>.",
12
- description: 'Message to indicate to user their prompt or content (this can be a range of content, such as a selection or document -- we used content to keep it vague -- as this will change without user knowing) has been detected as violating Atlassians acceptable use policy. Note the markdown link -- this is expected to remain as markdown as this string is converted to html.'
13
- },
14
9
  documentInsertError: {
15
10
  id: 'fabric.editor.ai.experience-application.documentInsertError',
16
11
  defaultMessage: "We're having trouble inserting the response. Close the dialog and try again.",
@@ -31,11 +26,6 @@ export var aiFailedStateMessages = defineMessages({
31
26
  defaultMessage: "We couldn\u2019t get a response, please try again.",
32
27
  description: "We couldn't get a response due to an api error (ie. the backend responded with an error, or got a timeout)"
33
28
  },
34
- cmdPaletteApiError: {
35
- id: 'fabric.editor.ai.experience.cmdPaletteApiError',
36
- defaultMessage: "An error occurred while generating your response.",
37
- description: "We couldn't get a response due to an api error (ie. the backend responded with an error, or got a timeout)"
38
- },
39
29
  elevateDisabledGenerateError: {
40
30
  id: 'fabric.editor.ai.experience.elevateDisabledGenetateError',
41
31
  defaultMessage: "Free generate is disabled in Elevate at this time.",
@@ -60,5 +50,50 @@ export var aiFailedStateMessages = defineMessages({
60
50
  id: 'fabric.editor.ai.experience.adfStreamingError',
61
51
  defaultMessage: "Our apologies, we couldn't get a response.",
62
52
  description: "This error message is displayed when error(s) are encountered during processing of LLM response in ADF format."
53
+ },
54
+ aifcAupViolationMessage: {
55
+ id: 'fabric.editor.ai.experience.aifcAupViolationMessage',
56
+ defaultMessage: 'Content does not comply with our <link>Acceptable Use Policy</link>.',
57
+ description: 'Error message to indicate to user their prompt or content (this can be a range of content, such as a selection or document -- we used content to keep it vague -- as this will change without user knowing) has been detected as violating Atlassians acceptable use policy.'
58
+ },
59
+ aifcApiError: {
60
+ id: 'fabric.editor.ai.experience.aifcApiError',
61
+ defaultMessage: 'An unknown error occurred.',
62
+ description: 'Message for users when a non-retryable API error occurs.'
63
+ },
64
+ aifcApiErrorRetry: {
65
+ id: 'fabric.editor.ai.experience.aifcApiErrorRetry',
66
+ defaultMessage: 'An unknown error occurred. Please reload and try again.',
67
+ description: 'Message for users when an API error occurs'
68
+ },
69
+ aifcTokenLimitExceeded: {
70
+ id: 'fabric.editor.ai.experience.aifcTokenLimitExceeded',
71
+ defaultMessage: 'There’s too much content to process. Select less content and try again.',
72
+ description: 'Message to users that displays when their request has exceeded the maximum input or output limit.'
73
+ },
74
+ aifcInputTooShortError: {
75
+ id: 'fabric.editor.ai.experience.aifcInputTooShortError',
76
+ defaultMessage: 'More content needed to complete your request. Please select more content and try again.',
77
+ description: 'Error message when the input was too short to process.'
78
+ },
79
+ aifcHipaaContentError: {
80
+ id: 'fabric.editor.ai.experience.aifcHipaaContentError',
81
+ defaultMessage: 'Your content contains links to HIPAA restricted content. Remove links and try again.',
82
+ description: 'Error message when HIPAA links have been detected.'
83
+ },
84
+ aifcRateLimitEnforced: {
85
+ id: 'fabric.editor.ai.experience.aifcRateLimitEnforced',
86
+ defaultMessage: 'You’ve reached the <link>maximum number of requests</link>. Try again in 5 minutes.',
87
+ description: 'Message to users that rate limiting has been enforced.'
88
+ },
89
+ aifcInternalServerError: {
90
+ id: 'fabric.editor.ai.experience.aifcInternalServerError',
91
+ defaultMessage: 'Our apologies, we couldn’t get a response. Try again in 5 minutes or <link>check Rovo status</link>.',
92
+ description: 'Error message when a Rovo internal server occurs.'
93
+ },
94
+ aifcAdfStreamingError: {
95
+ id: 'fabric.editor.ai.experience.aifcAdfStreamingError',
96
+ defaultMessage: 'Our apologies, we couldn’t get a response.',
97
+ description: 'This error message is displayed when error(s) are encountered during processing of LLM response in ADF format.'
63
98
  }
64
99
  });
@@ -7,7 +7,7 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
7
7
  import { isFedRamp } from './environment';
8
8
  var SENTRY_DSN = 'https://0b10c8e02fb44d8796c047b102c9bee8@o55978.ingest.sentry.io/4505129224110080';
9
9
  var packageName = 'editor-common'; // Sentry doesn't accept '/' in its releases https://docs.sentry.io/platforms/javascript/configuration/releases/
10
- var packageVersion = "109.11.4";
10
+ var packageVersion = "109.12.0";
11
11
  var sanitiseSentryEvents = function sanitiseSentryEvents(data, _hint) {
12
12
  // Remove URL as it has UGC
13
13
  // Ignored via go/ees007
@@ -1,10 +1,14 @@
1
1
  import { findParentNodeOfTypeClosestToPos } from '@atlaskit/editor-prosemirror/utils';
2
- import { akEditorDefaultLayoutWidth, akEditorFullWidthLayoutWidth, akEditorWideLayoutWidth, akLayoutGutterOffset, gridMediumMaxWidth } from '@atlaskit/editor-shared-styles';
2
+ import { akEditorDefaultLayoutWidth, akEditorFullWidthLayoutWidth, akEditorGutterPadding, akEditorGutterPaddingDynamic, akEditorWideLayoutWidth, akLayoutGutterOffset, gridMediumMaxWidth } from '@atlaskit/editor-shared-styles';
3
+ import { fg } from '@atlaskit/platform-feature-flags';
4
+ import { expValEquals } from '@atlaskit/tmp-editor-statsig/exp-val-equals';
3
5
  import { BODIED_EXT_PADDING } from '../styles/shared/extension';
4
6
  import { LAYOUT_COLUMN_PADDING, LAYOUT_SECTION_MARGIN } from '../styles/shared/layout';
5
7
  import { tableCellPadding } from '../styles/shared/table';
6
8
  import { absoluteBreakoutWidth } from '../utils/breakout';
7
9
  var GRID_SIZE = 8;
10
+ var NESTED_DND_GUTTER_OFFSET = 8;
11
+ var NESTED_DND_MARGIN_OFFSET = 12;
8
12
  export var layoutToWidth = {
9
13
  // eslint-disable-next-line @atlaskit/editor/no-re-export
10
14
  default: akEditorDefaultLayoutWidth,
@@ -33,7 +37,8 @@ export var getParentNodeWidth = function getParentNodeWidth(pos, state, containe
33
37
  if (breakoutMark && breakoutMark.attrs.mode) {
34
38
  layout = breakoutMark.attrs.mode;
35
39
  }
36
- var parentWidth = calcBreakoutNodeWidth(layout, containerWidth, isFullWidthModeEnabled);
40
+ var breakoutWidth = breakoutMark ? breakoutMark.attrs.width : undefined;
41
+ var parentWidth = calcBreakoutNodeWidth(layout, containerWidth, isFullWidthModeEnabled, breakoutWidth);
37
42
 
38
43
  // Please, do not copy or use this kind of code below
39
44
  // @ts-ignore
@@ -47,13 +52,17 @@ export var getParentNodeWidth = function getParentNodeWidth(pos, state, containe
47
52
  };
48
53
  switch (node.type) {
49
54
  case schema.nodes.layoutSection:
50
- parentWidth += akLayoutGutterOffset * 2; // extra width that gets added to layout
55
+ // the extra width of the layout does not add to the width of the area the table can be inside
56
+ if (!expValEquals('platform_editor_nested_table_refresh_width_fix', 'isEnabled', true)) {
57
+ parentWidth += akLayoutGutterOffset * 2; // extra width that gets added to layout
58
+ }
51
59
 
52
60
  // Calculate width of parent layout column when
53
61
  // Parallel layout with viewport greater than 1024px
54
62
  // OR side panel of an extension is open and change the node width to smaller than containerWidth
55
63
  if (containerWidth.width > gridMediumMaxWidth || ((_contextPanelPluginKe = contextPanelPluginKey.getState(state)) === null || _contextPanelPluginKe === void 0 ? void 0 : _contextPanelPluginKe.contents.length) > 0 && ((_contextPanelPluginKe2 = contextPanelPluginKey.getState(state)) === null || _contextPanelPluginKe2 === void 0 ? void 0 : _contextPanelPluginKe2.contents[0]) !== undefined) {
56
- parentWidth -= (LAYOUT_SECTION_MARGIN + 2) * (node.childCount - 1); // margin between sections
64
+ // margin between sections
65
+ parentWidth -= expValEquals('platform_editor_nested_table_refresh_width_fix', 'isEnabled', true) && fg('platform_editor_nested_dnd_styles_changes') ? (LAYOUT_SECTION_MARGIN + NESTED_DND_MARGIN_OFFSET + 2) * (node.childCount - 1) : (LAYOUT_SECTION_MARGIN + 2) * (node.childCount - 1);
57
66
  var $pos = state.doc.resolve(pos);
58
67
  var column = findParentNodeOfTypeClosestToPos($pos, [state.schema.nodes.layoutColumn]);
59
68
  if (column && column.node && !isNaN(column.node.attrs.width)) {
@@ -63,7 +72,7 @@ export var getParentNodeWidth = function getParentNodeWidth(pos, state, containe
63
72
  }
64
73
 
65
74
  // account for the padding of the parent node
66
- parentWidth -= LAYOUT_COLUMN_PADDING * 2;
75
+ parentWidth -= expValEquals('platform_editor_nested_table_refresh_width_fix', 'isEnabled', true) && fg('platform_editor_nested_dnd_styles_changes') ? (LAYOUT_COLUMN_PADDING + NESTED_DND_GUTTER_OFFSET) * 2 : LAYOUT_COLUMN_PADDING * 2;
67
76
  break;
68
77
  case schema.nodes.bodiedExtension:
69
78
  parentWidth -= BODIED_EXT_PADDING * 2;
@@ -105,7 +114,13 @@ var getNestedParentNode = function getNestedParentNode(tablePos, state) {
105
114
  var parent = findParentNodeOfTypeClosestToPos($pos, [state.schema.nodes.bodiedExtension, state.schema.nodes.extensionFrame, state.schema.nodes.layoutSection, state.schema.nodes.expand, state.schema.nodes.tableCell, state.schema.nodes.tableHeader]);
106
115
  return parent ? parent.node : null;
107
116
  };
108
- var calcBreakoutNodeWidth = function calcBreakoutNodeWidth(layout, containerWidth, isFullWidthModeEnabled) {
117
+ var calcBreakoutNodeWidth = function calcBreakoutNodeWidth(layout, containerWidth, isFullWidthModeEnabled, breakoutWidth) {
118
+ if (breakoutWidth && expValEquals('platform_editor_nested_table_refresh_width_fix', 'isEnabled', true)) {
119
+ return isFullWidthModeEnabled ? Math.min(containerWidth.lineLength, breakoutWidth) :
120
+ // container width minus breakout padding
121
+ // --ak-editor--breakout-full-page-guttering-padding = (--ak-editor--large-gutter-padding * 2) + --ak-editor--default-gutter-padding
122
+ Math.min(containerWidth.width - (akEditorGutterPaddingDynamic() * 2 + akEditorGutterPadding), breakoutWidth);
123
+ }
109
124
  return isFullWidthModeEnabled ? Math.min(containerWidth.lineLength, akEditorFullWidthLayoutWidth) : absoluteBreakoutWidth(layout, containerWidth.width);
110
125
  };
111
126
  export var getTableContainerWidth = function getTableContainerWidth(node) {
@@ -21,7 +21,7 @@ import withAnalyticsEvents from '@atlaskit/analytics-next/withAnalyticsEvents';
21
21
  import { fg } from '@atlaskit/platform-feature-flags';
22
22
  import Layer from '../Layer';
23
23
  var packageName = "@atlaskit/editor-common";
24
- var packageVersion = "109.11.4";
24
+ var packageVersion = "109.12.0";
25
25
  var halfFocusRing = 1;
26
26
  var dropOffset = '0, 8';
27
27
  var fadeIn = keyframes({
@@ -4,11 +4,6 @@ export declare const aiFailedStateMessages: {
4
4
  defaultMessage: string;
5
5
  description: string;
6
6
  };
7
- cmdPaletteAupViolationMessage: {
8
- id: string;
9
- defaultMessage: string;
10
- description: string;
11
- };
12
7
  documentInsertError: {
13
8
  id: string;
14
9
  defaultMessage: string;
@@ -29,11 +24,6 @@ export declare const aiFailedStateMessages: {
29
24
  defaultMessage: string;
30
25
  description: string;
31
26
  };
32
- cmdPaletteApiError: {
33
- id: string;
34
- defaultMessage: string;
35
- description: string;
36
- };
37
27
  elevateDisabledGenerateError: {
38
28
  id: string;
39
29
  defaultMessage: string;
@@ -59,4 +49,49 @@ export declare const aiFailedStateMessages: {
59
49
  defaultMessage: string;
60
50
  description: string;
61
51
  };
52
+ aifcAupViolationMessage: {
53
+ id: string;
54
+ defaultMessage: string;
55
+ description: string;
56
+ };
57
+ aifcApiError: {
58
+ id: string;
59
+ defaultMessage: string;
60
+ description: string;
61
+ };
62
+ aifcApiErrorRetry: {
63
+ id: string;
64
+ defaultMessage: string;
65
+ description: string;
66
+ };
67
+ aifcTokenLimitExceeded: {
68
+ id: string;
69
+ defaultMessage: string;
70
+ description: string;
71
+ };
72
+ aifcInputTooShortError: {
73
+ id: string;
74
+ defaultMessage: string;
75
+ description: string;
76
+ };
77
+ aifcHipaaContentError: {
78
+ id: string;
79
+ defaultMessage: string;
80
+ description: string;
81
+ };
82
+ aifcRateLimitEnforced: {
83
+ id: string;
84
+ defaultMessage: string;
85
+ description: string;
86
+ };
87
+ aifcInternalServerError: {
88
+ id: string;
89
+ defaultMessage: string;
90
+ description: string;
91
+ };
92
+ aifcAdfStreamingError: {
93
+ id: string;
94
+ defaultMessage: string;
95
+ description: string;
96
+ };
62
97
  };
@@ -6,5 +6,5 @@ type Props = Pick<ToolbarUIContextType, 'popupsMountPoint' | 'popupsBoundariesEl
6
6
  children: React.ReactNode;
7
7
  isDisabled?: boolean;
8
8
  };
9
- export declare const EditorToolbarUIProvider: ({ children, api, isDisabled, popupsMountPoint, popupsBoundariesElement, popupsScrollableElement, fireAnalyticsEvent, keyboardNavigation }: Props) => React.JSX.Element;
9
+ export declare const EditorToolbarUIProvider: ({ children, api, isDisabled, popupsMountPoint, popupsBoundariesElement, popupsScrollableElement, fireAnalyticsEvent, keyboardNavigation, }: Props) => React.JSX.Element;
10
10
  export {};
@@ -4,11 +4,6 @@ export declare const aiFailedStateMessages: {
4
4
  defaultMessage: string;
5
5
  description: string;
6
6
  };
7
- cmdPaletteAupViolationMessage: {
8
- id: string;
9
- defaultMessage: string;
10
- description: string;
11
- };
12
7
  documentInsertError: {
13
8
  id: string;
14
9
  defaultMessage: string;
@@ -29,11 +24,6 @@ export declare const aiFailedStateMessages: {
29
24
  defaultMessage: string;
30
25
  description: string;
31
26
  };
32
- cmdPaletteApiError: {
33
- id: string;
34
- defaultMessage: string;
35
- description: string;
36
- };
37
27
  elevateDisabledGenerateError: {
38
28
  id: string;
39
29
  defaultMessage: string;
@@ -59,4 +49,49 @@ export declare const aiFailedStateMessages: {
59
49
  defaultMessage: string;
60
50
  description: string;
61
51
  };
52
+ aifcAupViolationMessage: {
53
+ id: string;
54
+ defaultMessage: string;
55
+ description: string;
56
+ };
57
+ aifcApiError: {
58
+ id: string;
59
+ defaultMessage: string;
60
+ description: string;
61
+ };
62
+ aifcApiErrorRetry: {
63
+ id: string;
64
+ defaultMessage: string;
65
+ description: string;
66
+ };
67
+ aifcTokenLimitExceeded: {
68
+ id: string;
69
+ defaultMessage: string;
70
+ description: string;
71
+ };
72
+ aifcInputTooShortError: {
73
+ id: string;
74
+ defaultMessage: string;
75
+ description: string;
76
+ };
77
+ aifcHipaaContentError: {
78
+ id: string;
79
+ defaultMessage: string;
80
+ description: string;
81
+ };
82
+ aifcRateLimitEnforced: {
83
+ id: string;
84
+ defaultMessage: string;
85
+ description: string;
86
+ };
87
+ aifcInternalServerError: {
88
+ id: string;
89
+ defaultMessage: string;
90
+ description: string;
91
+ };
92
+ aifcAdfStreamingError: {
93
+ id: string;
94
+ defaultMessage: string;
95
+ description: string;
96
+ };
62
97
  };
@@ -6,5 +6,5 @@ type Props = Pick<ToolbarUIContextType, 'popupsMountPoint' | 'popupsBoundariesEl
6
6
  children: React.ReactNode;
7
7
  isDisabled?: boolean;
8
8
  };
9
- export declare const EditorToolbarUIProvider: ({ children, api, isDisabled, popupsMountPoint, popupsBoundariesElement, popupsScrollableElement, fireAnalyticsEvent, keyboardNavigation }: Props) => React.JSX.Element;
9
+ export declare const EditorToolbarUIProvider: ({ children, api, isDisabled, popupsMountPoint, popupsBoundariesElement, popupsScrollableElement, fireAnalyticsEvent, keyboardNavigation, }: Props) => React.JSX.Element;
10
10
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/editor-common",
3
- "version": "109.12.0",
3
+ "version": "109.13.0",
4
4
  "description": "A package that contains common classes and components for editor and renderer",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"
@@ -74,14 +74,14 @@
74
74
  "@atlaskit/profilecard": "^24.13.0",
75
75
  "@atlaskit/react-ufo": "^4.9.0",
76
76
  "@atlaskit/section-message": "^8.7.0",
77
- "@atlaskit/smart-card": "^42.1.0",
77
+ "@atlaskit/smart-card": "^42.2.0",
78
78
  "@atlaskit/smart-user-picker": "^8.2.0",
79
79
  "@atlaskit/spinner": "^19.0.0",
80
80
  "@atlaskit/status": "^3.0.0",
81
81
  "@atlaskit/task-decision": "^19.2.0",
82
82
  "@atlaskit/textfield": "^8.0.0",
83
83
  "@atlaskit/theme": "^21.0.0",
84
- "@atlaskit/tmp-editor-statsig": "^12.28.0",
84
+ "@atlaskit/tmp-editor-statsig": "^12.29.0",
85
85
  "@atlaskit/tokens": "^6.3.0",
86
86
  "@atlaskit/tooltip": "^20.4.0",
87
87
  "@atlaskit/width-detector": "^5.0.0",
@@ -122,7 +122,7 @@
122
122
  "@af/visual-regression": "workspace:^",
123
123
  "@atlaskit/media-core": "^37.0.0",
124
124
  "@atlaskit/media-test-helpers": "^39.0.0",
125
- "@atlaskit/util-data-test": "^18.2.0",
125
+ "@atlaskit/util-data-test": "^18.3.0",
126
126
  "@testing-library/dom": "^10.1.0",
127
127
  "@testing-library/jest-dom": "^6.4.5",
128
128
  "@testing-library/react": "^13.4.0",