@atlaskit/smart-card 26.49.0 → 26.49.2

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 (80) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/cjs/state/hooks/use-ai-summary/ai-summary-service/index.js +39 -27
  3. package/dist/cjs/state/hooks/use-ai-summary/index.js +16 -38
  4. package/dist/cjs/utils/analytics/analytics.js +1 -1
  5. package/dist/cjs/view/FlexibleCard/components/blocks/ai-summary-block/resolved/index.js +37 -29
  6. package/dist/cjs/view/FlexibleCard/components/blocks/block/index.js +1 -4
  7. package/dist/cjs/view/FlexibleCard/components/blocks/element-group/index.js +8 -9
  8. package/dist/cjs/view/HoverCard/components/ContentContainer.js +39 -13
  9. package/dist/cjs/view/HoverCard/components/HoverCardContent.js +1 -10
  10. package/dist/cjs/view/HoverCard/components/views/resolved/index.js +63 -16
  11. package/dist/cjs/view/LinkUrl/index.js +1 -1
  12. package/dist/cjs/view/common/ai-prism/index.js +0 -1
  13. package/dist/cjs/view/common/ai-summary/index.js +9 -3
  14. package/dist/es2019/state/hooks/use-ai-summary/ai-summary-service/index.js +14 -5
  15. package/dist/es2019/state/hooks/use-ai-summary/index.js +17 -35
  16. package/dist/es2019/utils/analytics/analytics.js +1 -1
  17. package/dist/es2019/view/FlexibleCard/components/blocks/ai-summary-block/resolved/index.js +33 -26
  18. package/dist/es2019/view/FlexibleCard/components/blocks/block/index.js +1 -1
  19. package/dist/es2019/view/FlexibleCard/components/blocks/element-group/index.js +0 -1
  20. package/dist/es2019/view/HoverCard/components/ContentContainer.js +35 -10
  21. package/dist/es2019/view/HoverCard/components/HoverCardContent.js +2 -7
  22. package/dist/es2019/view/HoverCard/components/views/resolved/index.js +56 -7
  23. package/dist/es2019/view/LinkUrl/index.js +1 -1
  24. package/dist/es2019/view/common/ai-prism/index.js +0 -1
  25. package/dist/es2019/view/common/ai-summary/index.js +7 -3
  26. package/dist/esm/state/hooks/use-ai-summary/ai-summary-service/index.js +39 -27
  27. package/dist/esm/state/hooks/use-ai-summary/index.js +17 -39
  28. package/dist/esm/utils/analytics/analytics.js +1 -1
  29. package/dist/esm/view/FlexibleCard/components/blocks/ai-summary-block/resolved/index.js +38 -30
  30. package/dist/esm/view/FlexibleCard/components/blocks/block/index.js +1 -1
  31. package/dist/esm/view/FlexibleCard/components/blocks/element-group/index.js +0 -1
  32. package/dist/esm/view/HoverCard/components/ContentContainer.js +39 -13
  33. package/dist/esm/view/HoverCard/components/HoverCardContent.js +2 -11
  34. package/dist/esm/view/HoverCard/components/views/resolved/index.js +66 -18
  35. package/dist/esm/view/LinkUrl/index.js +1 -1
  36. package/dist/esm/view/common/ai-prism/index.js +0 -1
  37. package/dist/esm/view/common/ai-summary/index.js +9 -3
  38. package/dist/types/state/hooks/use-ai-summary/ai-summary-service/types.d.ts +3 -1
  39. package/dist/types/state/hooks/use-ai-summary/index.d.ts +0 -1
  40. package/dist/types/view/BlockCard/views/flexible/unresolved-view/index.d.ts +2 -2
  41. package/dist/types/view/BlockCard/views/flexible/unresolved-view/types.d.ts +3 -2
  42. package/dist/types/view/FlexibleCard/components/blocks/ai-summary-block/ai-event-error-viewed/index.d.ts +1 -2
  43. package/dist/types/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/types.d.ts +2 -2
  44. package/dist/types/view/FlexibleCard/components/blocks/ai-summary-block/types.d.ts +2 -3
  45. package/dist/types/view/FlexibleCard/components/blocks/block/index.d.ts +2 -3
  46. package/dist/types/view/FlexibleCard/components/blocks/element-group/index.d.ts +2 -3
  47. package/dist/types/view/FlexibleCard/components/blocks/element-group/types.d.ts +3 -2
  48. package/dist/types/view/FlexibleCard/components/blocks/types.d.ts +3 -3
  49. package/dist/types/view/FlexibleCard/components/container/hover-card-control/index.d.ts +2 -2
  50. package/dist/types/view/FlexibleCard/components/container/hover-card-control/types.d.ts +3 -2
  51. package/dist/types/view/FlexibleCard/components/container/index.d.ts +2 -4
  52. package/dist/types/view/FlexibleCard/components/container/types.d.ts +3 -2
  53. package/dist/types/view/HoverCard/components/ContentContainer.d.ts +3 -2
  54. package/dist/types/view/HoverCard/components/views/resolved/types.d.ts +0 -2
  55. package/dist/types/view/HoverCard/types.d.ts +1 -1
  56. package/dist/types/view/common/ai-prism/index.d.ts +3 -2
  57. package/dist/types/view/common/ai-prism/types.d.ts +3 -2
  58. package/dist/types/view/common/ai-summary/index.d.ts +4 -0
  59. package/dist/types-ts4.5/state/hooks/use-ai-summary/ai-summary-service/types.d.ts +3 -1
  60. package/dist/types-ts4.5/state/hooks/use-ai-summary/index.d.ts +0 -1
  61. package/dist/types-ts4.5/view/BlockCard/views/flexible/unresolved-view/index.d.ts +2 -2
  62. package/dist/types-ts4.5/view/BlockCard/views/flexible/unresolved-view/types.d.ts +3 -2
  63. package/dist/types-ts4.5/view/FlexibleCard/components/blocks/ai-summary-block/ai-event-error-viewed/index.d.ts +1 -2
  64. package/dist/types-ts4.5/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/types.d.ts +2 -2
  65. package/dist/types-ts4.5/view/FlexibleCard/components/blocks/ai-summary-block/types.d.ts +2 -3
  66. package/dist/types-ts4.5/view/FlexibleCard/components/blocks/block/index.d.ts +2 -3
  67. package/dist/types-ts4.5/view/FlexibleCard/components/blocks/element-group/index.d.ts +2 -3
  68. package/dist/types-ts4.5/view/FlexibleCard/components/blocks/element-group/types.d.ts +3 -2
  69. package/dist/types-ts4.5/view/FlexibleCard/components/blocks/types.d.ts +3 -3
  70. package/dist/types-ts4.5/view/FlexibleCard/components/container/hover-card-control/index.d.ts +2 -2
  71. package/dist/types-ts4.5/view/FlexibleCard/components/container/hover-card-control/types.d.ts +3 -2
  72. package/dist/types-ts4.5/view/FlexibleCard/components/container/index.d.ts +2 -4
  73. package/dist/types-ts4.5/view/FlexibleCard/components/container/types.d.ts +3 -2
  74. package/dist/types-ts4.5/view/HoverCard/components/ContentContainer.d.ts +3 -2
  75. package/dist/types-ts4.5/view/HoverCard/components/views/resolved/types.d.ts +0 -2
  76. package/dist/types-ts4.5/view/HoverCard/types.d.ts +1 -1
  77. package/dist/types-ts4.5/view/common/ai-prism/index.d.ts +3 -2
  78. package/dist/types-ts4.5/view/common/ai-prism/types.d.ts +3 -2
  79. package/dist/types-ts4.5/view/common/ai-summary/index.d.ts +4 -0
  80. package/package.json +5 -5
