@atlaskit/media-card 79.0.12 → 79.0.13
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 +8 -0
- package/dist/cjs/card/card.js +1 -1
- package/dist/cjs/card/cardView.js +10 -5
- package/dist/cjs/card/externalImageCard.js +1 -0
- package/dist/cjs/card/media-card-analytics-error-boundary.js +1 -1
- package/dist/cjs/card/svgView/svgView.js +2 -1
- package/dist/cjs/card/svgView/svgViewV2.js +64 -0
- package/dist/cjs/card/ui/imageRenderer/helpers.js +76 -0
- package/dist/cjs/card/ui/imageRenderer/imageRendererV2.compiled.css +2 -0
- package/dist/cjs/card/ui/imageRenderer/imageRendererV2.js +87 -0
- package/dist/cjs/card/ui/imageRenderer/index.js +14 -0
- package/dist/cjs/card/ui/imageRenderer/types.js +5 -0
- package/dist/cjs/card/ui/imageRenderer/wrapper.compiled.css +7 -0
- package/dist/cjs/card/ui/imageRenderer/wrapper.js +21 -0
- package/dist/cjs/inline/loader.js +1 -1
- package/dist/cjs/utils/ufoExperiences.js +1 -1
- package/dist/es2019/card/card.js +1 -1
- package/dist/es2019/card/cardView.js +10 -5
- package/dist/es2019/card/externalImageCard.js +1 -0
- package/dist/es2019/card/media-card-analytics-error-boundary.js +1 -1
- package/dist/es2019/card/svgView/svgView.js +2 -1
- package/dist/es2019/card/svgView/svgViewV2.js +57 -0
- package/dist/es2019/card/ui/imageRenderer/helpers.js +73 -0
- package/dist/es2019/card/ui/imageRenderer/imageRendererV2.compiled.css +2 -0
- package/dist/es2019/card/ui/imageRenderer/imageRendererV2.js +68 -0
- package/dist/es2019/card/ui/imageRenderer/index.js +7 -0
- package/dist/es2019/card/ui/imageRenderer/types.js +1 -0
- package/dist/es2019/card/ui/imageRenderer/wrapper.compiled.css +7 -0
- package/dist/es2019/card/ui/imageRenderer/wrapper.js +11 -0
- package/dist/es2019/inline/loader.js +1 -1
- package/dist/es2019/utils/ufoExperiences.js +1 -1
- package/dist/esm/card/card.js +1 -1
- package/dist/esm/card/cardView.js +10 -5
- package/dist/esm/card/externalImageCard.js +1 -0
- package/dist/esm/card/media-card-analytics-error-boundary.js +1 -1
- package/dist/esm/card/svgView/svgView.js +2 -1
- package/dist/esm/card/svgView/svgViewV2.js +57 -0
- package/dist/esm/card/ui/imageRenderer/helpers.js +70 -0
- package/dist/esm/card/ui/imageRenderer/imageRendererV2.compiled.css +2 -0
- package/dist/esm/card/ui/imageRenderer/imageRendererV2.js +77 -0
- package/dist/esm/card/ui/imageRenderer/index.js +7 -0
- package/dist/esm/card/ui/imageRenderer/types.js +1 -0
- package/dist/esm/card/ui/imageRenderer/wrapper.compiled.css +7 -0
- package/dist/esm/card/ui/imageRenderer/wrapper.js +12 -0
- package/dist/esm/inline/loader.js +1 -1
- package/dist/esm/utils/ufoExperiences.js +1 -1
- package/dist/types/card/cardView.d.ts +2 -2
- package/dist/types/card/svgView/svgViewV2.d.ts +7 -0
- package/dist/types/card/ui/imageRenderer/helpers.d.ts +3 -0
- package/dist/types/card/ui/imageRenderer/imageRenderer.d.ts +2 -14
- package/dist/types/card/ui/imageRenderer/imageRendererV2.d.ts +3 -0
- package/dist/types/card/ui/imageRenderer/index.d.ts +3 -0
- package/dist/types/card/ui/imageRenderer/types.d.ts +18 -0
- package/dist/types/card/ui/imageRenderer/wrapper.d.ts +4 -0
- package/dist/types-ts4.5/card/cardView.d.ts +2 -2
- package/dist/types-ts4.5/card/svgView/svgViewV2.d.ts +7 -0
- package/dist/types-ts4.5/card/ui/imageRenderer/helpers.d.ts +3 -0
- package/dist/types-ts4.5/card/ui/imageRenderer/imageRenderer.d.ts +2 -14
- package/dist/types-ts4.5/card/ui/imageRenderer/imageRendererV2.d.ts +3 -0
- package/dist/types-ts4.5/card/ui/imageRenderer/index.d.ts +3 -0
- package/dist/types-ts4.5/card/ui/imageRenderer/types.d.ts +18 -0
- package/dist/types-ts4.5/card/ui/imageRenderer/wrapper.d.ts +4 -0
- package/package.json +7 -4
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
export const calculateDimensions = (imgElement, parentElement, resizeMode) => {
|
|
2
|
+
const {
|
|
3
|
+
naturalWidth,
|
|
4
|
+
width,
|
|
5
|
+
naturalHeight,
|
|
6
|
+
height
|
|
7
|
+
} = imgElement;
|
|
8
|
+
// Firefox & Safari can't always read the "natural" dimensions correctly.
|
|
9
|
+
// When these are undefined or zero, we replace them with the rendered values
|
|
10
|
+
const imgWidth = naturalWidth || width;
|
|
11
|
+
const imgHeight = naturalHeight || height;
|
|
12
|
+
const {
|
|
13
|
+
width: parentWidth,
|
|
14
|
+
height: parentHeight
|
|
15
|
+
} = parentElement.getBoundingClientRect();
|
|
16
|
+
if (resizeMode === 'fit' || resizeMode === 'full-fit') {
|
|
17
|
+
return {
|
|
18
|
+
maxWidth: `min(100%, ${imgWidth}px)`,
|
|
19
|
+
maxHeight: `min(100%, ${imgHeight}px)`
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
const imgRatio = imgWidth / imgHeight;
|
|
23
|
+
const cardRatio = parentWidth / parentHeight;
|
|
24
|
+
const isImageLandscapier = imgRatio > cardRatio;
|
|
25
|
+
if (resizeMode === 'stretchy-fit') {
|
|
26
|
+
if (isImageLandscapier) {
|
|
27
|
+
return {
|
|
28
|
+
width: '100%',
|
|
29
|
+
maxHeight: '100%'
|
|
30
|
+
};
|
|
31
|
+
} else {
|
|
32
|
+
return {
|
|
33
|
+
height: '100%',
|
|
34
|
+
maxWidth: '100%'
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
if (resizeMode === 'crop') {
|
|
39
|
+
if (isImageLandscapier) {
|
|
40
|
+
return {
|
|
41
|
+
height: imgHeight,
|
|
42
|
+
maxHeight: '100%'
|
|
43
|
+
};
|
|
44
|
+
} else {
|
|
45
|
+
return {
|
|
46
|
+
width: imgWidth,
|
|
47
|
+
maxWidth: '100%'
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return {};
|
|
52
|
+
};
|
|
53
|
+
export const calculateInitialDimensions = resizeMode => {
|
|
54
|
+
if (resizeMode === 'fit' || resizeMode === 'full-fit') {
|
|
55
|
+
return {
|
|
56
|
+
maxWidth: `100%`,
|
|
57
|
+
maxHeight: `100%`
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
if (resizeMode === 'stretchy-fit') {
|
|
61
|
+
// assume the image is landscape
|
|
62
|
+
return {
|
|
63
|
+
width: '100%',
|
|
64
|
+
maxHeight: '100%'
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// resizeMode === 'crop'
|
|
69
|
+
// assume the image is landscape
|
|
70
|
+
return {
|
|
71
|
+
width: '100%'
|
|
72
|
+
};
|
|
73
|
+
};
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/* imageRendererV2.tsx generated by @compiled/babel-plugin v0.36.1 */
|
|
2
|
+
import "./imageRendererV2.compiled.css";
|
|
3
|
+
import { ax, ix } from "@compiled/react/runtime";
|
|
4
|
+
import React, { useState, useRef, useEffect } from 'react';
|
|
5
|
+
import { calculateDimensions, calculateInitialDimensions } from './helpers';
|
|
6
|
+
import { useCurrentValueRef } from '../../../utils/useCurrentValueRef';
|
|
7
|
+
import { ImageRendererWrapper } from './wrapper';
|
|
8
|
+
import { isFileIdentifier } from '@atlaskit/media-client';
|
|
9
|
+
const baseStyles = null;
|
|
10
|
+
const backgroundStyles = null;
|
|
11
|
+
export const ImageRenderer = ({
|
|
12
|
+
cardPreview,
|
|
13
|
+
alt = '',
|
|
14
|
+
resizeMode = 'crop',
|
|
15
|
+
onImageLoad,
|
|
16
|
+
onImageError,
|
|
17
|
+
onDisplayImage,
|
|
18
|
+
mediaType,
|
|
19
|
+
nativeLazyLoad,
|
|
20
|
+
forceSyncDisplay,
|
|
21
|
+
identifier,
|
|
22
|
+
wrapperRef,
|
|
23
|
+
useWhiteBackground,
|
|
24
|
+
testId
|
|
25
|
+
}) => {
|
|
26
|
+
const onDisplayImageRef = useCurrentValueRef(onDisplayImage);
|
|
27
|
+
useEffect(() => {
|
|
28
|
+
if (mediaType === 'image') {
|
|
29
|
+
var _onDisplayImageRef$cu;
|
|
30
|
+
(_onDisplayImageRef$cu = onDisplayImageRef.current) === null || _onDisplayImageRef$cu === void 0 ? void 0 : _onDisplayImageRef$cu.call(onDisplayImageRef);
|
|
31
|
+
}
|
|
32
|
+
}, [mediaType, onDisplayImageRef]);
|
|
33
|
+
const [didRender, setDidRender] = useState(false);
|
|
34
|
+
const [resolvedDimensions, setResolvedDimensions] = useState(calculateInitialDimensions(resizeMode));
|
|
35
|
+
const imgRef = useRef(null);
|
|
36
|
+
const onLoad = evt => {
|
|
37
|
+
wrapperRef.current && setResolvedDimensions(calculateDimensions(evt.currentTarget, wrapperRef.current, resizeMode));
|
|
38
|
+
setDidRender(true);
|
|
39
|
+
cardPreview && (onImageLoad === null || onImageLoad === void 0 ? void 0 : onImageLoad(cardPreview));
|
|
40
|
+
};
|
|
41
|
+
const onError = () => {
|
|
42
|
+
onImageError && cardPreview && onImageError(cardPreview);
|
|
43
|
+
};
|
|
44
|
+
useEffect(() => {
|
|
45
|
+
if (imgRef.current && wrapperRef.current && imgRef.current) {
|
|
46
|
+
setResolvedDimensions(calculateDimensions(imgRef.current, wrapperRef.current, resizeMode));
|
|
47
|
+
}
|
|
48
|
+
}, [resizeMode, wrapperRef]);
|
|
49
|
+
return cardPreview ? /*#__PURE__*/React.createElement(ImageRendererWrapper, null, /*#__PURE__*/React.createElement("img", {
|
|
50
|
+
ref: imgRef,
|
|
51
|
+
"data-testid": testId,
|
|
52
|
+
"data-fileid": isFileIdentifier(identifier) ? identifier.id : null,
|
|
53
|
+
"data-filecollection": isFileIdentifier(identifier) ? identifier.collectionName : null,
|
|
54
|
+
"data-resizemode": resizeMode,
|
|
55
|
+
"data-source": cardPreview.source,
|
|
56
|
+
src: cardPreview.dataURI,
|
|
57
|
+
alt: alt,
|
|
58
|
+
onLoad: onLoad,
|
|
59
|
+
onError: onError,
|
|
60
|
+
loading: nativeLazyLoad ? 'lazy' : undefined,
|
|
61
|
+
style: {
|
|
62
|
+
visibility: didRender || forceSyncDisplay ? 'visible' : 'hidden',
|
|
63
|
+
// eslint-disable-next-line @atlaskit/ui-styling-standard/enforce-style-prop
|
|
64
|
+
...resolvedDimensions
|
|
65
|
+
},
|
|
66
|
+
className: ax(["_5ral1f51", useWhiteBackground && "_bfhku67f"])
|
|
67
|
+
})) : null;
|
|
68
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { ImageRenderer as ImageRendererV1 } from './imageRenderer';
|
|
3
|
+
import { ImageRenderer as ImageRendererV2 } from './imageRendererV2';
|
|
4
|
+
import { fg } from '@atlaskit/platform-feature-flags';
|
|
5
|
+
export const ImageRenderer = props => {
|
|
6
|
+
return fg('platform_media_card_image_render') ? /*#__PURE__*/React.createElement(ImageRendererV2, props) : /*#__PURE__*/React.createElement(ImageRendererV1, props);
|
|
7
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/* wrapper.tsx generated by @compiled/babel-plugin v0.36.1 */
|
|
2
|
+
import "./wrapper.compiled.css";
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { ax, ix } from "@compiled/react/runtime";
|
|
5
|
+
const wrapperStyles = null;
|
|
6
|
+
export const ImageRendererWrapper = ({
|
|
7
|
+
children
|
|
8
|
+
}) => /*#__PURE__*/React.createElement("div", {
|
|
9
|
+
"data-testid": "ImageRendererWrapper",
|
|
10
|
+
className: ax(["_kqswstnw _1bsb1osq _4t3i1osq _1e0c1txw _2lx21bp4 _1bah1h6o _4cvr1h6o"])
|
|
11
|
+
}, children);
|
|
@@ -37,7 +37,7 @@ export default class MediaInlineCardLoader extends React.PureComponent {
|
|
|
37
37
|
} = this.state;
|
|
38
38
|
const analyticsContext = {
|
|
39
39
|
packageVersion: "@atlaskit/media-card",
|
|
40
|
-
packageName: "79.0.
|
|
40
|
+
packageName: "79.0.13",
|
|
41
41
|
componentName: 'mediaInlineCard',
|
|
42
42
|
component: 'mediaInlineCard'
|
|
43
43
|
};
|
|
@@ -5,7 +5,7 @@ import { extractErrorInfo, getRenderErrorRequestMetadata } from './analytics';
|
|
|
5
5
|
import { MediaCardError } from '../errors';
|
|
6
6
|
import { getMediaEnvironment, getMediaRegion } from '@atlaskit/media-client';
|
|
7
7
|
const packageName = "@atlaskit/media-card";
|
|
8
|
-
const packageVersion = "79.0.
|
|
8
|
+
const packageVersion = "79.0.13";
|
|
9
9
|
const SAMPLE_RATE = 0.05;
|
|
10
10
|
let concurrentExperience;
|
|
11
11
|
const getExperience = id => {
|
package/dist/esm/card/card.js
CHANGED
|
@@ -11,7 +11,7 @@ import { startResourceObserver, setAnalyticsContext } from '../utils/mediaPerfor
|
|
|
11
11
|
import { useAnalyticsEvents } from '@atlaskit/analytics-next';
|
|
12
12
|
import UFOLabel from '@atlaskit/react-ufo/label';
|
|
13
13
|
var packageName = "@atlaskit/media-card";
|
|
14
|
-
var packageVersion = "79.0.
|
|
14
|
+
var packageVersion = "79.0.13";
|
|
15
15
|
export var CardBase = function CardBase(_ref) {
|
|
16
16
|
var identifier = _ref.identifier,
|
|
17
17
|
otherProps = _objectWithoutProperties(_ref, _excluded);
|
|
@@ -3,6 +3,7 @@ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
|
3
3
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
4
4
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
5
5
|
import React, { useEffect, useState, useRef, useMemo } from 'react';
|
|
6
|
+
import { isFileIdentifier } from '@atlaskit/media-client';
|
|
6
7
|
import { withAnalyticsEvents } from '@atlaskit/analytics-next';
|
|
7
8
|
import { MimeTypeIcon } from '@atlaskit/media-ui/mime-type-icon';
|
|
8
9
|
import SpinnerIcon from '@atlaskit/spinner';
|
|
@@ -10,7 +11,7 @@ import Tooltip from '@atlaskit/tooltip';
|
|
|
10
11
|
import { useMergeRefs } from 'use-callback-ref';
|
|
11
12
|
import { messages } from '@atlaskit/media-ui';
|
|
12
13
|
import { createAndFireMediaCardEvent } from '../utils/analytics';
|
|
13
|
-
import { ImageRenderer } from './ui/imageRenderer
|
|
14
|
+
import { ImageRenderer } from './ui/imageRenderer';
|
|
14
15
|
import { TitleBox } from './ui/titleBox/titleBox';
|
|
15
16
|
import { FailedTitleBox } from './ui/titleBox/failedTitleBox';
|
|
16
17
|
import { ProgressBar } from './ui/progressBar/progressBar';
|
|
@@ -27,6 +28,7 @@ import { useBreakpoint } from './useBreakpoint';
|
|
|
27
28
|
import OpenMediaViewerButton from './ui/openMediaViewerButton/openMediaViewerButton';
|
|
28
29
|
import { useCurrentValueRef } from '../utils/useCurrentValueRef';
|
|
29
30
|
import { SvgView } from './svgView';
|
|
31
|
+
import { fg } from '@atlaskit/platform-feature-flags';
|
|
30
32
|
export var CardViewBase = function CardViewBase(_ref) {
|
|
31
33
|
var identifier = _ref.identifier,
|
|
32
34
|
_ref$innerRef = _ref.innerRef,
|
|
@@ -235,7 +237,8 @@ export var CardViewBase = function CardViewBase(_ref) {
|
|
|
235
237
|
onSvgLoad === null || onSvgLoad === void 0 || onSvgLoad();
|
|
236
238
|
};
|
|
237
239
|
var contents = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(ImageContainer, {
|
|
238
|
-
centerElements: didSvgRender
|
|
240
|
+
centerElements: didSvgRender && !fg('platform_media_card_image_render') // The whole centerElements styles can go after removing the flag
|
|
241
|
+
,
|
|
239
242
|
testId: fileCardImageViewSelector,
|
|
240
243
|
mediaName: name,
|
|
241
244
|
status: status,
|
|
@@ -256,13 +259,13 @@ export var CardViewBase = function CardViewBase(_ref) {
|
|
|
256
259
|
}, /*#__PURE__*/React.createElement(SpinnerIcon, {
|
|
257
260
|
testId: "media-card-loading",
|
|
258
261
|
interactionName: "media-card-loading"
|
|
259
|
-
})), renderSvgView && identifier && /*#__PURE__*/React.createElement(SvgView, {
|
|
262
|
+
})), renderSvgView && identifier && isFileIdentifier(identifier) && /*#__PURE__*/React.createElement(SvgView, {
|
|
260
263
|
identifier: identifier,
|
|
261
264
|
resizeMode: resizeMode || 'crop',
|
|
262
265
|
onError: onSvgError,
|
|
263
266
|
onLoad: onSvgLoadBase,
|
|
264
267
|
wrapperRef: divRef
|
|
265
|
-
}), renderImageRenderer && /*#__PURE__*/React.createElement(ImageRenderer, {
|
|
268
|
+
}), renderImageRenderer && identifier && /*#__PURE__*/React.createElement(ImageRenderer, {
|
|
266
269
|
cardPreview: cardPreview,
|
|
267
270
|
mediaType: (metadata === null || metadata === void 0 ? void 0 : metadata.mediaType) || 'unknown',
|
|
268
271
|
alt: alt !== null && alt !== void 0 ? alt : name,
|
|
@@ -271,7 +274,9 @@ export var CardViewBase = function CardViewBase(_ref) {
|
|
|
271
274
|
onImageLoad: handleOnImageLoad,
|
|
272
275
|
onImageError: handleOnImageError,
|
|
273
276
|
nativeLazyLoad: nativeLazyLoad,
|
|
274
|
-
forceSyncDisplay: forceSyncDisplay
|
|
277
|
+
forceSyncDisplay: forceSyncDisplay,
|
|
278
|
+
identifier: identifier,
|
|
279
|
+
wrapperRef: divRef
|
|
275
280
|
}), renderPlayButton && /*#__PURE__*/React.createElement(IconWrapper, {
|
|
276
281
|
breakpoint: breakpoint,
|
|
277
282
|
hasTitleBox: hasVisibleTitleBox
|
|
@@ -191,6 +191,7 @@ export var ExternalImageCard = function ExternalImageCard(_ref) {
|
|
|
191
191
|
|
|
192
192
|
var mediaCardCursor = getMediaCardCursor(false, !!shouldOpenMediaViewer, status === 'error', !!cardPreview, metadata.mediaType);
|
|
193
193
|
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(CardView, {
|
|
194
|
+
identifier: identifier,
|
|
194
195
|
status: status,
|
|
195
196
|
error: error,
|
|
196
197
|
mediaItemType: identifier.mediaItemType,
|
|
@@ -80,7 +80,7 @@ var WrappedMediaCardAnalyticsErrorBoundary = /*#__PURE__*/function (_React$Compo
|
|
|
80
80
|
}(React.Component);
|
|
81
81
|
_defineProperty(WrappedMediaCardAnalyticsErrorBoundary, "displayName", 'MediaCardAnalyticsErrorBoundary');
|
|
82
82
|
var packageName = "@atlaskit/media-card";
|
|
83
|
-
var packageVersion = "79.0.
|
|
83
|
+
var packageVersion = "79.0.13";
|
|
84
84
|
|
|
85
85
|
// @ts-ignore: [PIT-1685] Fails in post-office due to backwards incompatibility issue with React 18
|
|
86
86
|
var MediaCardAnalyticsErrorBoundary = withMediaAnalyticsContext({
|
|
@@ -2,6 +2,7 @@ import React from 'react';
|
|
|
2
2
|
import { fg } from '@atlaskit/platform-feature-flags';
|
|
3
3
|
import { SvgView as SvgViewCompiled } from './svgImage-compiled';
|
|
4
4
|
import { SvgView as SvgViewEmotion } from './svgImage-emotion';
|
|
5
|
+
import { SvgView as SvgViewV2 } from './svgViewV2';
|
|
5
6
|
export var SvgView = function SvgView(props) {
|
|
6
|
-
return fg('platform_media_compiled') ? /*#__PURE__*/React.createElement(SvgViewCompiled, props) : /*#__PURE__*/React.createElement(SvgViewEmotion, props);
|
|
7
|
+
return fg('platform_media_card_image_render') ? /*#__PURE__*/React.createElement(SvgViewV2, props) : fg('platform_media_compiled') ? /*#__PURE__*/React.createElement(SvgViewCompiled, props) : /*#__PURE__*/React.createElement(SvgViewEmotion, props);
|
|
7
8
|
};
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @jsxRuntime classic
|
|
3
|
+
* @jsx jsx
|
|
4
|
+
*/
|
|
5
|
+
// eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766
|
|
6
|
+
import { jsx } from '@emotion/react';
|
|
7
|
+
import { useMemo } from 'react';
|
|
8
|
+
import { MediaCardError } from '../../errors';
|
|
9
|
+
import { useResolveSvg, MediaSVGError } from '@atlaskit/media-svg';
|
|
10
|
+
import { ImageRenderer } from '../ui/imageRenderer/imageRendererV2';
|
|
11
|
+
var getErrorReason = function getErrorReason(svgReason) {
|
|
12
|
+
switch (svgReason) {
|
|
13
|
+
case 'img-error':
|
|
14
|
+
return 'svg-img-error';
|
|
15
|
+
case 'binary-fetch':
|
|
16
|
+
return 'svg-binary-fetch';
|
|
17
|
+
case 'blob-to-datauri':
|
|
18
|
+
return 'svg-blob-to-datauri';
|
|
19
|
+
default:
|
|
20
|
+
return 'svg-unknown-error';
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
export var SvgView = function SvgView(_ref) {
|
|
24
|
+
var identifier = _ref.identifier,
|
|
25
|
+
resizeMode = _ref.resizeMode,
|
|
26
|
+
onLoad = _ref.onLoad,
|
|
27
|
+
onError = _ref.onError,
|
|
28
|
+
wrapperRef = _ref.wrapperRef,
|
|
29
|
+
alt = _ref.alt;
|
|
30
|
+
var onSvgError = function onSvgError(err) {
|
|
31
|
+
var error = new MediaCardError(getErrorReason(err.primaryReason), err.secondaryError);
|
|
32
|
+
onError === null || onError === void 0 || onError(error);
|
|
33
|
+
};
|
|
34
|
+
var _useResolveSvg = useResolveSvg(identifier, onSvgError),
|
|
35
|
+
svgUrl = _useResolveSvg.svgUrl,
|
|
36
|
+
source = _useResolveSvg.source;
|
|
37
|
+
var cardPreview = useMemo(function () {
|
|
38
|
+
return svgUrl && source ? {
|
|
39
|
+
dataURI: svgUrl,
|
|
40
|
+
source: source
|
|
41
|
+
} : undefined;
|
|
42
|
+
}, [svgUrl, source]);
|
|
43
|
+
return cardPreview ? jsx(ImageRenderer, {
|
|
44
|
+
testId: "media-card-svg",
|
|
45
|
+
identifier: identifier,
|
|
46
|
+
cardPreview: cardPreview,
|
|
47
|
+
alt: alt,
|
|
48
|
+
resizeMode: resizeMode,
|
|
49
|
+
onImageLoad: onLoad,
|
|
50
|
+
onImageError: function onImageError() {
|
|
51
|
+
onSvgError(new MediaSVGError('img-error'));
|
|
52
|
+
},
|
|
53
|
+
wrapperRef: wrapperRef,
|
|
54
|
+
mediaType: "image",
|
|
55
|
+
useWhiteBackground: true
|
|
56
|
+
}) : null;
|
|
57
|
+
};
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
export var calculateDimensions = function calculateDimensions(imgElement, parentElement, resizeMode) {
|
|
2
|
+
var naturalWidth = imgElement.naturalWidth,
|
|
3
|
+
width = imgElement.width,
|
|
4
|
+
naturalHeight = imgElement.naturalHeight,
|
|
5
|
+
height = imgElement.height;
|
|
6
|
+
// Firefox & Safari can't always read the "natural" dimensions correctly.
|
|
7
|
+
// When these are undefined or zero, we replace them with the rendered values
|
|
8
|
+
var imgWidth = naturalWidth || width;
|
|
9
|
+
var imgHeight = naturalHeight || height;
|
|
10
|
+
var _parentElement$getBou = parentElement.getBoundingClientRect(),
|
|
11
|
+
parentWidth = _parentElement$getBou.width,
|
|
12
|
+
parentHeight = _parentElement$getBou.height;
|
|
13
|
+
if (resizeMode === 'fit' || resizeMode === 'full-fit') {
|
|
14
|
+
return {
|
|
15
|
+
maxWidth: "min(100%, ".concat(imgWidth, "px)"),
|
|
16
|
+
maxHeight: "min(100%, ".concat(imgHeight, "px)")
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
var imgRatio = imgWidth / imgHeight;
|
|
20
|
+
var cardRatio = parentWidth / parentHeight;
|
|
21
|
+
var isImageLandscapier = imgRatio > cardRatio;
|
|
22
|
+
if (resizeMode === 'stretchy-fit') {
|
|
23
|
+
if (isImageLandscapier) {
|
|
24
|
+
return {
|
|
25
|
+
width: '100%',
|
|
26
|
+
maxHeight: '100%'
|
|
27
|
+
};
|
|
28
|
+
} else {
|
|
29
|
+
return {
|
|
30
|
+
height: '100%',
|
|
31
|
+
maxWidth: '100%'
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
if (resizeMode === 'crop') {
|
|
36
|
+
if (isImageLandscapier) {
|
|
37
|
+
return {
|
|
38
|
+
height: imgHeight,
|
|
39
|
+
maxHeight: '100%'
|
|
40
|
+
};
|
|
41
|
+
} else {
|
|
42
|
+
return {
|
|
43
|
+
width: imgWidth,
|
|
44
|
+
maxWidth: '100%'
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return {};
|
|
49
|
+
};
|
|
50
|
+
export var calculateInitialDimensions = function calculateInitialDimensions(resizeMode) {
|
|
51
|
+
if (resizeMode === 'fit' || resizeMode === 'full-fit') {
|
|
52
|
+
return {
|
|
53
|
+
maxWidth: "100%",
|
|
54
|
+
maxHeight: "100%"
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
if (resizeMode === 'stretchy-fit') {
|
|
58
|
+
// assume the image is landscape
|
|
59
|
+
return {
|
|
60
|
+
width: '100%',
|
|
61
|
+
maxHeight: '100%'
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// resizeMode === 'crop'
|
|
66
|
+
// assume the image is landscape
|
|
67
|
+
return {
|
|
68
|
+
width: '100%'
|
|
69
|
+
};
|
|
70
|
+
};
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/* imageRendererV2.tsx generated by @compiled/babel-plugin v0.36.1 */
|
|
2
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
3
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
4
|
+
import "./imageRendererV2.compiled.css";
|
|
5
|
+
import { ax, ix } from "@compiled/react/runtime";
|
|
6
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
7
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
8
|
+
import React, { useState, useRef, useEffect } from 'react';
|
|
9
|
+
import { calculateDimensions, calculateInitialDimensions } from './helpers';
|
|
10
|
+
import { useCurrentValueRef } from '../../../utils/useCurrentValueRef';
|
|
11
|
+
import { ImageRendererWrapper } from './wrapper';
|
|
12
|
+
import { isFileIdentifier } from '@atlaskit/media-client';
|
|
13
|
+
var baseStyles = null;
|
|
14
|
+
var backgroundStyles = null;
|
|
15
|
+
export var ImageRenderer = function ImageRenderer(_ref) {
|
|
16
|
+
var cardPreview = _ref.cardPreview,
|
|
17
|
+
_ref$alt = _ref.alt,
|
|
18
|
+
alt = _ref$alt === void 0 ? '' : _ref$alt,
|
|
19
|
+
_ref$resizeMode = _ref.resizeMode,
|
|
20
|
+
resizeMode = _ref$resizeMode === void 0 ? 'crop' : _ref$resizeMode,
|
|
21
|
+
onImageLoad = _ref.onImageLoad,
|
|
22
|
+
onImageError = _ref.onImageError,
|
|
23
|
+
onDisplayImage = _ref.onDisplayImage,
|
|
24
|
+
mediaType = _ref.mediaType,
|
|
25
|
+
nativeLazyLoad = _ref.nativeLazyLoad,
|
|
26
|
+
forceSyncDisplay = _ref.forceSyncDisplay,
|
|
27
|
+
identifier = _ref.identifier,
|
|
28
|
+
wrapperRef = _ref.wrapperRef,
|
|
29
|
+
useWhiteBackground = _ref.useWhiteBackground,
|
|
30
|
+
testId = _ref.testId;
|
|
31
|
+
var onDisplayImageRef = useCurrentValueRef(onDisplayImage);
|
|
32
|
+
useEffect(function () {
|
|
33
|
+
if (mediaType === 'image') {
|
|
34
|
+
var _onDisplayImageRef$cu;
|
|
35
|
+
(_onDisplayImageRef$cu = onDisplayImageRef.current) === null || _onDisplayImageRef$cu === void 0 || _onDisplayImageRef$cu.call(onDisplayImageRef);
|
|
36
|
+
}
|
|
37
|
+
}, [mediaType, onDisplayImageRef]);
|
|
38
|
+
var _useState = useState(false),
|
|
39
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
40
|
+
didRender = _useState2[0],
|
|
41
|
+
setDidRender = _useState2[1];
|
|
42
|
+
var _useState3 = useState(calculateInitialDimensions(resizeMode)),
|
|
43
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
44
|
+
resolvedDimensions = _useState4[0],
|
|
45
|
+
setResolvedDimensions = _useState4[1];
|
|
46
|
+
var imgRef = useRef(null);
|
|
47
|
+
var onLoad = function onLoad(evt) {
|
|
48
|
+
wrapperRef.current && setResolvedDimensions(calculateDimensions(evt.currentTarget, wrapperRef.current, resizeMode));
|
|
49
|
+
setDidRender(true);
|
|
50
|
+
cardPreview && (onImageLoad === null || onImageLoad === void 0 ? void 0 : onImageLoad(cardPreview));
|
|
51
|
+
};
|
|
52
|
+
var onError = function onError() {
|
|
53
|
+
onImageError && cardPreview && onImageError(cardPreview);
|
|
54
|
+
};
|
|
55
|
+
useEffect(function () {
|
|
56
|
+
if (imgRef.current && wrapperRef.current && imgRef.current) {
|
|
57
|
+
setResolvedDimensions(calculateDimensions(imgRef.current, wrapperRef.current, resizeMode));
|
|
58
|
+
}
|
|
59
|
+
}, [resizeMode, wrapperRef]);
|
|
60
|
+
return cardPreview ? /*#__PURE__*/React.createElement(ImageRendererWrapper, null, /*#__PURE__*/React.createElement("img", {
|
|
61
|
+
ref: imgRef,
|
|
62
|
+
"data-testid": testId,
|
|
63
|
+
"data-fileid": isFileIdentifier(identifier) ? identifier.id : null,
|
|
64
|
+
"data-filecollection": isFileIdentifier(identifier) ? identifier.collectionName : null,
|
|
65
|
+
"data-resizemode": resizeMode,
|
|
66
|
+
"data-source": cardPreview.source,
|
|
67
|
+
src: cardPreview.dataURI,
|
|
68
|
+
alt: alt,
|
|
69
|
+
onLoad: onLoad,
|
|
70
|
+
onError: onError,
|
|
71
|
+
loading: nativeLazyLoad ? 'lazy' : undefined,
|
|
72
|
+
style: _objectSpread({
|
|
73
|
+
visibility: didRender || forceSyncDisplay ? 'visible' : 'hidden'
|
|
74
|
+
}, resolvedDimensions),
|
|
75
|
+
className: ax(["_5ral1f51", useWhiteBackground && "_bfhku67f"])
|
|
76
|
+
})) : null;
|
|
77
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { ImageRenderer as ImageRendererV1 } from './imageRenderer';
|
|
3
|
+
import { ImageRenderer as ImageRendererV2 } from './imageRendererV2';
|
|
4
|
+
import { fg } from '@atlaskit/platform-feature-flags';
|
|
5
|
+
export var ImageRenderer = function ImageRenderer(props) {
|
|
6
|
+
return fg('platform_media_card_image_render') ? /*#__PURE__*/React.createElement(ImageRendererV2, props) : /*#__PURE__*/React.createElement(ImageRendererV1, props);
|
|
7
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/* wrapper.tsx generated by @compiled/babel-plugin v0.36.1 */
|
|
2
|
+
import "./wrapper.compiled.css";
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { ax, ix } from "@compiled/react/runtime";
|
|
5
|
+
var wrapperStyles = null;
|
|
6
|
+
export var ImageRendererWrapper = function ImageRendererWrapper(_ref) {
|
|
7
|
+
var children = _ref.children;
|
|
8
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
9
|
+
"data-testid": "ImageRendererWrapper",
|
|
10
|
+
className: ax(["_kqswstnw _1bsb1osq _4t3i1osq _1e0c1txw _2lx21bp4 _1bah1h6o _4cvr1h6o"])
|
|
11
|
+
}, children);
|
|
12
|
+
};
|
|
@@ -101,7 +101,7 @@ var MediaInlineCardLoader = /*#__PURE__*/function (_React$PureComponent) {
|
|
|
101
101
|
ErrorBoundary = _this$state.ErrorBoundary;
|
|
102
102
|
var analyticsContext = {
|
|
103
103
|
packageVersion: "@atlaskit/media-card",
|
|
104
|
-
packageName: "79.0.
|
|
104
|
+
packageName: "79.0.13",
|
|
105
105
|
componentName: 'mediaInlineCard',
|
|
106
106
|
component: 'mediaInlineCard'
|
|
107
107
|
};
|
|
@@ -8,7 +8,7 @@ import { extractErrorInfo, getRenderErrorRequestMetadata } from './analytics';
|
|
|
8
8
|
import { MediaCardError } from '../errors';
|
|
9
9
|
import { getMediaEnvironment, getMediaRegion } from '@atlaskit/media-client';
|
|
10
10
|
var packageName = "@atlaskit/media-card";
|
|
11
|
-
var packageVersion = "79.0.
|
|
11
|
+
var packageVersion = "79.0.13";
|
|
12
12
|
var SAMPLE_RATE = 0.05;
|
|
13
13
|
var concurrentExperience;
|
|
14
14
|
var getExperience = function getExperience(id) {
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import React, { type MouseEvent } from 'react';
|
|
2
2
|
import { type MessageDescriptor } from 'react-intl-next';
|
|
3
|
-
import { type MediaItemType, type FileDetails, type ImageResizeMode, type
|
|
3
|
+
import { type MediaItemType, type FileDetails, type ImageResizeMode, type Identifier } from '@atlaskit/media-client';
|
|
4
4
|
import { type WithAnalyticsEventsProps, type UIAnalyticsEvent } from '@atlaskit/analytics-next';
|
|
5
5
|
import { type CardStatus, type MediaCardCursor, type CardDimensions, type TitleBoxIcon } from '../types';
|
|
6
6
|
import { type MediaFilePreview } from '@atlaskit/media-file-preview';
|
|
7
7
|
import { type CardAction } from './actions';
|
|
8
8
|
import { type MediaCardError } from '../errors';
|
|
9
9
|
export interface CardViewProps {
|
|
10
|
-
readonly identifier
|
|
10
|
+
readonly identifier: Identifier;
|
|
11
11
|
readonly disableOverlay?: boolean;
|
|
12
12
|
readonly resizeMode?: ImageResizeMode;
|
|
13
13
|
readonly dimensions: CardDimensions;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { type ImageResizeMode } from '@atlaskit/media-client';
|
|
2
|
+
export declare const calculateDimensions: (imgElement: HTMLImageElement, parentElement: HTMLElement, resizeMode: ImageResizeMode) => React.CSSProperties;
|
|
3
|
+
export declare const calculateInitialDimensions: (resizeMode: ImageResizeMode) => React.CSSProperties;
|
|
@@ -1,15 +1,3 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
export type ImageRendererProps = {
|
|
5
|
-
readonly cardPreview?: CardPreview;
|
|
6
|
-
readonly mediaType: MediaType;
|
|
7
|
-
readonly alt?: string;
|
|
8
|
-
readonly resizeMode?: ImageResizeMode;
|
|
9
|
-
readonly onDisplayImage?: () => void;
|
|
10
|
-
readonly onImageError?: (cardPreview: CardPreview) => void;
|
|
11
|
-
readonly onImageLoad?: (cardPreview: CardPreview) => void;
|
|
12
|
-
readonly nativeLazyLoad?: boolean;
|
|
13
|
-
readonly forceSyncDisplay?: boolean;
|
|
14
|
-
};
|
|
15
|
-
export declare const ImageRenderer: React.FC<ImageRendererProps>;
|
|
2
|
+
import type { ImageRendererProps } from './types';
|
|
3
|
+
export declare const ImageRenderer: ({ cardPreview, alt, resizeMode, onImageLoad, onImageError, onDisplayImage, mediaType, nativeLazyLoad, forceSyncDisplay, }: ImageRendererProps) => React.JSX.Element;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { ImageRendererProps } from './types';
|
|
3
|
+
export declare const ImageRenderer: ({ cardPreview, alt, resizeMode, onImageLoad, onImageError, onDisplayImage, mediaType, nativeLazyLoad, forceSyncDisplay, identifier, wrapperRef, useWhiteBackground, testId, }: ImageRendererProps) => JSX.Element | null;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import { type MediaType, type ImageResizeMode, type Identifier } from '@atlaskit/media-client';
|
|
3
|
+
import { type CardPreview } from '../../../types';
|
|
4
|
+
export type ImageRendererProps = {
|
|
5
|
+
readonly cardPreview?: CardPreview;
|
|
6
|
+
readonly mediaType: MediaType;
|
|
7
|
+
readonly alt?: string;
|
|
8
|
+
readonly resizeMode?: ImageResizeMode;
|
|
9
|
+
readonly onDisplayImage?: () => void;
|
|
10
|
+
readonly onImageError?: (cardPreview: CardPreview) => void;
|
|
11
|
+
readonly onImageLoad?: (cardPreview: CardPreview) => void;
|
|
12
|
+
readonly nativeLazyLoad?: boolean;
|
|
13
|
+
readonly forceSyncDisplay?: boolean;
|
|
14
|
+
readonly wrapperRef: React.RefObject<HTMLDivElement>;
|
|
15
|
+
readonly identifier: Identifier;
|
|
16
|
+
readonly useWhiteBackground?: boolean;
|
|
17
|
+
readonly testId?: string;
|
|
18
|
+
};
|