@atlaskit/smart-card 26.50.9 → 26.50.11

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 (71) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/cjs/constants.js +2 -1
  3. package/dist/cjs/messages.js +5 -0
  4. package/dist/cjs/state/hooks/use-ai-summary/ai-summary-service/index.js +16 -5
  5. package/dist/cjs/state/hooks/use-ai-summary/ai-summary-service/types.js +7 -1
  6. package/dist/cjs/state/hooks/use-ai-summary/ai-summary-service/utils.js +47 -41
  7. package/dist/cjs/utils/analytics/analytics.js +1 -1
  8. package/dist/cjs/view/EmbedCard/components/styled.js +1 -1
  9. package/dist/cjs/view/FlexibleCard/components/blocks/action-group/index.js +1 -1
  10. package/dist/cjs/view/FlexibleCard/components/blocks/ai-summary-block/ai-event-error-viewed/index.js +6 -3
  11. package/dist/cjs/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/ai-state-error.js +38 -12
  12. package/dist/cjs/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/index.js +4 -2
  13. package/dist/cjs/view/FlexibleCard/components/blocks/ai-summary-block/resolved/index.js +6 -2
  14. package/dist/cjs/view/FlexibleCard/components/elements/lozenge/lozenge-action/lozenge-action-error/styled.js +1 -1
  15. package/dist/cjs/view/HoverCard/components/ContentContainer.js +1 -1
  16. package/dist/cjs/view/HoverCard/styled.js +23 -8
  17. package/dist/cjs/view/LinkUrl/index.js +1 -1
  18. package/dist/cjs/view/common/ai-prism/index.js +11 -4
  19. package/dist/es2019/constants.js +1 -0
  20. package/dist/es2019/messages.js +5 -0
  21. package/dist/es2019/state/hooks/use-ai-summary/ai-summary-service/index.js +8 -2
  22. package/dist/es2019/state/hooks/use-ai-summary/ai-summary-service/types.js +1 -0
  23. package/dist/es2019/state/hooks/use-ai-summary/ai-summary-service/utils.js +16 -12
  24. package/dist/es2019/utils/analytics/analytics.js +1 -1
  25. package/dist/es2019/view/EmbedCard/components/styled.js +1 -1
  26. package/dist/es2019/view/FlexibleCard/components/blocks/action-group/index.js +2 -1
  27. package/dist/es2019/view/FlexibleCard/components/blocks/ai-summary-block/ai-event-error-viewed/index.js +7 -3
  28. package/dist/es2019/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/ai-state-error.js +35 -9
  29. package/dist/es2019/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/index.js +4 -2
  30. package/dist/es2019/view/FlexibleCard/components/blocks/ai-summary-block/resolved/index.js +6 -2
  31. package/dist/es2019/view/FlexibleCard/components/elements/lozenge/lozenge-action/lozenge-action-error/styled.js +1 -1
  32. package/dist/es2019/view/HoverCard/components/ContentContainer.js +1 -1
  33. package/dist/es2019/view/HoverCard/styled.js +19 -20
  34. package/dist/es2019/view/LinkUrl/index.js +1 -1
  35. package/dist/es2019/view/common/ai-prism/index.js +12 -5
  36. package/dist/esm/constants.js +1 -0
  37. package/dist/esm/messages.js +5 -0
  38. package/dist/esm/state/hooks/use-ai-summary/ai-summary-service/index.js +16 -5
  39. package/dist/esm/state/hooks/use-ai-summary/ai-summary-service/types.js +1 -0
  40. package/dist/esm/state/hooks/use-ai-summary/ai-summary-service/utils.js +47 -41
  41. package/dist/esm/utils/analytics/analytics.js +1 -1
  42. package/dist/esm/view/EmbedCard/components/styled.js +1 -1
  43. package/dist/esm/view/FlexibleCard/components/blocks/action-group/index.js +2 -1
  44. package/dist/esm/view/FlexibleCard/components/blocks/ai-summary-block/ai-event-error-viewed/index.js +6 -3
  45. package/dist/esm/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/ai-state-error.js +39 -13
  46. package/dist/esm/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/index.js +4 -2
  47. package/dist/esm/view/FlexibleCard/components/blocks/ai-summary-block/resolved/index.js +6 -2
  48. package/dist/esm/view/FlexibleCard/components/elements/lozenge/lozenge-action/lozenge-action-error/styled.js +1 -1
  49. package/dist/esm/view/HoverCard/components/ContentContainer.js +1 -1
  50. package/dist/esm/view/HoverCard/styled.js +23 -8
  51. package/dist/esm/view/LinkUrl/index.js +1 -1
  52. package/dist/esm/view/common/ai-prism/index.js +12 -5
  53. package/dist/types/common/analytics/generated/analytics.types.d.ts +3 -1
  54. package/dist/types/constants.d.ts +1 -0
  55. package/dist/types/messages.d.ts +1 -1
  56. package/dist/types/state/hooks/use-ai-summary/ai-summary-service/index.d.ts +2 -1
  57. package/dist/types/state/hooks/use-ai-summary/ai-summary-service/types.d.ts +4 -1
  58. package/dist/types/state/hooks/use-ai-summary/index.d.ts +2 -5
  59. package/dist/types/view/FlexibleCard/components/blocks/ai-summary-block/ai-event-error-viewed/index.d.ts +3 -1
  60. package/dist/types/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/types.d.ts +2 -1
  61. package/dist/types/view/HoverCard/styled.d.ts +1 -1
  62. package/dist/types-ts4.5/common/analytics/generated/analytics.types.d.ts +3 -1
  63. package/dist/types-ts4.5/constants.d.ts +1 -0
  64. package/dist/types-ts4.5/messages.d.ts +1 -1
  65. package/dist/types-ts4.5/state/hooks/use-ai-summary/ai-summary-service/index.d.ts +2 -1
  66. package/dist/types-ts4.5/state/hooks/use-ai-summary/ai-summary-service/types.d.ts +14 -1
  67. package/dist/types-ts4.5/state/hooks/use-ai-summary/index.d.ts +2 -5
  68. package/dist/types-ts4.5/view/FlexibleCard/components/blocks/ai-summary-block/ai-event-error-viewed/index.d.ts +3 -1
  69. package/dist/types-ts4.5/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/types.d.ts +2 -1
  70. package/dist/types-ts4.5/view/HoverCard/styled.d.ts +1 -1
  71. package/package.json +4 -4
