@atlaskit/editor-common 109.11.4 → 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.
Files changed (43) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/dist/cjs/ai-messages/ai-failed-state.js +45 -10
  3. package/dist/cjs/analytics/types/enums.js +1 -1
  4. package/dist/cjs/analytics/types/table-events.js +1 -0
  5. package/dist/cjs/monitoring/error.js +1 -1
  6. package/dist/cjs/node-width/index.js +20 -5
  7. package/dist/cjs/sync-block/sync-block-store-manager.js +58 -1
  8. package/dist/cjs/toolbar/EditorToolbarUIProvider.js +4 -2
  9. package/dist/cjs/ui/DropList/index.js +1 -1
  10. package/dist/es2019/ai-messages/ai-failed-state.js +45 -10
  11. package/dist/es2019/analytics/types/enums.js +1 -1
  12. package/dist/es2019/analytics/types/table-events.js +1 -0
  13. package/dist/es2019/monitoring/error.js +1 -1
  14. package/dist/es2019/node-width/index.js +21 -6
  15. package/dist/es2019/sync-block/sync-block-store-manager.js +26 -2
  16. package/dist/es2019/toolbar/EditorToolbarUIProvider.js +4 -2
  17. package/dist/es2019/ui/DropList/index.js +1 -1
  18. package/dist/esm/ai-messages/ai-failed-state.js +45 -10
  19. package/dist/esm/analytics/types/enums.js +1 -1
  20. package/dist/esm/analytics/types/table-events.js +1 -0
  21. package/dist/esm/monitoring/error.js +1 -1
  22. package/dist/esm/node-width/index.js +21 -6
  23. package/dist/esm/sync-block/sync-block-store-manager.js +58 -2
  24. package/dist/esm/toolbar/EditorToolbarUIProvider.js +4 -2
  25. package/dist/esm/ui/DropList/index.js +1 -1
  26. package/dist/types/ai-messages/ai-failed-state.d.ts +45 -10
  27. package/dist/types/analytics/types/enums.d.ts +1 -1
  28. package/dist/types/analytics/types/events.d.ts +1 -2
  29. package/dist/types/analytics/types/table-events.d.ts +12 -2
  30. package/dist/types/sync-block/sync-block-store-manager.d.ts +15 -0
  31. package/dist/types/toolbar/EditorToolbarUIProvider.d.ts +2 -2
  32. package/dist/types-ts4.5/ai-messages/ai-failed-state.d.ts +45 -10
  33. package/dist/types-ts4.5/analytics/types/enums.d.ts +1 -1
  34. package/dist/types-ts4.5/analytics/types/events.d.ts +1 -2
  35. package/dist/types-ts4.5/analytics/types/table-events.d.ts +12 -2
  36. package/dist/types-ts4.5/sync-block/sync-block-store-manager.d.ts +15 -0
  37. package/dist/types-ts4.5/toolbar/EditorToolbarUIProvider.d.ts +2 -2
  38. package/package.json +4 -4
  39. package/dist/cjs/analytics/types/width-events.js +0 -5
  40. package/dist/es2019/analytics/types/width-events.js +0 -1
  41. package/dist/esm/analytics/types/width-events.js +0 -1
  42. package/dist/types/analytics/types/width-events.d.ts +0 -5
  43. package/dist/types-ts4.5/analytics/types/width-events.d.ts +0 -5
package/CHANGELOG.md CHANGED
@@ -1,5 +1,37 @@
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
+
18
+ ## 109.12.0
19
+
20
+ ### Minor Changes
21
+
22
+ - [`889f0cb60f68d`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/889f0cb60f68d) -
23
+ EDITOR-1561 implement confirmation before deleting a source sync block
24
+
25
+ ### Patch Changes
26
+
27
+ - [`a77acd87fef67`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/a77acd87fef67) -
28
+ EDITOR-1391 add new analytics event which logs editor width and all table widths on the page once
29
+ after page is loaded in both editor and renderer. remove previous implementation in width plugin.
30
+ - [`bb498825fca37`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/bb498825fca37) -
31
+ [ux] [ED-29266] add ToolbarKeyboardNavigationProvider to selection toolbar with Alt+F10 shortcut
32
+ to focus
33
+ - Updated dependencies
34
+
3
35
  ## 109.11.4
