@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.
- package/CHANGELOG.md +23 -0
- package/dist/cjs/messages.js +15 -0
- package/dist/cjs/version.json +1 -1
- package/dist/cjs/view/EmbedModal/components/embed-content/index.js +42 -0
- package/dist/cjs/view/EmbedModal/components/embed-content/types.js +5 -0
- package/dist/cjs/view/EmbedModal/components/error-boundary/index.js +38 -0
- package/dist/cjs/view/EmbedModal/components/link-info/index.js +129 -0
- package/dist/cjs/view/EmbedModal/components/link-info/link-info-button/index.js +41 -0
- package/dist/cjs/view/EmbedModal/components/link-info/link-info-button/types.js +5 -0
- package/dist/cjs/view/EmbedModal/components/link-info/styled.js +25 -0
- package/dist/cjs/view/EmbedModal/components/link-info/types.js +5 -0
- package/dist/cjs/view/EmbedModal/constants.js +10 -0
- package/dist/cjs/view/EmbedModal/index.js +93 -0
- package/dist/cjs/view/EmbedModal/types.js +5 -0
- package/dist/es2019/messages.js +15 -0
- package/dist/es2019/version.json +1 -1
- package/dist/es2019/view/EmbedModal/components/embed-content/index.js +31 -0
- package/dist/es2019/view/EmbedModal/components/embed-content/types.js +1 -0
- package/dist/es2019/view/EmbedModal/components/error-boundary/index.js +21 -0
- package/dist/es2019/view/EmbedModal/components/link-info/index.js +100 -0
- package/dist/es2019/view/EmbedModal/components/link-info/link-info-button/index.js +30 -0
- package/dist/es2019/view/EmbedModal/components/link-info/link-info-button/types.js +1 -0
- package/dist/es2019/view/EmbedModal/components/link-info/styled.js +63 -0
- package/dist/es2019/view/EmbedModal/components/link-info/types.js +1 -0
- package/dist/es2019/view/EmbedModal/constants.js +2 -0
- package/dist/es2019/view/EmbedModal/index.js +57 -0
- package/dist/es2019/view/EmbedModal/types.js +1 -0
- package/dist/esm/messages.js +15 -0
- package/dist/esm/version.json +1 -1
- package/dist/esm/view/EmbedModal/components/embed-content/index.js +30 -0
- package/dist/esm/view/EmbedModal/components/embed-content/types.js +1 -0
- package/dist/esm/view/EmbedModal/components/error-boundary/index.js +23 -0
- package/dist/esm/view/EmbedModal/components/link-info/index.js +100 -0
- package/dist/esm/view/EmbedModal/components/link-info/link-info-button/index.js +29 -0
- package/dist/esm/view/EmbedModal/components/link-info/link-info-button/types.js +1 -0
- package/dist/esm/view/EmbedModal/components/link-info/styled.js +11 -0
- package/dist/esm/view/EmbedModal/components/link-info/types.js +1 -0
- package/dist/esm/view/EmbedModal/constants.js +2 -0
- package/dist/esm/view/EmbedModal/index.js +70 -0
- package/dist/esm/view/EmbedModal/types.js +1 -0
- package/dist/types/messages.d.ts +1 -1
- package/dist/types/view/EmbedModal/components/embed-content/index.d.ts +5 -0
- package/dist/types/view/EmbedModal/components/embed-content/types.d.ts +6 -0
- package/dist/types/view/EmbedModal/components/error-boundary/index.d.ts +4 -0
- package/dist/types/view/EmbedModal/components/link-info/index.d.ts +4 -0
- package/dist/types/view/EmbedModal/components/link-info/link-info-button/index.d.ts +4 -0
- package/dist/types/view/EmbedModal/components/link-info/link-info-button/types.d.ts +9 -0
- package/dist/types/view/EmbedModal/components/link-info/styled.d.ts +4 -0
- package/dist/types/view/EmbedModal/components/link-info/types.d.ts +13 -0
- package/dist/types/view/EmbedModal/constants.d.ts +2 -0
- package/dist/types/view/EmbedModal/index.d.ts +4 -0
- package/dist/types/view/EmbedModal/types.d.ts +20 -0
- 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
|
package/dist/cjs/messages.js
CHANGED
|
@@ -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',
|
package/dist/cjs/version.json
CHANGED
|
@@ -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,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,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,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;
|
package/dist/es2019/messages.js
CHANGED
|
@@ -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',
|
package/dist/es2019/version.json
CHANGED
|
@@ -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 @@
|
|
|
1
|
+
export {};
|
|
@@ -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;
|