@@ -6,7 +6,7 @@ import { Box, xcss } from '@atlaskit/primitives';
6
6
  import { messages } from '../../../../../../messages';
7
7
  import AIIndicatorContainer from './ai-indicator-container';
8
8
  import AILearnMoreAnchor from './ai-learn-more-anchor';
9
- import { CONTENT_URL_AI_TROUBLESHOOTING } from '../../../../../../constants';
9
+ import { CONTENT_URL_ACCEPTABLE_USE_POLICY, CONTENT_URL_AI_TROUBLESHOOTING } from '../../../../../../constants';
10
10
  var contentStyles = xcss({
11
11
  color: 'color.text.subtle',
12
12
  fontSize: '11px',
@@ -14,9 +14,40 @@ var contentStyles = xcss({
14
14
  fontWeight: '400',
15
15
  lineHeight: '14px'
16
16
  });
17
- var AIStateError = function AIStateError(_ref) {
18
- var appearance = _ref.appearance,
19
- testId = _ref.testId;
17
+ var MessageWithAnchor = function MessageWithAnchor(_ref) {
18
+ var message = _ref.message,
19
+ url = _ref.url;
20
+ return /*#__PURE__*/React.createElement(FormattedMessage, _extends({}, message, {
21
+ values: {
22
+ a: function a(chunks) {
23
+ return /*#__PURE__*/React.createElement(AILearnMoreAnchor, {
24
+ href: url
25
+ }, chunks);
26
+ }
27
+ }
28
+ }));
29
+ };
30
+ var getErrorMesssageProps = function getErrorMesssageProps(error) {
31
+ switch (error) {
32
+ case 'ACCEPTABLE_USE_VIOLATIONS':
33
+ return {
34
+ message: messages.ai_summary_error_acceptable_use_violation,
35
+ url: CONTENT_URL_ACCEPTABLE_USE_POLICY
36
+ };
37
+ default:
38
+ return {
39
+ message: messages.ai_summary_error_generic,
40
+ url: CONTENT_URL_AI_TROUBLESHOOTING
41
+ };
42
+ }
43
+ };
44
+ var AIStateError = function AIStateError(_ref2) {
45
+ var appearance = _ref2.appearance,
46
+ testId = _ref2.testId,
47
+ error = _ref2.error;
48
+ var _getErrorMesssageProp = getErrorMesssageProps(error),
49
+ message = _getErrorMesssageProp.message,
50
+ url = _getErrorMesssageProp.url;
20
51
  switch (appearance) {
21
52
  case 'icon-only':
22
53
  return null;
@@ -31,15 +62,10 @@ var AIStateError = function AIStateError(_ref) {
31
62
  content: /*#__PURE__*/React.createElement(Box, {
32
63
  testId: "".concat(testId, "-error-message"),
33
64
  xcss: contentStyles
34
- }, /*#__PURE__*/React.createElement(FormattedMessage, _extends({}, messages.ai_summary_error_generic, {
35
- values: {
36
- a: function a(chunks) {
37
- return /*#__PURE__*/React.createElement(AILearnMoreAnchor, {
38
- href: CONTENT_URL_AI_TROUBLESHOOTING
39
- }, chunks);
40
- }
41
- }
42
- }))),
65
+ }, /*#__PURE__*/React.createElement(MessageWithAnchor, {
66
+ message: message,
67
+ url: url
68
+ })),
43
69
  testId: "".concat(testId, "-error")
44
70
  });
45
71
  }
@@ -9,12 +9,14 @@ var AIStateIndicator = function AIStateIndicator(_ref) {
9
9
  _ref$appearance = _ref.appearance,
10
10
  appearance = _ref$appearance === void 0 ? 'default' : _ref$appearance,
11
11
  _ref$testId = _ref.testId,
12
- testId = _ref$testId === void 0 ? 'ai-state-indicator' : _ref$testId;
12
+ testId = _ref$testId === void 0 ? 'ai-state-indicator' : _ref$testId,
13
+ error = _ref.error;
13
14
  switch (state) {
14
15
  case 'error':
15
16
  return jsx(AIStateError, {
16
17
  appearance: appearance,
17
- testId: testId
18
+ testId: testId,
19
+ error: error
18
20
  });
19
21
  case 'loading':
20
22
  return jsx(AIStateLoading, {
@@ -38,7 +38,8 @@ var AISummaryBlockResolvedView = function AISummaryBlockResolvedView(props) {
38
38
  summariseUrl = _useAISummary.summariseUrl,
39
39
  _useAISummary$state = _useAISummary.state,
40
40
  content = _useAISummary$state.content,
41
- status = _useAISummary$state.status;
41
+ status = _useAISummary$state.status,
42
+ error = _useAISummary$state.error;
42
43
  var showAISummary = status === 'done' ||
43
44
  // We want to display the AI Summary component only when there is content available during the loading process.
44
45
  status === 'loading' && !!content;
@@ -109,7 +110,10 @@ var AISummaryBlockResolvedView = function AISummaryBlockResolvedView(props) {
109
110
  size: size
110
111
  }))), showAISummaryErrorMessage && /*#__PURE__*/React.createElement(Inline, {
111
112
  grow: "fill"
112
- }, /*#__PURE__*/React.createElement(AIEventErrorViewed, null), /*#__PURE__*/React.createElement(AIStateIndicator, {
113
+ }, /*#__PURE__*/React.createElement(AIEventErrorViewed, {
114
+ reason: error
115
+ }), /*#__PURE__*/React.createElement(AIStateIndicator, {
116
+ error: error,
113
117
  state: status,
114
118
  testId: testId
115
119
  })));
@@ -12,7 +12,7 @@ export var dropdownItemGroupStyles = css({
12
12
  });
13
13
  var sharedBlockStyles = css({
14
14
  display: 'flex',
15
- gap: '0.5rem',
15
+ gap: "var(--ds-space-100, 0.5rem)",
16
16
  lineHeight: '1rem',
17
17
  minWidth: 0,
18
18
  overflow: 'hidden',
@@ -36,7 +36,7 @@ var ConnectedAIPrismContainer = function ConnectedAIPrismContainer(_ref) {
36
36
  }, [status]);
37
37
  var container = jsx("div", _extends({
38
38
  className: hoverCardClassName,
39
- css: [HoverCardContainer, isAIEnabled && showPrism ? undefined : popupContainerStyles],
39
+ css: [HoverCardContainer, !isAIEnabled ? popupContainerStyles : undefined],
40
40
  "data-testid": testId
41
41
  }, props), children);
42
42
  return isAIEnabled ? jsx(AIPrism, {
@@ -1,5 +1,5 @@
1
1
  import _taggedTemplateLiteral from "@babel/runtime/helpers/taggedTemplateLiteral";
2
- var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6;
2
+ var _templateObject, _templateObject2;
3
3
  import { css } from '@emotion/react';
4
4
  import { loadingPlaceholderClassName } from '../../index';
5
5
  import { SmartLinkSize } from '../../constants';
@@ -16,18 +16,33 @@ export var flexibleUiOptions = {
16
16
  zIndex: HOVER_CARD_Z_INDEX + 1
17
17
  };
18
18
  export var CARD_WIDTH_REM = 24;
19
- export var NEW_CARD_WIDTH_REM = 28;
19
+ export var NEW_CARD_WIDTH_REM = 25;
20
20
  // gap between mouse cursor and hover card
21
21
  export var CARD_GAP_PX = 10;
22
22
  var blockGap = '0.5rem';
23
23
  var elementGap = '0.5rem';
24
- export var separatorCss = css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n [data-separator] + [data-separator]:before {\n margin-right: ", ";\n }\n"])), elementGap);
25
- export var HoverCardContainer = css(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n background: none;\n border-width: 0;\n box-sizing: border-box;\n width: ", "rem;\n\n .", " {\n display: none;\n }\n"])), getBooleanFF('platform.linking-platform.smart-card.hover-card-ai-summaries') ? NEW_CARD_WIDTH_REM : CARD_WIDTH_REM, loadingPlaceholderClassName);
26
- export var titleBlockCss = css(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n gap: ", ";\n\n ", "\n\n // title and subtitle element group\n [data-smart-element-group] {\n // gap between title and subtitle\n gap: 0.06rem;\n display: flex;\n /* subtitle element group */\n > [data-smart-element-group] {\n > span {\n margin-right: ", ";\n }\n }\n }\n\n [data-smart-element='Title'] {\n font-weight: 600;\n }\n"])), blockGap, separatorCss, elementGap);
24
+ export var separatorCss = css({
25
+ '[data-separator] + [data-separator]:before': {
26
+ marginRight: elementGap
27
+ }
28
+ });
29
+ export var HoverCardContainer = css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n background: none;\n border-width: 0;\n box-sizing: border-box;\n width: ", "rem;\n\n .", " {\n display: none;\n }\n"])), getBooleanFF('platform.linking-platform.smart-card.hover-card-ai-summaries') ? NEW_CARD_WIDTH_REM : CARD_WIDTH_REM, loadingPlaceholderClassName);
30
+ export var titleBlockCss = css(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n gap: ", ";\n\n ", "\n\n // title and subtitle element group\n [data-smart-element-group] {\n // gap between title and subtitle\n gap: 0.06rem;\n display: flex;\n /* subtitle element group */\n > [data-smart-element-group] {\n > span {\n margin-right: ", ";\n }\n }\n }\n\n [data-smart-element='Title'] {\n font-weight: 600;\n }\n"])), blockGap, separatorCss, elementGap);
27
31
  export var getTransitionStyles = function getTransitionStyles(snippetHeight) {
28
- return css(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n transition: height 300ms ease-in-out;\n height: ", "px;\n"])), snippetHeight);
32
+ return css({
33
+ transition: 'height 300ms ease-in-out',
34
+ height: "".concat(snippetHeight, "px")
35
+ });
29
36
  };
30
- export var popupContainerStyles = css(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["\n border-radius: ", ";\n background-color: ", ";\n box-shadow: ", ";\n"])), "var(--ds-border-radius-200, 8px)", "var(--ds-surface-raised, white)", "var(--ds-shadow-overlay, 0px 8px 12px rgba(9, 30, 66, 0.15),0px 0px 1px rgba(9, 30, 66, 0.31))");
37
+ export var popupContainerStyles = css({
38
+ borderRadius: "var(--ds-border-radius-200, 8px)",
39
+ backgroundColor: "var(--ds-surface-raised, white)",
40
+ boxShadow: "var(--ds-shadow-overlay, 0px 8px 12px rgba(9, 30, 66, 0.15),0px 0px 1px rgba(9, 30, 66, 0.31))"
41
+ });
31
42
  export var getPreviewBlockStyles = function getPreviewBlockStyles(previewHeight) {
32
- return css(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["\n ", "\n border-top-left-radius: ", ";\n border-top-right-radius: ", ";\n margin-bottom: ", ";\n"])), previewHeight ? "height: ".concat(previewHeight, "px;") : '', "var(--ds-border-radius-200, 8px)", "var(--ds-border-radius-200, 8px)", blockGap);
43
+ return css(previewHeight ? "height: ".concat(previewHeight, "px;") : '', {
44
+ borderTopLeftRadius: "var(--ds-border-radius-200, 8px)",
45
+ borderTopRightRadius: "var(--ds-border-radius-200, 8px)",
46
+ marginBottom: blockGap
47
+ });
33
48
  };
@@ -10,7 +10,7 @@ import { useLinkWarningModal } from './LinkWarningModal/hooks/use-link-warning-m
10
10
  import LinkWarningModal from './LinkWarningModal';
11
11
  var PACKAGE_DATA = {
12
12
  packageName: "@atlaskit/smart-card",
13
- packageVersion: "26.50.9",
13
+ packageVersion: "26.50.11",
14
14
  componentName: 'linkUrl'
15
15
  };
16
16
  var Link = withLinkClickedEvent('a');
@@ -1,11 +1,17 @@
1
1
  /** @jsx jsx */
2
2
  import { css, jsx } from '@emotion/react';
3
3
  import { useThemeObserver } from '@atlaskit/tokens';
4
- import { AI_BORDER_PALETTE, INNER_BORDER_RADIUS } from './constants';
4
+ import { AI_BORDER_PALETTE } from './constants';
5
5
  import AIGlowingBorder from './ai-glowing-border';
6
+ import { popupContainerStyles } from '../../HoverCard/styled';
6
7
  var contentStyles = css({
7
- backgroundColor: "var(--ds-surface-raised, white)",
8
- borderRadius: INNER_BORDER_RADIUS
8
+ transition: 'box-shadow 0.5s ease'
9
+ });
10
+ var contentStylesPrismVisible = css({
11
+ // intentionally set opacity to 0 to remove the shadow with fade out animation
12
+ boxShadow:
13
+ // eslint-disable-next-line @atlaskit/design-system/ensure-design-token-usage
14
+ '0px 8px 12px rgba(9, 30, 66, 0),0px 0px 1px rgba(9, 30, 66, 0)'
9
15
  });
10
16
  var AIPrism = function AIPrism(_ref) {
11
17
  var _AI_BORDER_PALETTE$co;
@@ -22,7 +28,8 @@ var AIPrism = function AIPrism(_ref) {
22
28
  return jsx(AIGlowingBorder, {
23
29
  additionalCss: {
24
30
  animatedSvgContainer: css({
25
- opacity: isVisible ? 1 : 0
31
+ opacity: isVisible ? 1 : 0,
32
+ transition: 'opacity 0.5s ease'
26
33
  })
27
34
  },
28
35
  palette: (_AI_BORDER_PALETTE$co = AI_BORDER_PALETTE[colorMode]) !== null && _AI_BORDER_PALETTE$co !== void 0 ? _AI_BORDER_PALETTE$co : AI_BORDER_PALETTE.light,
@@ -30,7 +37,7 @@ var AIPrism = function AIPrism(_ref) {
30
37
  isMoving: isMoving,
31
38
  testId: testId
32
39
  }, jsx("div", {
33
- css: contentStyles
40
+ css: [popupContainerStyles, contentStyles, isVisible ? contentStylesPrismVisible : undefined]
34
41
  }, children));
35
42
  };
36
43
  export default AIPrism;
@@ -28,7 +28,9 @@ export type ButtonClickedAiSummaryAttributesType = {};
28
28
  export type SummaryViewedAttributesType = {
29
29
  fromCache: boolean | null;
30
30
  };
31
- export type ErrorViewedAiSummaryAttributesType = {};
31
+ export type ErrorViewedAiSummaryAttributesType = {
32
+ reason?: string;
33
+ };
32
34
  export type SummarySuccessAttributesType = {};
33
35
  export type SummaryFailedAttributesType = {
34
36
  reason: string | null;
@@ -2,6 +2,7 @@ export declare const CONTENT_URL_SECURITY_AND_PERMISSIONS = "https://support.atl
2
2
  export declare const CONTENT_URL_3P_ACCOUNT_AUTH = "https://support.atlassian.com/confluence-cloud/docs/what-data-is-sent-and-received-when-pasting-a-smart-link/";
3
3
  export declare const CONTENT_URL_AI = "https://www.atlassian.com/trust/atlassian-intelligence";
4
4
  export declare const CONTENT_URL_AI_TROUBLESHOOTING = "https://support.atlassian.com/organization-administration/docs/troubleshooting-for-atlassian-intelligence/";
5
+ export declare const CONTENT_URL_ACCEPTABLE_USE_POLICY = "https://www.atlassian.com/legal/acceptable-use-policy";
5
6
  /**
6
7
  * The alignment of Flexible UI component.
7
8
  */
@@ -1,6 +1,6 @@
1
1
  import { MessageDescriptor } from 'react-intl-next';
2
2
  export type RequestAccessMessageKey = 'click_to_join' | 'click_to_join_description' | 'forbidden_description' | 'request_access' | 'request_access_description' | 'request_access_pending' | 'request_access_pending_title' | 'request_access_pending_description' | 'request_denied_description' | 'default_no_access_title' | 'direct_access_title' | 'direct_access_description' | 'direct_access' | 'access_exists_description' | 'not_found_description' | 'not_found_title';
3
- export type MessageKey = 'assigned_to' | 'ai_summarize' | 'ai_summarized' | 'ai_summarized_abbreviation' | 'ai_summarized_info' | 'ai_summarizing' | 'ai_summary_error_generic' | 'beta' | 'cannot_find_link' | 'connect_link_account_card' | 'connect_link_account_card_name' | 'connect_link_account_card_description' | 'connect_unauthorised_account_action' | 'connect_unauthorised_account_description' | 'connect_unauthorised_account_description_no_provider' | 'continue' | 'copy_url_to_clipboard' | 'could_not_load_link' | 'download' | 'follow' | 'go_back' | 'invalid_permissions' | 'invalid_permissions_description' | 'join_to_view' | 'connect_link_account' | 'created_by' | 'created_on_relative' | 'created_on_absolute' | 'check_this_link' | 'delete' | 'edit' | 'learn_more_about_smart_links' | 'learn_more_about_connecting_account' | 'loading' | 'link_safety_warning_message' | 'modified_by' | 'modified_on_relative' | 'modified_on_absolute' | 'more_actions' | 'not_found_title' | 'not_found_description' | 'open_issue_in_jira' | 'open_link_in_a_new_tab' | 'owned_by' | 'preview_improved' | 'preview_close' | 'preview_max_size' | 'preview_min_size' | 'priority_blocker' | 'priority_critical' | 'priority_high' | 'priority_highest' | 'priority_low' | 'priority_lowest' | 'priority_major' | 'priority_medium' | 'priority_minor' | 'priority_trivial' | 'priority_undefined' | 'forbidden_access' | 'pending_request' | 'read_time' | 'restricted_link' | 'request_access_to_view' | 'request_denied' | 'sent_on_relative' | 'sent_on_absolute' | 'status_change_load_error' | 'status_change_permission_error' | 'status_change_update_error' | 'try_again' | 'try_another_account' | 'unauthorised_account_description' | 'unauthorised_account_description_no_provider' | 'unauthorised_account_name' | 'unauthorised_account_name_no_provider' | 'unassigned' | 'unfollow' | 'view' | 'viewIn' | 'viewOriginal' | 'actions' | 'add_account' | 'cancel' | 'close' | 'connect_to' | 'connect_account_description' | 'retry' | 'save' | 'unlink_account' | RequestAccessMessageKey | 'related_work_items_not_found' | 'last_mentioned_in' | 'related' | 'generic_error_message';
3
+ export type MessageKey = 'assigned_to' | 'ai_summarize' | 'ai_summarized' | 'ai_summarized_abbreviation' | 'ai_summarized_info' | 'ai_summarizing' | 'ai_summary_error_generic' | 'ai_summary_error_acceptable_use_violation' | 'beta' | 'cannot_find_link' | 'connect_link_account_card' | 'connect_link_account_card_name' | 'connect_link_account_card_description' | 'connect_unauthorised_account_action' | 'connect_unauthorised_account_description' | 'connect_unauthorised_account_description_no_provider' | 'continue' | 'copy_url_to_clipboard' | 'could_not_load_link' | 'download' | 'follow' | 'go_back' | 'invalid_permissions' | 'invalid_permissions_description' | 'join_to_view' | 'connect_link_account' | 'created_by' | 'created_on_relative' | 'created_on_absolute' | 'check_this_link' | 'delete' | 'edit' | 'learn_more_about_smart_links' | 'learn_more_about_connecting_account' | 'loading' | 'link_safety_warning_message' | 'modified_by' | 'modified_on_relative' | 'modified_on_absolute' | 'more_actions' | 'not_found_title' | 'not_found_description' | 'open_issue_in_jira' | 'open_link_in_a_new_tab' | 'owned_by' | 'preview_improved' | 'preview_close' | 'preview_max_size' | 'preview_min_size' | 'priority_blocker' | 'priority_critical' | 'priority_high' | 'priority_highest' | 'priority_low' | 'priority_lowest' | 'priority_major' | 'priority_medium' | 'priority_minor' | 'priority_trivial' | 'priority_undefined' | 'forbidden_access' | 'pending_request' | 'read_time' | 'restricted_link' | 'request_access_to_view' | 'request_denied' | 'sent_on_relative' | 'sent_on_absolute' | 'status_change_load_error' | 'status_change_permission_error' | 'status_change_update_error' | 'try_again' | 'try_another_account' | 'unauthorised_account_description' | 'unauthorised_account_description_no_provider' | 'unauthorised_account_name' | 'unauthorised_account_name_no_provider' | 'unassigned' | 'unfollow' | 'view' | 'viewIn' | 'viewOriginal' | 'actions' | 'add_account' | 'cancel' | 'close' | 'connect_to' | 'connect_account_description' | 'retry' | 'save' | 'unlink_account' | RequestAccessMessageKey | 'related_work_items_not_found' | 'last_mentioned_in' | 'related' | 'generic_error_message';
4
4
  type Messages = {
5
5
  [K in MessageKey]: MessageDescriptor;
6
6
  };
@@ -1,4 +1,4 @@
1
- import type { AISummaryServiceProps, AISummaryServiceInt, AISummaryState, StateSetter, SummaryStyle } from './types';
1
+ import { type AISummaryServiceProps, type AISummaryServiceInt, type AISummaryState, type StateSetter, type SummaryStyle } from './types';
2
2
  export declare class AISummaryService implements AISummaryServiceInt {
3
3
  state: AISummaryState;
4
4
  private config;
@@ -10,5 +10,6 @@ export declare class AISummaryService implements AISummaryServiceInt {
10
10
  constructor(props: AISummaryServiceProps);
11
11
  private fetchStream;
12
12
  summariseUrl(summaryStyle?: SummaryStyle): Promise<void>;
13
+ private isExpectedError;
13
14
  subscribe(stateSetter: StateSetter): () => void;
14
15
  }
@@ -29,9 +29,12 @@ export type AgentInput = {
29
29
  summary_style?: SummaryStyle;
30
30
  };
31
31
  export type SummaryStyle = 'short' | 'medium' | 'long';
32
+ export declare const errorMessages: readonly ["NETWORK_ERROR", "NO_ANSWER", "RATE_LIMIT", "NO_AGENT", "PLUGIN_ERRORED", "OPENAI_RATE_LIMIT_USER_ABUSE", "ACCEPTABLE_USE_VIOLATIONS", "AI_DISABLED", "UNEXPECTED"];
33
+ export type ErrorMessage = (typeof errorMessages)[number];
32
34
  export type AISummaryState = {
33
35
  content: string;
34
36
  status: AISummaryStatus;
37
+ error?: ErrorMessage;
35
38
  };
36
39
  export type StateSetter = (state: AISummaryState) => any;
37
40
  export type StreamMessage = StreamTrace | StreamAnswerPart | StreamResponse | StreamError;
@@ -50,7 +53,7 @@ export type StreamError = {
50
53
  message: {
51
54
  content: string;
52
55
  status_code?: number;
53
- message_template?: string;
56
+ message_template?: ErrorMessage;
54
57
  };
55
58
  millisOffset: number;
56
59
  metadata: null | {
@@ -1,8 +1,5 @@
1
- import type { AISummaryServiceProps, AISummaryStatus } from './ai-summary-service/types';
1
+ import type { AISummaryServiceProps, AISummaryState } from './ai-summary-service/types';
2
2
  export declare const useAISummary: (props: AISummaryServiceProps) => {
3
3
  summariseUrl: () => Promise<void> | undefined;
4
- state: {
5
- status: AISummaryStatus;
6
- content: string;
7
- };
4
+ state: AISummaryState;
8
5
  };
@@ -1,2 +1,4 @@
1
- declare const AIEventErrorViewed: () => null;
1
+ declare const AIEventErrorViewed: ({ reason }: {
2
+ reason?: string | undefined;
3
+ }) => null;
2
4
  export default AIEventErrorViewed;
@@ -1,12 +1,13 @@
1
1
  /// <reference types="react" />
2
2
  import type { XCSS } from '@atlaskit/primitives';
3
3
  import type { TooltipProps } from '@atlaskit/tooltip';
4
- import type { AISummaryStatus } from '../../../../../../state/hooks/use-ai-summary/ai-summary-service/types';
4
+ import type { AISummaryStatus, ErrorMessage } from '../../../../../../state/hooks/use-ai-summary/ai-summary-service/types';
5
5
  export type AIStateAppearance = 'default' | 'icon-only';
6
6
  export type AIStateIndicatorProps = {
7
7
  appearance?: AIStateAppearance;
8
8
  state: AISummaryStatus;
9
9
  testId?: string;
10
+ error?: ErrorMessage;
10
11
  };
11
12
  export type AIIndicatorContainerProps = {
12
13
  icon?: React.ReactNode;
@@ -2,7 +2,7 @@ import { FlexibleUiOptions } from '../FlexibleCard/types';
2
2
  export declare const HOVER_CARD_Z_INDEX: 510;
3
3
  export declare const flexibleUiOptions: FlexibleUiOptions;
4
4
  export declare const CARD_WIDTH_REM = 24;
5
- export declare const NEW_CARD_WIDTH_REM = 28;
5
+ export declare const NEW_CARD_WIDTH_REM = 25;
6
6
  export declare const CARD_GAP_PX = 10;
7
7
  export declare const separatorCss: import("@emotion/react").SerializedStyles;
8
8
  export declare const HoverCardContainer: import("@emotion/react").SerializedStyles;
@@ -28,7 +28,9 @@ export type ButtonClickedAiSummaryAttributesType = {};
28
28
  export type SummaryViewedAttributesType = {
29
29
  fromCache: boolean | null;
30
30
  };
31
- export type ErrorViewedAiSummaryAttributesType = {};
31
+ export type ErrorViewedAiSummaryAttributesType = {
32
+ reason?: string;
33
+ };
32
34
  export type SummarySuccessAttributesType = {};
33
35
  export type SummaryFailedAttributesType = {
34
36
  reason: string | null;
@@ -2,6 +2,7 @@ export declare const CONTENT_URL_SECURITY_AND_PERMISSIONS = "https://support.atl
2
2
  export declare const CONTENT_URL_3P_ACCOUNT_AUTH = "https://support.atlassian.com/confluence-cloud/docs/what-data-is-sent-and-received-when-pasting-a-smart-link/";
3
3
  export declare const CONTENT_URL_AI = "https://www.atlassian.com/trust/atlassian-intelligence";
4
4
  export declare const CONTENT_URL_AI_TROUBLESHOOTING = "https://support.atlassian.com/organization-administration/docs/troubleshooting-for-atlassian-intelligence/";
5
+ export declare const CONTENT_URL_ACCEPTABLE_USE_POLICY = "https://www.atlassian.com/legal/acceptable-use-policy";
5
6
  /**
6
7
  * The alignment of Flexible UI component.
7
8
  */
@@ -1,6 +1,6 @@
1
1
  import { MessageDescriptor } from 'react-intl-next';
2
2
  export type RequestAccessMessageKey = 'click_to_join' | 'click_to_join_description' | 'forbidden_description' | 'request_access' | 'request_access_description' | 'request_access_pending' | 'request_access_pending_title' | 'request_access_pending_description' | 'request_denied_description' | 'default_no_access_title' | 'direct_access_title' | 'direct_access_description' | 'direct_access' | 'access_exists_description' | 'not_found_description' | 'not_found_title';
3
- export type MessageKey = 'assigned_to' | 'ai_summarize' | 'ai_summarized' | 'ai_summarized_abbreviation' | 'ai_summarized_info' | 'ai_summarizing' | 'ai_summary_error_generic' | 'beta' | 'cannot_find_link' | 'connect_link_account_card' | 'connect_link_account_card_name' | 'connect_link_account_card_description' | 'connect_unauthorised_account_action' | 'connect_unauthorised_account_description' | 'connect_unauthorised_account_description_no_provider' | 'continue' | 'copy_url_to_clipboard' | 'could_not_load_link' | 'download' | 'follow' | 'go_back' | 'invalid_permissions' | 'invalid_permissions_description' | 'join_to_view' | 'connect_link_account' | 'created_by' | 'created_on_relative' | 'created_on_absolute' | 'check_this_link' | 'delete' | 'edit' | 'learn_more_about_smart_links' | 'learn_more_about_connecting_account' | 'loading' | 'link_safety_warning_message' | 'modified_by' | 'modified_on_relative' | 'modified_on_absolute' | 'more_actions' | 'not_found_title' | 'not_found_description' | 'open_issue_in_jira' | 'open_link_in_a_new_tab' | 'owned_by' | 'preview_improved' | 'preview_close' | 'preview_max_size' | 'preview_min_size' | 'priority_blocker' | 'priority_critical' | 'priority_high' | 'priority_highest' | 'priority_low' | 'priority_lowest' | 'priority_major' | 'priority_medium' | 'priority_minor' | 'priority_trivial' | 'priority_undefined' | 'forbidden_access' | 'pending_request' | 'read_time' | 'restricted_link' | 'request_access_to_view' | 'request_denied' | 'sent_on_relative' | 'sent_on_absolute' | 'status_change_load_error' | 'status_change_permission_error' | 'status_change_update_error' | 'try_again' | 'try_another_account' | 'unauthorised_account_description' | 'unauthorised_account_description_no_provider' | 'unauthorised_account_name' | 'unauthorised_account_name_no_provider' | 'unassigned' | 'unfollow' | 'view' | 'viewIn' | 'viewOriginal' | 'actions' | 'add_account' | 'cancel' | 'close' | 'connect_to' | 'connect_account_description' | 'retry' | 'save' | 'unlink_account' | RequestAccessMessageKey | 'related_work_items_not_found' | 'last_mentioned_in' | 'related' | 'generic_error_message';
3
+ export type MessageKey = 'assigned_to' | 'ai_summarize' | 'ai_summarized' | 'ai_summarized_abbreviation' | 'ai_summarized_info' | 'ai_summarizing' | 'ai_summary_error_generic' | 'ai_summary_error_acceptable_use_violation' | 'beta' | 'cannot_find_link' | 'connect_link_account_card' | 'connect_link_account_card_name' | 'connect_link_account_card_description' | 'connect_unauthorised_account_action' | 'connect_unauthorised_account_description' | 'connect_unauthorised_account_description_no_provider' | 'continue' | 'copy_url_to_clipboard' | 'could_not_load_link' | 'download' | 'follow' | 'go_back' | 'invalid_permissions' | 'invalid_permissions_description' | 'join_to_view' | 'connect_link_account' | 'created_by' | 'created_on_relative' | 'created_on_absolute' | 'check_this_link' | 'delete' | 'edit' | 'learn_more_about_smart_links' | 'learn_more_about_connecting_account' | 'loading' | 'link_safety_warning_message' | 'modified_by' | 'modified_on_relative' | 'modified_on_absolute' | 'more_actions' | 'not_found_title' | 'not_found_description' | 'open_issue_in_jira' | 'open_link_in_a_new_tab' | 'owned_by' | 'preview_improved' | 'preview_close' | 'preview_max_size' | 'preview_min_size' | 'priority_blocker' | 'priority_critical' | 'priority_high' | 'priority_highest' | 'priority_low' | 'priority_lowest' | 'priority_major' | 'priority_medium' | 'priority_minor' | 'priority_trivial' | 'priority_undefined' | 'forbidden_access' | 'pending_request' | 'read_time' | 'restricted_link' | 'request_access_to_view' | 'request_denied' | 'sent_on_relative' | 'sent_on_absolute' | 'status_change_load_error' | 'status_change_permission_error' | 'status_change_update_error' | 'try_again' | 'try_another_account' | 'unauthorised_account_description' | 'unauthorised_account_description_no_provider' | 'unauthorised_account_name' | 'unauthorised_account_name_no_provider' | 'unassigned' | 'unfollow' | 'view' | 'viewIn' | 'viewOriginal' | 'actions' | 'add_account' | 'cancel' | 'close' | 'connect_to' | 'connect_account_description' | 'retry' | 'save' | 'unlink_account' | RequestAccessMessageKey | 'related_work_items_not_found' | 'last_mentioned_in' | 'related' | 'generic_error_message';
4
4
  type Messages = {
5
5
  [K in MessageKey]: MessageDescriptor;
6
6
  };
@@ -1,4 +1,4 @@
1
- import type { AISummaryServiceProps, AISummaryServiceInt, AISummaryState, StateSetter, SummaryStyle } from './types';
1
+ import { type AISummaryServiceProps, type AISummaryServiceInt, type AISummaryState, type StateSetter, type SummaryStyle } from './types';
2
2
  export declare class AISummaryService implements AISummaryServiceInt {
3
3
  state: AISummaryState;
4
4
  private config;
@@ -10,5 +10,6 @@ export declare class AISummaryService implements AISummaryServiceInt {
10
10
  constructor(props: AISummaryServiceProps);
11
11
  private fetchStream;
12
12
  summariseUrl(summaryStyle?: SummaryStyle): Promise<void>;
13
+ private isExpectedError;
13
14
  subscribe(stateSetter: StateSetter): () => void;
14
15
  }
@@ -29,9 +29,22 @@ export type AgentInput = {
29
29
  summary_style?: SummaryStyle;
30
30
  };
31
31
  export type SummaryStyle = 'short' | 'medium' | 'long';
32
+ export declare const errorMessages: readonly [
33
+ "NETWORK_ERROR",
34
+ "NO_ANSWER",
35
+ "RATE_LIMIT",
36
+ "NO_AGENT",
37
+ "PLUGIN_ERRORED",
38
+ "OPENAI_RATE_LIMIT_USER_ABUSE",
39
+ "ACCEPTABLE_USE_VIOLATIONS",
40
+ "AI_DISABLED",
41
+ "UNEXPECTED"
42
+ ];
43
+ export type ErrorMessage = (typeof errorMessages)[number];
32
44
  export type AISummaryState = {
33
45
  content: string;
34
46
  status: AISummaryStatus;
47
+ error?: ErrorMessage;
35
48
  };
36
49
  export type StateSetter = (state: AISummaryState) => any;
37
50
  export type StreamMessage = StreamTrace | StreamAnswerPart | StreamResponse | StreamError;
@@ -50,7 +63,7 @@ export type StreamError = {
50
63
  message: {
51
64
  content: string;
52
65
  status_code?: number;
53
- message_template?: string;
66
+ message_template?: ErrorMessage;
54
67
  };
55
68
  millisOffset: number;
56
69
  metadata: null | {
@@ -1,8 +1,5 @@
1
- import type { AISummaryServiceProps, AISummaryStatus } from './ai-summary-service/types';
1
+ import type { AISummaryServiceProps, AISummaryState } from './ai-summary-service/types';
2
2
  export declare const useAISummary: (props: AISummaryServiceProps) => {
3
3
  summariseUrl: () => Promise<void> | undefined;
4
- state: {
5
- status: AISummaryStatus;
6
- content: string;
7
- };
4
+ state: AISummaryState;
8
5
  };
@@ -1,2 +1,4 @@
1
- declare const AIEventErrorViewed: () => null;
1
+ declare const AIEventErrorViewed: ({ reason }: {
2
+ reason?: string | undefined;
3
+ }) => null;
2
4
  export default AIEventErrorViewed;
@@ -1,12 +1,13 @@
1
1
  /// <reference types="react" />
2
2
  import type { XCSS } from '@atlaskit/primitives';
3
3
  import type { TooltipProps } from '@atlaskit/tooltip';
4
- import type { AISummaryStatus } from '../../../../../../state/hooks/use-ai-summary/ai-summary-service/types';
4
+ import type { AISummaryStatus, ErrorMessage } from '../../../../../../state/hooks/use-ai-summary/ai-summary-service/types';
5
5
  export type AIStateAppearance = 'default' | 'icon-only';
6
6
  export type AIStateIndicatorProps = {
7
7
  appearance?: AIStateAppearance;
8
8
  state: AISummaryStatus;
9
9
  testId?: string;
10
+ error?: ErrorMessage;
10
11
  };
11
12
  export type AIIndicatorContainerProps = {
12
13
  icon?: React.ReactNode;
@@ -2,7 +2,7 @@ import { FlexibleUiOptions } from '../FlexibleCard/types';
2
2
  export declare const HOVER_CARD_Z_INDEX: 510;
3
3
  export declare const flexibleUiOptions: FlexibleUiOptions;
4
4
  export declare const CARD_WIDTH_REM = 24;
5
- export declare const NEW_CARD_WIDTH_REM = 28;
5
+ export declare const NEW_CARD_WIDTH_REM = 25;
6
6
  export declare const CARD_GAP_PX = 10;
7
7
  export declare const separatorCss: import("@emotion/react").SerializedStyles;
8
8
  export declare const HoverCardContainer: import("@emotion/react").SerializedStyles;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/smart-card",
3
- "version": "26.50.9",
3
+ "version": "26.50.11",
4
4
  "description": "Smart card component",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"
@@ -33,7 +33,7 @@
33
33
  "@atlaskit/avatar": "^21.5.0",
34
34
  "@atlaskit/avatar-group": "^9.5.0",
35
35
  "@atlaskit/badge": "^15.2.0",
36
- "@atlaskit/button": "^17.7.0",
36
+ "@atlaskit/button": "^17.8.0",
37
37
  "@atlaskit/dropdown-menu": "^12.8.0",
38
38
  "@atlaskit/icon": "^22.1.0",
39
39
  "@atlaskit/icon-file-type": "^6.4.0",
@@ -50,10 +50,10 @@
50
50
  "@atlaskit/modal-dialog": "^12.10.0",
51
51
  "@atlaskit/outbound-auth-flow-client": "^3.4.0",
52
52
  "@atlaskit/platform-feature-flags": "^0.2.1",
53
- "@atlaskit/popup": "^1.13.0",
53
+ "@atlaskit/popup": "^1.14.0",
54
54
  "@atlaskit/primitives": "^5.1.0",
55
55
  "@atlaskit/spinner": "^16.0.0",
56
- "@atlaskit/theme": "^12.6.0",
56
+ "@atlaskit/theme": "^12.7.0",
57
57
  "@atlaskit/tokens": "^1.42.0",
58
58
  "@atlaskit/tooltip": "^18.1.0",
59
59
  "@atlaskit/ufo": "^0.2.0",