4
36
 
5
37
  ### Patch 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
  });
@@ -197,7 +197,7 @@ var ACTION = exports.ACTION = /*#__PURE__*/function (ACTION) {
197
197
  ACTION["SUGGESTION_INSERTED"] = "suggestionInserted";
198
198
  ACTION["SUGGESTION_DISMISSED"] = "suggestionDismissed";
199
199
  ACTION["SUGGESTION_VIEWED"] = "suggestionViewed";
200
- ACTION["INITIAL_EDITOR_WIDTH"] = "initialEditorWidth";
200
+ ACTION["TABLE_WIDTH_INFO"] = "tableWidthInformation";
201
201
  return ACTION;
202
202
  }({});
203
203
  var INPUT_METHOD = exports.INPUT_METHOD = /*#__PURE__*/function (INPUT_METHOD) {
@@ -44,6 +44,7 @@ var TABLE_ACTION = exports.TABLE_ACTION = /*#__PURE__*/function (TABLE_ACTION) {
44
44
  TABLE_ACTION["CHANGED_ALIGNMENT"] = "changedAlignment";
45
45
  // Temporary to track usage of CONFCLOUD-78239 bug
46
46
  TABLE_ACTION["TABLE_CELL_BACKGROUND_FIXED"] = "tableCellBackgroundFixed";
47
+ TABLE_ACTION["TABLE_WIDTH_INFO"] = "tableWidthInformation";
47
48
  return TABLE_ACTION;
48
49
  }({});
49
50
  var TABLE_BREAKOUT = exports.TABLE_BREAKOUT = /*#__PURE__*/function (TABLE_BREAKOUT) {
@@ -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 = "0.0.0-development";
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) {
@@ -5,11 +5,12 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.SyncBlockStoreManager = void 0;
8
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
8
10
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
9
11
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
10
12
  // Do this typedef to make it clear that
11
13
  // this is a local identifier for a resource for local use
12
- // Represents a SOURCE sync block within the editor.
13
14
  // A store manager responsible for the lifecycle and state management of sync blocks in an editor instance.
14
15
  // Supports create, read, update, and delete operations for sync blocks.
15
16
  // Designed to manage local in-memory state and synchronize with an external data provider.
@@ -22,6 +23,11 @@ var SyncBlockStoreManager = exports.SyncBlockStoreManager = /*#__PURE__*/functio
22
23
  this.dataProvider = dataProvider;
23
24
  }
24
25
  return (0, _createClass2.default)(SyncBlockStoreManager, [{
26
+ key: "setEditorView",
27
+ value: function setEditorView(editorView) {
28
+ this.editorView = editorView;
29
+ }
30
+ }, {
25
31
  key: "isSourceBlock",
26
32
  value: function isSourceBlock(node) {
27
33
  var _this$syncBlocks$get;
@@ -33,5 +39,56 @@ var SyncBlockStoreManager = exports.SyncBlockStoreManager = /*#__PURE__*/functio
33
39
  localId = _node$attrs.localId;
34
40
  return this.syncBlocks.has(resourceId) && ((_this$syncBlocks$get = this.syncBlocks.get(resourceId)) === null || _this$syncBlocks$get === void 0 ? void 0 : _this$syncBlocks$get.sourceLocalId) === localId;
35
41
  }
42
+ }, {
43
+ key: "registerConfirmationCallback",
44
+ value: function registerConfirmationCallback(callback) {
45
+ var _this = this;
46
+ this.confirmationCallback = callback;
47
+ return function () {
48
+ _this.confirmationCallback = undefined;
49
+ };
50
+ }
51
+ }, {
52
+ key: "requireConfirmationBeforeDelete",
53
+ value: function requireConfirmationBeforeDelete() {
54
+ return !!this.confirmationCallback;
55
+ }
56
+ }, {
57
+ key: "deleteSyncBlocksWithConfirmation",
58
+ value: function () {
59
+ var _deleteSyncBlocksWithConfirmation = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(tr, syncBlockIds) {
60
+ var _this2 = this;
61
+ var confirmed, _this$editorView;
62
+ return _regenerator.default.wrap(function _callee$(_context) {
63
+ while (1) switch (_context.prev = _context.next) {
64
+ case 0:
65
+ if (!this.confirmationCallback) {
66
+ _context.next = 5;
67
+ break;
68
+ }
69
+ _context.next = 3;
70
+ return this.confirmationCallback();
71
+ case 3:
72
+ confirmed = _context.sent;
73
+ if (confirmed) {
74
+ // TODO: EDITOR-1779 - "rebase" the transaction to reflect the latest document state
75
+ (_this$editorView = this.editorView) === null || _this$editorView === void 0 || _this$editorView.dispatch(tr.setMeta('isConfirmedSyncBlockDeletion', true));
76
+ // Need to update the BE on deletion
77
+ syncBlockIds.forEach(function (_ref) {
78
+ var resourceId = _ref.resourceId;
79
+ return _this2.syncBlocks.delete(resourceId);
80
+ });
81
+ }
82
+ case 5:
83
+ case "end":
84
+ return _context.stop();
85
+ }
86
+ }, _callee, this);
87
+ }));
88
+ function deleteSyncBlocksWithConfirmation(_x, _x2) {
89
+ return _deleteSyncBlocksWithConfirmation.apply(this, arguments);
90
+ }
91
+ return deleteSyncBlocksWithConfirmation;
92
+ }()
36
93
  }]);
