@atlaskit/smart-card 36.8.0 → 36.8.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 (34) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/cjs/extractors/embed/index.js +25 -1
  3. package/dist/cjs/extractors/inline/index.js +31 -3
  4. package/dist/cjs/state/hooks/use-resolve/index.js +3 -1
  5. package/dist/cjs/utils/analytics/analytics.js +1 -1
  6. package/dist/cjs/utils/mocks.js +38 -10
  7. package/dist/cjs/view/EmbedCard/index.js +6 -8
  8. package/dist/cjs/view/InlineCard/index.js +5 -4
  9. package/dist/cjs/view/LinkUrl/index.js +1 -1
  10. package/dist/es2019/extractors/embed/index.js +35 -9
  11. package/dist/es2019/extractors/inline/index.js +41 -10
  12. package/dist/es2019/state/hooks/use-resolve/index.js +3 -1
  13. package/dist/es2019/utils/analytics/analytics.js +1 -1
  14. package/dist/es2019/utils/mocks.js +40 -7
  15. package/dist/es2019/view/EmbedCard/index.js +7 -9
  16. package/dist/es2019/view/InlineCard/index.js +6 -5
  17. package/dist/es2019/view/LinkUrl/index.js +1 -1
  18. package/dist/esm/extractors/embed/index.js +26 -2
  19. package/dist/esm/extractors/inline/index.js +33 -3
  20. package/dist/esm/state/hooks/use-resolve/index.js +3 -1
  21. package/dist/esm/utils/analytics/analytics.js +1 -1
  22. package/dist/esm/utils/mocks.js +38 -10
  23. package/dist/esm/view/EmbedCard/index.js +7 -9
  24. package/dist/esm/view/InlineCard/index.js +6 -5
  25. package/dist/esm/view/LinkUrl/index.js +1 -1
  26. package/dist/types/extractors/embed/index.d.ts +2 -2
  27. package/dist/types/extractors/inline/index.d.ts +2 -4
  28. package/dist/types/utils/mocks.d.ts +2 -0
  29. package/dist/types/view/EmbedCard/views/ResolvedView.d.ts +1 -1
  30. package/dist/types-ts4.5/extractors/embed/index.d.ts +2 -2
  31. package/dist/types-ts4.5/extractors/inline/index.d.ts +2 -4
  32. package/dist/types-ts4.5/utils/mocks.d.ts +2 -0
  33. package/dist/types-ts4.5/view/EmbedCard/views/ResolvedView.d.ts +1 -1
  34. package/package.json +10 -7
package/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # @atlaskit/smart-card
2
2
 
3
+ ## 36.8.2
4
+
5
+ ### Patch Changes
6
+
7
+ - [#144118](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/pull-requests/144118)
8
+ [`74eae7139b13d`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/74eae7139b13d) -
9
+ Enable resolve embed-view with nounData behind ff: smart_links_noun_support
10
+ - Updated dependencies
11
+
12
+ ## 36.8.1
13
+
14
+ ### Patch Changes
15
+
16
+ - [#142166](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/pull-requests/142166)
17
+ [`c721be0359308`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/c721be0359308) -
18
+ Enable resolve inline-view from nounData behind ff: smart_links_noun_support
19
+ - Updated dependencies
20
+
3
21
  ## 36.8.0
4
22
 
5
23
  ### Minor Changes
@@ -7,6 +7,8 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.extractEmbedProps = void 0;
8
8
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
9
  var _linkExtractors = require("@atlaskit/link-extractors");
10
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
11
+ var _jsonld = require("../../utils/jsonld");
10
12
  var _icon = require("../common/icon");
11
13
  var _extractIsSupportTheming = require("../common/meta/extractIsSupportTheming");
12
14
  var _extractIsTrusted = require("../common/meta/extractIsTrusted");
@@ -42,7 +44,29 @@ function generateContext(jsonLd) {
42
44
  icon: icon ? icon : provider.icon
43
45
  });
44
46
  }
