@atlaskit/smart-card 26.46.1 → 26.46.3

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 (68) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/cjs/constants.js +2 -2
  3. package/dist/cjs/messages.js +15 -0
  4. package/dist/cjs/utils/analytics/analytics.js +1 -1
  5. package/dist/cjs/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/ai-indicator-container.js +28 -0
  6. package/dist/cjs/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/ai-indicator-tooltip.js +35 -0
  7. package/dist/cjs/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/ai-learn-more-anchor.js +22 -0
  8. package/dist/cjs/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/ai-state-done.js +116 -0
  9. package/dist/cjs/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/ai-state-loading.js +35 -0
  10. package/dist/cjs/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/index.js +35 -0
  11. package/dist/cjs/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/types.js +5 -0
  12. package/dist/cjs/view/FlexibleCard/components/blocks/ai-summary-block/resolved/index.js +38 -25
  13. package/dist/cjs/view/HoverCard/components/views/resolved/index.js +11 -2
  14. package/dist/cjs/view/LinkUrl/index.js +1 -1
  15. package/dist/cjs/view/common/ai-icon-loading/index.js +60 -0
  16. package/dist/es2019/constants.js +1 -1
  17. package/dist/es2019/messages.js +15 -0
  18. package/dist/es2019/utils/analytics/analytics.js +1 -1
  19. package/dist/es2019/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/ai-indicator-container.js +22 -0
  20. package/dist/es2019/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/ai-indicator-tooltip.js +29 -0
  21. package/dist/es2019/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/ai-learn-more-anchor.js +12 -0
  22. package/dist/es2019/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/ai-state-done.js +105 -0
  23. package/dist/es2019/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/ai-state-loading.js +29 -0
  24. package/dist/es2019/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/index.js +26 -0
  25. package/dist/es2019/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/types.js +1 -0
  26. package/dist/es2019/view/FlexibleCard/components/blocks/ai-summary-block/resolved/index.js +37 -28
  27. package/dist/es2019/view/HoverCard/components/views/resolved/index.js +14 -4
  28. package/dist/es2019/view/LinkUrl/index.js +1 -1
  29. package/dist/es2019/view/common/ai-icon-loading/index.js +64 -0
  30. package/dist/esm/constants.js +1 -1
  31. package/dist/esm/messages.js +15 -0
  32. package/dist/esm/utils/analytics/analytics.js +1 -1
  33. package/dist/esm/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/ai-indicator-container.js +21 -0
  34. package/dist/esm/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/ai-indicator-tooltip.js +25 -0
  35. package/dist/esm/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/ai-learn-more-anchor.js +15 -0
  36. package/dist/esm/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/ai-state-done.js +108 -0
  37. package/dist/esm/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/ai-state-loading.js +28 -0
  38. package/dist/esm/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/index.js +27 -0
  39. package/dist/esm/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/types.js +1 -0
  40. package/dist/esm/view/FlexibleCard/components/blocks/ai-summary-block/resolved/index.js +41 -28
  41. package/dist/esm/view/HoverCard/components/views/resolved/index.js +13 -4
  42. package/dist/esm/view/LinkUrl/index.js +1 -1
  43. package/dist/esm/view/common/ai-icon-loading/index.js +54 -0
  44. package/dist/types/__fixtures__/atlas-project-with-ai-summary.d.ts +2 -0
  45. package/dist/types/constants.d.ts +1 -0
  46. package/dist/types/messages.d.ts +1 -1
  47. package/dist/types/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/ai-indicator-container.d.ts +4 -0
  48. package/dist/types/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/ai-indicator-tooltip.d.ts +4 -0
  49. package/dist/types/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/ai-learn-more-anchor.d.ts +3 -0
  50. package/dist/types/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/ai-state-done.d.ts +5 -0
  51. package/dist/types/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/ai-state-loading.d.ts +4 -0
  52. package/dist/types/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/index.d.ts +4 -0
  53. package/dist/types/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/types.d.ts +18 -0
  54. package/dist/types/view/FlexibleCard/components/blocks/ai-summary-block/types.d.ts +2 -1
  55. package/dist/types/view/common/ai-icon-loading/index.d.ts +7 -0
  56. package/dist/types-ts4.5/__fixtures__/atlas-project-with-ai-summary.d.ts +2 -0
  57. package/dist/types-ts4.5/constants.d.ts +1 -0
  58. package/dist/types-ts4.5/messages.d.ts +1 -1
  59. package/dist/types-ts4.5/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/ai-indicator-container.d.ts +4 -0
  60. package/dist/types-ts4.5/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/ai-indicator-tooltip.d.ts +4 -0
  61. package/dist/types-ts4.5/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/ai-learn-more-anchor.d.ts +3 -0
  62. package/dist/types-ts4.5/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/ai-state-done.d.ts +5 -0
  63. package/dist/types-ts4.5/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/ai-state-loading.d.ts +4 -0
  64. package/dist/types-ts4.5/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/index.d.ts +4 -0
  65. package/dist/types-ts4.5/view/FlexibleCard/components/blocks/ai-summary-block/ai-state-indicator/types.d.ts +18 -0
  66. package/dist/types-ts4.5/view/FlexibleCard/components/blocks/ai-summary-block/types.d.ts +2 -1
  67. package/dist/types-ts4.5/view/common/ai-icon-loading/index.d.ts +7 -0
  68. package/package.json +9 -6