37
94
  }();
@@ -15,7 +15,8 @@ var EditorToolbarUIProvider = exports.EditorToolbarUIProvider = function EditorT
15
15
  popupsMountPoint = _ref.popupsMountPoint,
16
16
  popupsBoundariesElement = _ref.popupsBoundariesElement,
17
17
  popupsScrollableElement = _ref.popupsScrollableElement,
18
- fireAnalyticsEvent = _ref.fireAnalyticsEvent;
18
+ fireAnalyticsEvent = _ref.fireAnalyticsEvent,
19
+ keyboardNavigation = _ref.keyboardNavigation;
19
20
  var onDropdownOpenChanged = (0, _react.useCallback)(function (_ref2) {
20
21
  var isOpen = _ref2.isOpen;
21
22
  if (!isOpen) {
@@ -37,6 +38,7 @@ var EditorToolbarUIProvider = exports.EditorToolbarUIProvider = function EditorT
37
38
  popupsMountPoint: popupsMountPoint,
38
39
  popupsBoundariesElement: popupsBoundariesElement,
39
40
  popupsScrollableElement: popupsScrollableElement,
40
- fireAnalyticsEvent: fireAnalyticsEvent
41
+ fireAnalyticsEvent: fireAnalyticsEvent,
42
+ keyboardNavigation: keyboardNavigation
41
43
  }, children);
42
44
  };
@@ -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 = "0.0.0-development";
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
  });
@@ -191,7 +191,7 @@ export let ACTION = /*#__PURE__*/function (ACTION) {
191
191
  ACTION["SUGGESTION_INSERTED"] = "suggestionInserted";
192
192
  ACTION["SUGGESTION_DISMISSED"] = "suggestionDismissed";
193
193
  ACTION["SUGGESTION_VIEWED"] = "suggestionViewed";
194
- ACTION["INITIAL_EDITOR_WIDTH"] = "initialEditorWidth";
194
+ ACTION["TABLE_WIDTH_INFO"] = "tableWidthInformation";
195
195
  return ACTION;
196
196
  }({});
