@atlaskit/smart-card 21.1.1 → 21.1.4

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 (53) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/cjs/messages.js +15 -0
  3. package/dist/cjs/version.json +1 -1
  4. package/dist/cjs/view/EmbedModal/components/embed-content/index.js +42 -0
  5. package/dist/cjs/view/EmbedModal/components/embed-content/types.js +5 -0
  6. package/dist/cjs/view/EmbedModal/components/error-boundary/index.js +38 -0
  7. package/dist/cjs/view/EmbedModal/components/link-info/index.js +129 -0
  8. package/dist/cjs/view/EmbedModal/components/link-info/link-info-button/index.js +41 -0
  9. package/dist/cjs/view/EmbedModal/components/link-info/link-info-button/types.js +5 -0
  10. package/dist/cjs/view/EmbedModal/components/link-info/styled.js +25 -0
  11. package/dist/cjs/view/EmbedModal/components/link-info/types.js +5 -0
  12. package/dist/cjs/view/EmbedModal/constants.js +10 -0
  13. package/dist/cjs/view/EmbedModal/index.js +93 -0
  14. package/dist/cjs/view/EmbedModal/types.js +5 -0
  15. package/dist/es2019/messages.js +15 -0
  16. package/dist/es2019/version.json +1 -1
  17. package/dist/es2019/view/EmbedModal/components/embed-content/index.js +31 -0
  18. package/dist/es2019/view/EmbedModal/components/embed-content/types.js +1 -0
  19. package/dist/es2019/view/EmbedModal/components/error-boundary/index.js +21 -0
  20. package/dist/es2019/view/EmbedModal/components/link-info/index.js +100 -0
  21. package/dist/es2019/view/EmbedModal/components/link-info/link-info-button/index.js +30 -0
  22. package/dist/es2019/view/EmbedModal/components/link-info/link-info-button/types.js +1 -0
  23. package/dist/es2019/view/EmbedModal/components/link-info/styled.js +63 -0
  24. package/dist/es2019/view/EmbedModal/components/link-info/types.js +1 -0
  25. package/dist/es2019/view/EmbedModal/constants.js +2 -0
  26. package/dist/es2019/view/EmbedModal/index.js +57 -0
  27. package/dist/es2019/view/EmbedModal/types.js +1 -0
  28. package/dist/esm/messages.js +15 -0
  29. package/dist/esm/version.json +1 -1
  30. package/dist/esm/view/EmbedModal/components/embed-content/index.js +30 -0
  31. package/dist/esm/view/EmbedModal/components/embed-content/types.js +1 -0
  32. package/dist/esm/view/EmbedModal/components/error-boundary/index.js +23 -0
  33. package/dist/esm/view/EmbedModal/components/link-info/index.js +100 -0
  34. package/dist/esm/view/EmbedModal/components/link-info/link-info-button/index.js +29 -0
  35. package/dist/esm/view/EmbedModal/components/link-info/link-info-button/types.js +1 -0
  36. package/dist/esm/view/EmbedModal/components/link-info/styled.js +11 -0
  37. package/dist/esm/view/EmbedModal/components/link-info/types.js +1 -0
  38. package/dist/esm/view/EmbedModal/constants.js +2 -0
  39. package/dist/esm/view/EmbedModal/index.js +70 -0
  40. package/dist/esm/view/EmbedModal/types.js +1 -0
  41. package/dist/types/messages.d.ts +1 -1
  42. package/dist/types/view/EmbedModal/components/embed-content/index.d.ts +5 -0
  43. package/dist/types/view/EmbedModal/components/embed-content/types.d.ts +6 -0
  44. package/dist/types/view/EmbedModal/components/error-boundary/index.d.ts +4 -0
  45. package/dist/types/view/EmbedModal/components/link-info/index.d.ts +4 -0
  46. package/dist/types/view/EmbedModal/components/link-info/link-info-button/index.d.ts +4 -0
  47. package/dist/types/view/EmbedModal/components/link-info/link-info-button/types.d.ts +9 -0
  48. package/dist/types/view/EmbedModal/components/link-info/styled.d.ts +4 -0
  49. package/dist/types/view/EmbedModal/components/link-info/types.d.ts +13 -0
  50. package/dist/types/view/EmbedModal/constants.d.ts +2 -0
  51. package/dist/types/view/EmbedModal/index.d.ts +4 -0
  52. package/dist/types/view/EmbedModal/types.d.ts +20 -0
  53. package/package.json +4 -4
package/CHANGELOG.md CHANGED
@@ -1,5 +1,28 @@
1
1
  # @atlaskit/smart-card
2
2
 