@@ -0,0 +1,28 @@
1
+ import React from 'react';
2
+ import { FormattedMessage } from 'react-intl-next';
3
+ import { Box } from '@atlaskit/primitives';
4
+ import { messages } from '../../../../../../messages';
5
+ import AIIconLoading from '../../../../../common/ai-icon-loading';
6
+ import AIIndicatorContainer from './ai-indicator-container';
7
+ var AIStateLoading = function AIStateLoading(_ref) {
8
+ var appearance = _ref.appearance,
9
+ testId = _ref.testId;
10
+ var icon = /*#__PURE__*/React.createElement(AIIconLoading, {
11
+ label: "AI",
12
+ size: "small",
13
+ testId: "".concat(testId, "-loading-icon")
14
+ });
15
+ switch (appearance) {
16
+ case 'icon-only':
17
+ return icon;
18
+ default:
19
+ return /*#__PURE__*/React.createElement(AIIndicatorContainer, {
20
+ icon: icon,
21
+ content: /*#__PURE__*/React.createElement(Box, {
22
+ testId: "".concat(testId, "-loading-message")
23
+ }, /*#__PURE__*/React.createElement(FormattedMessage, messages.ai_summarizing)),
24
+ testId: "".concat(testId, "-loading")
25
+ });
26
+ }
27
+ };
28
+ export default AIStateLoading;
@@ -0,0 +1,27 @@
1
+ /** @jsx jsx */
2
+ import { jsx } from '@emotion/react';
3
+ import React from 'react';
4
+ import AIStateLoading from './ai-state-loading';
5
+ import AIStateDone from './ai-state-done';
6
+ var AIStateIndicator = function AIStateIndicator(_ref) {
7
+ var state = _ref.state,
8
+ _ref$appearance = _ref.appearance,
9
+ appearance = _ref$appearance === void 0 ? 'default' : _ref$appearance,
10
+ _ref$testId = _ref.testId,
11
+ testId = _ref$testId === void 0 ? 'ai-state-indicator' : _ref$testId;
12
+ switch (state) {
13
+ case 'loading':
14
+ return jsx(AIStateLoading, {
15
+ appearance: appearance,
16
+ testId: testId
17
+ });
18
+ case 'done':
19
+ return jsx(AIStateDone, {
20
+ appearance: appearance,
21
+ testId: testId
22
+ });
23
+ default:
24
+ return null;
25
+ }
26
+ };
27
+ export default AIStateIndicator;
@@ -1,14 +1,17 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
2
  import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
3
- import React, { useCallback, useMemo } from 'react';
3
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
4
+ import React, { useCallback, useMemo, useState } from 'react';
4
5
  import { FormattedMessage } from 'react-intl-next';
