@atlaskit/smart-card 21.1.0 → 21.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/cjs/messages.js +15 -0
  3. package/dist/cjs/utils/token.js +1 -1
  4. package/dist/cjs/version.json +1 -1
  5. package/dist/cjs/view/BlockCard/components/Frame.js +1 -1
  6. package/dist/cjs/view/EmbedCard/components/styled.js +1 -1
  7. package/dist/cjs/view/EmbedModal/components/embed-content/index.js +42 -0
  8. package/dist/cjs/view/EmbedModal/components/embed-content/types.js +5 -0
  9. package/dist/cjs/view/EmbedModal/components/error-boundary/index.js +38 -0
  10. package/dist/cjs/view/EmbedModal/components/link-info/index.js +129 -0
  11. package/dist/cjs/view/EmbedModal/components/link-info/link-info-button/index.js +41 -0
  12. package/dist/cjs/view/EmbedModal/components/link-info/link-info-button/types.js +5 -0
  13. package/dist/cjs/view/EmbedModal/components/link-info/styled.js +25 -0
  14. package/dist/cjs/view/EmbedModal/components/link-info/types.js +5 -0
  15. package/dist/cjs/view/EmbedModal/constants.js +10 -0
  16. package/dist/cjs/view/EmbedModal/index.js +93 -0
  17. package/dist/cjs/view/EmbedModal/types.js +5 -0
  18. package/dist/es2019/messages.js +15 -0
  19. package/dist/es2019/utils/token.js +1 -1
  20. package/dist/es2019/version.json +1 -1
  21. package/dist/es2019/view/BlockCard/components/Frame.js +1 -1
  22. package/dist/es2019/view/EmbedCard/components/styled.js +1 -1
  23. package/dist/es2019/view/EmbedModal/components/embed-content/index.js +31 -0
  24. package/dist/es2019/view/EmbedModal/components/embed-content/types.js +1 -0
  25. package/dist/es2019/view/EmbedModal/components/error-boundary/index.js +21 -0
  26. package/dist/es2019/view/EmbedModal/components/link-info/index.js +100 -0
  27. package/dist/es2019/view/EmbedModal/components/link-info/link-info-button/index.js +30 -0
  28. package/dist/es2019/view/EmbedModal/components/link-info/link-info-button/types.js +1 -0
  29. package/dist/es2019/view/EmbedModal/components/link-info/styled.js +63 -0
  30. package/dist/es2019/view/EmbedModal/components/link-info/types.js +1 -0
  31. package/dist/es2019/view/EmbedModal/constants.js +2 -0
  32. package/dist/es2019/view/EmbedModal/index.js +57 -0
  33. package/dist/es2019/view/EmbedModal/types.js +1 -0
  34. package/dist/esm/messages.js +15 -0
  35. package/dist/esm/utils/token.js +1 -1
  36. package/dist/esm/version.json +1 -1
  37. package/dist/esm/view/BlockCard/components/Frame.js +1 -1
  38. package/dist/esm/view/EmbedCard/components/styled.js +1 -1
  39. package/dist/esm/view/EmbedModal/components/embed-content/index.js +30 -0
  40. package/dist/esm/view/EmbedModal/components/embed-content/types.js +1 -0
  41. package/dist/esm/view/EmbedModal/components/error-boundary/index.js +23 -0
  42. package/dist/esm/view/EmbedModal/components/link-info/index.js +100 -0
  43. package/dist/esm/view/EmbedModal/components/link-info/link-info-button/index.js +29 -0
  44. package/dist/esm/view/EmbedModal/components/link-info/link-info-button/types.js +1 -0
  45. package/dist/esm/view/EmbedModal/components/link-info/styled.js +11 -0
  46. package/dist/esm/view/EmbedModal/components/link-info/types.js +1 -0
  47. package/dist/esm/view/EmbedModal/constants.js +2 -0
  48. package/dist/esm/view/EmbedModal/index.js +70 -0
  49. package/dist/esm/view/EmbedModal/types.js +1 -0
  50. package/dist/types/messages.d.ts +1 -1
  51. package/dist/types/utils/token.d.ts +1 -1
  52. package/dist/types/view/EmbedModal/components/embed-content/index.d.ts +5 -0
  53. package/dist/types/view/EmbedModal/components/embed-content/types.d.ts +6 -0
  54. package/dist/types/view/EmbedModal/components/error-boundary/index.d.ts +4 -0
  55. package/dist/types/view/EmbedModal/components/link-info/index.d.ts +4 -0
  56. package/dist/types/view/EmbedModal/components/link-info/link-info-button/index.d.ts +4 -0
  57. package/dist/types/view/EmbedModal/components/link-info/link-info-button/types.d.ts +9 -0
  58. package/dist/types/view/EmbedModal/components/link-info/styled.d.ts +4 -0
  59. package/dist/types/view/EmbedModal/components/link-info/types.d.ts +13 -0
  60. package/dist/types/view/EmbedModal/constants.d.ts +2 -0
  61. package/dist/types/view/EmbedModal/index.d.ts +4 -0
  62. package/dist/types/view/EmbedModal/types.d.ts +20 -0
  63. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,27 @@
