@transferwise/components 0.0.0-experimental-afb5fc3 → 0.0.0-experimental-11ac03b
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/build/image/Image.js +9 -10
- package/build/image/Image.js.map +1 -1
- package/build/image/Image.mjs +11 -11
- package/build/image/Image.mjs.map +1 -1
- package/build/types/image/Image.d.ts +0 -1
- package/build/types/image/Image.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/image/Image.spec.tsx +3 -3
- package/src/image/Image.tsx +10 -12
- package/src/promoCard/__snapshots__/PromoCard.spec.tsx.snap +1 -0
- package/src/promoCard/__snapshots__/PromoCardGroup.spec.tsx.snap +2 -0
package/build/image/Image.js
CHANGED
|
@@ -10,7 +10,6 @@ var useHasIntersected = require('../common/hooks/useHasIntersected/useHasInterse
|
|
|
10
10
|
require('../common/propsValues/breakpoint.js');
|
|
11
11
|
var jsxRuntime = require('react/jsx-runtime');
|
|
12
12
|
|
|
13
|
-
const EmptyTransparentImage = 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==';
|
|
14
13
|
const Image = ({
|
|
15
14
|
id,
|
|
16
15
|
src,
|
|
@@ -28,27 +27,27 @@ const Image = ({
|
|
|
28
27
|
elRef: elementReference,
|
|
29
28
|
loading
|
|
30
29
|
});
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
}
|
|
30
|
+
// Internal onLoad handler that calls user onLoad only if hasIntersected is true
|
|
31
|
+
const handleLoad = React.useCallback(() => {
|
|
32
|
+
if (hasIntersected && onLoad) {
|
|
33
|
+
onLoad();
|
|
34
|
+
}
|
|
35
|
+
}, [hasIntersected, onLoad]);
|
|
37
36
|
return /*#__PURE__*/jsxRuntime.jsx("img", {
|
|
38
37
|
ref: elementReference,
|
|
39
38
|
id: id,
|
|
40
39
|
alt: alt,
|
|
41
|
-
src:
|
|
40
|
+
src: src,
|
|
41
|
+
loading: loading,
|
|
42
42
|
className: clsx.clsx(['tw-image', {
|
|
43
43
|
'tw-image__stretch': stretch,
|
|
44
44
|
'tw-image__shrink': shrink
|
|
45
45
|
}, className]),
|
|
46
46
|
role: role,
|
|
47
|
-
onLoad:
|
|
47
|
+
onLoad: handleLoad,
|
|
48
48
|
onError: onError
|
|
49
49
|
});
|
|
50
50
|
};
|
|
51
51
|
|
|
52
|
-
exports.EmptyTransparentImage = EmptyTransparentImage;
|
|
53
52
|
exports.default = Image;
|
|
54
53
|
//# sourceMappingURL=Image.js.map
|
package/build/image/Image.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Image.js","sources":["../../src/image/Image.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport { useRef } from 'react';\n\nimport { useHasIntersected } from '../common/hooks';\n\nexport interface ImageProps {\n alt: string;\n src: string;\n id?: string;\n onLoad?: () => void;\n onError?: () => void;\n className?: string;\n loading?: 'lazy' | 'eager';\n stretch?: boolean;\n role?: string;\n shrink?: boolean;\n}\n\
|
|
1
|
+
{"version":3,"file":"Image.js","sources":["../../src/image/Image.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport { useRef, useCallback } from 'react';\n\nimport { useHasIntersected } from '../common/hooks';\n\nexport interface ImageProps {\n alt: string;\n src: string;\n id?: string;\n onLoad?: () => void;\n onError?: () => void;\n className?: string;\n loading?: 'lazy' | 'eager';\n stretch?: boolean;\n role?: string;\n shrink?: boolean;\n}\n\nconst Image = ({\n id,\n src,\n alt,\n onLoad,\n onError,\n className,\n loading,\n stretch = true,\n role,\n shrink = true,\n}: ImageProps) => {\n const elementReference = useRef<HTMLImageElement>(null);\n const [hasIntersected] = useHasIntersected({ elRef: elementReference, loading });\n\n // Internal onLoad handler that calls user onLoad only if hasIntersected is true\n const handleLoad = useCallback(() => {\n if (hasIntersected && onLoad) {\n onLoad();\n }\n }, [hasIntersected, onLoad]);\n\n return (\n <img\n ref={elementReference}\n id={id}\n alt={alt}\n src={src}\n loading={loading}\n className={clsx([\n 'tw-image',\n {\n 'tw-image__stretch': stretch,\n 'tw-image__shrink': shrink,\n },\n className,\n ])}\n role={role}\n onLoad={handleLoad}\n onError={onError}\n />\n );\n};\n\nexport default Image;\n"],"names":["Image","id","src","alt","onLoad","onError","className","loading","stretch","role","shrink","elementReference","useRef","hasIntersected","useHasIntersected","elRef","handleLoad","useCallback","_jsx","ref","clsx"],"mappings":";;;;;;;;;;;;AAkBMA,MAAAA,KAAK,GAAGA,CAAC;EACbC,EAAE;EACFC,GAAG;EACHC,GAAG;EACHC,MAAM;EACNC,OAAO;EACPC,SAAS;EACTC,OAAO;AACPC,EAAAA,OAAO,GAAG,IAAI;EACdC,IAAI;AACJC,EAAAA,MAAM,GAAG;AAAI,CACF,KAAI;AACf,EAAA,MAAMC,gBAAgB,GAAGC,YAAM,CAAmB,IAAI,CAAC;AACvD,EAAA,MAAM,CAACC,cAAc,CAAC,GAAGC,mCAAiB,CAAC;AAAEC,IAAAA,KAAK,EAAEJ,gBAAgB;AAAEJ,IAAAA;AAAO,GAAE,CAAC;AAEhF;AACA,EAAA,MAAMS,UAAU,GAAGC,iBAAW,CAAC,MAAK;IAClC,IAAIJ,cAAc,IAAIT,MAAM,EAAE;AAC5BA,MAAAA,MAAM,EAAE;AACV;AACF,GAAC,EAAE,CAACS,cAAc,EAAET,MAAM,CAAC,CAAC;AAE5B,EAAA,oBACEc,cAAA,CAAA,KAAA,EAAA;AACEC,IAAAA,GAAG,EAAER,gBAAiB;AACtBV,IAAAA,EAAE,EAAEA,EAAG;AACPE,IAAAA,GAAG,EAAEA,GAAI;AACTD,IAAAA,GAAG,EAAEA,GAAI;AACTK,IAAAA,OAAO,EAAEA,OAAQ;AACjBD,IAAAA,SAAS,EAAEc,SAAI,CAAC,CACd,UAAU,EACV;AACE,MAAA,mBAAmB,EAAEZ,OAAO;AAC5B,MAAA,kBAAkB,EAAEE;KACrB,EACDJ,SAAS,CACV,CAAE;AACHG,IAAAA,IAAI,EAAEA,IAAK;AACXL,IAAAA,MAAM,EAAEY,UAAW;AACnBX,IAAAA,OAAO,EAAEA;AAAQ,GACjB,CAAA;AAEN;;;;"}
|
package/build/image/Image.mjs
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import { clsx } from 'clsx';
|
|
2
|
-
import { useRef } from 'react';
|
|
2
|
+
import { useRef, useCallback } from 'react';
|
|
3
3
|
import '@transferwise/neptune-validation';
|
|
4
4
|
import '../provider/direction/DirectionProvider.mjs';
|
|
5
5
|
import { useHasIntersected } from '../common/hooks/useHasIntersected/useHasIntersected.mjs';
|
|
6
6
|
import '../common/propsValues/breakpoint.mjs';
|
|
7
7
|
import { jsx } from 'react/jsx-runtime';
|
|
8
8
|
|
|
9
|
-
const EmptyTransparentImage = 'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==';
|
|
10
9
|
const Image = ({
|
|
11
10
|
id,
|
|
12
11
|
src,
|
|
@@ -24,26 +23,27 @@ const Image = ({
|
|
|
24
23
|
elRef: elementReference,
|
|
25
24
|
loading
|
|
26
25
|
});
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}
|
|
26
|
+
// Internal onLoad handler that calls user onLoad only if hasIntersected is true
|
|
27
|
+
const handleLoad = useCallback(() => {
|
|
28
|
+
if (hasIntersected && onLoad) {
|
|
29
|
+
onLoad();
|
|
30
|
+
}
|
|
31
|
+
}, [hasIntersected, onLoad]);
|
|
33
32
|
return /*#__PURE__*/jsx("img", {
|
|
34
33
|
ref: elementReference,
|
|
35
34
|
id: id,
|
|
36
35
|
alt: alt,
|
|
37
|
-
src:
|
|
36
|
+
src: src,
|
|
37
|
+
loading: loading,
|
|
38
38
|
className: clsx(['tw-image', {
|
|
39
39
|
'tw-image__stretch': stretch,
|
|
40
40
|
'tw-image__shrink': shrink
|
|
41
41
|
}, className]),
|
|
42
42
|
role: role,
|
|
43
|
-
onLoad:
|
|
43
|
+
onLoad: handleLoad,
|
|
44
44
|
onError: onError
|
|
45
45
|
});
|
|
46
46
|
};
|
|
47
47
|
|
|
48
|
-
export {
|
|
48
|
+
export { Image as default };
|
|
49
49
|
//# sourceMappingURL=Image.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Image.mjs","sources":["../../src/image/Image.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport { useRef } from 'react';\n\nimport { useHasIntersected } from '../common/hooks';\n\nexport interface ImageProps {\n alt: string;\n src: string;\n id?: string;\n onLoad?: () => void;\n onError?: () => void;\n className?: string;\n loading?: 'lazy' | 'eager';\n stretch?: boolean;\n role?: string;\n shrink?: boolean;\n}\n\
|
|
1
|
+
{"version":3,"file":"Image.mjs","sources":["../../src/image/Image.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport { useRef, useCallback } from 'react';\n\nimport { useHasIntersected } from '../common/hooks';\n\nexport interface ImageProps {\n alt: string;\n src: string;\n id?: string;\n onLoad?: () => void;\n onError?: () => void;\n className?: string;\n loading?: 'lazy' | 'eager';\n stretch?: boolean;\n role?: string;\n shrink?: boolean;\n}\n\nconst Image = ({\n id,\n src,\n alt,\n onLoad,\n onError,\n className,\n loading,\n stretch = true,\n role,\n shrink = true,\n}: ImageProps) => {\n const elementReference = useRef<HTMLImageElement>(null);\n const [hasIntersected] = useHasIntersected({ elRef: elementReference, loading });\n\n // Internal onLoad handler that calls user onLoad only if hasIntersected is true\n const handleLoad = useCallback(() => {\n if (hasIntersected && onLoad) {\n onLoad();\n }\n }, [hasIntersected, onLoad]);\n\n return (\n <img\n ref={elementReference}\n id={id}\n alt={alt}\n src={src}\n loading={loading}\n className={clsx([\n 'tw-image',\n {\n 'tw-image__stretch': stretch,\n 'tw-image__shrink': shrink,\n },\n className,\n ])}\n role={role}\n onLoad={handleLoad}\n onError={onError}\n />\n );\n};\n\nexport default Image;\n"],"names":["Image","id","src","alt","onLoad","onError","className","loading","stretch","role","shrink","elementReference","useRef","hasIntersected","useHasIntersected","elRef","handleLoad","useCallback","_jsx","ref","clsx"],"mappings":";;;;;;;;AAkBMA,MAAAA,KAAK,GAAGA,CAAC;EACbC,EAAE;EACFC,GAAG;EACHC,GAAG;EACHC,MAAM;EACNC,OAAO;EACPC,SAAS;EACTC,OAAO;AACPC,EAAAA,OAAO,GAAG,IAAI;EACdC,IAAI;AACJC,EAAAA,MAAM,GAAG;AAAI,CACF,KAAI;AACf,EAAA,MAAMC,gBAAgB,GAAGC,MAAM,CAAmB,IAAI,CAAC;AACvD,EAAA,MAAM,CAACC,cAAc,CAAC,GAAGC,iBAAiB,CAAC;AAAEC,IAAAA,KAAK,EAAEJ,gBAAgB;AAAEJ,IAAAA;AAAO,GAAE,CAAC;AAEhF;AACA,EAAA,MAAMS,UAAU,GAAGC,WAAW,CAAC,MAAK;IAClC,IAAIJ,cAAc,IAAIT,MAAM,EAAE;AAC5BA,MAAAA,MAAM,EAAE;AACV;AACF,GAAC,EAAE,CAACS,cAAc,EAAET,MAAM,CAAC,CAAC;AAE5B,EAAA,oBACEc,GAAA,CAAA,KAAA,EAAA;AACEC,IAAAA,GAAG,EAAER,gBAAiB;AACtBV,IAAAA,EAAE,EAAEA,EAAG;AACPE,IAAAA,GAAG,EAAEA,GAAI;AACTD,IAAAA,GAAG,EAAEA,GAAI;AACTK,IAAAA,OAAO,EAAEA,OAAQ;AACjBD,IAAAA,SAAS,EAAEc,IAAI,CAAC,CACd,UAAU,EACV;AACE,MAAA,mBAAmB,EAAEZ,OAAO;AAC5B,MAAA,kBAAkB,EAAEE;KACrB,EACDJ,SAAS,CACV,CAAE;AACHG,IAAAA,IAAI,EAAEA,IAAK;AACXL,IAAAA,MAAM,EAAEY,UAAW;AACnBX,IAAAA,OAAO,EAAEA;AAAQ,GACjB,CAAA;AAEN;;;;"}
|
|
@@ -10,7 +10,6 @@ export interface ImageProps {
|
|
|
10
10
|
role?: string;
|
|
11
11
|
shrink?: boolean;
|
|
12
12
|
}
|
|
13
|
-
export declare const EmptyTransparentImage = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==";
|
|
14
13
|
declare const Image: ({ id, src, alt, onLoad, onError, className, loading, stretch, role, shrink, }: ImageProps) => import("react").JSX.Element;
|
|
15
14
|
export default Image;
|
|
16
15
|
//# sourceMappingURL=Image.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Image.d.ts","sourceRoot":"","sources":["../../../src/image/Image.tsx"],"names":[],"mappings":"AAKA,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,
|
|
1
|
+
{"version":3,"file":"Image.d.ts","sourceRoot":"","sources":["../../../src/image/Image.tsx"],"names":[],"mappings":"AAKA,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,QAAA,MAAM,KAAK,GAAI,+EAWZ,UAAU,gCA+BZ,CAAC;AAEF,eAAe,KAAK,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@transferwise/components",
|
|
3
|
-
"version": "0.0.0-experimental-
|
|
3
|
+
"version": "0.0.0-experimental-11ac03b",
|
|
4
4
|
"description": "Neptune React components",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
@@ -91,8 +91,8 @@
|
|
|
91
91
|
"rollup": "^4.41.1",
|
|
92
92
|
"rollup-preserve-directives": "^1.1.3",
|
|
93
93
|
"storybook": "^8.6.14",
|
|
94
|
-
"@transferwise/less-config": "3.1.2",
|
|
95
94
|
"@transferwise/neptune-css": "14.24.4",
|
|
95
|
+
"@transferwise/less-config": "3.1.2",
|
|
96
96
|
"@wise/components-theming": "1.6.3",
|
|
97
97
|
"@wise/wds-configs": "0.0.0"
|
|
98
98
|
},
|
package/src/image/Image.spec.tsx
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as useHasIntersectedUtils from '../common/hooks/useHasIntersected/useHasIntersected';
|
|
2
2
|
import { render, fireEvent, screen } from '../test-utils';
|
|
3
3
|
|
|
4
|
-
import {
|
|
4
|
+
import { ImageProps } from './Image';
|
|
5
5
|
|
|
6
6
|
import Image from '.';
|
|
7
7
|
|
|
@@ -32,14 +32,14 @@ describe('Image', () => {
|
|
|
32
32
|
});
|
|
33
33
|
|
|
34
34
|
describe('when lazy loading is enabled', () => {
|
|
35
|
-
it('renders the image with
|
|
35
|
+
it('renders the image with actual src even if element is not visible', () => {
|
|
36
36
|
jest.spyOn(useHasIntersectedUtils, 'useHasIntersected').mockReturnValue([false]);
|
|
37
37
|
render(<Image {...props} />);
|
|
38
38
|
|
|
39
39
|
const image: HTMLImageElement = screen.getByRole('img');
|
|
40
40
|
|
|
41
41
|
expect(image).toBeInTheDocument();
|
|
42
|
-
expect(image.src).toStrictEqual(
|
|
42
|
+
expect(image.src).toStrictEqual(props.src);
|
|
43
43
|
});
|
|
44
44
|
|
|
45
45
|
it('renders the image with src if element is visible', () => {
|
package/src/image/Image.tsx
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { clsx } from 'clsx';
|
|
2
|
-
import { useRef } from 'react';
|
|
2
|
+
import { useRef, useCallback } from 'react';
|
|
3
3
|
|
|
4
4
|
import { useHasIntersected } from '../common/hooks';
|
|
5
5
|
|
|
@@ -16,9 +16,6 @@ export interface ImageProps {
|
|
|
16
16
|
shrink?: boolean;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
export const EmptyTransparentImage =
|
|
20
|
-
'data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==';
|
|
21
|
-
|
|
22
19
|
const Image = ({
|
|
23
20
|
id,
|
|
24
21
|
src,
|
|
@@ -33,20 +30,21 @@ const Image = ({
|
|
|
33
30
|
}: ImageProps) => {
|
|
34
31
|
const elementReference = useRef<HTMLImageElement>(null);
|
|
35
32
|
const [hasIntersected] = useHasIntersected({ elRef: elementReference, loading });
|
|
36
|
-
let imageSource = src;
|
|
37
|
-
let imageOnLoad = onLoad;
|
|
38
33
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
34
|
+
// Internal onLoad handler that calls user onLoad only if hasIntersected is true
|
|
35
|
+
const handleLoad = useCallback(() => {
|
|
36
|
+
if (hasIntersected && onLoad) {
|
|
37
|
+
onLoad();
|
|
38
|
+
}
|
|
39
|
+
}, [hasIntersected, onLoad]);
|
|
43
40
|
|
|
44
41
|
return (
|
|
45
42
|
<img
|
|
46
43
|
ref={elementReference}
|
|
47
44
|
id={id}
|
|
48
45
|
alt={alt}
|
|
49
|
-
src={
|
|
46
|
+
src={src}
|
|
47
|
+
loading={loading}
|
|
50
48
|
className={clsx([
|
|
51
49
|
'tw-image',
|
|
52
50
|
{
|
|
@@ -56,7 +54,7 @@ const Image = ({
|
|
|
56
54
|
className,
|
|
57
55
|
])}
|
|
58
56
|
role={role}
|
|
59
|
-
onLoad={
|
|
57
|
+
onLoad={handleLoad}
|
|
60
58
|
onError={onError}
|
|
61
59
|
/>
|
|
62
60
|
);
|
|
@@ -33,6 +33,7 @@ exports[`PromoCardGroup matches snapshot 1`] = `
|
|
|
33
33
|
<img
|
|
34
34
|
alt=""
|
|
35
35
|
class="tw-image tw-image__stretch tw-image__shrink"
|
|
36
|
+
loading="lazy"
|
|
36
37
|
src="https://via.placeholder.com/150"
|
|
37
38
|
/>
|
|
38
39
|
</div>
|
|
@@ -67,6 +68,7 @@ exports[`PromoCardGroup matches snapshot 1`] = `
|
|
|
67
68
|
<img
|
|
68
69
|
alt=""
|
|
69
70
|
class="tw-image tw-image__stretch tw-image__shrink"
|
|
71
|
+
loading="lazy"
|
|
70
72
|
src="https://via.placeholder.com/150"
|
|
71
73
|
/>
|
|
72
74
|
</div>
|