5
- import { ActionName, SmartLinkAlignment, SmartLinkSize, SmartLinkWidth } from '../../../../../../constants';
6
- import { useFlexibleUiContext } from '../../../../../../state/flexible-ui-context';
6
+ import { Box, Inline } from '@atlaskit/primitives';
7
+ import { ActionName, SmartLinkSize, SmartLinkWidth } from '../../../../../../constants';
7
8
  import ActionGroup from '../../action-group';
8
9
  import Block from '../../block';
9
10
  import ElementGroup from '../../element-group';
10
- import { filterActionItems, getActionGroupStyles, renderElementItems } from '../../utils';
11
+ import AIStateIndicator from '../ai-state-indicator';
12
+ import { renderElementItems } from '../../utils';
11
13
  import { messages } from '../../../../../../messages';
14
+ import AiIcon from '../../../../../common/ai-icon';
12
15
  var AISummaryBlockResolvedView = function AISummaryBlockResolvedView(props) {
13
16
  var _props$actions = props.actions,
14
17
  actions = _props$actions === void 0 ? [] : _props$actions,
@@ -18,26 +21,32 @@ var AISummaryBlockResolvedView = function AISummaryBlockResolvedView(props) {
18
21
  onAIActionChange = props.onAIActionChange,
19
22
  _props$size = props.size,
20
23
  size = _props$size === void 0 ? SmartLinkSize.Medium : _props$size;
21
- var context = useFlexibleUiContext();
24
+ var _useState = useState('ready'),
25
+ _useState2 = _slicedToArray(_useState, 2),
26
+ aiState = _useState2[0],
27
+ setAIState = _useState2[1];
22
28
  var metadataElements = renderElementItems(metadata);
23
29
  var onAIActionClick = useCallback(function () {
30
+ setAIState('loading');
24
31
  if (onAIActionChange) {
25
- onAIActionChange();
32
+ onAIActionChange('loading');
26
33
  }
27
34
  }, [onAIActionChange]);
28
35
  var combinedActions = useMemo(function () {
29
- var aiAction = {
30
- content: /*#__PURE__*/React.createElement(FormattedMessage, messages.ai_summarize),
31
- name: ActionName.CustomAction,
32
- onClick: onAIActionClick,
33
- testId: "".concat(testId, "-ai-summary-action")
34
- };
35
- return [aiAction].concat(_toConsumableArray(actions));
36
- }, [actions, onAIActionClick, testId]);
37
- var hasActions = useMemo(function () {
38
- var _filterActionItems;
39
- return ((_filterActionItems = filterActionItems(combinedActions, context)) === null || _filterActionItems === void 0 ? void 0 : _filterActionItems.length) > 0;
40
- }, [combinedActions, context]);
36
+ if (aiState === 'ready') {
37
+ var aiAction = {
38
+ content: /*#__PURE__*/React.createElement(FormattedMessage, messages.ai_summarize),
39
+ name: ActionName.CustomAction,
40
+ onClick: onAIActionClick,
41
+ testId: "".concat(testId, "-ai-summary-action"),
42
+ icon: /*#__PURE__*/React.createElement(AiIcon, {
43
+ label: "AiIcon"
44
+ })
45
+ };
46
+ return [aiAction].concat(_toConsumableArray(actions));
47
+ }
48
+ return actions;
49
+ }, [actions, aiState, onAIActionClick, testId]);
41
50
  var onDropdownOpenChange = useCallback(function (isOpen) {
42
51
  if (onActionMenuOpenChange) {
43
52
  onActionMenuOpenChange({
@@ -47,17 +56,21 @@ var AISummaryBlockResolvedView = function AISummaryBlockResolvedView(props) {
47
56
  }, [onActionMenuOpenChange]);
48
57
  return /*#__PURE__*/React.createElement(Block, _extends({}, props, {
49
58
  testId: "".concat(testId, "-resolved-view")
50
- }), /*#__PURE__*/React.createElement(ElementGroup, {
51
- width: SmartLinkWidth.Flexible
52
- }, metadataElements), hasActions && /*#__PURE__*/React.createElement(ElementGroup, {
53
- testId: "smart-element-group-actions",
54
- align: SmartLinkAlignment.Right,
55
- overrideCss: getActionGroupStyles(size),
56
- width: SmartLinkWidth.Flexible
57
- }, /*#__PURE__*/React.createElement(ActionGroup, {
59
+ }), /*#__PURE__*/React.createElement(Inline, {
60
+ alignBlock: "center",
61
+ alignInline: "end",
62
+ grow: "fill",
63
+ spread: "space-between"
64
+ }, /*#__PURE__*/React.createElement(Box, null, aiState === 'loading' || aiState === 'done' ? /*#__PURE__*/React.createElement(AIStateIndicator, {
65
+ state: aiState,
66
+ testId: testId
67
+ }) : /*#__PURE__*/React.createElement(ElementGroup, {
68
+ width: SmartLinkWidth.FitToContent
69
+ }, metadataElements)), /*#__PURE__*/React.createElement(Box, null, /*#__PURE__*/React.createElement(ActionGroup, {
58
70
  onDropdownOpenChange: onDropdownOpenChange,
59
71
  items: combinedActions,
60
- appearance: "default"
61
- })));
72
+ appearance: "default",
73
+ size: size
74
+ }))));
62
75
  };