3
+ ## 21.1.4
4
+
5
+ ### Patch Changes
6
+
7
+ - [`8d4228767b0`](https://bitbucket.org/atlassian/atlassian-frontend/commits/8d4228767b0) - Upgrade Typescript from `4.2.4` to `4.3.5`.
8
+ - Updated dependencies
9
+
10
+ ## 21.1.3
11
+
12
+ ### Patch Changes
13
+
14
+ - [`d0b3a262e03`](https://bitbucket.org/atlassian/atlassian-frontend/commits/d0b3a262e03) - [ux] Embed Preview: Update the new embed preview modal UX
15
+
16
+ - Make title smaller
17
+ - Reduce gap between element
18
+ - Hide resize button on smaller screen
19
+
20
+ ## 21.1.2
21
+
22
+ ### Patch Changes
23
+
24
+ - [`a024e3c77ec`](https://bitbucket.org/atlassian/atlassian-frontend/commits/a024e3c77ec) - Embed Preview: Add embed preview modal (WIP)
25
+
3
26
  ## 21.1.1
4
27
 
5
28
  ### Patch 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',
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/smart-card",
3
- "version": "21.1.1",
3
+ "version": "21.1.4",
4
4
  "sideEffects": false
5
5
  }
@@ -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,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/smart-card",
3
- "version": "21.1.1",
3
+ "version": "21.1.4",
4
4
  "sideEffects": false
5
5
  }
@@ -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;
@@ -0,0 +1,100 @@
1
+ /** @jsx jsx */
2
+ import { jsx } from '@emotion/core';
3
+ import React, { useMemo } from 'react';
4
+ import { FormattedMessage } from 'react-intl-next';
5
+ import { useModal } from '@atlaskit/modal-dialog';
6
+ import CrossIcon from '@atlaskit/icon/glyph/cross';
7
+ import DownloadIcon from '@atlaskit/icon/glyph/download';
8
+ import ShortcutIcon from '@atlaskit/icon/glyph/shortcut';
9
+ import VidFullScreenOnIcon from '@atlaskit/icon/glyph/vid-full-screen-on';
10
+ import VidFullScreenOffIcon from '@atlaskit/icon/glyph/vid-full-screen-off';
11
+ import { Icon } from '../../../common/Icon';
12
+ import { messages } from '../../../../messages';
13
+ import { MAX_MODAL_SIZE } from '../../constants';
14
+ import LinkInfoButton from './link-info-button';
15
+ import { actionCss, containerStyles, iconCss, titleCss } from './styled';
16
+
17
+ const LinkInfo = ({
18
+ downloadUrl,
19
+ icon,
20
+ providerName,
21
+ onDownloadButtonClick,
22
+ onResizeButtonClick,
23
+ onViewButtonClick,
24
+ size,
25
+ testId,
26
+ title,
27
+ url
28
+ }) => {
29
+ const {
30
+ onClose
31
+ } = useModal();
32
+ const downloadButton = useMemo(() => {
33
+ if (downloadUrl) {
34
+ return jsx(LinkInfoButton, {
35
+ content: jsx(FormattedMessage, messages.download),
36
+ href: downloadUrl,
37
+ icon: jsx(DownloadIcon, {
38
+ label: messages.download.defaultMessage
39
+ }),
40
+ onClick: onDownloadButtonClick,
41
+ testId: `${testId}-download`
42
+ });
43
+ }
44
+ }, [downloadUrl, onDownloadButtonClick, testId]);
45
+ const urlButton = useMemo(() => {
46
+ if (url) {
47
+ const content = providerName ? jsx(React.Fragment, null, jsx(FormattedMessage, messages.viewIn), " ", providerName) : jsx(FormattedMessage, messages.viewOriginal);
48
+ return jsx(LinkInfoButton, {
49
+ content: content,
50
+ href: url,
51
+ icon: jsx(ShortcutIcon, {
52
+ label: messages.viewOriginal.defaultMessage
53
+ }),
54
+ onClick: onViewButtonClick,
55
+ target: "_blank",
56
+ testId: `${testId}-url`
57
+ });
58
+ }
59
+ }, [onViewButtonClick, providerName, testId, url]);
60
+ const sizeButton = useMemo(() => {
61
+ const isFullScreen = size === MAX_MODAL_SIZE;
62
+ const message = isFullScreen ? messages.preview_min_size : messages.preview_max_size;
63
+ const icon = isFullScreen ? jsx(VidFullScreenOffIcon, {
64
+ label: message.defaultMessage
65
+ }) : jsx(VidFullScreenOnIcon, {
66
+ label: message.defaultMessage
67
+ });
68
+ return jsx("span", {
69
+ className: "smart-link-resize-button"
70
+ }, jsx(LinkInfoButton, {
71
+ content: jsx(FormattedMessage, message),
72
+ icon: icon,
73
+ onClick: onResizeButtonClick,
74
+ testId: `${testId}-resize`
75
+ }));
76
+ }, [onResizeButtonClick, size, testId]);
77
+ return jsx("div", {
78
+ css: containerStyles
79
+ }, icon && jsx("div", {
80
+ css: iconCss,
81
+ "data-testid": `${testId}-icon`
82
+ }, jsx(Icon, icon)), jsx("div", {
83
+ css: titleCss
84
+ }, jsx("h3", {
85
+ "data-testid": `${testId}-title`
86
+ }, title), jsx("span", {
87
+ tabIndex: 0
88
+ })), jsx("div", {
89
+ css: actionCss
90
+ }, downloadButton, urlButton, sizeButton, jsx(LinkInfoButton, {
91
+ content: jsx(FormattedMessage, messages.preview_close),
92
+ icon: jsx(CrossIcon, {
93
+ label: messages.preview_close.defaultMessage
94
+ }),
95
+ onClick: onClose,
96
+ testId: `${testId}-close`
97
+ })));
98
+ };
99
+
100
+ export default LinkInfo;