@atlaskit/smart-card 23.4.7 → 23.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/cjs/constants.js +10 -2
  3. package/dist/cjs/index.js +6 -0
  4. package/dist/cjs/state/flexible-ui-context/utils.js +16 -0
  5. package/dist/cjs/utils/flexible.js +8 -2
  6. package/dist/cjs/version.json +1 -1
  7. package/dist/cjs/view/BlockCard/components/flexible/footer/index.js +2 -2
  8. package/dist/cjs/view/BlockCard/index.js +83 -12
  9. package/dist/cjs/view/BlockCard/views/flexible/FlexibleResolvedView.js +108 -0
  10. package/dist/cjs/view/BlockCard/views/flexible/FlexibleUnauthorisedView.js +1 -1
  11. package/dist/cjs/view/CardWithUrl/component.js +4 -2
  12. package/dist/cjs/view/EmbedModal/components/link-info/index.js +2 -1
  13. package/dist/cjs/view/FlexibleCard/components/blocks/preview-block/index.js +6 -9
  14. package/dist/cjs/view/FlexibleCard/components/blocks/preview-block/resolved/index.js +109 -0
  15. package/dist/cjs/view/FlexibleCard/components/common/image-icon/index.js +4 -2
  16. package/dist/cjs/view/FlexibleCard/components/container/index.js +40 -4
  17. package/dist/cjs/view/FlexibleCard/components/elements/media/index.js +2 -0
  18. package/dist/es2019/constants.js +8 -1
  19. package/dist/es2019/index.js +1 -1
  20. package/dist/es2019/state/flexible-ui-context/utils.js +5 -0
  21. package/dist/es2019/utils/flexible.js +3 -2
  22. package/dist/es2019/version.json +1 -1
  23. package/dist/es2019/view/BlockCard/components/flexible/footer/index.js +2 -2
  24. package/dist/es2019/view/BlockCard/index.js +80 -13
  25. package/dist/es2019/view/BlockCard/views/flexible/FlexibleErroredView.js +2 -2
  26. package/dist/es2019/view/BlockCard/views/flexible/FlexibleForbiddenView.js +2 -2
  27. package/dist/es2019/view/BlockCard/views/flexible/FlexibleNotFoundView.js +2 -2
  28. package/dist/es2019/view/BlockCard/views/flexible/FlexibleResolvedView.js +81 -0
  29. package/dist/es2019/view/BlockCard/views/flexible/FlexibleUnauthorisedView.js +3 -3
  30. package/dist/es2019/view/CardWithUrl/component.js +4 -2
  31. package/dist/es2019/view/EmbedModal/components/link-info/index.js +2 -1
  32. package/dist/es2019/view/FlexibleCard/components/blocks/preview-block/index.js +6 -7
  33. package/dist/es2019/view/FlexibleCard/components/blocks/preview-block/resolved/index.js +103 -0
  34. package/dist/es2019/view/FlexibleCard/components/common/image-icon/index.js +4 -2
  35. package/dist/es2019/view/FlexibleCard/components/container/index.js +73 -21
  36. package/dist/es2019/view/FlexibleCard/components/elements/media/index.js +2 -0
  37. package/dist/esm/constants.js +8 -1
  38. package/dist/esm/index.js +1 -1
  39. package/dist/esm/state/flexible-ui-context/utils.js +7 -0
  40. package/dist/esm/utils/flexible.js +4 -1
  41. package/dist/esm/version.json +1 -1
  42. package/dist/esm/view/BlockCard/components/flexible/footer/index.js +2 -2
  43. package/dist/esm/view/BlockCard/index.js +77 -12
  44. package/dist/esm/view/BlockCard/views/flexible/FlexibleErroredView.js +2 -2
  45. package/dist/esm/view/BlockCard/views/flexible/FlexibleForbiddenView.js +2 -2
  46. package/dist/esm/view/BlockCard/views/flexible/FlexibleNotFoundView.js +2 -2
  47. package/dist/esm/view/BlockCard/views/flexible/FlexibleResolvedView.js +87 -0
  48. package/dist/esm/view/BlockCard/views/flexible/FlexibleUnauthorisedView.js +3 -3
  49. package/dist/esm/view/CardWithUrl/component.js +4 -2
  50. package/dist/esm/view/EmbedModal/components/link-info/index.js +2 -1
  51. package/dist/esm/view/FlexibleCard/components/blocks/preview-block/index.js +7 -8
  52. package/dist/esm/view/FlexibleCard/components/blocks/preview-block/resolved/index.js +86 -0
  53. package/dist/esm/view/FlexibleCard/components/common/image-icon/index.js +4 -2
  54. package/dist/esm/view/FlexibleCard/components/container/index.js +42 -6
  55. package/dist/esm/view/FlexibleCard/components/elements/media/index.js +2 -0
  56. package/dist/types/constants.d.ts +4 -0
  57. package/dist/types/index.d.ts +1 -1
  58. package/dist/types/state/flexible-ui-context/utils.d.ts +6 -0
  59. package/dist/types/utils/flexible.d.ts +1 -0
  60. package/dist/types/view/BlockCard/components/flexible/footer/index.d.ts +2 -2
  61. package/dist/types/view/BlockCard/index.d.ts +1 -0
  62. package/dist/types/view/BlockCard/types.d.ts +1 -0
  63. package/dist/types/view/BlockCard/views/flexible/FlexibleResolvedView.d.ts +9 -0
  64. package/dist/types/view/BlockCard/views/flexible/FlexibleUnauthorisedView.d.ts +1 -1
  65. package/dist/types/view/FlexibleCard/components/blocks/preview-block/index.d.ts +1 -0
  66. package/dist/types/view/FlexibleCard/components/blocks/preview-block/resolved/index.d.ts +11 -0
  67. package/dist/types/view/FlexibleCard/components/blocks/preview-block/types.d.ts +15 -0
  68. package/dist/types/view/FlexibleCard/components/common/image-icon/types.d.ts +1 -0
  69. package/dist/types/view/FlexibleCard/components/container/index.d.ts +2 -2
  70. package/dist/types/view/FlexibleCard/components/container/types.d.ts +4 -0
  71. package/dist/types/view/FlexibleCard/components/elements/media/types.d.ts +1 -0
  72. package/package.json +2 -2
  73. package/report.api.md +10 -0
  74. package/tmp/api-report-tmp.d.ts +10 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # @atlaskit/smart-card