63
76
  export default AISummaryBlockResolvedView;
@@ -1,8 +1,8 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
2
  import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
3
3
  import React, { useCallback, useEffect, useMemo, useRef } from 'react';
4
- import { ActionName, CardDisplay, SmartLinkPosition, SmartLinkSize } from '../../../../../constants';
5
- import { FooterBlock, MetadataBlock, RelatedUrlsBlock, SnippetBlock, TitleBlock } from '../../../../FlexibleCard/components/blocks';
4
+ import { ActionName, CardDisplay, ElementName, SmartLinkPosition, SmartLinkSize } from '../../../../../constants';
5
+ import { FooterBlock, MetadataBlock, RelatedUrlsBlock, SnippetBlock, TitleBlock, AISummaryBlock } from '../../../../FlexibleCard/components/blocks';
6
6
  import { footerBlockCss, hiddenSnippetStyles, metadataBlockCss } from './styled';
7
7
  import FlexibleCard from '../../../../FlexibleCard';
8
8
  import { getSimulatedBetterMetadata } from '../../../utils';
@@ -12,6 +12,7 @@ import { messages } from '../../../../../messages';
12
12
  import { FormattedMessage } from 'react-intl-next';
13
13
  import { getBooleanFF } from '@atlaskit/platform-feature-flags';
14
14
  import { getCanBeDatasource } from '../../../../../state/helpers';