1
1
  # @atlaskit/smart-card
2
2
 
3
+ ## 21.1.3
4
+
5
+ ### Patch Changes
6
+
7
+ - [`d0b3a262e03`](https://bitbucket.org/atlassian/atlassian-frontend/commits/d0b3a262e03) - [ux] Embed Preview: Update the new embed preview modal UX
8
+
9
+ - Make title smaller
10
+ - Reduce gap between element
11
+ - Hide resize button on smaller screen
12
+
13
+ ## 21.1.2
14
+
15
+ ### Patch Changes
16
+
17
+ - [`a024e3c77ec`](https://bitbucket.org/atlassian/atlassian-frontend/commits/a024e3c77ec) - Embed Preview: Add embed preview modal (WIP)
18
+
19
+ ## 21.1.1
20
+
21
+ ### Patch Changes
22
+
23
+ - [`e6a3654a137`](https://bitbucket.org/atlassian/atlassian-frontend/commits/e6a3654a137) - Fix bug where smart cards used `elevation.surface` instead of `elevation.surface.raised` design tokens for card backgrounds.
24
+
3
25
  ## 21.1.0
4
26
 
5
27
  ### Minor Changes
@@ -173,6 +173,21 @@ var messages = (0, _reactIntlNext.defineMessages)({
173
173
  defaultMessage: 'Preview',
174
174
  description: 'Click to view a richer view of your content, without needing to navigate to it.'
175
175
  },
176
+ preview_close: {
177
+ id: 'fabric.linking.preview_close',
178
+ defaultMessage: 'Close preview',
179
+ description: 'Click to close embed preview modal.'
180
+ },
181
+ preview_max_size: {
182
+ id: 'fabric.linking.preview_max_size',
183
+ defaultMessage: 'View full screen',
184
+ description: 'Click to increase embed preview modal size to a maximum viewing size.'
185
+ },
186
+ preview_min_size: {
187
+ id: 'fabric.linking.preview_min_size',
188
+ defaultMessage: 'Close full screen',
189
+ description: 'Click to decrease embed preview modal size to a minimum viewing size.'
190
+ },
176
191
  priority_blocker: {
177
192
  id: 'fabric.linking.priority_blocker',
178
193
  defaultMessage: 'Blocker',
@@ -9,7 +9,7 @@ var _tokens = require("@atlaskit/tokens");
9
9
 
10
10
  var tokens = {
11
11
  actionIcon: (0, _tokens.token)('color.icon', '#44546F'),
12
- background: (0, _tokens.token)('elevation.surface', '#FFFFFF'),
12
+ background: (0, _tokens.token)('elevation.surface.raised', '#FFFFFF'),
13
13
  badgeIcon: (0, _tokens.token)('color.icon.subtle', '#626F86'),
14
14
  badgeText: (0, _tokens.token)('color.text.subtlest', '#626F86'),
15
15
  blackLink: (0, _tokens.token)('color.text.subtle', '#44546F'),
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/smart-card",
3
- "version": "21.1.0",
3
+ "version": "21.1.3",
4
4
  "sideEffects": false
5
5
  }
@@ -37,7 +37,7 @@ var sharedFrameStyles = {
37
37
  maxWidth: (0, _utils.gs)(95),
38
38
  width: '100%',
39
39
  display: 'flex',
40
- backgroundColor: (0, _tokens.token)('elevation.surface', 'white')
40
+ backgroundColor: (0, _tokens.token)('elevation.surface.raised', 'white')
41
41
  };
42
42
 
43
43
  var ExpandedFrame = function ExpandedFrame(_ref) {
@@ -144,7 +144,7 @@ exports.TextWrapper = TextWrapper;
144
144
  // NB: `overflow` is kept as `hidden` since
145
145
  // the internal contents of the `iframe` should
146
146
  // manage scrolling behaviour.
147
- var Content = _styled.default.div(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2.default)(["\n ", "\n ", "\n background-color: ", ";\n position: absolute;\n z-index: 1;\n width: 100%;\n top: ", ";\n overflow: hidden;\n height: calc(100% - ", ");\n transition: box-shadow 0.3s;\n\n > .calc-height > div > div {\n left: unset !important;\n width: unset !important;\n height: unset !important;\n position: initial !important;\n padding-bottom: unset !important;\n }\n > .embed-preview > div {\n margin: 0 auto;\n }\n\n ", ";\n"])), borderRadius, cardShadow, (0, _tokens.token)('elevation.surface', 'white'), (0, _utils.gs)(4), (0, _utils.gs)(4), function (_ref9) {
147
+ var Content = _styled.default.div(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2.default)(["\n ", "\n ", "\n background-color: ", ";\n position: absolute;\n z-index: 1;\n width: 100%;\n top: ", ";\n overflow: hidden;\n height: calc(100% - ", ");\n transition: box-shadow 0.3s;\n\n > .calc-height > div > div {\n left: unset !important;\n width: unset !important;\n height: unset !important;\n position: initial !important;\n padding-bottom: unset !important;\n }\n > .embed-preview > div {\n margin: 0 auto;\n }\n\n ", ";\n"])), borderRadius, cardShadow, (0, _tokens.token)('elevation.surface.raised', 'white'), (0, _utils.gs)(4), (0, _utils.gs)(4), function (_ref9) {
148
148
  var isInteractive = _ref9.isInteractive;
149
149
 
150
150
  if (isInteractive) {
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+
10
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
+
12
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
13
+
14
+ var _core = require("@emotion/core");
15
+
16
+ var _utils = require("../../../../utils");
17
+
18
+ var _templateObject;
19
+
20
+ var iframeCss = (0, _core.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n width: 100%;\n height: calc(100vh - 208px);\n"])));
21
+
22
+ var EmbedContent = function EmbedContent(_ref) {
23
+ var isTrusted = _ref.isTrusted,
24
+ name = _ref.name,
25
+ src = _ref.src,
26
+ testId = _ref.testId;
27
+ var sandbox = (0, _utils.getIframeSandboxAttribute)(isTrusted);
28
+ var props = {
29
+ css: iframeCss,
30
+ frameBorder: 0,
31
+ name: name,
32
+ sandbox: sandbox,
33
+ src: src,
34
+ 'data-testid': "".concat(testId, "-embed")
35
+ };
36
+ return src ? (0, _core.jsx)("iframe", (0, _extends2.default)({
37
+ src: src
38
+ }, props)) : (0, _core.jsx)("iframe", props);
39
+ };
40
+
41
+ var _default = EmbedContent;
42
+ exports.default = _default;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+
3
+ var _typeof = require("@babel/runtime/helpers/typeof");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+
10
+ var _react = _interopRequireWildcard(require("react"));
11
+
12
+ var _reactErrorBoundary = require("react-error-boundary");
13
+
14
+ 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); }
15
+
16
+ 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; }
17
+
18
+ var FallbackComponent = function FallbackComponent() {
19
+ return /*#__PURE__*/_react.default.createElement("span", null);
20
+ };
21
+
22
+ var withErrorBoundary = function withErrorBoundary(Component) {
23
+ return function (props) {
24
+ var onOpenFailed = props.onOpenFailed;
25
+ var onError = (0, _react.useCallback)(function (error, errorInfo) {
26
+ if (onOpenFailed) {
27
+ onOpenFailed(error, errorInfo);
28
+ }
29
+ }, [onOpenFailed]);
30
+ return /*#__PURE__*/_react.default.createElement(_reactErrorBoundary.ErrorBoundary, {
31
+ FallbackComponent: FallbackComponent,
32
+ onError: onError
33
+ }, /*#__PURE__*/_react.default.createElement(Component, props));
34
+ };
35
+ };
36
+
37
+ var _default = withErrorBoundary;
38
+ exports.default = _default;
@@ -0,0 +1,129 @@
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 _core = require("@emotion/core");
13
+
14
+ var _react = _interopRequireWildcard(require("react"));
15
+
16
+ var _reactIntlNext = require("react-intl-next");
17
+
18
+ var _modalDialog = require("@atlaskit/modal-dialog");
19
+
20
+ var _cross = _interopRequireDefault(require("@atlaskit/icon/glyph/cross"));
21
+
22
+ var _download = _interopRequireDefault(require("@atlaskit/icon/glyph/download"));
23
+
24
+ var _shortcut = _interopRequireDefault(require("@atlaskit/icon/glyph/shortcut"));
25
+
26
+ var _vidFullScreenOn = _interopRequireDefault(require("@atlaskit/icon/glyph/vid-full-screen-on"));
27
+
28
+ var _vidFullScreenOff = _interopRequireDefault(require("@atlaskit/icon/glyph/vid-full-screen-off"));
29
+
30
+ var _Icon = require("../../../common/Icon");
31
+
32
+ var _messages = require("../../../../messages");
33
+
34
+ var _constants = require("../../constants");
35
+
36
+ var _linkInfoButton = _interopRequireDefault(require("./link-info-button"));
37
+
38
+ var _styled = require("./styled");
39
+
40
+ 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); }
41
+
42
+ 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; }
43
+
44
+ /** @jsx jsx */
45
+ var LinkInfo = function LinkInfo(_ref) {
46
+ var downloadUrl = _ref.downloadUrl,
47
+ icon = _ref.icon,
48
+ providerName = _ref.providerName,
49
+ onDownloadButtonClick = _ref.onDownloadButtonClick,
50
+ onResizeButtonClick = _ref.onResizeButtonClick,
51
+ onViewButtonClick = _ref.onViewButtonClick,
52
+ size = _ref.size,
53
+ testId = _ref.testId,
54
+ title = _ref.title,
55
+ url = _ref.url;
56
+
57
+ var _useModal = (0, _modalDialog.useModal)(),
58
+ onClose = _useModal.onClose;
59
+
60
+ var downloadButton = (0, _react.useMemo)(function () {
61
+ if (downloadUrl) {
62
+ return (0, _core.jsx)(_linkInfoButton.default, {
63
+ content: (0, _core.jsx)(_reactIntlNext.FormattedMessage, _messages.messages.download),
64
+ href: downloadUrl,
65
+ icon: (0, _core.jsx)(_download.default, {
66
+ label: _messages.messages.download.defaultMessage
67
+ }),
68
+ onClick: onDownloadButtonClick,
69
+ testId: "".concat(testId, "-download")
70
+ });
71
+ }
72
+ }, [downloadUrl, onDownloadButtonClick, testId]);
73
+ var urlButton = (0, _react.useMemo)(function () {
74
+ if (url) {
75
+ var content = providerName ? (0, _core.jsx)(_react.default.Fragment, null, (0, _core.jsx)(_reactIntlNext.FormattedMessage, _messages.messages.viewIn), " ", providerName) : (0, _core.jsx)(_reactIntlNext.FormattedMessage, _messages.messages.viewOriginal);
76
+ return (0, _core.jsx)(_linkInfoButton.default, {
77
+ content: content,
78
+ href: url,
79
+ icon: (0, _core.jsx)(_shortcut.default, {
80
+ label: _messages.messages.viewOriginal.defaultMessage
81
+ }),
82
+ onClick: onViewButtonClick,
83
+ target: "_blank",
84
+ testId: "".concat(testId, "-url")
85
+ });
86
+ }
87
+ }, [onViewButtonClick, providerName, testId, url]);
88
+ var sizeButton = (0, _react.useMemo)(function () {
89
+ var isFullScreen = size === _constants.MAX_MODAL_SIZE;
90
+ var message = isFullScreen ? _messages.messages.preview_min_size : _messages.messages.preview_max_size;
91
+ var icon = isFullScreen ? (0, _core.jsx)(_vidFullScreenOff.default, {
92
+ label: message.defaultMessage
93
+ }) : (0, _core.jsx)(_vidFullScreenOn.default, {
94
+ label: message.defaultMessage
95
+ });
96
+ return (0, _core.jsx)("span", {
97
+ className: "smart-link-resize-button"
98
+ }, (0, _core.jsx)(_linkInfoButton.default, {
99
+ content: (0, _core.jsx)(_reactIntlNext.FormattedMessage, message),
100
+ icon: icon,
101
+ onClick: onResizeButtonClick,
102
+ testId: "".concat(testId, "-resize")
103
+ }));
104
+ }, [onResizeButtonClick, size, testId]);
105
+ return (0, _core.jsx)("div", {
106
+ css: _styled.containerStyles
107
+ }, icon && (0, _core.jsx)("div", {
108
+ css: _styled.iconCss,
109
+ "data-testid": "".concat(testId, "-icon")
110
+ }, (0, _core.jsx)(_Icon.Icon, icon)), (0, _core.jsx)("div", {
111
+ css: _styled.titleCss
112
+ }, (0, _core.jsx)("h3", {
113
+ "data-testid": "".concat(testId, "-title")
114
+ }, title), (0, _core.jsx)("span", {
115
+ tabIndex: 0
116
+ })), (0, _core.jsx)("div", {
117
+ css: _styled.actionCss
118
+ }, downloadButton, urlButton, sizeButton, (0, _core.jsx)(_linkInfoButton.default, {
119
+ content: (0, _core.jsx)(_reactIntlNext.FormattedMessage, _messages.messages.preview_close),
120
+ icon: (0, _core.jsx)(_cross.default, {
121
+ label: _messages.messages.preview_close.defaultMessage
122
+ }),
123
+ onClick: onClose,
124
+ testId: "".concat(testId, "-close")
125
+ })));
126
+ };
127
+
128
+ var _default = LinkInfo;
129
+ exports.default = _default;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+
10
+ var _react = _interopRequireDefault(require("react"));
11
+
12
+ var _tooltip = _interopRequireDefault(require("@atlaskit/tooltip"));
13
+
14
+ var _customThemeButton = _interopRequireDefault(require("@atlaskit/button/custom-theme-button"));
15
+
16
+ var LinkInfoButton = function LinkInfoButton(_ref) {
17
+ var content = _ref.content,
18
+ href = _ref.href,
19
+ icon = _ref.icon,
20
+ onClick = _ref.onClick,
21
+ target = _ref.target,
22
+ testId = _ref.testId;
23
+ return /*#__PURE__*/_react.default.createElement(_tooltip.default, {
24
+ content: content,
25
+ hideTooltipOnClick: true,
26
+ position: "top",
27
+ tag: "span",
28
+ testId: "".concat(testId, "-tooltip")
29
+ }, /*#__PURE__*/_react.default.createElement(_customThemeButton.default, {
30
+ appearance: "subtle",
31
+ href: href,
32
+ iconBefore: icon,
33
+ onClick: onClick,
34
+ spacing: "none",
35
+ target: target,
36
+ testId: "".concat(testId, "-button")
37
+ }));
38
+ };
39
+
40
+ var _default = LinkInfoButton;
41
+ exports.default = _default;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.titleCss = exports.iconCss = exports.containerStyles = exports.actionCss = void 0;
9
+
10
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
11
+
12
+ var _core = require("@emotion/core");
13
+
14
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4;
15
+
16
+ var containerStyles = (0, _core.css)(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2.default)(["\n align-items: center;\n display: flex;\n gap: 8px;\n justify-content: space-between;\n // AK ModalBody has 2px padding top and bottom.\n // Using 14px here to create 16px gap between\n // link info and iframe\n padding: 24px 24px 14px 24px;\n"])));
17
+ exports.containerStyles = containerStyles;
18
+ var iconSize = '24px';
19
+ var iconCss = (0, _core.css)(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2.default)(["\n img,\n span,\n svg {\n height: ", ";\n min-height: ", ";\n max-height: ", ";\n width: ", ";\n min-width: ", ";\n max-width: ", ";\n }\n"])), iconSize, iconSize, iconSize, iconSize, iconSize, iconSize);
20
+ exports.iconCss = iconCss;
21
+ var height = '20px';
22
+ var titleCss = (0, _core.css)(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2.default)(["\n flex: 1 1 auto;\n\n h3 {\n flex: 1 1 auto;\n font-size: 16px;\n font-weight: 400;\n line-height: ", ";\n\n display: -webkit-box;\n overflow: hidden;\n text-overflow: ellipsis;\n word-break: break-word;\n -webkit-line-clamp: 1;\n -webkit-box-orient: vertical;\n // Fallback options\n @supports not (-webkit-line-clamp: 1) {\n max-height: ", ";\n }\n }\n"])), height, height);
23
+ exports.titleCss = titleCss;
24
+ var actionCss = (0, _core.css)(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2.default)(["\n display: flex;\n flex: 0 0 auto;\n gap: 4px;\n line-height: ", ";\n span {\n line-height: ", ";\n }\n\n @media only screen and (max-width: 980px) {\n // Hide resize button if the screen is smaller than the min width\n // or too small to have enough impact to matter.\n .smart-link-resize-button {\n display: none;\n }\n }\n"])), height, height);
25
+ exports.actionCss = actionCss;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.MIN_MODAL_SIZE = exports.MAX_MODAL_SIZE = void 0;
7
+ var MAX_MODAL_SIZE = '100%';
8
+ exports.MAX_MODAL_SIZE = MAX_MODAL_SIZE;
9
+ var MIN_MODAL_SIZE = 'large';
10
+ exports.MIN_MODAL_SIZE = MIN_MODAL_SIZE;
@@ -0,0 +1,93 @@
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 _modalDialog = _interopRequireWildcard(require("@atlaskit/modal-dialog"));
17
+
18
+ var _linkInfo = _interopRequireDefault(require("./components/link-info"));
19
+
20
+ var _constants = require("./constants");
21
+
22
+ var _embedContent = _interopRequireDefault(require("./components/embed-content"));
23
+
24
+ var _errorBoundary = _interopRequireDefault(require("./components/error-boundary"));
25
+
26
+ 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); }
27
+
28
+ 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; }
29
+
30
+ var EmbedModal = function EmbedModal(_ref) {
31
+ var downloadUrl = _ref.download,
32
+ icon = _ref.icon,
33
+ iframeName = _ref.iframeName,
34
+ _ref$isTrusted = _ref.isTrusted,
35
+ isTrusted = _ref$isTrusted === void 0 ? false : _ref$isTrusted,
36
+ onClose = _ref.onClose,
37
+ onDownloadActionClick = _ref.onDownloadActionClick,
38
+ onOpen = _ref.onOpen,
39
+ onViewActionClick = _ref.onViewActionClick,
40
+ providerName = _ref.providerName,
41
+ showModal = _ref.showModal,
42
+ src = _ref.src,
43
+ _ref$testId = _ref.testId,
44
+ testId = _ref$testId === void 0 ? 'smart-links-preview-modal' : _ref$testId,
45
+ title = _ref.title,
46
+ url = _ref.url;
47
+
48
+ var _useState = (0, _react.useState)(showModal),
49
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
50
+ isOpen = _useState2[0],
51
+ setIsOpen = _useState2[1];
52
+
53
+ var _useState3 = (0, _react.useState)(_constants.MIN_MODAL_SIZE),
54
+ _useState4 = (0, _slicedToArray2.default)(_useState3, 2),
55
+ size = _useState4[0],
56
+ setSize = _useState4[1];
57
+
58
+ var handleOnClose = (0, _react.useCallback)(function () {
59
+ return setIsOpen(false);
60
+ }, []);
61
+ var handleOnSizeClick = (0, _react.useCallback)(function () {
62
+ var newSize = size === _constants.MIN_MODAL_SIZE ? _constants.MAX_MODAL_SIZE : _constants.MIN_MODAL_SIZE;
63
+ setSize(newSize);
64
+ }, [size]);
65
+ return /*#__PURE__*/_react.default.createElement(_modalDialog.ModalTransition, null, isOpen && /*#__PURE__*/_react.default.createElement(_modalDialog.default, {
66
+ height: "100%",
67
+ onClose: handleOnClose,
68
+ onCloseComplete: onClose,
69
+ onOpenComplete: onOpen,
70
+ testId: testId,
71
+ width: size
72
+ }, /*#__PURE__*/_react.default.createElement(_linkInfo.default, {
73
+ downloadUrl: downloadUrl,
74
+ icon: icon,
75
+ providerName: providerName,
76
+ onViewButtonClick: onViewActionClick,
77
+ onDownloadButtonClick: onDownloadActionClick,
78
+ onResizeButtonClick: handleOnSizeClick,
79
+ size: size,
80
+ title: title,
81
+ testId: testId,
82
+ url: url
83
+ }), /*#__PURE__*/_react.default.createElement(_modalDialog.ModalBody, null, /*#__PURE__*/_react.default.createElement(_embedContent.default, {
84
+ isTrusted: isTrusted,
85
+ name: iframeName,
86
+ src: src,
87
+ testId: testId
88
+ }))));
89
+ };
90
+
91
+ var _default = (0, _errorBoundary.default)(EmbedModal);
92
+
93
+ exports.default = _default;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -165,6 +165,21 @@ export const messages = defineMessages({
165
165
  defaultMessage: 'Preview',
166
166
  description: 'Click to view a richer view of your content, without needing to navigate to it.'
167
167
  },
168
+ preview_close: {
169
+ id: 'fabric.linking.preview_close',
170
+ defaultMessage: 'Close preview',
171
+ description: 'Click to close embed preview modal.'
172
+ },
173
+ preview_max_size: {
174
+ id: 'fabric.linking.preview_max_size',
175
+ defaultMessage: 'View full screen',
176
+ description: 'Click to increase embed preview modal size to a maximum viewing size.'
177
+ },
178
+ preview_min_size: {
179
+ id: 'fabric.linking.preview_min_size',
180
+ defaultMessage: 'Close full screen',
181
+ description: 'Click to decrease embed preview modal size to a minimum viewing size.'
182
+ },
168
183
  priority_blocker: {
169
184
  id: 'fabric.linking.priority_blocker',
170
185
  defaultMessage: 'Blocker',
@@ -1,7 +1,7 @@
1
1
  import { token } from '@atlaskit/tokens';
2
2
  export const tokens = {
3
3
  actionIcon: token('color.icon', '#44546F'),
4
- background: token('elevation.surface', '#FFFFFF'),
4
+ background: token('elevation.surface.raised', '#FFFFFF'),
5
5
  badgeIcon: token('color.icon.subtle', '#626F86'),
6
6
  badgeText: token('color.text.subtlest', '#626F86'),
7
7
  blackLink: token('color.text.subtle', '#44546F'),
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/smart-card",
3
- "version": "21.1.0",
3
+ "version": "21.1.3",
4
4
  "sideEffects": false
5
5
  }
@@ -13,7 +13,7 @@ const sharedFrameStyles = {
13
13
  maxWidth: gs(95),
14
14
  width: '100%',
15
15
  display: 'flex',
16
- backgroundColor: token('elevation.surface', 'white')
16
+ backgroundColor: token('elevation.surface.raised', 'white')
17
17
  };
18
18
  export const ExpandedFrame = ({
19
19
  children,
@@ -191,7 +191,7 @@ export const TextWrapper = styled.div`
191
191
  export const Content = styled.div`
192
192
  ${borderRadius}
193
193
  ${cardShadow}
194
- background-color: ${token('elevation.surface', 'white')};
194
+ background-color: ${token('elevation.surface.raised', 'white')};
195
195
  position: absolute;
196
196
  z-index: 1;
197
197
  width: 100%;
@@ -0,0 +1,31 @@
1
+ import _extends from "@babel/runtime/helpers/extends";
2
+
3
+ /** @jsx jsx */
4
+ import { css, jsx } from '@emotion/core';
5
+ import { getIframeSandboxAttribute } from '../../../../utils';
6
+ const iframeCss = css`
7
+ width: 100%;
8
+ height: calc(100vh - 208px);
9
+ `;
10
+
11
+ const EmbedContent = ({
12
+ isTrusted,
13
+ name,
14
+ src,
15
+ testId
16
+ }) => {
17
+ const sandbox = getIframeSandboxAttribute(isTrusted);
18
+ const props = {
19
+ css: iframeCss,
20
+ frameBorder: 0,
21
+ name,
22
+ sandbox,
23
+ src,
24
+ 'data-testid': `${testId}-embed`
25
+ };
26
+ return src ? jsx("iframe", _extends({
27
+ src: src
28
+ }, props)) : jsx("iframe", props);
29
+ };
30
+
31
+ export default EmbedContent;
@@ -0,0 +1,21 @@
1
+ import React, { useCallback } from 'react';
2
+ import { ErrorBoundary } from 'react-error-boundary';
3
+
4
+ const FallbackComponent = () => /*#__PURE__*/React.createElement("span", null);
5
+
6
+ const withErrorBoundary = Component => props => {
7
+ const {
8
+ onOpenFailed
9
+ } = props;
10
+ const onError = useCallback((error, errorInfo) => {
11
+ if (onOpenFailed) {
12
+ onOpenFailed(error, errorInfo);
13
+ }
14
+ }, [onOpenFailed]);
15
+ return /*#__PURE__*/React.createElement(ErrorBoundary, {
16
+ FallbackComponent: FallbackComponent,
17
+ onError: onError
18
+ }, /*#__PURE__*/React.createElement(Component, props));
19
+ };
20
+
21
+ export default withErrorBoundary;