2
2
 
3
+ ## 23.5.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`9dd3377f9bb`](https://bitbucket.org/atlassian/atlassian-frontend/commits/9dd3377f9bb) - [ux] This adds support for the new Flexible UI Block Card, added behind a feature flag "useFlexibleBlockCard"
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies
12
+
13
+ ## 23.4.8
14
+
15
+ ### Patch Changes
16
+
17
+ - [`ca2b5b1a999`](https://bitbucket.org/atlassian/atlassian-frontend/commits/ca2b5b1a999) - [ux] fix Safari opening downloads in the same tab
18
+
3
19
  ## 23.4.7
4
20
 
5
21
  ### Patch Changes
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.SmartLinkWidth = exports.SmartLinkTheme = exports.SmartLinkStatus = exports.SmartLinkSize = exports.SmartLinkPosition = exports.SmartLinkDirection = exports.SmartLinkAlignment = exports.MediaType = exports.IconType = exports.ElementName = exports.CONTENT_URL_SECURITY_AND_PERMISSIONS = exports.ActionName = void 0;
6
+ exports.SmartLinkWidth = exports.SmartLinkTheme = exports.SmartLinkStatus = exports.SmartLinkSize = exports.SmartLinkPosition = exports.SmartLinkDirection = exports.SmartLinkAlignment = exports.MediaType = exports.MediaPlacement = exports.IconType = exports.ElementName = exports.CONTENT_URL_SECURITY_AND_PERMISSIONS = exports.ActionName = void 0;
7
7
  var CONTENT_URL_SECURITY_AND_PERMISSIONS = 'https://support.atlassian.com/confluence-cloud/docs/insert-links-and-anchors/#Smart-links';
8
8
  /**
9
9
  * The alignment of Flexible UI component.
@@ -249,4 +249,12 @@ exports.MediaType = MediaType;
249
249
 
250
250
  (function (MediaType) {
251
251
  MediaType["Image"] = "image";
252
- })(MediaType || (exports.MediaType = MediaType = {}));
252
+ })(MediaType || (exports.MediaType = MediaType = {}));
253
+
254
+ var MediaPlacement;
255
+ exports.MediaPlacement = MediaPlacement;
256
+
257
+ (function (MediaPlacement) {
258
+ MediaPlacement["Left"] = "left";
259
+ MediaPlacement["Right"] = "right";
260
+ })(MediaPlacement || (exports.MediaPlacement = MediaPlacement = {}));
package/dist/cjs/index.js CHANGED
@@ -57,6 +57,12 @@ Object.defineProperty(exports, "FooterBlock", {
57
57
  return _blocks.FooterBlock;
58
58
  }
59
59
  });
60
+ Object.defineProperty(exports, "MediaPlacement", {
61
+ enumerable: true,
62
+ get: function get() {
63
+ return _constants.MediaPlacement;
64
+ }
65
+ });
60
66
  Object.defineProperty(exports, "MetadataBlock", {
61
67
  enumerable: true,
62
68
  get: function get() {
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.isFlexUiPreviewPresent = void 0;
7
+
8
+ /**
9
+ * Returns true if preview data is available in the FlexibleUiDataContext
10
+ * @param context is the FlexibleUiDataContext
11
+ */
12
+ var isFlexUiPreviewPresent = function isFlexUiPreviewPresent(context) {
13
+ return Boolean(context && context.preview);
14
+ };
15
+
16
+ exports.isFlexUiPreviewPresent = isFlexUiPreviewPresent;
@@ -7,7 +7,7 @@ var _typeof = require("@babel/runtime/helpers/typeof");
7
7
  Object.defineProperty(exports, "__esModule", {
8
8
  value: true
9
9
  });
10
- exports.isFlexibleUiTitleBlock = exports.isFlexibleUiElement = exports.isFlexibleUiCard = exports.isFlexibleUiBlock = void 0;
10
+ exports.isFlexibleUiTitleBlock = exports.isFlexibleUiPreviewBlock = exports.isFlexibleUiElement = exports.isFlexibleUiCard = exports.isFlexibleUiBlock = void 0;
11
11
 
12
12
  var _react = _interopRequireDefault(require("react"));
13
13
 
@@ -51,4 +51,10 @@ var isFlexibleUiTitleBlock = function isFlexibleUiTitleBlock(node) {
51
51
  return /*#__PURE__*/_react.default.isValidElement(node) && node.type === Blocks.TitleBlock;
52
52
  };
53
53
 
54
- exports.isFlexibleUiTitleBlock = isFlexibleUiTitleBlock;
54
+ exports.isFlexibleUiTitleBlock = isFlexibleUiTitleBlock;
55
+
56
+ var isFlexibleUiPreviewBlock = function isFlexibleUiPreviewBlock(node) {
57
+ return /*#__PURE__*/_react.default.isValidElement(node) && node.type === Blocks.PreviewBlock;
58
+ };
59
+
60
+ exports.isFlexibleUiPreviewBlock = isFlexibleUiPreviewBlock;
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/smart-card",
3
- "version": "23.4.7",
3
+ "version": "23.5.0",
4
4
  "sideEffects": false
5
5
  }