45
- var extractEmbedProps = exports.extractEmbedProps = function extractEmbedProps(jsonLd, meta, platform, iframeUrlType) {
47
+
48
+ /**
49
+ * We can migrate this to link extractors once we have deprecated JsonLd
50
+ */
51
+ function extractSmartLinkContext(response) {
52
+ if ((0, _linkExtractors.isEntityPresent)(response)) {
53
+ return (0, _linkExtractors.extractEntityProvider)(response);
54
+ }
55
+ return generateContext(response === null || response === void 0 ? void 0 : response.data);
56
+ }
57
+ var extractEmbedProps = exports.extractEmbedProps = function extractEmbedProps(response, platform, iframeUrlType) {
58
+ var meta = response === null || response === void 0 ? void 0 : response.meta;
59
+ var jsonLd = (response === null || response === void 0 ? void 0 : response.data) || (0, _jsonld.getEmptyJsonLd)();
60
+ if ((0, _platformFeatureFlags.fg)('smart_links_noun_support')) {
61
+ return {
62
+ link: (0, _linkExtractors.extractSmartLinkUrl)(response) || '',
63
+ title: (0, _linkExtractors.extractSmartLinkTitle)(response),
64
+ context: extractSmartLinkContext(response),
65
+ preview: (0, _linkExtractors.extractSmartLinkEmbed)(response, iframeUrlType),
66
+ isTrusted: (0, _extractIsTrusted.extractIsTrusted)(meta),
67
+ isSupportTheming: (0, _extractIsSupportTheming.extractIsSupportTheming)(meta)
68
+ };
69
+ }
46
70
  return {
47
71
  link: (0, _linkExtractors.extractLink)(jsonLd) || '',
48
72
  title: (0, _linkExtractors.extractTitle)(jsonLd),
@@ -3,14 +3,15 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.extractInlineProps = exports.extractInlineIcon = void 0;
6
+ exports.extractInlineProps = void 0;
7
7
  var _linkExtractors = require("@atlaskit/link-extractors");
8
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
8
9
  var _icon = require("../common/icon");
9
10
  var _lozenge = require("../common/lozenge");
10
11
  var _primitives = require("../common/primitives");
11
12
  var _titlePrefix = require("../common/title-prefix");
12
13
  var _constants = require("../constants");
13
- var extractInlineIcon = exports.extractInlineIcon = function extractInlineIcon(jsonLd) {
14
+ var extractInlineIcon = function extractInlineIcon(jsonLd) {
14
15
  var showIconLabel = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
15
16
  var provider = (0, _linkExtractors.extractProvider)(jsonLd);
16
17
  if (provider && provider.id) {
@@ -20,8 +21,35 @@ var extractInlineIcon = exports.extractInlineIcon = function extractInlineIcon(j
20
21
  }
21
22
  return (0, _icon.extractIcon)(jsonLd, 'provider', showIconLabel);
22
23
  };
23
- var extractInlineProps = exports.extractInlineProps = function extractInlineProps(jsonLd, renderers, removeTextHighlightingFromTitle) {
24
+ var extractSmartLinkInlineIcon = function extractSmartLinkInlineIcon(response) {
25
+ var showLabel = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
26
+ if ((0, _linkExtractors.isEntityPresent)(response)) {
27
+ var provider = (0, _linkExtractors.extractEntityProvider)(response);
28
+ if (provider) {
29
+ return provider.icon;
30
+ }
31
+ // We don't need this for design entities,
32
+ // but we can add it back when we support more nouns
33
+ // it requires extractInlineIcon to be moved to the smart link extractor package.
34
+ // see: https://product-fabric.atlassian.net/browse/EDM-12375
35
+ // return extractSmartLinkIcon(response);
36
+ }
37
+ return extractInlineIcon(response === null || response === void 0 ? void 0 : response.data, showLabel);
38
+ };
39
+ var extractInlineProps = exports.extractInlineProps = function extractInlineProps(response, renderers, removeTextHighlightingFromTitle) {
24
40
  var showLabel = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
41
+ var jsonLd = response === null || response === void 0 ? void 0 : response.data;
42
+ if ((0, _platformFeatureFlags.fg)('smart_links_noun_support')) {
43
+ return {
44
+ icon: extractSmartLinkInlineIcon(response, showLabel),
45
+ link: (0, _linkExtractors.extractSmartLinkUrl)(response),
46
+ title: (0, _linkExtractors.extractSmartLinkTitle)(response, removeTextHighlightingFromTitle),
47
+ // As we migrate to support more nouns we can incorporate these fields
48
+ lozenge: (0, _lozenge.extractLozenge)(jsonLd),
49
+ titleTextColor: (0, _primitives.extractTitleTextColor)(jsonLd),
50
+ titlePrefix: (0, _titlePrefix.extractTitlePrefix)(jsonLd, renderers, 'inline')
51
+ };
52
+ }
25
53
  return {
26
54
  link: (0, _linkExtractors.extractLink)(jsonLd),
27
55
  title: (0, _linkExtractors.extractTitle)(jsonLd, removeTextHighlightingFromTitle),
@@ -8,7 +8,9 @@ exports.default = void 0;
8
8
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
9
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
10
  var _react = require("react");
11
+ var _linkExtractors = require("@atlaskit/link-extractors");
11
12
  var _linkProvider = require("@atlaskit/link-provider");
13
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
12
14
  var _constants = require("../../../constants");
13
15
  var _analytics = require("../../analytics");
14
16
  var _useResponse2 = _interopRequireDefault(require("../use-response"));
@@ -43,7 +45,7 @@ var useResolve = function useResolve() {
43
45
  status: _constants.SmartLinkStatus.Pending,
44
46
  details: undefined
45
47
  }, details = _ref2.details;
46
- hasData = !!(details && details.data);
48
+ hasData = (0, _platformFeatureFlags.fg)('smart_links_noun_support') ? !!(details && details.data || (0, _linkExtractors.isEntityPresent)(details)) : !!(details && details.data);
47
49
  if (!(isReloading || !hasData || isMetadataRequest)) {
48
50
  _context.next = 9;
49
51
  break;
@@ -11,7 +11,7 @@ var ANALYTICS_CHANNEL = exports.ANALYTICS_CHANNEL = 'media';
11
11
  var context = exports.context = {
12
12
  componentName: 'smart-cards',
13
13
  packageName: "@atlaskit/smart-card",
14
- packageVersion: "36.8.0"
14
+ packageVersion: "36.8.2"
15
15
  };
16
16
  var TrackQuickActionType = exports.TrackQuickActionType = /*#__PURE__*/function (TrackQuickActionType) {
17
17
  TrackQuickActionType["StatusUpdate"] = "StatusUpdate";
@@ -86,17 +86,45 @@ var successfulResponseData = _objectSpread(_objectSpread({}, errorResponseData),
86
86
  href: 'https://www.ilovecheese.com'
87
87
  }
88
88
  });
89
- var mocks = exports.mocks = {
90
- success: {
91
- meta: {
92
- visibility: 'public',
93
- access: 'granted',
94
- auth: [],
95
- definitionId: 'd1',
96
- key: 'object-provider'
97
- },
98
- data: successfulResponseData
89
+ var jsonLdResponse = {
90
+ meta: {
91
+ visibility: 'public',
92
+ access: 'granted',
93
+ auth: [],
94
+ definitionId: 'd1',
95
+ key: 'object-provider'
99
96
  },
97
+ data: successfulResponseData
98
+ };
99
+ var nounDataResponse = {
100
+ nounData: {
101
+ id: 'I love cheese',
102
+ displayName: 'I love cheese',
103
+ url: 'https://some.url',
104
+ lastUpdatedAt: '2025-01-08T22:26:52.501Z',
105
+ thumbnail: {
106
+ externalUrl: 'https://www.ilovecheese.com'
107
+ },
108
+ 'atlassian:design': {
109
+ liveEmbedUrl: 'https://www.ilovecheese.com',
110
+ type: 'FILE',
111
+ inspectUrl: 'https://www.ilovecheese.com',
112
+ iconUrl: 'https://www.ilovecheese.com'
113
+ }
114
+ }
115
+ };
116
+ var mocks = exports.mocks = {
117
+ success: _objectSpread({}, jsonLdResponse),
118
+ nounDataSuccess: _objectSpread(_objectSpread(_objectSpread({}, jsonLdResponse), nounDataResponse), {}, {
119
+ meta: _objectSpread(_objectSpread({}, jsonLdResponse.meta), {}, {
120
+ generator: {
121
+ name: 'I love cheese',
122
+ icon: {
123
+ url: 'https://www.ilovecheese.com'
124
+ }
125
+ }
126
+ })
127
+ }),
100
128
  notFound: {
101
129
  meta: {
102
130
  visibility: 'not_found',
@@ -46,8 +46,6 @@ var EmbedCard = exports.EmbedCard = /*#__PURE__*/_react.default.forwardRef(funct
46
46
  createAnalyticsEvent = _useAnalyticsEvents.createAnalyticsEvent;
47
47
  var status = cardState.status,
48
48
  details = cardState.details;
49
- var data = details && details.data || (0, _jsonld.getEmptyJsonLd)();
50
- var meta = details && details.meta;
51
49
  var extensionKey = (0, _helpers.getExtensionKey)(details);
52
50
  var isProductIntegrationSupported = (0, _helpers.hasAuthScopeOverrides)(details);
53
51
  var _useControlDataExport = (0, _useControlDataExportConfig.useControlDataExportConfig)(),
@@ -67,7 +65,7 @@ var EmbedCard = exports.EmbedCard = /*#__PURE__*/_react.default.forwardRef(funct
67
65
  testId: testId ? "".concat(testId, "-resolving-view") : 'embed-card-resolving-view'
68
66
  });
69
67
  case 'resolved':
70
- var resolvedViewProps = (0, _embed.extractEmbedProps)(data, meta, platform, iframeUrlType);
68
+ var resolvedViewProps = (0, _embed.extractEmbedProps)(details, platform, iframeUrlType);
71
69
  if (onResolve) {
72
70
  var _resolvedViewProps$pr;
73
71
  onResolve({
@@ -78,7 +76,7 @@ var EmbedCard = exports.EmbedCard = /*#__PURE__*/_react.default.forwardRef(funct
78
76
  }
79
77
  if ((0, _platformFeatureFlags.fg)('platform_smart_links_controlled_dsp_export_view')) {
80
78
  if ((0, _shouldDataExport.getIsDataExportEnabled)(shouldControlDataExport, cardState.details)) {
81
- var unauthViewProps = (0, _embed.extractEmbedProps)(data, meta, platform);
79
+ var unauthViewProps = (0, _embed.extractEmbedProps)(details, platform);
82
80
  return /*#__PURE__*/_react.default.createElement(_unauthorizedView.default, {
83
81
  context: unauthViewProps.context,
84
82
  extensionKey: extensionKey,
@@ -106,7 +104,7 @@ var EmbedCard = exports.EmbedCard = /*#__PURE__*/_react.default.forwardRef(funct
106
104
  }));
107
105
  } else {
108
106
  if (platform === 'mobile') {
109
- var resolvedInlineViewProps = (0, _inline.extractInlineProps)(data);
107
+ var resolvedInlineViewProps = (0, _inline.extractInlineProps)(details);
110
108
  return /*#__PURE__*/_react.default.createElement(_ResolvedView2.InlineCardResolvedView, (0, _extends2.default)({}, resolvedInlineViewProps, {
111
109
  isSelected: isSelected,
112
110
  testId: testId,
@@ -131,7 +129,7 @@ var EmbedCard = exports.EmbedCard = /*#__PURE__*/_react.default.forwardRef(funct
131
129
  status: status
132
130
  });
133
131
  }
134
- var unauthorisedViewProps = (0, _embed.extractEmbedProps)(data, meta, platform);
132
+ var unauthorisedViewProps = (0, _embed.extractEmbedProps)(details, platform);
135
133
  return /*#__PURE__*/_react.default.createElement(_unauthorizedView.default, {
136
134
  context: unauthorisedViewProps.context,
137
135
  extensionKey: extensionKey,
@@ -151,7 +149,7 @@ var EmbedCard = exports.EmbedCard = /*#__PURE__*/_react.default.forwardRef(funct
151
149
  status: status
152
150
  });
153
151
  }
154
- var forbiddenViewProps = (0, _embed.extractEmbedProps)(data, meta, platform);
152
+ var forbiddenViewProps = (0, _embed.extractEmbedProps)(details, platform);
155
153
  var cardMetadata = (_details$meta = details === null || details === void 0 ? void 0 : details.meta) !== null && _details$meta !== void 0 ? _details$meta : (0, _jsonld.getForbiddenJsonLd)().meta;
156
154
  if (forbiddenViewProps.preview) {
157
155
  return /*#__PURE__*/_react.default.createElement(_ResolvedView3.EmbedCardResolvedView, (0, _extends2.default)({}, forbiddenViewProps, {
@@ -186,7 +184,7 @@ var EmbedCard = exports.EmbedCard = /*#__PURE__*/_react.default.forwardRef(funct
186
184
  status: status
187
185
  });
188
186
  }
189
- var notFoundViewProps = (0, _embed.extractEmbedProps)(data, meta, platform);
187
+ var notFoundViewProps = (0, _embed.extractEmbedProps)(details, platform);
190
188
  var notFoundAccessContext = details !== null && details !== void 0 && details.meta ? (0, _extractAccessContext.extractRequestAccessContextImproved)({
191
189
  jsonLd: details === null || details === void 0 ? void 0 : details.meta,
192
190
  url: url,
@@ -41,6 +41,7 @@ var _react = _interopRequireWildcard(require("react"));
41
41
  var _analyticsNext = require("@atlaskit/analytics-next");
42
42
  var _linkExtractors = require("@atlaskit/link-extractors");
43
43
  var _linkProvider = require("@atlaskit/link-provider");
44
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
44
45
  var _constants = require("../../constants");
45
46
  var _extractAccessContext = require("../../extractors/common/context/extractAccessContext");
46
47
  var _inline = require("../../extractors/inline");
@@ -85,7 +86,7 @@ var InlineCard = exports.InlineCard = function InlineCard(_ref) {
85
86
  if (showHoverPreview === undefined && showHoverPreviewFlag !== undefined) {
86
87
  showHoverPreview = Boolean(showHoverPreviewFlag);
87
88
  }
88
- var resolvedProps = status === _constants.SmartLinkStatus.Resolved ? (0, _inline.extractInlineProps)(cardDetails, renderers, removeTextHighlightingFromTitle, false) : {};
89
+ var resolvedProps = status === _constants.SmartLinkStatus.Resolved ? (0, _inline.extractInlineProps)(details, renderers, removeTextHighlightingFromTitle, false) : {};
89
90
  (0, _react.useEffect)(function () {
90
91
  switch (status) {
91
92
  case _constants.SmartLinkStatus.Resolved:
@@ -134,7 +135,7 @@ var InlineCard = exports.InlineCard = function InlineCard(_ref) {
134
135
  truncateInline: truncateInline
135
136
  }));
136
137
  case 'unauthorized':
137
- var provider = (0, _linkExtractors.extractProvider)(cardDetails);
138
+ var provider = (0, _platformFeatureFlags.fg)('smart_links_noun_support') ? (0, _linkExtractors.extractSmartLinkProvider)(details) : (0, _linkExtractors.extractProvider)(cardDetails);
138
139
  return /*#__PURE__*/_react.default.createElement(_UnauthorisedView.InlineCardUnauthorizedView, {
139
140
  icon: provider && provider.icon,
140
141
  context: provider && provider.text,
@@ -149,7 +150,7 @@ var InlineCard = exports.InlineCard = function InlineCard(_ref) {
149
150
  truncateInline: truncateInline
150
151
  });
151
152
  case 'forbidden':
152
- var providerForbidden = (0, _linkExtractors.extractProvider)(cardDetails);
153
+ var providerForbidden = (0, _platformFeatureFlags.fg)('smart_links_noun_support') ? (0, _linkExtractors.extractSmartLinkProvider)(details) : (0, _linkExtractors.extractProvider)(cardDetails);
153
154
  var cardMetadata = (_details$meta = details === null || details === void 0 ? void 0 : details.meta) !== null && _details$meta !== void 0 ? _details$meta : (0, _jsonld.getForbiddenJsonLd)().meta;
154
155
  var requestAccessContext = (0, _extractAccessContext.extractRequestAccessContextImproved)({
155
156
  jsonLd: cardMetadata,
@@ -170,7 +171,7 @@ var InlineCard = exports.InlineCard = function InlineCard(_ref) {
170
171
  truncateInline: truncateInline
171
172
  });
172
173
  case 'not_found':
173
- var providerNotFound = (0, _linkExtractors.extractProvider)(cardDetails);
174
+ var providerNotFound = (0, _platformFeatureFlags.fg)('smart_links_noun_support') ? (0, _linkExtractors.extractSmartLinkProvider)(details) : (0, _linkExtractors.extractProvider)(cardDetails);
174
175
  return /*#__PURE__*/_react.default.createElement(_ErroredView.InlineCardErroredView, {
175
176
  url: url,
176
177
  icon: providerNotFound && providerNotFound.icon,
@@ -20,7 +20,7 @@ var _excluded = ["href", "children", "checkSafety", "onClick", "testId", "isLink
20
20
  _excluded2 = ["isLinkSafe", "showSafetyWarningModal"];
21
21
  var PACKAGE_DATA = {
22
22
  packageName: "@atlaskit/smart-card",
23
- packageVersion: "36.8.0",
23
+ packageVersion: "36.8.2",
24
24
  componentName: 'linkUrl'
25
25
  };
26
26
  var Anchor = (0, _click.withLinkClickedEvent)('a');
@@ -1,4 +1,6 @@
1
- import { extractLink, extractPreview, extractProvider, extractProviderIcon, extractTitle, extractUrlFromIconJsonLd } from '@atlaskit/link-extractors';
1
+ import { extractEntityProvider, extractLink, extractPreview, extractProvider, extractProviderIcon, extractSmartLinkEmbed, extractSmartLinkTitle, extractSmartLinkUrl, extractTitle, extractUrlFromIconJsonLd, isEntityPresent } from '@atlaskit/link-extractors';
2
+ import { fg } from '@atlaskit/platform-feature-flags';
3
+ import { getEmptyJsonLd } from '../../utils/jsonld';
2
4
  import { prioritiseIcon } from '../common/icon';
3
5
  import { extractIsSupportTheming } from '../common/meta/extractIsSupportTheming';
4
6
  import { extractIsTrusted } from '../common/meta/extractIsTrusted';
@@ -34,11 +36,35 @@ function generateContext(jsonLd) {
34
36
  icon: icon ? icon : provider.icon
35
37
  };
36
38
  }
37
- export const extractEmbedProps = (jsonLd, meta, platform, iframeUrlType) => ({
38
- link: extractLink(jsonLd) || '',
39
- title: extractTitle(jsonLd),
40
- context: generateContext(jsonLd),
41
- preview: extractEmbedPreview(jsonLd, platform, iframeUrlType),
42
- isTrusted: extractIsTrusted(meta),
43
- isSupportTheming: extractIsSupportTheming(meta)
44
- });
39
+
40
+ /**
41
+ * We can migrate this to link extractors once we have deprecated JsonLd
42
+ */
43
+ function extractSmartLinkContext(response) {
44
+ if (isEntityPresent(response)) {
45
+ return extractEntityProvider(response);
46
+ }
47
+ return generateContext(response === null || response === void 0 ? void 0 : response.data);
48
+ }
49
+ export const extractEmbedProps = (response, platform, iframeUrlType) => {
50
+ const meta = response === null || response === void 0 ? void 0 : response.meta;
51
+ const jsonLd = (response === null || response === void 0 ? void 0 : response.data) || getEmptyJsonLd();
52
+ if (fg('smart_links_noun_support')) {
53
+ return {
54
+ link: extractSmartLinkUrl(response) || '',
55
+ title: extractSmartLinkTitle(response),
56
+ context: extractSmartLinkContext(response),
57
+ preview: extractSmartLinkEmbed(response, iframeUrlType),
58
+ isTrusted: extractIsTrusted(meta),
59
+ isSupportTheming: extractIsSupportTheming(meta)
60
+ };
61
+ }
62
+ return {
63
+ link: extractLink(jsonLd) || '',
64
+ title: extractTitle(jsonLd),
65
+ context: generateContext(jsonLd),
66
+ preview: extractEmbedPreview(jsonLd, platform, iframeUrlType),
67
+ isTrusted: extractIsTrusted(meta),
68
+ isSupportTheming: extractIsSupportTheming(meta)
69
+ };
70
+ };
@@ -1,10 +1,13 @@
1
- import { extractLink, extractProvider, extractTitle } from '@atlaskit/link-extractors';
1
+ import { extractEntityProvider, extractLink, extractProvider,
2
+ // extractSmartLinkIcon,
3
+ extractSmartLinkTitle, extractSmartLinkUrl, extractTitle, isEntityPresent } from '@atlaskit/link-extractors';
4
+ import { fg } from '@atlaskit/platform-feature-flags';
2
5
  import { extractIcon } from '../common/icon';
3
6
  import { extractLozenge } from '../common/lozenge';
4
7
  import { extractTitleTextColor } from '../common/primitives';
5
8
  import { extractTitlePrefix } from '../common/title-prefix';
6
9
  import { CONFLUENCE_GENERATOR_ID, JIRA_GENERATOR_ID } from '../constants';
7
- export const extractInlineIcon = (jsonLd, showIconLabel = true) => {
10
+ const extractInlineIcon = (jsonLd, showIconLabel = true) => {
8
11
  const provider = extractProvider(jsonLd);
9
12
  if (provider && provider.id) {
10
13
  if (provider.id === CONFLUENCE_GENERATOR_ID || provider.id === JIRA_GENERATOR_ID) {
@@ -13,11 +16,39 @@ export const extractInlineIcon = (jsonLd, showIconLabel = true) => {
13
16
  }
14
17
  return extractIcon(jsonLd, 'provider', showIconLabel);
15
18
  };
16
- export const extractInlineProps = (jsonLd, renderers, removeTextHighlightingFromTitle, showLabel = true) => ({
17
- link: extractLink(jsonLd),
18
- title: extractTitle(jsonLd, removeTextHighlightingFromTitle),
19
- lozenge: extractLozenge(jsonLd),
20
- icon: extractInlineIcon(jsonLd, showLabel),
21
- titleTextColor: extractTitleTextColor(jsonLd),
22
- titlePrefix: extractTitlePrefix(jsonLd, renderers, 'inline')
23
- });
19
+ const extractSmartLinkInlineIcon = (response, showLabel = true) => {
20
+ if (isEntityPresent(response)) {
21
+ const provider = extractEntityProvider(response);
22
+ if (provider) {
23
+ return provider.icon;
24
+ }
25
+ // We don't need this for design entities,
26
+ // but we can add it back when we support more nouns
27
+ // it requires extractInlineIcon to be moved to the smart link extractor package.
28
+ // see: https://product-fabric.atlassian.net/browse/EDM-12375
29
+ // return extractSmartLinkIcon(response);
30
+ }
31
+ return extractInlineIcon(response === null || response === void 0 ? void 0 : response.data, showLabel);
32
+ };
33
+ export const extractInlineProps = (response, renderers, removeTextHighlightingFromTitle, showLabel = true) => {
34
+ const jsonLd = response === null || response === void 0 ? void 0 : response.data;
35
+ if (fg('smart_links_noun_support')) {
36
+ return {
37
+ icon: extractSmartLinkInlineIcon(response, showLabel),
38
+ link: extractSmartLinkUrl(response),
39
+ title: extractSmartLinkTitle(response, removeTextHighlightingFromTitle),
40
+ // As we migrate to support more nouns we can incorporate these fields
41
+ lozenge: extractLozenge(jsonLd),
42
+ titleTextColor: extractTitleTextColor(jsonLd),
43
+ titlePrefix: extractTitlePrefix(jsonLd, renderers, 'inline')
44
+ };
45
+ }
46
+ return {
47
+ link: extractLink(jsonLd),
48
+ title: extractTitle(jsonLd, removeTextHighlightingFromTitle),
49
+ lozenge: extractLozenge(jsonLd),
50
+ icon: extractInlineIcon(jsonLd, showLabel),
51
+ titleTextColor: extractTitleTextColor(jsonLd),
52
+ titlePrefix: extractTitlePrefix(jsonLd, renderers, 'inline')
53
+ };
54
+ };
@@ -1,5 +1,7 @@
1
1
  import { useCallback } from 'react';
2
+ import { isEntityPresent } from '@atlaskit/link-extractors';
2
3
  import { useSmartLinkContext } from '@atlaskit/link-provider';
4
+ import { fg } from '@atlaskit/platform-feature-flags';
3
5
  import { SmartLinkStatus } from '../../../constants';
4
6
  import { addMetadataToExperience } from '../../analytics';
5
7
  import useResponse from '../use-response';
@@ -26,7 +28,7 @@ const useResolve = () => {
26
28
  status: SmartLinkStatus.Pending,
27
29
  details: undefined
28
30
  };
29
- const hasData = !!(details && details.data);
31
+ const hasData = fg('smart_links_noun_support') ? !!(details && details.data || isEntityPresent(details)) : !!(details && details.data);
30
32
  if (isReloading || !hasData || isMetadataRequest) {
31
33
  return connections.client.fetchData(url, isReloading).then(response => handleResolvedLinkResponse(url, response, isReloading, isMetadataRequest)).catch(error => handleResolvedLinkError(url, error, undefined, isMetadataRequest));
32
34
  } else {
@@ -2,7 +2,7 @@ export const ANALYTICS_CHANNEL = 'media';
2
2
  export const context = {
3
3
  componentName: 'smart-cards',
4
4
  packageName: "@atlaskit/smart-card",
5
- packageVersion: "36.8.0"
5
+ packageVersion: "36.8.2"
6
6
  };
7
7
  export let TrackQuickActionType = /*#__PURE__*/function (TrackQuickActionType) {
8
8
  TrackQuickActionType["StatusUpdate"] = "StatusUpdate";
@@ -68,16 +68,49 @@ const successfulResponseData = {
68
68
  href: 'https://www.ilovecheese.com'
69
69
  }
70
70
  };
71
+ const jsonLdResponse = {
72
+ meta: {
73
+ visibility: 'public',
74
+ access: 'granted',
75
+ auth: [],
76
+ definitionId: 'd1',
77
+ key: 'object-provider'
78
+ },
79
+ data: successfulResponseData
80
+ };
81
+ const nounDataResponse = {
82
+ nounData: {
83
+ id: 'I love cheese',
84
+ displayName: 'I love cheese',
85
+ url: 'https://some.url',
86
+ lastUpdatedAt: '2025-01-08T22:26:52.501Z',
87
+ thumbnail: {
88
+ externalUrl: 'https://www.ilovecheese.com'
89
+ },
90
+ 'atlassian:design': {
91
+ liveEmbedUrl: 'https://www.ilovecheese.com',
92
+ type: 'FILE',
93
+ inspectUrl: 'https://www.ilovecheese.com',
94
+ iconUrl: 'https://www.ilovecheese.com'
95
+ }
96
+ }
97
+ };
71
98
  export const mocks = {
72
99
  success: {
100
+ ...jsonLdResponse
101
+ },
102
+ nounDataSuccess: {
103
+ ...jsonLdResponse,
104
+ ...nounDataResponse,
73
105
  meta: {
74
- visibility: 'public',
75
- access: 'granted',
76
- auth: [],
77
- definitionId: 'd1',
78
- key: 'object-provider'
79
- },
80
- data: successfulResponseData
106
+ ...jsonLdResponse.meta,
107
+ generator: {
108
+ name: 'I love cheese',
109
+ icon: {
110
+ url: 'https://www.ilovecheese.com'
111
+ }
112
+ }
113
+ }
81
114
  },
82
115
  notFound: {
83
116
  meta: {
@@ -7,7 +7,7 @@ import { extractEmbedProps } from '../../extractors/embed';
7
7
  import { extractInlineProps } from '../../extractors/inline';
8
8
  import { getExtensionKey, hasAuthScopeOverrides } from '../../state/helpers';
9
9
  import { useControlDataExportConfig } from '../../state/hooks/use-control-data-export-config';
10
- import { getEmptyJsonLd, getForbiddenJsonLd } from '../../utils/jsonld';
10
+ import { getForbiddenJsonLd } from '../../utils/jsonld';
11
11
  import { getIsDataExportEnabled } from '../../utils/should-data-export';
12
12
  import BlockCardResolvedView from '../BlockCard/views/ResolvedView';
13
13
  import { InlineCardResolvedView } from '../InlineCard/ResolvedView';
@@ -43,8 +43,6 @@ export const EmbedCard = /*#__PURE__*/React.forwardRef(({
43
43
  status,
44
44
  details
45
45
  } = cardState;
46
- const data = details && details.data || getEmptyJsonLd();
47
- const meta = details && details.meta;
48
46
  const extensionKey = getExtensionKey(details);
49
47
  const isProductIntegrationSupported = hasAuthScopeOverrides(details);
50
48
  const {
@@ -64,7 +62,7 @@ export const EmbedCard = /*#__PURE__*/React.forwardRef(({
64
62
  testId: testId ? `${testId}-resolving-view` : 'embed-card-resolving-view'
65
63
  });
66
64
  case 'resolved':
67
- const resolvedViewProps = extractEmbedProps(data, meta, platform, iframeUrlType);
65
+ const resolvedViewProps = extractEmbedProps(details, platform, iframeUrlType);
68
66
  if (onResolve) {
69
67
  var _resolvedViewProps$pr;
70
68
  onResolve({
@@ -75,7 +73,7 @@ export const EmbedCard = /*#__PURE__*/React.forwardRef(({
75
73
  }
76
74
  if (fg('platform_smart_links_controlled_dsp_export_view')) {
77
75
  if (getIsDataExportEnabled(shouldControlDataExport, cardState.details)) {
78
- const unauthViewProps = extractEmbedProps(data, meta, platform);
76
+ const unauthViewProps = extractEmbedProps(details, platform);
79
77
  return /*#__PURE__*/React.createElement(UnauthorizedView, {
80
78
  context: unauthViewProps.context,
81
79
  extensionKey: extensionKey,
@@ -103,7 +101,7 @@ export const EmbedCard = /*#__PURE__*/React.forwardRef(({
103
101
  }));
104
102
  } else {
105
103
  if (platform === 'mobile') {
106
- const resolvedInlineViewProps = extractInlineProps(data);
104
+ const resolvedInlineViewProps = extractInlineProps(details);
107
105
  return /*#__PURE__*/React.createElement(InlineCardResolvedView, _extends({}, resolvedInlineViewProps, {
108
106
  isSelected: isSelected,
109
107
  testId: testId,
@@ -128,7 +126,7 @@ export const EmbedCard = /*#__PURE__*/React.forwardRef(({
128
126
  status
129
127
  });
130
128
  }
131
- const unauthorisedViewProps = extractEmbedProps(data, meta, platform);
129
+ const unauthorisedViewProps = extractEmbedProps(details, platform);
132
130
  return /*#__PURE__*/React.createElement(UnauthorizedView, {
133
131
  context: unauthorisedViewProps.context,
134
132
  extensionKey: extensionKey,
@@ -148,7 +146,7 @@ export const EmbedCard = /*#__PURE__*/React.forwardRef(({
148
146
  status
149
147
  });
150
148
  }
151
- const forbiddenViewProps = extractEmbedProps(data, meta, platform);
149
+ const forbiddenViewProps = extractEmbedProps(details, platform);
152
150
  const cardMetadata = (_details$meta = details === null || details === void 0 ? void 0 : details.meta) !== null && _details$meta !== void 0 ? _details$meta : getForbiddenJsonLd().meta;
153
151
  if (forbiddenViewProps.preview) {
154
152
  return /*#__PURE__*/React.createElement(EmbedCardResolvedView, _extends({}, forbiddenViewProps, {
@@ -183,7 +181,7 @@ export const EmbedCard = /*#__PURE__*/React.forwardRef(({
183
181
  status
184
182
  });
185
183
  }
186
- const notFoundViewProps = extractEmbedProps(data, meta, platform);
184
+ const notFoundViewProps = extractEmbedProps(details, platform);
187
185
  const notFoundAccessContext = details !== null && details !== void 0 && details.meta ? extractRequestAccessContextImproved({
188
186
  jsonLd: details === null || details === void 0 ? void 0 : details.meta,
189
187
  url,
@@ -1,8 +1,9 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
2
  import React, { useEffect } from 'react';
3
3
  import { useAnalyticsEvents } from '@atlaskit/analytics-next';
4
- import { extractProvider } from '@atlaskit/link-extractors';
4
+ import { extractProvider, extractSmartLinkProvider } from '@atlaskit/link-extractors';
5
5
  import { useFeatureFlag } from '@atlaskit/link-provider';
6
+ import { fg } from '@atlaskit/platform-feature-flags';
6
7
  import { SmartLinkStatus } from '../../constants';
7
8
  import { extractRequestAccessContextImproved } from '../../extractors/common/context/extractAccessContext';
8
9
  import { extractInlineProps } from '../../extractors/inline';
@@ -50,7 +51,7 @@ export const InlineCard = ({
50
51
  if (showHoverPreview === undefined && showHoverPreviewFlag !== undefined) {
51
52
  showHoverPreview = Boolean(showHoverPreviewFlag);
52
53
  }
53
- const resolvedProps = status === SmartLinkStatus.Resolved ? extractInlineProps(cardDetails, renderers, removeTextHighlightingFromTitle, false) : {};
54
+ const resolvedProps = status === SmartLinkStatus.Resolved ? extractInlineProps(details, renderers, removeTextHighlightingFromTitle, false) : {};
54
55
  useEffect(() => {
55
56
  switch (status) {
56
57
  case SmartLinkStatus.Resolved:
@@ -99,7 +100,7 @@ export const InlineCard = ({
99
100
  truncateInline: truncateInline
100
101
  }));
101
102
  case 'unauthorized':
102
- const provider = extractProvider(cardDetails);
103
+ const provider = fg('smart_links_noun_support') ? extractSmartLinkProvider(details) : extractProvider(cardDetails);
103
104
  return /*#__PURE__*/React.createElement(InlineCardUnauthorizedView, {
104
105
  icon: provider && provider.icon,
105
106
  context: provider && provider.text,
@@ -114,7 +115,7 @@ export const InlineCard = ({
114
115
  truncateInline: truncateInline
115
116
  });
116
117
  case 'forbidden':
117
- const providerForbidden = extractProvider(cardDetails);
118
+ const providerForbidden = fg('smart_links_noun_support') ? extractSmartLinkProvider(details) : extractProvider(cardDetails);
118
119
  const cardMetadata = (_details$meta = details === null || details === void 0 ? void 0 : details.meta) !== null && _details$meta !== void 0 ? _details$meta : getForbiddenJsonLd().meta;
119
120
  const requestAccessContext = extractRequestAccessContextImproved({
120
121
  jsonLd: cardMetadata,
@@ -135,7 +136,7 @@ export const InlineCard = ({
135
136
  truncateInline: truncateInline
136
137
  });
137
138
  case 'not_found':
138
- const providerNotFound = extractProvider(cardDetails);
139
+ const providerNotFound = fg('smart_links_noun_support') ? extractSmartLinkProvider(details) : extractProvider(cardDetails);
139
140
  return /*#__PURE__*/React.createElement(InlineCardErroredView, {
140
141
  url: url,
141
142
  icon: providerNotFound && providerNotFound.icon,
@@ -10,7 +10,7 @@ import LinkWarningModal from './LinkWarningModal';
10
10
  import { useLinkWarningModal } from './LinkWarningModal/hooks/use-link-warning-modal';
11
11
  const PACKAGE_DATA = {
12
12
  packageName: "@atlaskit/smart-card",
13
- packageVersion: "36.8.0",
13
+ packageVersion: "36.8.2",
14
14
  componentName: 'linkUrl'
15
15
  };
16
16
  const Anchor = withLinkClickedEvent('a');
@@ -1,7 +1,9 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
2
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3
3
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4
- import { extractLink, extractPreview, extractProvider, extractProviderIcon, extractTitle, extractUrlFromIconJsonLd } from '@atlaskit/link-extractors';
4
+ import { extractEntityProvider, extractLink, extractPreview, extractProvider, extractProviderIcon, extractSmartLinkEmbed, extractSmartLinkTitle, extractSmartLinkUrl, extractTitle, extractUrlFromIconJsonLd, isEntityPresent } from '@atlaskit/link-extractors';
5
+ import { fg } from '@atlaskit/platform-feature-flags';
6
+ import { getEmptyJsonLd } from '../../utils/jsonld';
5
7
  import { prioritiseIcon } from '../common/icon';
6
8
  import { extractIsSupportTheming } from '../common/meta/extractIsSupportTheming';
7
9
  import { extractIsTrusted } from '../common/meta/extractIsTrusted';
@@ -35,7 +37,29 @@ function generateContext(jsonLd) {
35
37
  icon: icon ? icon : provider.icon
36
38
  });
37
39
  }
38
- export var extractEmbedProps = function extractEmbedProps(jsonLd, meta, platform, iframeUrlType) {
40
+
41
+ /**
42
+ * We can migrate this to link extractors once we have deprecated JsonLd
43
+ */
44
+ function extractSmartLinkContext(response) {
45
+ if (isEntityPresent(response)) {
46
+ return extractEntityProvider(response);
47
+ }
48
+ return generateContext(response === null || response === void 0 ? void 0 : response.data);
49
+ }
50
+ export var extractEmbedProps = function extractEmbedProps(response, platform, iframeUrlType) {
51
+ var meta = response === null || response === void 0 ? void 0 : response.meta;
52
+ var jsonLd = (response === null || response === void 0 ? void 0 : response.data) || getEmptyJsonLd();
53
+ if (fg('smart_links_noun_support')) {
54
+ return {
55
+ link: extractSmartLinkUrl(response) || '',
56
+ title: extractSmartLinkTitle(response),
57
+ context: extractSmartLinkContext(response),
58
+ preview: extractSmartLinkEmbed(response, iframeUrlType),
59
+ isTrusted: extractIsTrusted(meta),
60
+ isSupportTheming: extractIsSupportTheming(meta)
61
+ };
62
+ }
39
63
  return {
40
64
  link: extractLink(jsonLd) || '',
41
65
  title: extractTitle(jsonLd),
@@ -1,10 +1,13 @@
1
- import { extractLink, extractProvider, extractTitle } from '@atlaskit/link-extractors';
1
+ import { extractEntityProvider, extractLink, extractProvider,
2
+ // extractSmartLinkIcon,
3
+ extractSmartLinkTitle, extractSmartLinkUrl, extractTitle, isEntityPresent } from '@atlaskit/link-extractors';
4
+ import { fg } from '@atlaskit/platform-feature-flags';
2
5
  import { extractIcon } from '../common/icon';
3
6
  import { extractLozenge } from '../common/lozenge';
4
7
  import { extractTitleTextColor } from '../common/primitives';
5
8
  import { extractTitlePrefix } from '../common/title-prefix';
6
9
  import { CONFLUENCE_GENERATOR_ID, JIRA_GENERATOR_ID } from '../constants';
7
- export var extractInlineIcon = function extractInlineIcon(jsonLd) {
10
+ var extractInlineIcon = function extractInlineIcon(jsonLd) {
8
11
  var showIconLabel = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
9
12
  var provider = extractProvider(jsonLd);
10
13
  if (provider && provider.id) {
@@ -14,8 +17,35 @@ export var extractInlineIcon = function extractInlineIcon(jsonLd) {
14
17
  }
15
18
  return extractIcon(jsonLd, 'provider', showIconLabel);
16
19
  };
17
- export var extractInlineProps = function extractInlineProps(jsonLd, renderers, removeTextHighlightingFromTitle) {
20
+ var extractSmartLinkInlineIcon = function extractSmartLinkInlineIcon(response) {
21
+ var showLabel = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
22
+ if (isEntityPresent(response)) {
23
+ var provider = extractEntityProvider(response);
24
+ if (provider) {
25
+ return provider.icon;
26
+ }
27
+ // We don't need this for design entities,
28
+ // but we can add it back when we support more nouns
29
+ // it requires extractInlineIcon to be moved to the smart link extractor package.
30
+ // see: https://product-fabric.atlassian.net/browse/EDM-12375
31
+ // return extractSmartLinkIcon(response);
32
+ }
33
+ return extractInlineIcon(response === null || response === void 0 ? void 0 : response.data, showLabel);
34
+ };
35
+ export var extractInlineProps = function extractInlineProps(response, renderers, removeTextHighlightingFromTitle) {
18
36
  var showLabel = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
37
+ var jsonLd = response === null || response === void 0 ? void 0 : response.data;
38
+ if (fg('smart_links_noun_support')) {
39
+ return {
40
+ icon: extractSmartLinkInlineIcon(response, showLabel),
41
+ link: extractSmartLinkUrl(response),
42
+ title: extractSmartLinkTitle(response, removeTextHighlightingFromTitle),
43
+ // As we migrate to support more nouns we can incorporate these fields
44
+ lozenge: extractLozenge(jsonLd),
45
+ titleTextColor: extractTitleTextColor(jsonLd),
46
+ titlePrefix: extractTitlePrefix(jsonLd, renderers, 'inline')
47
+ };
48
+ }
19
49
  return {
20
50
  link: extractLink(jsonLd),
21
51
  title: extractTitle(jsonLd, removeTextHighlightingFromTitle),
@@ -1,7 +1,9 @@
1
1
  import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
2
  import _regeneratorRuntime from "@babel/runtime/regenerator";
3
3
  import { useCallback } from 'react';
4
+ import { isEntityPresent } from '@atlaskit/link-extractors';
4
5
  import { useSmartLinkContext } from '@atlaskit/link-provider';
6
+ import { fg } from '@atlaskit/platform-feature-flags';
5
7
  import { SmartLinkStatus } from '../../../constants';
6
8
  import { addMetadataToExperience } from '../../analytics';
7
9
  import useResponse from '../use-response';
@@ -36,7 +38,7 @@ var useResolve = function useResolve() {
36
38
  status: SmartLinkStatus.Pending,
37
39
  details: undefined
38
40
  }, details = _ref2.details;
39
- hasData = !!(details && details.data);
41
+ hasData = fg('smart_links_noun_support') ? !!(details && details.data || isEntityPresent(details)) : !!(details && details.data);
40
42
  if (!(isReloading || !hasData || isMetadataRequest)) {
41
43
  _context.next = 9;
42
44
  break;
@@ -4,7 +4,7 @@ export var ANALYTICS_CHANNEL = 'media';
4
4
  export var context = {
5
5
  componentName: 'smart-cards',
6
6
  packageName: "@atlaskit/smart-card",
7
- packageVersion: "36.8.0"
7
+ packageVersion: "36.8.2"
8
8
  };
9
9
  export var TrackQuickActionType = /*#__PURE__*/function (TrackQuickActionType) {
10
10
  TrackQuickActionType["StatusUpdate"] = "StatusUpdate";
@@ -79,17 +79,45 @@ var successfulResponseData = _objectSpread(_objectSpread({}, errorResponseData),
79
79
  href: 'https://www.ilovecheese.com'
80
80
  }
81
81
  });
82
- export var mocks = {
83
- success: {
84
- meta: {
85
- visibility: 'public',
86
- access: 'granted',
87
- auth: [],
88
- definitionId: 'd1',
89
- key: 'object-provider'
90
- },
91
- data: successfulResponseData
82
+ var jsonLdResponse = {
83
+ meta: {
84
+ visibility: 'public',
85
+ access: 'granted',
86
+ auth: [],
87
+ definitionId: 'd1',
88
+ key: 'object-provider'
92
89
  },
90
+ data: successfulResponseData
91
+ };
92
+ var nounDataResponse = {
93
+ nounData: {
94
+ id: 'I love cheese',
95
+ displayName: 'I love cheese',
96
+ url: 'https://some.url',
97
+ lastUpdatedAt: '2025-01-08T22:26:52.501Z',
98
+ thumbnail: {
99
+ externalUrl: 'https://www.ilovecheese.com'
100
+ },
101
+ 'atlassian:design': {
102
+ liveEmbedUrl: 'https://www.ilovecheese.com',
103
+ type: 'FILE',
104
+ inspectUrl: 'https://www.ilovecheese.com',
105
+ iconUrl: 'https://www.ilovecheese.com'
106
+ }
107
+ }
108
+ };
109
+ export var mocks = {
110
+ success: _objectSpread({}, jsonLdResponse),
111
+ nounDataSuccess: _objectSpread(_objectSpread(_objectSpread({}, jsonLdResponse), nounDataResponse), {}, {
112
+ meta: _objectSpread(_objectSpread({}, jsonLdResponse.meta), {}, {
113
+ generator: {
114
+ name: 'I love cheese',
115
+ icon: {
116
+ url: 'https://www.ilovecheese.com'
117
+ }
118
+ }
119
+ })
120
+ }),
93
121
  notFound: {
94
122
  meta: {
95
123
  visibility: 'not_found',
@@ -7,7 +7,7 @@ import { extractEmbedProps } from '../../extractors/embed';
7
7
  import { extractInlineProps } from '../../extractors/inline';
8
8
  import { getExtensionKey, hasAuthScopeOverrides } from '../../state/helpers';
9
9
  import { useControlDataExportConfig } from '../../state/hooks/use-control-data-export-config';
10
- import { getEmptyJsonLd, getForbiddenJsonLd } from '../../utils/jsonld';
10
+ import { getForbiddenJsonLd } from '../../utils/jsonld';
11
11
  import { getIsDataExportEnabled } from '../../utils/should-data-export';
12
12
  import BlockCardResolvedView from '../BlockCard/views/ResolvedView';
13
13
  import { InlineCardResolvedView } from '../InlineCard/ResolvedView';
@@ -39,8 +39,6 @@ export var EmbedCard = /*#__PURE__*/React.forwardRef(function (_ref, iframeRef)
39
39
  createAnalyticsEvent = _useAnalyticsEvents.createAnalyticsEvent;
40
40
  var status = cardState.status,
41
41
  details = cardState.details;
42
- var data = details && details.data || getEmptyJsonLd();
43
- var meta = details && details.meta;
44
42
  var extensionKey = getExtensionKey(details);
45
43
  var isProductIntegrationSupported = hasAuthScopeOverrides(details);
46
44
  var _useControlDataExport = useControlDataExportConfig(),
@@ -60,7 +58,7 @@ export var EmbedCard = /*#__PURE__*/React.forwardRef(function (_ref, iframeRef)
60
58
  testId: testId ? "".concat(testId, "-resolving-view") : 'embed-card-resolving-view'
61
59
  });
62
60
  case 'resolved':
63
- var resolvedViewProps = extractEmbedProps(data, meta, platform, iframeUrlType);
61
+ var resolvedViewProps = extractEmbedProps(details, platform, iframeUrlType);
64
62
  if (onResolve) {
65
63
  var _resolvedViewProps$pr;
66
64
  onResolve({
@@ -71,7 +69,7 @@ export var EmbedCard = /*#__PURE__*/React.forwardRef(function (_ref, iframeRef)
71
69
  }
72
70
  if (fg('platform_smart_links_controlled_dsp_export_view')) {
73
71
  if (getIsDataExportEnabled(shouldControlDataExport, cardState.details)) {
74
- var unauthViewProps = extractEmbedProps(data, meta, platform);
72
+ var unauthViewProps = extractEmbedProps(details, platform);
75
73
  return /*#__PURE__*/React.createElement(UnauthorizedView, {
76
74
  context: unauthViewProps.context,
77
75
  extensionKey: extensionKey,
@@ -99,7 +97,7 @@ export var EmbedCard = /*#__PURE__*/React.forwardRef(function (_ref, iframeRef)
99
97
  }));
100
98
  } else {
101
99
  if (platform === 'mobile') {
102
- var resolvedInlineViewProps = extractInlineProps(data);
100
+ var resolvedInlineViewProps = extractInlineProps(details);
103
101
  return /*#__PURE__*/React.createElement(InlineCardResolvedView, _extends({}, resolvedInlineViewProps, {
104
102
  isSelected: isSelected,
105
103
  testId: testId,
@@ -124,7 +122,7 @@ export var EmbedCard = /*#__PURE__*/React.forwardRef(function (_ref, iframeRef)
124
122
  status: status
125
123
  });
126
124
  }
127
- var unauthorisedViewProps = extractEmbedProps(data, meta, platform);
125
+ var unauthorisedViewProps = extractEmbedProps(details, platform);
128
126
  return /*#__PURE__*/React.createElement(UnauthorizedView, {
129
127
  context: unauthorisedViewProps.context,
130
128
  extensionKey: extensionKey,
@@ -144,7 +142,7 @@ export var EmbedCard = /*#__PURE__*/React.forwardRef(function (_ref, iframeRef)
144
142
  status: status
145
143
  });
146
144
  }
147
- var forbiddenViewProps = extractEmbedProps(data, meta, platform);
145
+ var forbiddenViewProps = extractEmbedProps(details, platform);
148
146
  var cardMetadata = (_details$meta = details === null || details === void 0 ? void 0 : details.meta) !== null && _details$meta !== void 0 ? _details$meta : getForbiddenJsonLd().meta;
149
147
  if (forbiddenViewProps.preview) {
150
148
  return /*#__PURE__*/React.createElement(EmbedCardResolvedView, _extends({}, forbiddenViewProps, {
@@ -179,7 +177,7 @@ export var EmbedCard = /*#__PURE__*/React.forwardRef(function (_ref, iframeRef)
179
177
  status: status
180
178
  });
181
179
  }
182
- var notFoundViewProps = extractEmbedProps(data, meta, platform);
180
+ var notFoundViewProps = extractEmbedProps(details, platform);
183
181
  var notFoundAccessContext = details !== null && details !== void 0 && details.meta ? extractRequestAccessContextImproved({
184
182
  jsonLd: details === null || details === void 0 ? void 0 : details.meta,
185
183
  url: url,
@@ -1,8 +1,9 @@
1
1
  import _extends from "@babel/runtime/helpers/extends";
2
2
  import React, { useEffect } from 'react';
3
3
  import { useAnalyticsEvents } from '@atlaskit/analytics-next';
4
- import { extractProvider } from '@atlaskit/link-extractors';
4
+ import { extractProvider, extractSmartLinkProvider } from '@atlaskit/link-extractors';
5
5
  import { useFeatureFlag } from '@atlaskit/link-provider';
6
+ import { fg } from '@atlaskit/platform-feature-flags';
6
7
  import { SmartLinkStatus } from '../../constants';
7
8
  import { extractRequestAccessContextImproved } from '../../extractors/common/context/extractAccessContext';
8
9
  import { extractInlineProps } from '../../extractors/inline';
@@ -46,7 +47,7 @@ export var InlineCard = function InlineCard(_ref) {
46
47
  if (showHoverPreview === undefined && showHoverPreviewFlag !== undefined) {
47
48
  showHoverPreview = Boolean(showHoverPreviewFlag);
48
49
  }
49
- var resolvedProps = status === SmartLinkStatus.Resolved ? extractInlineProps(cardDetails, renderers, removeTextHighlightingFromTitle, false) : {};
50
+ var resolvedProps = status === SmartLinkStatus.Resolved ? extractInlineProps(details, renderers, removeTextHighlightingFromTitle, false) : {};
50
51
  useEffect(function () {
51
52
  switch (status) {
52
53
  case SmartLinkStatus.Resolved:
@@ -95,7 +96,7 @@ export var InlineCard = function InlineCard(_ref) {
95
96
  truncateInline: truncateInline
96
97
  }));
97
98
  case 'unauthorized':
98
- var provider = extractProvider(cardDetails);
99
+ var provider = fg('smart_links_noun_support') ? extractSmartLinkProvider(details) : extractProvider(cardDetails);
99
100
  return /*#__PURE__*/React.createElement(InlineCardUnauthorizedView, {
100
101
  icon: provider && provider.icon,
101
102
  context: provider && provider.text,
@@ -110,7 +111,7 @@ export var InlineCard = function InlineCard(_ref) {
110
111
  truncateInline: truncateInline
111
112
  });
112
113
  case 'forbidden':
113
- var providerForbidden = extractProvider(cardDetails);
114
+ var providerForbidden = fg('smart_links_noun_support') ? extractSmartLinkProvider(details) : extractProvider(cardDetails);
114
115
  var cardMetadata = (_details$meta = details === null || details === void 0 ? void 0 : details.meta) !== null && _details$meta !== void 0 ? _details$meta : getForbiddenJsonLd().meta;
115
116
  var requestAccessContext = extractRequestAccessContextImproved({
116
117
  jsonLd: cardMetadata,
@@ -131,7 +132,7 @@ export var InlineCard = function InlineCard(_ref) {
131
132
  truncateInline: truncateInline
132
133
  });
133
134
  case 'not_found':
134
- var providerNotFound = extractProvider(cardDetails);
135
+ var providerNotFound = fg('smart_links_noun_support') ? extractSmartLinkProvider(details) : extractProvider(cardDetails);
135
136
  return /*#__PURE__*/React.createElement(InlineCardErroredView, {
136
137
  url: url,
137
138
  icon: providerNotFound && providerNotFound.icon,
@@ -13,7 +13,7 @@ import LinkWarningModal from './LinkWarningModal';
13
13
  import { useLinkWarningModal } from './LinkWarningModal/hooks/use-link-warning-modal';
14
14
  var PACKAGE_DATA = {
15
15
  packageName: "@atlaskit/smart-card",
16
- packageVersion: "36.8.0",
16
+ packageVersion: "36.8.2",
17
17
  componentName: 'linkUrl'
18
18
  };
19
19
  var Anchor = withLinkClickedEvent('a');
@@ -1,4 +1,4 @@
1
- import { type JsonLd } from '@atlaskit/json-ld-types';
1
+ import { SmartLinkResponse } from '@atlaskit/linking-types';
2
2
  import { type CardPlatform, type EmbedIframeUrlType } from '../../view/Card/types';
3
3
  import { type EmbedCardResolvedViewProps } from '../../view/EmbedCard/views/ResolvedView';
4
- export declare const extractEmbedProps: (jsonLd: JsonLd.Data.BaseData, meta?: JsonLd.Meta.BaseMeta, platform?: CardPlatform, iframeUrlType?: EmbedIframeUrlType) => EmbedCardResolvedViewProps;
4
+ export declare const extractEmbedProps: (response?: SmartLinkResponse, platform?: CardPlatform, iframeUrlType?: EmbedIframeUrlType) => EmbedCardResolvedViewProps;
@@ -1,6 +1,4 @@
1
- /// <reference types="react" />
2
- import { type JsonLd } from '@atlaskit/json-ld-types';
3
1
  import { type CardProviderRenderers } from '@atlaskit/link-provider';
2
+ import { SmartLinkResponse } from '@atlaskit/linking-types';
4
3
  import { type InlineCardResolvedViewProps } from '../../view/InlineCard/ResolvedView';
5
- export declare const extractInlineIcon: (jsonLd: JsonLd.Data.BaseData, showIconLabel?: boolean) => import("react").ReactNode;
6
- export declare const extractInlineProps: (jsonLd: JsonLd.Data.BaseData, renderers?: CardProviderRenderers, removeTextHighlightingFromTitle?: boolean, showLabel?: boolean) => InlineCardResolvedViewProps;
4
+ export declare const extractInlineProps: (response?: SmartLinkResponse, renderers?: CardProviderRenderers, removeTextHighlightingFromTitle?: boolean, showLabel?: boolean) => InlineCardResolvedViewProps;
@@ -1,4 +1,5 @@
1
1
  import { type JsonLd } from '@atlaskit/json-ld-types';
2
+ import { SmartLinkResponse } from '@atlaskit/linking-types';
2
3
  export declare const mockContext: {
3
4
  readonly '@vocab': "https://www.w3.org/ns/activitystreams#";
4
5
  readonly atlassian: "https://schema.atlassian.com/ns/vocabulary#";
@@ -12,6 +13,7 @@ export declare const mockGenerator: {
12
13
  export declare const mockByUrl: (url: string) => JsonLd.Response<JsonLd.Data.BaseData>;
13
14
  export declare const mocks: {
14
15
  success: JsonLd.Response<JsonLd.Data.BaseData>;
16
+ nounDataSuccess: SmartLinkResponse;
15
17
  notFound: JsonLd.Response<JsonLd.Data.BaseData>;
16
18
  forbidden: JsonLd.Response<JsonLd.Data.BaseData>;
17
19
  forbiddenWithNoAuth: JsonLd.Response<JsonLd.Data.BaseData>;
@@ -13,7 +13,7 @@ export interface EmbedCardResolvedViewProps {
13
13
  frameStyle?: FrameStyle;
14
14
  /** The src to be used for the `iframe` */
15
15
  preview?: {
16
- src: string;
16
+ src?: string;
17
17
  aspectRatio?: number;
18
18
  };
19
19
  /** A flag that determines whether link source can be trusted in iframe **/
@@ -1,4 +1,4 @@
1
- import { type JsonLd } from '@atlaskit/json-ld-types';
1
+ import { SmartLinkResponse } from '@atlaskit/linking-types';
2
2
  import { type CardPlatform, type EmbedIframeUrlType } from '../../view/Card/types';
3
3
  import { type EmbedCardResolvedViewProps } from '../../view/EmbedCard/views/ResolvedView';
4
- export declare const extractEmbedProps: (jsonLd: JsonLd.Data.BaseData, meta?: JsonLd.Meta.BaseMeta, platform?: CardPlatform, iframeUrlType?: EmbedIframeUrlType) => EmbedCardResolvedViewProps;
4
+ export declare const extractEmbedProps: (response?: SmartLinkResponse, platform?: CardPlatform, iframeUrlType?: EmbedIframeUrlType) => EmbedCardResolvedViewProps;
@@ -1,6 +1,4 @@
1
- /// <reference types="react" />
2
- import { type JsonLd } from '@atlaskit/json-ld-types';
3
1
  import { type CardProviderRenderers } from '@atlaskit/link-provider';
2
+ import { SmartLinkResponse } from '@atlaskit/linking-types';
4
3
  import { type InlineCardResolvedViewProps } from '../../view/InlineCard/ResolvedView';
5
- export declare const extractInlineIcon: (jsonLd: JsonLd.Data.BaseData, showIconLabel?: boolean) => import("react").ReactNode;
6
- export declare const extractInlineProps: (jsonLd: JsonLd.Data.BaseData, renderers?: CardProviderRenderers, removeTextHighlightingFromTitle?: boolean, showLabel?: boolean) => InlineCardResolvedViewProps;
4
+ export declare const extractInlineProps: (response?: SmartLinkResponse, renderers?: CardProviderRenderers, removeTextHighlightingFromTitle?: boolean, showLabel?: boolean) => InlineCardResolvedViewProps;
@@ -1,4 +1,5 @@
1
1
  import { type JsonLd } from '@atlaskit/json-ld-types';
2
+ import { SmartLinkResponse } from '@atlaskit/linking-types';
2
3
  export declare const mockContext: {
3
4
  readonly '@vocab': "https://www.w3.org/ns/activitystreams#";
4
5
  readonly atlassian: "https://schema.atlassian.com/ns/vocabulary#";
@@ -12,6 +13,7 @@ export declare const mockGenerator: {
12
13
  export declare const mockByUrl: (url: string) => JsonLd.Response<JsonLd.Data.BaseData>;
13
14
  export declare const mocks: {
14
15
  success: JsonLd.Response<JsonLd.Data.BaseData>;
16
+ nounDataSuccess: SmartLinkResponse;
15
17
  notFound: JsonLd.Response<JsonLd.Data.BaseData>;
16
18
  forbidden: JsonLd.Response<JsonLd.Data.BaseData>;
17
19
  forbiddenWithNoAuth: JsonLd.Response<JsonLd.Data.BaseData>;
@@ -13,7 +13,7 @@ export interface EmbedCardResolvedViewProps {
13
13
  frameStyle?: FrameStyle;
14
14
  /** The src to be used for the `iframe` */
15
15
  preview?: {
16
- src: string;
16
+ src?: string;
17
17
  aspectRatio?: number;
18
18
  };
19
19
  /** A flag that determines whether link source can be trusted in iframe **/
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/smart-card",
3
- "version": "36.8.0",
3
+ "version": "36.8.2",
4
4
  "description": "Smart card component",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"
@@ -41,8 +41,8 @@
41
41
  "@atlaskit/heading": "^5.2.0",
42
42
  "@atlaskit/icon": "^25.6.0",
43
43
  "@atlaskit/icon-file-type": "^7.0.0",
44
- "@atlaskit/icon-lab": "^4.8.0",
45
- "@atlaskit/icon-object": "^7.0.0",
44
+ "@atlaskit/icon-lab": "^4.9.0",
45
+ "@atlaskit/icon-object": "^7.1.0",
46
46
  "@atlaskit/icon-priority": "^6.3.0",
47
47
  "@atlaskit/image": "^3.0.0",
48
48
  "@atlaskit/json-ld-types": "^1.1.0",
@@ -50,16 +50,16 @@
50
50
  "@atlaskit/link": "^3.1.0",
51
51
  "@atlaskit/link-analytics": "^9.1.0",
52
52
  "@atlaskit/link-client-extension": "^4.0.0",
53
- "@atlaskit/link-extractors": "^2.1.0",
53
+ "@atlaskit/link-extractors": "^2.2.0",
54
54
  "@atlaskit/linking-common": "^8.0.0",
55
- "@atlaskit/linking-types": "^9.8.0",
55
+ "@atlaskit/linking-types": "^9.9.0",
56
56
  "@atlaskit/logo": "^16.0.0",
57
57
  "@atlaskit/lozenge": "^12.2.0",
58
58
  "@atlaskit/menu": "^3.2.0",
59
59
  "@atlaskit/modal-dialog": "^14.1.0",
60
60
  "@atlaskit/outbound-auth-flow-client": "^3.4.0",
61
61
  "@atlaskit/platform-feature-flags": "^1.1.0",
62
- "@atlaskit/popup": "^4.0.0",
62
+ "@atlaskit/popup": "^4.1.0",
63
63
  "@atlaskit/primitives": "^14.4.0",
64
64
  "@atlaskit/section-message": "^8.2.0",
65
65
  "@atlaskit/select": "^20.3.0",
@@ -97,7 +97,7 @@
97
97
  "@atlaskit/css-reset": "^7.2.0",
98
98
  "@atlaskit/link-test-helpers": "^8.0.0",
99
99
  "@atlaskit/media-test-helpers": "^35.0.0",
100
- "@atlaskit/react-ufo": "^3.5.0",
100
+ "@atlaskit/react-ufo": "^3.6.0",
101
101
  "@atlaskit/ssr": "^0.4.0",
102
102
  "@atlaskit/visual-regression": "^0.10.0",
103
103
  "@atlassian/analytics-tooling": "^0.5.0",
@@ -223,6 +223,9 @@
223
223
  },
224
224
  "platform-linking-flexible-card-openness": {
225
225
  "type": "boolean"
226
+ },
227
+ "smart_links_noun_support": {
228
+ "type": "boolean"
226
229
  }
227
230
  }
228
231
  }