package/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # @atlaskit/smart-card
2
2
 
3
+ ## 26.49.2
4
+
5
+ ### Patch Changes
6
+
7
+ - [#80085](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/80085) [`7febfed958dd`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/7febfed958dd) - Update usage of `React.FC` to explicity include `children`
8
+
9
+ ## 26.49.1
10
+
11
+ ### Patch Changes
12
+
13
+ - [#78725](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/78725) [`9eec85250f70`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/9eec85250f70) - Hover Card: AI Summary UI controlled by aiSummary hook
14
+ - Updated dependencies
15
+
3
16
  ## 26.49.0
4
17
 
5
18
  ### Minor Changes
@@ -51,8 +51,14 @@ var AISummaryService = exports.AISummaryService = /*#__PURE__*/function () {
51
51
  return fetch(requestUrl, options);
52
52
  case 6:
53
53
  response = _context.sent;
54
+ if (!(!response.ok || response.status >= 400)) {
55
+ _context.next = 11;
56
+ break;
57
+ }
58
+ throw new Error("Status: ".concat(response.status, "\n URL: ").concat(_this.url, "\n StatusText ").concat(response.statusText));
59
+ case 11:
54
60
  return _context.abrupt("return", (0, _utils.readStream)(response));
55
- case 8:
61
+ case 12:
56
62
  case "end":
57
63
  return _context.stop();
58
64
  }
@@ -103,10 +109,11 @@ var AISummaryService = exports.AISummaryService = /*#__PURE__*/function () {
103
109
  return _regenerator.default.wrap(function _callee2$(_context2) {
104
110
  while (1) switch (_context2.prev = _context2.next) {
105
111
  case 0:
106
- summaryStyle = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : 'short';
107
- this.state = _objectSpread(_objectSpread({}, this.state), {}, {
108
- status: 'loading'
109
- });
112
+ summaryStyle = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : 'medium';
113
+ this.state = {
114
+ status: 'loading',
115
+ content: ''
116
+ };
110
117
  _iterator2 = _createForOfIteratorHelper(this.subscribedStateSetters);
111
118
  try {
112
119
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
@@ -133,7 +140,7 @@ var AISummaryService = exports.AISummaryService = /*#__PURE__*/function () {
133
140
  return _iterator.next();
134
141
  case 15:
135
142
  if (!(_iteratorAbruptCompletion = !(_step = _context2.sent).done)) {
136
- _context2.next = 21;
143
+ _context2.next = 22;
137
144
  break;
138
145
  }
139
146
  chunk = _step.value;
@@ -153,53 +160,58 @@ var AISummaryService = exports.AISummaryService = /*#__PURE__*/function () {
153
160
  _iterator3.f();
154
161
  }
155
162
  }
156
- case 18:
163
+
164
+ //if AI Mate service returns cached summary we get the summary text in one piece as the last message
165
+ if (chunk.type === 'FINAL_RESPONSE') {
166
+ bufferContent = chunk.message.message.content;
167
+ }
168
+ case 19:
157
169
  _iteratorAbruptCompletion = false;
158
170
  _context2.next = 13;
159
171
  break;
160
- case 21:
161
- _context2.next = 27;
172
+ case 22:
173
+ _context2.next = 28;
162
174
  break;
163
- case 23:
164
- _context2.prev = 23;
175
+ case 24:
176
+ _context2.prev = 24;
165
177
  _context2.t0 = _context2["catch"](11);
166
178
  _didIteratorError = true;
167
179
  _iteratorError = _context2.t0;
168
- case 27:
169
- _context2.prev = 27;
180
+ case 28:
170
181
  _context2.prev = 28;
182
+ _context2.prev = 29;
171
183
  if (!(_iteratorAbruptCompletion && _iterator.return != null)) {
172
- _context2.next = 32;
184
+ _context2.next = 33;
173
185
  break;
174
186
  }
175
- _context2.next = 32;
187
+ _context2.next = 33;
176
188
  return _iterator.return();
177
- case 32:
178
- _context2.prev = 32;
189
+ case 33:
190
+ _context2.prev = 33;
179
191
  if (!_didIteratorError) {
180
- _context2.next = 35;
192
+ _context2.next = 36;
181
193
  break;
182
194
  }
183
195
  throw _iteratorError;
184
- case 35:
185
- return _context2.finish(32);
186
196
  case 36:
187
- return _context2.finish(27);
197
+ return _context2.finish(33);
188
198
  case 37:
199
+ return _context2.finish(28);
200
+ case 38:
189
201
  this.state = {
190
202
  status: 'done',
191
203
  content: bufferContent
192
204
  };
193
- _context2.next = 43;
205
+ _context2.next = 44;
194
206
  break;
195
- case 40:
196
- _context2.prev = 40;
207
+ case 41:
208
+ _context2.prev = 41;
197
209
  _context2.t1 = _context2["catch"](4);
198
210
  this.state = {
199
211
  status: 'error',
200
212
  content: ''
201
213
  };
202
- case 43:
214
+ case 44:
203
215
  _iterator4 = _createForOfIteratorHelper(this.subscribedStateSetters);
204
216
  try {
205
217
  for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
@@ -211,11 +223,11 @@ var AISummaryService = exports.AISummaryService = /*#__PURE__*/function () {
211
223
  } finally {
212
224
  _iterator4.f();
213
225
  }
214
- case 45:
226
+ case 46:
215
227
  case "end":
216
228
  return _context2.stop();
217
229
  }
218
- }, _callee2, this, [[4, 40], [11, 23, 27, 37], [28,, 32, 36]]);
230
+ }, _callee2, this, [[4, 41], [11, 24, 28, 38], [29,, 33, 37]]);
219
231
  }));