197
197
  export let INPUT_METHOD = /*#__PURE__*/function (INPUT_METHOD) {
@@ -38,6 +38,7 @@ export let TABLE_ACTION = /*#__PURE__*/function (TABLE_ACTION) {
38
38
  TABLE_ACTION["CHANGED_ALIGNMENT"] = "changedAlignment";
39
39
  // Temporary to track usage of CONFCLOUD-78239 bug
40
40
  TABLE_ACTION["TABLE_CELL_BACKGROUND_FIXED"] = "tableCellBackgroundFixed";
41
+ TABLE_ACTION["TABLE_WIDTH_INFO"] = "tableWidthInformation";
41
42
  return TABLE_ACTION;
42
43
  }({});
43
44
  export let TABLE_BREAKOUT = /*#__PURE__*/function (TABLE_BREAKOUT) {
@@ -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 = "0.0.0-development";
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 => {
@@ -1,8 +1,6 @@
1
1
  // Do this typedef to make it clear that
2
2
  // this is a local identifier for a resource for local use
3
3
 
4
- // Represents a SOURCE sync block within the editor.
5
-
6
4
  // A store manager responsible for the lifecycle and state management of sync blocks in an editor instance.
7
5
  // Supports create, read, update, and delete operations for sync blocks.
8
6
  // Designed to manage local in-memory state and synchronize with an external data provider.
@@ -13,6 +11,9 @@ export class SyncBlockStoreManager {
13
11
  this.syncBlocks = new Map();
14
12
  this.dataProvider = dataProvider;
15
13
  }
14
+ setEditorView(editorView) {
15
+ this.editorView = editorView;
16
+ }
16
17
  isSourceBlock(node) {
17
18
  var _this$syncBlocks$get;
18
19
  if (!this.dataProvider || node.type.name !== 'syncBlock') {
@@ -24,4 +25,27 @@ export class SyncBlockStoreManager {
24
25
  } = node.attrs;
25
26
  return this.syncBlocks.has(resourceId) && ((_this$syncBlocks$get = this.syncBlocks.get(resourceId)) === null || _this$syncBlocks$get === void 0 ? void 0 : _this$syncBlocks$get.sourceLocalId) === localId;
26
27
  }
28
+ registerConfirmationCallback(callback) {
29
+ this.confirmationCallback = callback;
30
+ return () => {
31
+ this.confirmationCallback = undefined;
32
+ };
33
+ }
34
+ requireConfirmationBeforeDelete() {
35
+ return !!this.confirmationCallback;
36
+ }
37
+ async deleteSyncBlocksWithConfirmation(tr, syncBlockIds) {
38
+ if (this.confirmationCallback) {
39
+ const confirmed = await this.confirmationCallback();
40
+ if (confirmed) {
41
+ var _this$editorView;
42
+ // TODO: EDITOR-1779 - "rebase" the transaction to reflect the latest document state
43
+ (_this$editorView = this.editorView) === null || _this$editorView === void 0 ? void 0 : _this$editorView.dispatch(tr.setMeta('isConfirmedSyncBlockDeletion', true));
44
+ // Need to update the BE on deletion
45
+ syncBlockIds.forEach(({
46
+ resourceId
47
+ }) => this.syncBlocks.delete(resourceId));
48
+ }
49
+ }
50
+ }
27
51
  }
@@ -7,7 +7,8 @@ export const EditorToolbarUIProvider = ({
7
7
  popupsMountPoint,
8
8
  popupsBoundariesElement,
9
9
  popupsScrollableElement,
10
- fireAnalyticsEvent
10
+ fireAnalyticsEvent,
11
+ keyboardNavigation
11
12
  }) => {
12
13
  const onDropdownOpenChanged = useCallback(({
13
14
  isOpen
@@ -29,6 +30,7 @@ export const EditorToolbarUIProvider = ({
29
30
  popupsMountPoint: popupsMountPoint,
30
31
  popupsBoundariesElement: popupsBoundariesElement,
31
32
  popupsScrollableElement: popupsScrollableElement,
32
- fireAnalyticsEvent: fireAnalyticsEvent
33
+ fireAnalyticsEvent: fireAnalyticsEvent,
34
+ keyboardNavigation: keyboardNavigation
33
35
  }, children);
34
36
  };
@@ -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 = "0.0.0-development";
17
+ const packageVersion = "109.12.0";
18
18
  const halfFocusRing = 1;
19
19
  const dropOffset = '0, 8';
20
20
  const fadeIn = keyframes({