15
+ import { useSmartLinkContext } from '../../../../../state';
15
16
  export var toFooterActions = function toFooterActions(cardActions, onActionClick) {
16
17
  var followAction = {
17
18
  hideIcon: true,
@@ -47,7 +48,7 @@ export var toFooterActions = function toFooterActions(cardActions, onActionClick
47
48
  return [followAction].concat(_toConsumableArray(actions));
48
49
  };
49
50
  var HoverCardResolvedView = function HoverCardResolvedView(_ref) {
50
- var _cardState$details;
51
+ var _cardState$details, _cardState$details2;
51
52
  var flexibleCardProps = _ref.flexibleCardProps,
52
53
  titleBlockProps = _ref.titleBlockProps,
53
54
  analytics = _ref.analytics,
@@ -92,6 +93,9 @@ var HoverCardResolvedView = function HoverCardResolvedView(_ref) {
92
93
  data: data,
93
94
  fallbackElementHeight: snippetHeight.current
94
95
  });
96
+ var _useSmartLinkContext = useSmartLinkContext(),
97
+ isAdminHubAIEnabled = _useSmartLinkContext.isAdminHubAIEnabled;
98
+ var showAiView = getBooleanFF('platform.linking-platform.smart-card.hover-card-ai-summaries') && isAdminHubAIEnabled && ((_cardState$details2 = cardState.details) === null || _cardState$details2 === void 0 || (_cardState$details2 = _cardState$details2.meta) === null || _cardState$details2 === void 0 || (_cardState$details2 = _cardState$details2.supportedFeatures) === null || _cardState$details2 === void 0 ? void 0 : _cardState$details2.includes('AISummary'));
95
99
  return /*#__PURE__*/React.createElement(FlexibleCard, flexibleCardProps, imagePreview, /*#__PURE__*/React.createElement(TitleBlock, _extends({}, titleBlockProps, {
96
100
  metadataPosition: SmartLinkPosition.Top
97
101
  })), /*#__PURE__*/React.createElement(MetadataBlock, {
@@ -113,7 +117,12 @@ var HoverCardResolvedView = function HoverCardResolvedView(_ref) {
113
117
  }), getBooleanFF('platform.linking-platform.smart-card.enable-hover-card-related-urls') && /*#__PURE__*/React.createElement(RelatedUrlsBlock, {
114
118
  url: url,
115
119
  size: SmartLinkSize.Small
116
- }), /*#__PURE__*/React.createElement(FooterBlock, {
120
+ }), showAiView ? /*#__PURE__*/React.createElement(AISummaryBlock, {
121
+ metadata: [{
122
+ name: ElementName.Provider
123
+ }],
124
+ actions: footerActions
125
+ }) : /*#__PURE__*/React.createElement(FooterBlock, {
117
126
  actions: footerActions,
118
127
  size: SmartLinkSize.Large,
119
128
  overrideCss: footerBlockCss
@@ -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.46.1",
13
+ packageVersion: "26.46.3",
14
14
  componentName: 'linkUrl'
15
15
  };
16
16
  var Link = withLinkClickedEvent('a');
@@ -0,0 +1,54 @@
1
+ import _taggedTemplateLiteral from "@babel/runtime/helpers/taggedTemplateLiteral";
2
+ var _templateObject;
3
+ /** @jsx jsx */
4
+ import { css, jsx, keyframes } from '@emotion/react';
5
+ import SVG from '@atlaskit/icon/svg';
6
+ import { aiThemeTokens } from '../ai-prism/constants';
7
+
8
+ /**
9
+ * The bulk of this file is originally from
10
+ * https://bitbucket.org/atlassian/barrel/src/master/ui/platform/ui-kit/ai
11
+ * with modifications
12
+ */
13
+
14
+ var bounce = keyframes(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n from {\n transform: translateY(0);\n }\n\n // 200ms of 1200ms = 16.67%\n 16.67% {\n transform: translateY(-2px);\n }\n\n // 400ms of 1200ms = 33.33%\n 33.33% {\n transform: translateY(0px);\n }\n"])));
15
+ var BASE_DELAY = 400;
16
+ var QUEUE_DELAY = 200;
17
+ var animationStyles = css({
18
+ animation: "".concat(bounce, " 1.2s linear infinite normal")
19
+ });
20
+ var firstDelayStyles = css({
21
+ animationDelay: "".concat(BASE_DELAY + QUEUE_DELAY, "ms")
22
+ });
23
+ var secondDelayStyles = css({
24
+ animationDelay: "".concat(BASE_DELAY + QUEUE_DELAY * 2, "ms")
25
+ });
26
+ var thirdDelayStyles = css({
27
+ animationDelay: "".concat(BASE_DELAY + QUEUE_DELAY * 3, "ms")
28
+ });
29
+
30
+ /**
31
+ * this icon is theme agnostic, no need for tokens
32
+ */
33
+ var AIIconLoading = function AIIconLoading(props) {
34
+ return jsx(SVG, props, jsx("circle", {
35
+ css: [animationStyles, firstDelayStyles],
36
+ cx: "6",
37
+ cy: "12",
38
+ r: "1.5",
39
+ fill: aiThemeTokens.blue700
40
+ }), jsx("circle", {
41
+ css: [animationStyles, secondDelayStyles],
42
+ cx: "12",
43
+ cy: "12",
44
+ r: "1.5",
45
+ fill: aiThemeTokens.blue600
46
+ }), jsx("circle", {
47
+ css: [animationStyles, thirdDelayStyles],
48
+ cx: "17.5",
49
+ cy: "12",
50
+ r: "1.5",
51
+ fill: aiThemeTokens.blue500
52
+ }));
53
+ };
54
+ export default AIIconLoading;
@@ -0,0 +1,2 @@
1
+ declare const mockAtlasProjectWithAISummary: any;
2
+ export default mockAtlasProjectWithAISummary;
@@ -1,5 +1,6 @@
1
1
  export declare const CONTENT_URL_SECURITY_AND_PERMISSIONS = "https://support.atlassian.com/confluence-cloud/docs/insert-links-and-anchors/#Smart-links";
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
+ export declare const CONTENT_URL_AI = "https://www.atlassian.com/trust/atlassian-intelligence";
3
4
  /**
4
5
  * The alignment of Flexible UI component.
5
6
  */
@@ -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_description' | 'request_denied_description' | 'default_no_access_title_crossjoin' | 'direct_access_title_crossjoin' | 'direct_access_description_crossjoin' | 'direct_access_crossjoin' | 'request_access_description_crossjoin' | 'request_access_crossjoin' | 'request_access_pending_title_crossjoin' | 'request_access_pending_description_crossjoin' | 'request_access_pending_crossjoin' | 'request_denied_description_crossjoin' | 'access_exists_description_crossjoin' | 'not_found_description_crossjoin' | 'not_found_title_crossjoin';
3
- export type MessageKey = 'assigned_to' | 'ai_summarize' | '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_info' | 'ai_summarizing' | '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
  };
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import { AIIndicatorContainerProps } from './types';
3
+ declare const AIIndicatorContainer: React.FC<AIIndicatorContainerProps>;
4
+ export default AIIndicatorContainer;
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import type { AIIndicatorTooltipProps } from './types';
3
+ declare const AIIndicatorTooltip: React.FC<AIIndicatorTooltipProps>;
4
+ export default AIIndicatorTooltip;
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ declare const AILearnMoreAnchor: React.FC<React.AnchorHTMLAttributes<HTMLAnchorElement>>;
3
+ export default AILearnMoreAnchor;
@@ -0,0 +1,5 @@
1
+ /** @jsx jsx */
2
+ import React from 'react';
3
+ import type { AIStateIndicatorProps } from './types';
4
+ declare const AIStateDone: React.FC<Partial<AIStateIndicatorProps>>;
5
+ export default AIStateDone;
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import { AIStateIndicatorProps } from './types';
3
+ declare const AIStateLoading: React.FC<Partial<AIStateIndicatorProps>>;
4
+ export default AIStateLoading;
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import type { AIStateIndicatorProps } from './types';
3
+ declare const AIStateIndicator: React.FC<AIStateIndicatorProps>;
4
+ export default AIStateIndicator;
@@ -0,0 +1,18 @@
1
+ /// <reference types="react" />
2
+ import type { TooltipProps } from '@atlaskit/tooltip';
3
+ import type { AIState } from '../types';
4
+ export type AIStateAppearance = 'default' | 'icon-only';
5
+ export type AIStateIndicatorProps = {
6
+ appearance?: AIStateAppearance;
7
+ state: AIState;
8
+ testId?: string;
9
+ };
10
+ export type AIIndicatorContainerProps = {
11
+ icon?: React.ReactNode;
12
+ content?: React.ReactNode;
13
+ testId?: string;
14
+ };
15
+ export type AIIndicatorTooltipProps = {
16
+ content: TooltipProps['content'];
17
+ trigger: React.ReactNode;
18
+ };
@@ -1,5 +1,6 @@
1
1
  import { ActionItem, BlockProps, ElementItem } from '../types';
2
2
  import { OnActionMenuOpenChangeOptions } from '../types';
3
+ export type AIState = 'ready' | 'loading' | 'error' | 'done';
3
4
  export type AISummaryBlockProps = {
4
5
  /**
5
6
  * An array of actions to be displayed on the right
@@ -19,5 +20,5 @@ export type AISummaryBlockProps = {
19
20
  /**
20
21
  * Function to be called when AI Summary state changed.
21
22
  */
22
- onAIActionChange?: () => void;
23
+ onAIActionChange?: (state: AIState) => void;
23
24
  } & BlockProps;
@@ -0,0 +1,7 @@
1
+ import { FunctionComponent } from 'react';
2
+ import { SVGProps } from '@atlaskit/icon/types';
3
+ /**
4
+ * this icon is theme agnostic, no need for tokens
5
+ */
6
+ declare const AIIconLoading: FunctionComponent<SVGProps>;
7
+ export default AIIconLoading;
@@ -0,0 +1,2 @@
1
+ declare const mockAtlasProjectWithAISummary: any;
2
+ export default mockAtlasProjectWithAISummary;
@@ -1,5 +1,6 @@
1
1
  export declare const CONTENT_URL_SECURITY_AND_PERMISSIONS = "https://support.atlassian.com/confluence-cloud/docs/insert-links-and-anchors/#Smart-links";
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
+ export declare const CONTENT_URL_AI = "https://www.atlassian.com/trust/atlassian-intelligence";
3
4
  /**
4
5
  * The alignment of Flexible UI component.
5
6
  */
@@ -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_description' | 'request_denied_description' | 'default_no_access_title_crossjoin' | 'direct_access_title_crossjoin' | 'direct_access_description_crossjoin' | 'direct_access_crossjoin' | 'request_access_description_crossjoin' | 'request_access_crossjoin' | 'request_access_pending_title_crossjoin' | 'request_access_pending_description_crossjoin' | 'request_access_pending_crossjoin' | 'request_denied_description_crossjoin' | 'access_exists_description_crossjoin' | 'not_found_description_crossjoin' | 'not_found_title_crossjoin';
3
- export type MessageKey = 'assigned_to' | 'ai_summarize' | '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_info' | 'ai_summarizing' | '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
  };
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import { AIIndicatorContainerProps } from './types';
3
+ declare const AIIndicatorContainer: React.FC<AIIndicatorContainerProps>;
4
+ export default AIIndicatorContainer;
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import type { AIIndicatorTooltipProps } from './types';
3
+ declare const AIIndicatorTooltip: React.FC<AIIndicatorTooltipProps>;
4
+ export default AIIndicatorTooltip;
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ declare const AILearnMoreAnchor: React.FC<React.AnchorHTMLAttributes<HTMLAnchorElement>>;
3
+ export default AILearnMoreAnchor;
@@ -0,0 +1,5 @@
1
+ /** @jsx jsx */
2
+ import React from 'react';
3
+ import type { AIStateIndicatorProps } from './types';
4
+ declare const AIStateDone: React.FC<Partial<AIStateIndicatorProps>>;
5
+ export default AIStateDone;
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import { AIStateIndicatorProps } from './types';
3
+ declare const AIStateLoading: React.FC<Partial<AIStateIndicatorProps>>;
4
+ export default AIStateLoading;
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import type { AIStateIndicatorProps } from './types';
3
+ declare const AIStateIndicator: React.FC<AIStateIndicatorProps>;
4
+ export default AIStateIndicator;
@@ -0,0 +1,18 @@
1
+ /// <reference types="react" />
2
+ import type { TooltipProps } from '@atlaskit/tooltip';
3
+ import type { AIState } from '../types';
4
+ export type AIStateAppearance = 'default' | 'icon-only';
5
+ export type AIStateIndicatorProps = {
6
+ appearance?: AIStateAppearance;
7
+ state: AIState;
8
+ testId?: string;
9
+ };
10
+ export type AIIndicatorContainerProps = {
11
+ icon?: React.ReactNode;
12
+ content?: React.ReactNode;
13
+ testId?: string;
14
+ };
15
+ export type AIIndicatorTooltipProps = {
16
+ content: TooltipProps['content'];
17
+ trigger: React.ReactNode;
18
+ };
@@ -1,5 +1,6 @@
1
1
  import { ActionItem, BlockProps, ElementItem } from '../types';
2
2
  import { OnActionMenuOpenChangeOptions } from '../types';
3
+ export type AIState = 'ready' | 'loading' | 'error' | 'done';
3
4
  export type AISummaryBlockProps = {
4
5
  /**
5
6
  * An array of actions to be displayed on the right
@@ -19,5 +20,5 @@ export type AISummaryBlockProps = {
19
20
  /**
20
21
  * Function to be called when AI Summary state changed.
21
22
  */
22
- onAIActionChange?: () => void;
23
+ onAIActionChange?: (state: AIState) => void;
23
24
  } & BlockProps;
@@ -0,0 +1,7 @@
1
+ import { FunctionComponent } from 'react';
2
+ import { SVGProps } from '@atlaskit/icon/types';
3
+ /**
4
+ * this icon is theme agnostic, no need for tokens
5
+ */
6
+ declare const AIIconLoading: FunctionComponent<SVGProps>;
7
+ export default AIIconLoading;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/smart-card",
3
- "version": "26.46.1",
3
+ "version": "26.46.3",
4
4
  "description": "Smart card component",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"
@@ -26,12 +26,12 @@
26
26
  },
27
27
  "dependencies": {
28
28
  "@atlaskit/analytics-gas-types": "^5.1.0",
29
- "@atlaskit/analytics-next": "^9.1.0",
29
+ "@atlaskit/analytics-next": "^9.2.0",
30
30
  "@atlaskit/avatar": "^21.4.0",
31
31
  "@atlaskit/avatar-group": "^9.5.0",
32
32
  "@atlaskit/badge": "^15.2.0",
33
- "@atlaskit/button": "^17.2.0",
34
- "@atlaskit/dropdown-menu": "^12.2.0",
33
+ "@atlaskit/button": "^17.3.0",
34
+ "@atlaskit/dropdown-menu": "^12.4.0",
35
35
  "@atlaskit/icon": "^22.0.0",
36
36
  "@atlaskit/icon-file-type": "^6.4.0",
37
37
  "@atlaskit/icon-object": "^6.3.0",
@@ -47,7 +47,7 @@
47
47
  "@atlaskit/modal-dialog": "^12.10.0",
48
48
  "@atlaskit/outbound-auth-flow-client": "^3.4.0",
49
49
  "@atlaskit/platform-feature-flags": "^0.2.1",
50
- "@atlaskit/popup": "^1.11.0",
50
+ "@atlaskit/popup": "^1.12.0",
51
51
  "@atlaskit/primitives": "^2.0.0",
52
52
  "@atlaskit/spinner": "^16.0.0",
53
53
  "@atlaskit/theme": "^12.6.0",
@@ -82,7 +82,7 @@
82
82
  "@atlaskit/media-test-helpers": "^33.0.0",
83
83
  "@atlaskit/visual-regression": "*",
84
84
  "@atlassian/atlassian-frontend-prettier-config-1.0.1": "npm:@atlassian/atlassian-frontend-prettier-config@1.0.1",
85
- "@atlassian/feature-flags-test-utils": "^0.1.1",
85
+ "@atlassian/feature-flags-test-utils": "^0.2.0",
86
86
  "@testing-library/dom": "^8.17.1",
87
87
  "@testing-library/jest-dom": "^5.16.5",
88
88
  "@testing-library/react": "^12.1.5",
@@ -154,6 +154,9 @@
154
154
  },
155
155
  "platform.linking-platform.smart-card.disable-jira-status-action": {
156
156
  "type": "boolean"
157
+ },
158
+ "platform.linking-platform.smart-card.hover-card-ai-summaries": {
159
+ "type": "boolean"
157
160
  }
158
161
  },
159
162
  "prettier": "@atlassian/atlassian-frontend-prettier-config-1.0.1"