@@ -42,7 +42,7 @@ var providerStyles = (0, _react2.css)(_templateObject2 || (_templateObject2 = (0
42
42
  * @param props are the data required for the block, such as actions to be displayed.
43
43
  */
44
44
 
45
- var Footer = function Footer(props) {
45
+ var BlockCardFooter = function BlockCardFooter(props) {
46
46
  var actions = props.actions,
47
47
  _props$size = props.size,
48
48
  size = _props$size === void 0 ? _constants.SmartLinkSize.Medium : _props$size,
@@ -63,5 +63,5 @@ var Footer = function Footer(props) {
63
63
  })) : null);
64
64
  };
65
65
 
66
- var _default = Footer;
66
+ var _default = BlockCardFooter;
67
67
  exports.default = _default;
@@ -63,7 +63,7 @@ Object.defineProperty(exports, "PreviewAction", {
63
63
 
64
64
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
65
65
 
66
- var _react = _interopRequireDefault(require("react"));
66
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
67
67
 
68
68
  var _helpers = require("../../state/helpers");
69
69
 
@@ -91,15 +91,31 @@ var _ForbiddenView = require("./views/ForbiddenView");
91
91
 
92
92
  var _ErroredView = require("./views/ErroredView");
93
93
 
94
+ var _FlexibleResolvedView = _interopRequireDefault(require("./views/flexible/FlexibleResolvedView"));
95
+
96
+ var _FlexibleUnauthorisedView = _interopRequireDefault(require("./views/flexible/FlexibleUnauthorisedView"));
97
+
98
+ var _FlexibleNotFoundView = _interopRequireDefault(require("./views/flexible/FlexibleNotFoundView"));
99
+
100
+ var _FlexibleErroredView = _interopRequireDefault(require("./views/flexible/FlexibleErroredView"));
101
+
102
+ var _FlexibleForbiddenView = _interopRequireDefault(require("./views/flexible/FlexibleForbiddenView"));
103
+
104
+ var _token = require("../../utils/token");
105
+
106
+ var _react = require("@emotion/react");
107
+
94
108
  var _PreviewAction = _interopRequireDefault(require("./actions/PreviewAction"));
95
109
 
110
+ var _templateObject;
111
+
112
+ var flexibleBlockCardElevationStyle = (0, _react.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n border-radius: 1.5px;\n box-shadow: ", ";\n margin: 2px;\n"])), _token.tokens.elevation);
113
+
96
114
  var BlockCard = function BlockCard(_ref) {
97
115
  var _details$meta, _forbiddenViewProps$c;
98
116
 
99
117
  var url = _ref.url,
100
- _ref$cardState = _ref.cardState,
101
- status = _ref$cardState.status,
102
- details = _ref$cardState.details,
118
+ cardState = _ref.cardState,
103
119
  authFlow = _ref.authFlow,
104
120
  handleAuthorize = _ref.handleAuthorize,
105
121
  handleErrorRetry = _ref.handleErrorRetry,
@@ -112,7 +128,10 @@ var BlockCard = function BlockCard(_ref) {
112
128
  testId = _ref.testId,
113
129
  showActions = _ref.showActions,
114
130
  platform = _ref.platform,
115
- analytics = _ref.analytics;
131
+ analytics = _ref.analytics,
132
+ enableFlexibleBlockCard = _ref.enableFlexibleBlockCard;
133
+ var status = cardState.status,
134
+ details = cardState.details;
116
135
  var data = details && details.data || (0, _jsonld.getEmptyJsonLd)();
117
136
  var meta = details && details.meta;
118
137
  var extractorOpts = {
@@ -122,10 +141,62 @@ var BlockCard = function BlockCard(_ref) {
122
141
  extensionKey: (0, _helpers.getExtensionKey)(details)
123
142
  };
124
143
 
144
+ if (enableFlexibleBlockCard) {
145
+ var ui = {
146
+ hideElevation: true
147
+ };
148
+ var flexibleProps = {
149
+ cardState: cardState,
150
+ url: url,
151
+ testId: testId,
152
+ onError: onError,
153
+ renderers: renderers,
154
+ ui: ui
155
+ };
156
+
157
+ switch (status) {
158
+ case 'pending':
159
+ case 'resolving':
160
+ case 'resolved':
161
+ return (0, _react.jsx)("div", {
162
+ css: flexibleBlockCardElevationStyle
163
+ }, (0, _react.jsx)(_FlexibleResolvedView.default, flexibleProps));
164
+
165
+ case 'unauthorized':
166
+ return (0, _react.jsx)("div", {
167
+ css: flexibleBlockCardElevationStyle
168
+ }, (0, _react.jsx)(_FlexibleUnauthorisedView.default, (0, _extends2.default)({}, flexibleProps, {
169
+ onAuthorize: handleAuthorize
170
+ })));
171
+
172
+ case 'forbidden':
173
+ return (0, _react.jsx)("div", {
174
+ css: flexibleBlockCardElevationStyle
175
+ }, (0, _react.jsx)(_FlexibleForbiddenView.default, (0, _extends2.default)({}, flexibleProps, {
176
+ onAuthorize: handleAuthorize
177
+ })));
178
+
179
+ case 'not_found':
180
+ return (0, _react.jsx)("div", {
181
+ css: flexibleBlockCardElevationStyle
182
+ }, (0, _react.jsx)(_FlexibleNotFoundView.default, (0, _extends2.default)({}, flexibleProps, {
183
+ onAuthorize: handleAuthorize
184
+ })));
185
+
186
+ case 'fallback':
187
+ case 'errored':
188
+ return (0, _react.jsx)("div", {
189
+ css: flexibleBlockCardElevationStyle
190
+ }, (0, _react.jsx)(_FlexibleErroredView.default, (0, _extends2.default)({}, flexibleProps, {
191
+ onAuthorize: handleAuthorize
192
+ })));
193
+ }
194
+ }
195
+
125
196
  switch (status) {
126
197
  case 'pending':
127
198
  case 'resolving':
128
- return /*#__PURE__*/_react.default.createElement(_ResolvingView.ResolvingView, {
199
+ return (0, _react.jsx)(_ResolvingView.ResolvingView, {
129
200
  testId: testId,
130
201
  isSelected: isSelected
131
202
  });
@@ -140,7 +211,7 @@ var BlockCard = function BlockCard(_ref) {
140
211
  });
141
212
  }
142
213
 
143
- return /*#__PURE__*/_react.default.createElement(_ResolvedView.ResolvedView, (0, _extends2.default)({}, resolvedViewProps, {
214
+ return (0, _react.jsx)(_ResolvedView.ResolvedView, (0, _extends2.default)({}, resolvedViewProps, {
144
215
  isSelected: isSelected,
145
216
  testId: testId,
146
217
  showActions: showActions,
@@ -156,7 +227,7 @@ var BlockCard = function BlockCard(_ref) {
156
227
  }
157
228
 
158
229
  var unauthorizedViewProps = (0, _block.extractBlockProps)(data, meta, extractorOpts);
159
- return /*#__PURE__*/_react.default.createElement(_UnauthorizedView.UnauthorizedView, (0, _extends2.default)({}, unauthorizedViewProps, {
230
+ return (0, _react.jsx)(_UnauthorizedView.UnauthorizedView, (0, _extends2.default)({}, unauthorizedViewProps, {
160
231
  isSelected: isSelected,
161
232
  testId: testId,
162
233
  showActions: showActions,
@@ -179,7 +250,7 @@ var BlockCard = function BlockCard(_ref) {
179
250
  url: url,
180
251
  context: (_forbiddenViewProps$c = forbiddenViewProps.context) === null || _forbiddenViewProps$c === void 0 ? void 0 : _forbiddenViewProps$c.text
181
252
  });
182
- return /*#__PURE__*/_react.default.createElement(_ForbiddenView.ForbiddenView, (0, _extends2.default)({}, forbiddenViewProps, {
253
+ return (0, _react.jsx)(_ForbiddenView.ForbiddenView, (0, _extends2.default)({}, forbiddenViewProps, {
183
254
  isSelected: isSelected,
184
255
  showActions: showActions,
185
256
  actions: handleAuthorize ? [(0, _ForbiddenAction.ForbiddenAction)(handleAuthorize)] : [],
@@ -196,7 +267,7 @@ var BlockCard = function BlockCard(_ref) {
196
267
  }
197
268
 
198
269
  var notFoundViewProps = (0, _block.extractBlockProps)(data, meta, extractorOpts);
199
- return /*#__PURE__*/_react.default.createElement(_NotFoundView.NotFoundView, (0, _extends2.default)({}, notFoundViewProps, {
270
+ return (0, _react.jsx)(_NotFoundView.NotFoundView, (0, _extends2.default)({}, notFoundViewProps, {
200
271
  isSelected: isSelected,
201
272
  testId: testId,
202
273
  onClick: handleFrameClick
@@ -213,7 +284,7 @@ var BlockCard = function BlockCard(_ref) {
213
284
  }
214
285
 
215
286
  if (authFlow && authFlow === 'disabled') {
216
- return /*#__PURE__*/_react.default.createElement(_LinkView.CardLinkView, {
287
+ return (0, _react.jsx)(_LinkView.CardLinkView, {
217
288
  link: url,
218
289
  isSelected: isSelected,
219
290
  onClick: handleFrameClick,
@@ -221,7 +292,7 @@ var BlockCard = function BlockCard(_ref) {
221
292
  });
222
293
  }
223
294
 
224
- return /*#__PURE__*/_react.default.createElement(_ErroredView.ErroredView, {
295
+ return (0, _react.jsx)(_ErroredView.ErroredView, {
225
296
  link: url,
226
297
  isSelected: isSelected,
227
298
  onRetry: handleErrorRetry,
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports.default = void 0;
11
+
12
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
+
14
+ var _react = _interopRequireWildcard(require("react"));
15
+
16
+ var _FlexibleCard = _interopRequireDefault(require("../../../FlexibleCard"));
17
+
18
+ var _titleBlock = _interopRequireDefault(require("../../../FlexibleCard/components/blocks/title-block"));
19
+
20
+ var _blocks = require("../../../FlexibleCard/components/blocks");
21
+
22
+ var _constants = require("../../../../constants");
23
+
24
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
25
+
26
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
27
+
28
+ /**
29
+ * This view represents a Block card that has an 'Resolved' status.
30
+ * @see SmartLinkStatus
31
+ * @see FlexibleCardProps
32
+ */
33
+ var FlexibleResolvedView = function FlexibleResolvedView(_ref) {
34
+ var cardState = _ref.cardState,
35
+ onClick = _ref.onClick,
36
+ onError = _ref.onError,
37
+ _ref$testId = _ref.testId,
38
+ testId = _ref$testId === void 0 ? 'smart-block-resolved-view' : _ref$testId,
39
+ ui = _ref.ui,
40
+ url = _ref.url;
41
+
42
+ var _useState = (0, _react.useState)(false),
43
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
44
+ isPreviewBlockErrored = _useState2[0],
45
+ setIsPreviewBlockErrored = _useState2[1];
46
+
47
+ (0, _react.useEffect)(function () {
48
+ setIsPreviewBlockErrored(false);
49
+ }, [url, cardState]);
50
+ return /*#__PURE__*/_react.default.createElement(_FlexibleCard.default, {
51
+ appearance: "block",
52
+ cardState: cardState,
53
+ onClick: onClick,
54
+ onError: onError,
55
+ testId: testId,
56
+ ui: ui,
57
+ url: url
58
+ }, /*#__PURE__*/_react.default.createElement(_titleBlock.default, {
59
+ position: _constants.SmartLinkPosition.Center,
60
+ metadata: [{
61
+ name: _constants.ElementName.AuthorGroup
62
+ }, {
63
+ name: _constants.ElementName.Priority
64
+ }, {
65
+ name: _constants.ElementName.State
66
+ }],
67
+ hideRetry: true
68
+ }), /*#__PURE__*/_react.default.createElement(_blocks.MetadataBlock, {
69
+ primary: [{
70
+ name: _constants.ElementName.ModifiedBy
71
+ }, {
72
+ name: _constants.ElementName.ModifiedOn
73
+ }],
74
+ secondary: [{
75
+ name: _constants.ElementName.AttachmentCount
76
+ }, {
77
+ name: _constants.ElementName.CommentCount
78
+ }, {
79
+ name: _constants.ElementName.ReactCount
80
+ }, {
81
+ name: _constants.ElementName.SubscriberCount
82
+ }, {
83
+ name: _constants.ElementName.ViewCount
84
+ }, {
85
+ name: _constants.ElementName.VoteCount
86
+ }, {
87
+ name: _constants.ElementName.DueOn
88
+ }],
89
+ maxLines: 1
90
+ }), /*#__PURE__*/_react.default.createElement(_blocks.MetadataBlock, null), /*#__PURE__*/_react.default.createElement(_blocks.SnippetBlock, null), !isPreviewBlockErrored ? /*#__PURE__*/_react.default.createElement(_blocks.PreviewBlock, {
91
+ placement: _constants.MediaPlacement.Right,
92
+ ignoreContainerPadding: true,
93
+ onError: function onError() {
94
+ setIsPreviewBlockErrored(true);
95
+ }
96
+ }) : null, /*#__PURE__*/_react.default.createElement(_blocks.FooterBlock, {
97
+ actions: [{
98
+ name: _constants.ActionName.PreviewAction
99
+ }, {
100
+ name: _constants.ActionName.ViewAction
101
+ }, {
102
+ name: _constants.ActionName.DownloadAction
103
+ }]
104
+ }));
105
+ };
106
+
107
+ var _default = FlexibleResolvedView;
108
+ exports.default = _default;
@@ -34,7 +34,7 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
34
34
  * It should have a "Connect" button that will allow a user to connect their account and view the block card.
35
35
  *
36
36
  * @see SmartLinkStatus
37
- * @see UnauthorisedViewProps
37
+ * @see FlexibleCardProps
38
38
  */
39
39
  var FlexibleUnauthorisedView = function FlexibleUnauthorisedView(_ref) {
40
40
  var cardState = _ref.cardState,
@@ -81,8 +81,9 @@ function CardWithUrlContent(_ref) {
81
81
 
82
82
  if (showHoverPreview === undefined && showHoverPreviewFlag !== undefined) {
83
83
  showHoverPreview = Boolean(showHoverPreviewFlag);
84
- } // Setup UI handlers.
84
+ }
85
85
 
86
+ var enableFlexibleBlockCardFlag = Boolean((0, _linkProvider.useFeatureFlag)('enableFlexibleBlockCard')); // Setup UI handlers.
86
87
 
87
88
  var handleClick = (0, _react.useCallback)(function (event) {
88
89
  var clickUrl = (0, _helpers.getClickUrl)(url, state.details);
@@ -215,7 +216,8 @@ function CardWithUrlContent(_ref) {
215
216
  onError: onError,
216
217
  testId: testId,
217
218
  showActions: showActions,
218
- platform: platform
219
+ platform: platform,
220
+ enableFlexibleBlockCard: enableFlexibleBlockCardFlag
219
221
  });
220
222
 
221
223
  case 'embed':
@@ -66,7 +66,8 @@ var LinkInfo = function LinkInfo(_ref) {
66
66
  label: _messages.messages.download.defaultMessage
67
67
  }),
68
68
  onClick: onDownloadButtonClick,
69
- testId: "".concat(testId, "-download")
69
+ testId: "".concat(testId, "-download"),
70
+ target: "_blank"
70
71
  });
71
72
  }
72
73
  }, [downloadUrl, onDownloadButtonClick, testId]);
@@ -13,13 +13,13 @@ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/h
13
13
 
14
14
  var _react = _interopRequireDefault(require("react"));
15
15
 
16
- var _constants = require("../../../../../constants");
16
+ var _react2 = require("@emotion/react");
17
17
 
18
- var _block = _interopRequireDefault(require("../block"));
18
+ var _constants = require("../../../../../constants");
19
19
 
20
- var _elements = require("../../elements");
20
+ var _resolved = _interopRequireDefault(require("./resolved"));
21
21
 
22
- var _excluded = ["status", "testId", "onError"];
22
+ var _excluded = ["status", "testId"];
23
23
 
24
24
  /**
25
25
  * Represents a PreviewBlock, which typically contains media or other large format content.
@@ -32,17 +32,14 @@ var PreviewBlock = function PreviewBlock(_ref) {
32
32
  status = _ref$status === void 0 ? _constants.SmartLinkStatus.Fallback : _ref$status,
33
33
  _ref$testId = _ref.testId,
34
34
  testId = _ref$testId === void 0 ? 'smart-block-preview' : _ref$testId,
35
- onError = _ref.onError,
36
35
  blockProps = (0, _objectWithoutProperties2.default)(_ref, _excluded);
37
36
 
38
37
  if (status !== _constants.SmartLinkStatus.Resolved) {
39
38
  return null;
40
39
  }
41
40
 
42
- return /*#__PURE__*/_react.default.createElement(_block.default, (0, _extends2.default)({}, blockProps, {
43
- testId: "".concat(testId, "-resolved-view")
44
- }), /*#__PURE__*/_react.default.createElement(_elements.Preview, {
45
- onError: onError
41
+ return (0, _react2.jsx)(_resolved.default, (0, _extends2.default)({}, blockProps, {
42
+ testId: testId
46
43
  }));
47
44
  };
48
45
 
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ exports.default = void 0;
11
+
12
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
+
14
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
15
+
16
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
17
+
18
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
19
+
20
+ var _react = _interopRequireWildcard(require("react"));
21
+
22
+ var _react2 = require("@emotion/react");
23
+
24
+ var _constants = require("../../../../../../constants");
25
+
26
+ var _block = _interopRequireDefault(require("../../block"));
27
+
28
+ var _elements = require("../../../elements");
29
+
30
+ var _excluded = ["ignoreContainerPadding", "onError", "overrideCss", "placement", "testId"];
31
+
32
+ var _templateObject, _templateObject2, _templateObject3;
33
+
34
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
35
+
36
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
37
+
38
+ /**
39
+ * Due to its placement on the left/right and ignoreContainerPadding prop
40
+ * rely on its parent container styling, css variables are declared in
41
+ * <Container /> to preset the base values for the preview block styling.
42
+ *
43
+ * `--container-padding` is the padding of the Container. This value is based
44
+ * on size and hidePadding.
45
+ * `--container-gap-left` and `--container-gap-right` are the gap or padding of
46
+ * the Container depending on whether the container has other preview blocks
47
+ * with left/right positioning.
48
+ * `--preview-block-width` is the size of the preview image in relation to
49
+ * the Container width when the placement is left/right.
50
+ * @param placement
51
+ * @param ignoreContainerPadding
52
+ */
53
+ var getPreviewBlockStyles = function getPreviewBlockStyles(placement, ignoreContainerPadding) {
54
+ if (placement === _constants.MediaPlacement.Left || placement === _constants.MediaPlacement.Right) {
55
+ var containerPadding = ignoreContainerPadding ? '0rem' : 'var(--container-padding)';
56
+ return (0, _react2.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n position: absolute;\n top: ", ";\n bottom: ", ";\n width: calc(var(--preview-block-width) - ", ");\n\n ", "\n ", "\n\n [data-smart-element-media='image'] {\n aspect-ratio: unset;\n padding-top: unset;\n width: 100%;\n height: 100%;\n object-fit: cover;\n }\n "])), containerPadding, containerPadding, containerPadding, placement === _constants.MediaPlacement.Left ? "left: ".concat(containerPadding, ";") : '', placement === _constants.MediaPlacement.Right ? "right: ".concat(containerPadding, ";") : '');
57
+ }
58
+
59
+ if (ignoreContainerPadding) {
60
+ return (0, _react2.css)(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["\n margin-left: calc(var(--container-gap-left) * -1);\n margin-right: calc(var(--container-gap-right) * -1);\n &:first-of-type {\n margin-top: calc(var(--container-padding) * -1);\n }\n &:last-of-type {\n margin-bottom: calc(var(--container-padding) * -1);\n }\n "])));
61
+ }
62
+ };
63
+ /**
64
+ * Represents a resolved PreviewBlock, which typically contains media or other large format content.
65
+ * @public
66
+ * @param {PreviewBlock} PreviewBlock
67
+ * @see Block
68
+ */
69
+
70
+
71
+ var PreviewBlockResolvedView = function PreviewBlockResolvedView(_ref) {
72
+ var _ref$ignoreContainerP = _ref.ignoreContainerPadding,
73
+ ignoreContainerPadding = _ref$ignoreContainerP === void 0 ? false : _ref$ignoreContainerP,
74
+ onError = _ref.onError,
75
+ overrideCss = _ref.overrideCss,
76
+ placement = _ref.placement,
77
+ testId = _ref.testId,
78
+ blockProps = (0, _objectWithoutProperties2.default)(_ref, _excluded);
79
+
80
+ var _useState = (0, _react.useState)(overrideCss),
81
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
82
+ styles = _useState2[0],
83
+ setStyles = _useState2[1];
84
+
85
+ var updateStyles = (0, _react.useCallback)(function () {
86
+ setStyles((0, _react2.css)(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2.default)(["\n ", "\n ", "\n "])), getPreviewBlockStyles(placement, ignoreContainerPadding), overrideCss));
87
+ }, [ignoreContainerPadding, overrideCss, placement]);
88
+ (0, _react.useEffect)(function () {
89
+ updateStyles();
90
+ }, [ignoreContainerPadding, overrideCss, placement, updateStyles]);
91
+ var handleOnLoad = (0, _react.useCallback)(function () {
92
+ updateStyles();
93
+ }, [updateStyles]);
94
+ var handleOnError = (0, _react.useCallback)(function () {
95
+ if (onError) {
96
+ onError();
97
+ }
98
+ }, [onError]);
99
+ return (0, _react2.jsx)(_block.default, (0, _extends2.default)({}, blockProps, {
100
+ overrideCss: styles,
101
+ testId: "".concat(testId, "-resolved-view")
102
+ }), (0, _react2.jsx)(_elements.Preview, {
103
+ onError: handleOnError,
104
+ onLoad: handleOnLoad
105
+ }));
106
+ };
107
+
108
+ var _default = PreviewBlockResolvedView;
109
+ exports.default = _default;
@@ -20,7 +20,8 @@ var ImageIcon = function ImageIcon(_ref) {
20
20
  var defaultIcon = _ref.defaultIcon,
21
21
  testId = _ref.testId,
22
22
  url = _ref.url,
23
- onError = _ref.onError;
23
+ onError = _ref.onError,
24
+ onLoad = _ref.onLoad;
24
25
  return (0, _react2.jsx)(_reactRenderImage.default, {
25
26
  src: url,
26
27
  loading: (0, _react2.jsx)(_loadingSkeleton.default, {
@@ -31,7 +32,8 @@ var ImageIcon = function ImageIcon(_ref) {
31
32
  "data-testid": "".concat(testId, "-image")
32
33
  }),
33
34
  errored: defaultIcon,
34
- onError: onError
35
+ onError: onError,
36
+ onLoad: onLoad
35
37
  });
36
38
  };
37
39