220
232
  function summariseUrl() {
221
233
  return _summariseUrl.apply(this, arguments);
@@ -13,8 +13,8 @@ var useAISummary = exports.useAISummary = function useAISummary(props) {
13
13
  var _AISummariesStore$get;
14
14
  var url = props.url,
15
15
  baseUrl = props.baseUrl,
16
- product = props.product,
17
- headers = props.headers;
16
+ headers = props.headers,
17
+ product = props.product;
18
18
  var _useState = (0, _react.useState)(((_AISummariesStore$get = _store.AISummariesStore.get(url)) === null || _AISummariesStore$get === void 0 ? void 0 : _AISummariesStore$get.state) || {
19
19
  status: 'ready',
20
20
  content: ''
@@ -22,47 +22,25 @@ var useAISummary = exports.useAISummary = function useAISummary(props) {
22
22
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
23
23
  state = _useState2[0],
24
24
  setState = _useState2[1];
25
-
26
- // Can be used to know the summary status upon mounting a component (HoverCard UI state for example).
27
- // For other scenarios, opt for dynamic status updates via state.status.
28
- var isSummarisedOnMount = (0, _react.useMemo)(function () {
29
- var _AISummariesStore$get2;
30
- return ((_AISummariesStore$get2 = _store.AISummariesStore.get(url)) === null || _AISummariesStore$get2 === void 0 ? void 0 : _AISummariesStore$get2.state.status) === 'done';
31
- }, [url]);
32
25
  (0, _react.useEffect)(function () {
33
- // Create or subscribe to an AI service only if a summary has not been previously generated.
34
- // Otherwise, use the data from the current state synchronized with a cache (AISummariesStore).
35
- if (!isSummarisedOnMount) {
36
- var aISummaryService = _store.AISummariesStore.get(url);
37
- var isAISummaryServiceInitiated = !!aISummaryService;
38
- if (isAISummaryServiceInitiated) {
39
- //if we want to subscribe to updates from an existing AI service that has not yet provided a summary or is currently in progress.
40
- var unsubscribe = aISummaryService.subscribe(setState);
41
- return function () {
42
- return unsubscribe();
43
- };
44
- } else {
45
- var _AISummariesStore$get3;
46
- //if we want to create a new AI service and wish to subscribe for updates
47
- _store.AISummariesStore.set(url, new _aiSummaryService.AISummaryService({
48
- url: url,
49
- baseUrl: baseUrl,
50
- product: product,
51
- headers: headers
52
- }));
53
- var _unsubscribe = (_AISummariesStore$get3 = _store.AISummariesStore.get(url)) === null || _AISummariesStore$get3 === void 0 ? void 0 : _AISummariesStore$get3.subscribe(setState);
54
- return function () {
55
- return _unsubscribe && _unsubscribe();
56
- };
57
- }
26
+ var _AISummariesStore$get2;
27
+ if (!_store.AISummariesStore.get(url)) {
28
+ _store.AISummariesStore.set(url, new _aiSummaryService.AISummaryService({
29
+ url: url,
30
+ baseUrl: baseUrl,
31
+ headers: headers,
32
+ product: product
33
+ }));
58
34
  }
59
- }, [isSummarisedOnMount, url, baseUrl, product, headers]);
35
+
36
+ //returns function that calls unsubscribe method
37
+ return (_AISummariesStore$get2 = _store.AISummariesStore.get(url)) === null || _AISummariesStore$get2 === void 0 ? void 0 : _AISummariesStore$get2.subscribe(setState);
38
+ }, [url, baseUrl, headers, product]);
60
39
  var summariseUrl = function summariseUrl() {
61
- var _AISummariesStore$get4;
62
- return (_AISummariesStore$get4 = _store.AISummariesStore.get(url)) === null || _AISummariesStore$get4 === void 0 ? void 0 : _AISummariesStore$get4.summariseUrl();
40
+ var _AISummariesStore$get3;
41
+ return (_AISummariesStore$get3 = _store.AISummariesStore.get(url)) === null || _AISummariesStore$get3 === void 0 ? void 0 : _AISummariesStore$get3.summariseUrl();
63
42
  };
64
43
  return {
65
- isSummarisedOnMount: isSummarisedOnMount,
66
44
  summariseUrl: summariseUrl,
67
45
  state: state
68
46
  };
@@ -22,7 +22,7 @@ var ANALYTICS_CHANNEL = exports.ANALYTICS_CHANNEL = 'media';
22
22
  var context = exports.context = {
23
23
  componentName: 'smart-cards',
24
24
  packageName: "@atlaskit/smart-card",
25
- packageVersion: "26.49.0"
25
+ packageVersion: "26.49.2"
26
26
  };
27
27
  var TrackQuickActionType = exports.TrackQuickActionType = /*#__PURE__*/function (TrackQuickActionType) {
28
28
  TrackQuickActionType["StatusUpdate"] = "StatusUpdate";
@@ -33,39 +33,46 @@ var AISummaryBlockResolvedView = function AISummaryBlockResolvedView(props) {
33
33
  actions = _props$actions === void 0 ? [] : _props$actions,
34
34
  metadata = props.metadata,
35
35
  onActionMenuOpenChange = props.onActionMenuOpenChange,
36
- onAIActionChange = props.onAIActionChange,
37
36
  _props$size = props.size,
38
37
  size = _props$size === void 0 ? _constants.SmartLinkSize.Medium : _props$size,
39
- testId = props.testId;
40
- var _useState = (0, _react.useState)('ready'),
41
- _useState2 = (0, _slicedToArray2.default)(_useState, 2),
42
- aiState = _useState2[0],
43
- setAIState = _useState2[1];
38
+ testId = props.testId,
39
+ aiSummaryMinHeight = props.aiSummaryMinHeight;
40
+ var metadataElements = (0, _utils.renderElementItems)(metadata);
44
41
  var _useAnalyticsEvents = (0, _useAnalyticsEvents2.useAnalyticsEvents)(),
45
42
  fireEvent = _useAnalyticsEvents.fireEvent;
46
- var metadataElements = (0, _utils.renderElementItems)(metadata);
47
43
  var context = (0, _flexibleUiContext.useFlexibleUiContext)();
48
44
  var url = (context === null || context === void 0 ? void 0 : context.url) || '';
49
- var aiSummary = (0, _useAiSummary.useAISummary)({
50
- url: url
51
- });
52
- var _aiSummary$state = aiSummary.state,
53
- content = _aiSummary$state.content,
54
- status = _aiSummary$state.status,
55
- isSummarisedOnMount = aiSummary.isSummarisedOnMount;
56
- var onAIActionClick = (0, _react.useCallback)(function () {
57
- fireEvent('ui.button.clicked.aiSummary', {});
58
- setAIState('loading');
59
- if (onAIActionChange) {
60
- onAIActionChange('loading');
45
+ var _useAISummary = (0, _useAiSummary.useAISummary)({
46
+ url: url
47
+ }),
48
+ summariseUrl = _useAISummary.summariseUrl,
49
+ _useAISummary$state = _useAISummary.state,
50
+ content = _useAISummary$state.content,
51
+ status = _useAISummary$state.status;
52
+ var showAISummary = status !== 'ready' && status !== 'error';
53
+ var isSummarisedOnMountRef = (0, _react.useRef)(status === 'done');
54
+ var isErroredOnMountRef = (0, _react.useRef)(status === 'error');
55
+ var _useState = (0, _react.useState)(false),
56
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
57
+ showAISummaryErrorMessage = _useState2[0],
58
+ setShowAISummaryErrorMessage = _useState2[1];
59
+ (0, _react.useEffect)(function () {
60
+ if (isErroredOnMountRef.current && status === 'loading') {
61
+ isErroredOnMountRef.current = false;
62
+ setShowAISummaryErrorMessage(true);
63
+ } else {
64
+ setShowAISummaryErrorMessage(!isErroredOnMountRef.current && status === 'error');
61
65
  }
62
- }, [onAIActionChange, fireEvent]);
66
+ }, [status]);
63
67
  var combinedActions = (0, _react.useMemo)(function () {
64
- if (aiState === 'ready') {
68
+ if (status === 'ready' || status === 'error') {
65
69
  var aiAction = {
66
70
  content: /*#__PURE__*/_react.default.createElement(_reactIntlNext.FormattedMessage, _messages.messages.ai_summarize),
67
71
  name: _constants.ActionName.CustomAction,
68
- onClick: onAIActionClick,
72
+ onClick: function onClick() {
73
+ fireEvent('ui.button.clicked.aiSummary', {});
74
+ summariseUrl();
75
+ },
69
76
  testId: "".concat(testId, "-ai-summary-action"),
70
77
  icon: /*#__PURE__*/_react.default.createElement(_aiIcon.default, {
71
78
  label: "AIIcon"
@@ -74,7 +81,7 @@ var AISummaryBlockResolvedView = function AISummaryBlockResolvedView(props) {
74
81
  return [aiAction].concat((0, _toConsumableArray2.default)(actions));
75
82
  }
76
83
  return actions;
77
- }, [actions, aiState, onAIActionClick, testId]);
84
+ }, [actions, status, testId, summariseUrl, fireEvent]);
78
85
  var onDropdownOpenChange = (0, _react.useCallback)(function (isOpen) {
79
86
  if (onActionMenuOpenChange) {
80
87
  onActionMenuOpenChange({
@@ -86,17 +93,18 @@ var AISummaryBlockResolvedView = function AISummaryBlockResolvedView(props) {
86
93
  direction: _constants.SmartLinkDirection.Vertical,
87
94
  testId: "".concat(testId, "-resolved-view")
88
95
  }), status === 'done' && /*#__PURE__*/_react.default.createElement(_aiEventSummaryViewed.default, {
89
- fromCache: isSummarisedOnMount
90
- }), /*#__PURE__*/_react.default.createElement(_aiSummary.default, {
96
+ fromCache: isSummarisedOnMountRef.current
97
+ }), showAISummary && /*#__PURE__*/_react.default.createElement(_aiSummary.default, {
98
+ minHeight: aiSummaryMinHeight,
91
99
  content: content,
92
- showIcon: isSummarisedOnMount
100
+ showIcon: isSummarisedOnMountRef.current
93
101
  }), /*#__PURE__*/_react.default.createElement(_primitives.Inline, {
94
102
  alignBlock: "center",
95
103
  alignInline: "end",
96
104
  grow: "fill",
97
105
  spread: "space-between"
98
- }, /*#__PURE__*/_react.default.createElement(_primitives.Box, null, !isSummarisedOnMount && (aiState === 'loading' || aiState === 'done') ? /*#__PURE__*/_react.default.createElement(_aiStateIndicator.default, {
99
- state: aiState,
106
+ }, /*#__PURE__*/_react.default.createElement(_primitives.Box, null, !isSummarisedOnMountRef.current && (status === 'loading' || status === 'done') ? /*#__PURE__*/_react.default.createElement(_aiStateIndicator.default, {
107
+ state: status,
100
108
  testId: "".concat(testId, "-state-indicator")
101
109
  }) : /*#__PURE__*/_react.default.createElement(_elementGroup.default, {
102
110
  width: _constants.SmartLinkWidth.FitToContent,
@@ -106,7 +114,7 @@ var AISummaryBlockResolvedView = function AISummaryBlockResolvedView(props) {
106
114
  items: combinedActions,
107
115
  appearance: "default",
108
116
  size: size
109
- }))), status === 'error' && /*#__PURE__*/_react.default.createElement(_primitives.Inline, {
117
+ }))), showAISummaryErrorMessage && /*#__PURE__*/_react.default.createElement(_primitives.Inline, {
110
118
  grow: "fill"
111
119
  }, /*#__PURE__*/_react.default.createElement(_aiEventErrorViewed.default, null), /*#__PURE__*/_react.default.createElement(_aiStateIndicator.default, {
112
120
  state: status,
@@ -1,20 +1,17 @@
1
1
  "use strict";
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- var _typeof = require("@babel/runtime/helpers/typeof");
5
4
  Object.defineProperty(exports, "__esModule", {
6
5
  value: true
7
6
  });
8
7
  exports.default = void 0;
9
8
  var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
10
- var _react = _interopRequireWildcard(require("react"));
9
+ var _react = require("react");
11
10
  var _react2 = require("@emotion/react");
12
11
  var _constants = require("../../../../../constants");
13
12
  var _utils = require("../utils");
14
13
  var _templateObject;
15
14
  /** @jsx jsx */
16
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
17
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
18
15
  var getBlockStyles = function getBlockStyles(direction, size) {
19
16
  return (0, _react2.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n ", "\n ", "\n justify-content: flex-start;\n [data-separator] + [data-separator]:before {\n content: '\u2022';\n margin-right: ", "rem;\n }\n // Pull request elements: source branch \u2192 target branch\n [data-smart-element='", "']\n + [data-smart-element='", "']:before {\n content: '\u2192';\n }\n // Pull request elements: target branch \u2190 source branch\n [data-smart-element='", "']\n + [data-smart-element='", "']:before {\n content: '\u2190';\n }\n"])), (0, _utils.getBaseStyles)(direction, size), _utils.highlightRemoveStyles, (0, _utils.getGapSize)(size), _constants.ElementName.SourceBranch, _constants.ElementName.TargetBranch, _constants.ElementName.TargetBranch, _constants.ElementName.SourceBranch);
20
17
  };
@@ -6,8 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.getElementGroupStyles = exports.default = void 0;
8
8
  var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
9
- var _react = _interopRequireDefault(require("react"));
10
- var _react2 = require("@emotion/react");
9
+ var _react = require("@emotion/react");
11
10
  var _constants = require("../../../../../constants");
12
11
  var _utils = require("../utils");
13
12
  var _utils2 = require("../../utils");
@@ -16,25 +15,25 @@ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _temp
16
15
  var getAlignmentStyles = function getAlignmentStyles(align) {
17
16
  switch (align) {
18
17
  case _constants.SmartLinkAlignment.Right:
19
- return (0, _react2.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n -webkit-box-align: end;\n -ms-flex-align: end;\n justify-content: flex-end;\n text-align: right;\n "])));
18
+ return (0, _react.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n -webkit-box-align: end;\n -ms-flex-align: end;\n justify-content: flex-end;\n text-align: right;\n "])));
20
19
  case _constants.SmartLinkAlignment.Left:
21
20
  default:
22
- return (0, _react2.css)(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["\n -webkit-box-align: start;\n -ms-flex-align: start;\n justify-content: flex-start;\n text-align: left;\n "])));
21
+ return (0, _react.css)(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["\n -webkit-box-align: start;\n -ms-flex-align: start;\n justify-content: flex-start;\n text-align: left;\n "])));
23
22
  }
24
23
  };
25
24
  var getGapStyles = function getGapStyles(size, align) {
26
25
  var gap = (0, _utils.getGapSize)(size);
27
26
  if (align === _constants.SmartLinkAlignment.Right) {
28
- return (0, _react2.css)(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2.default)(["\n > span {\n margin-left: ", "rem;\n }\n\n > span:first-child {\n margin-left: initial;\n }\n "])), gap);
27
+ return (0, _react.css)(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2.default)(["\n > span {\n margin-left: ", "rem;\n }\n\n > span:first-child {\n margin-left: initial;\n }\n "])), gap);
29
28
  }
30
- return (0, _react2.css)(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2.default)(["\n > span {\n margin-right: ", "rem;\n &:last-child {\n margin-right: initial;\n }\n }\n "])), gap);
29
+ return (0, _react.css)(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2.default)(["\n > span {\n margin-right: ", "rem;\n &:last-child {\n margin-right: initial;\n }\n }\n "])), gap);
31
30
  };
32
31
  var getHorizontalDirectionStyles = function getHorizontalDirectionStyles(size, align) {
33
32
  var lineHeight = (0, _utils2.getMaxLineHeight)(size);
34
- return (0, _react2.css)(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2.default)(["\n display: block;\n vertical-align: middle;\n ", "\n\n > span, > div {\n vertical-align: middle;\n\n &[data-smart-element-date-time],\n &[data-smart-element-text] {\n // Show all/wrapped/truncated\n display: inline;\n }\n }\n\n ", "\n "])), (0, _utils2.getTruncateStyles)(1, lineHeight + 'rem'), getGapStyles(size, align));
33
+ return (0, _react.css)(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2.default)(["\n display: block;\n vertical-align: middle;\n ", "\n\n > span, > div {\n vertical-align: middle;\n\n &[data-smart-element-date-time],\n &[data-smart-element-text] {\n // Show all/wrapped/truncated\n display: inline;\n }\n }\n\n ", "\n "])), (0, _utils2.getTruncateStyles)(1, lineHeight + 'rem'), getGapStyles(size, align));
35
34
  };
36
35
  var getElementGroupStyles = exports.getElementGroupStyles = function getElementGroupStyles(direction, size, align, width, position) {
37
- return (0, _react2.css)(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2.default)(["\n ", "\n ", "\n min-width: 10%;\n ", "\n ", "\n ", "\n"])), (0, _utils.getBaseStyles)(direction, size), getAlignmentStyles(align), width === _constants.SmartLinkWidth.Flexible ? "flex: 1 3;" : '', direction === _constants.SmartLinkDirection.Horizontal ? getHorizontalDirectionStyles(size, align) : '', position === _constants.SmartLinkPosition.Top ? 'align-self: flex-start;' : '');
36
+ return (0, _react.css)(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2.default)(["\n ", "\n ", "\n min-width: 10%;\n ", "\n ", "\n ", "\n"])), (0, _utils.getBaseStyles)(direction, size), getAlignmentStyles(align), width === _constants.SmartLinkWidth.Flexible ? "flex: 1 3;" : '', direction === _constants.SmartLinkDirection.Horizontal ? getHorizontalDirectionStyles(size, align) : '', position === _constants.SmartLinkPosition.Top ? 'align-self: flex-start;' : '');
38
37
  };
39
38
 
40
39
  /**
@@ -59,7 +58,7 @@ var ElementGroup = function ElementGroup(_ref) {
59
58
  width = _ref$width === void 0 ? _constants.SmartLinkWidth.FitToContent : _ref$width,
60
59
  _ref$position = _ref.position,
61
60
  position = _ref$position === void 0 ? _constants.SmartLinkPosition.Center : _ref$position;
62
- return (0, _react2.jsx)("div", {
61
+ return (0, _react.jsx)("div", {
63
62
  css: [getElementGroupStyles(direction, size, align, width, position), overrideCss],
64
63
  "data-smart-element-group": true,
65
64
  "data-testid": testId
@@ -6,33 +6,59 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.default = void 0;
8
8
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
9
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
9
10
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
10
11
  var _react = require("@emotion/react");
11
- var _react2 = _interopRequireDefault(require("react"));
12
+ var _react2 = require("react");
12
13
  var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
13
14
  var _styled = require("../styled");
14
15
  var _aiPrism = _interopRequireDefault(require("../../common/ai-prism"));
15
16
  var _HoverCardContent = require("./HoverCardContent");
16
- var _excluded = ["children", "isAIEnabled", "showPrism", "testId"];
17
+ var _useAiSummary = require("../../../state/hooks/use-ai-summary");
18
+ var _excluded = ["children", "isAIEnabled", "testId", "url"],
19
+ _excluded2 = ["children", "isAIEnabled", "testId", "url"];
17
20
  /** @jsx jsx */
18
- var ContentContainer = function ContentContainer(_ref) {
21
+ var ConnectedAIPrismContainer = function ConnectedAIPrismContainer(_ref) {
19
22
  var children = _ref.children,
20
23
  _ref$isAIEnabled = _ref.isAIEnabled,
21
24
  isAIEnabled = _ref$isAIEnabled === void 0 ? false : _ref$isAIEnabled,
22
- _ref$showPrism = _ref.showPrism,
23
- showPrism = _ref$showPrism === void 0 ? false : _ref$showPrism,
24
25
  testId = _ref.testId,
26
+ url = _ref.url,
25
27
  props = (0, _objectWithoutProperties2.default)(_ref, _excluded);
28
+ var _useAISummary = (0, _useAiSummary.useAISummary)({
29
+ url: url
30
+ }),
31
+ status = _useAISummary.state.status;
32
+ var _useState = (0, _react2.useState)(status === 'loading'),
33
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
34
+ showPrism = _useState2[0],
35
+ setShowPrism = _useState2[1];
36
+ (0, _react2.useEffect)(function () {
37
+ setShowPrism(status === 'loading');
38
+ }, [status]);
39
+ var container = (0, _react.jsx)("div", (0, _extends2.default)({
40
+ className: _HoverCardContent.hoverCardClassName,
41
+ css: [_styled.HoverCardContainer, isAIEnabled && showPrism ? undefined : _styled.popupContainerStyles],
42
+ "data-testid": testId
43
+ }, props), children);
44
+ return isAIEnabled ? (0, _react.jsx)(_aiPrism.default, {
45
+ isVisible: showPrism,
46
+ testId: "".concat(testId, "-prism")
47
+ }, container) : container;
48
+ };
49
+ var ContentContainer = function ContentContainer(_ref2) {
50
+ var children = _ref2.children,
51
+ _ref2$isAIEnabled = _ref2.isAIEnabled,
52
+ isAIEnabled = _ref2$isAIEnabled === void 0 ? false : _ref2$isAIEnabled,
53
+ testId = _ref2.testId,
54
+ url = _ref2.url,
55
+ props = (0, _objectWithoutProperties2.default)(_ref2, _excluded2);
26
56
  if ((0, _platformFeatureFlags.getBooleanFF)('platform.linking-platform.smart-card.hover-card-ai-summaries')) {
27
- var container = (0, _react.jsx)("div", (0, _extends2.default)({
28
- className: _HoverCardContent.hoverCardClassName,
29
- css: [_styled.HoverCardContainer, isAIEnabled && showPrism ? undefined : _styled.popupContainerStyles],
30
- "data-testid": testId
57
+ return (0, _react.jsx)(ConnectedAIPrismContainer, (0, _extends2.default)({
58
+ isAIEnabled: isAIEnabled,
59
+ url: url,
60
+ testId: testId
31
61
  }, props), children);
32
- return isAIEnabled ? (0, _react.jsx)(_aiPrism.default, {
33
- isVisible: showPrism,
34
- testId: "".concat(testId, "-prism")
35
- }, container) : container;
36
62
  }
37
63
  return (0, _react.jsx)("div", (0, _extends2.default)({
38
64
  className: _HoverCardContent.hoverCardClassName,
@@ -7,7 +7,6 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.hoverCardClassName = exports.getCopyAction = exports.default = void 0;
9
9
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
10
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
11
10
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
12
11
  var _react = require("@emotion/react");
13
12
  var _analyticsNext = require("@atlaskit/analytics-next");
@@ -97,10 +96,6 @@ var HoverCardContent = function HoverCardContent(_ref) {
97
96
  var services = (0, _helpers.getServices)(linkState.details);
98
97
  var statusRef = (0, _react2.useRef)(linkStatus);
99
98
  var analyticsRef = (0, _react2.useRef)(analytics);
100
- var _useState = (0, _react2.useState)(false),
101
- _useState2 = (0, _slicedToArray2.default)(_useState, 2),
102
- showPrism = _useState2[0],
103
- setShowPrism = _useState2[1];
104
99
  (0, _react2.useEffect)(function () {
105
100
  /**
106
101
  * Must access current analytics object value via ref because its not stable
@@ -173,9 +168,6 @@ var HoverCardContent = function HoverCardContent(_ref) {
173
168
  var onClickStopPropagation = (0, _react2.useCallback)(function (e) {
174
169
  return e.stopPropagation();
175
170
  }, []);
176
- var onAIActionChange = (0, _react2.useCallback)(function (state) {
177
- setShowPrism(state === 'loading');
178
- }, []);
179
171
  var getCardView = function getCardView(cardState) {
180
172
  if (cardState.metadataStatus === 'pending') {
181
173
  return (0, _react.jsx)(_resolving.default, {
@@ -208,7 +200,6 @@ var HoverCardContent = function HoverCardContent(_ref) {
208
200
  flexibleCardProps: flexibleCardProps,
209
201
  isAISummaryEnabled: isAISummaryEnabled,
210
202
  onActionClick: onActionClick,
211
- onAIActionChange: onAIActionChange,
212
203
  titleBlockProps: titleBlockProps
213
204
  });
214
205
  }
@@ -220,7 +211,7 @@ var HoverCardContent = function HoverCardContent(_ref) {
220
211
  onMouseLeave: onMouseLeave,
221
212
  onClick: onClickStopPropagation,
222
213
  isAIEnabled: isAISummaryEnabled,
223
- showPrism: showPrism
214
+ url: url
224
215
  }, cardView) : null;
225
216
  };
226
217
  var _default = exports.default = HoverCardContent;