@transferwise/components 46.97.5 → 46.98.0
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/alert/Alert.js +8 -0
- package/build/alert/Alert.js.map +1 -1
- package/build/alert/Alert.mjs +8 -0
- package/build/alert/Alert.mjs.map +1 -1
- package/build/common/closeButton/CloseButton.js +3 -1
- package/build/common/closeButton/CloseButton.js.map +1 -1
- package/build/common/closeButton/CloseButton.mjs +3 -1
- package/build/common/closeButton/CloseButton.mjs.map +1 -1
- package/build/i18n/cs.json +3 -0
- package/build/i18n/cs.json.js +3 -0
- package/build/i18n/cs.json.js.map +1 -1
- package/build/i18n/cs.json.mjs +3 -0
- package/build/i18n/cs.json.mjs.map +1 -1
- package/build/i18n/de.json +3 -0
- package/build/i18n/de.json.js +3 -0
- package/build/i18n/de.json.js.map +1 -1
- package/build/i18n/de.json.mjs +3 -0
- package/build/i18n/de.json.mjs.map +1 -1
- package/build/i18n/en.json +3 -0
- package/build/i18n/en.json.js +3 -0
- package/build/i18n/en.json.js.map +1 -1
- package/build/i18n/en.json.mjs +3 -0
- package/build/i18n/en.json.mjs.map +1 -1
- package/build/i18n/es.json +3 -0
- package/build/i18n/es.json.js +3 -0
- package/build/i18n/es.json.js.map +1 -1
- package/build/i18n/es.json.mjs +3 -0
- package/build/i18n/es.json.mjs.map +1 -1
- package/build/i18n/fr.json +3 -0
- package/build/i18n/fr.json.js +3 -0
- package/build/i18n/fr.json.js.map +1 -1
- package/build/i18n/fr.json.mjs +3 -0
- package/build/i18n/fr.json.mjs.map +1 -1
- package/build/i18n/hu.json +3 -0
- package/build/i18n/hu.json.js +3 -0
- package/build/i18n/hu.json.js.map +1 -1
- package/build/i18n/hu.json.mjs +3 -0
- package/build/i18n/hu.json.mjs.map +1 -1
- package/build/i18n/id.json +3 -0
- package/build/i18n/id.json.js +3 -0
- package/build/i18n/id.json.js.map +1 -1
- package/build/i18n/id.json.mjs +3 -0
- package/build/i18n/id.json.mjs.map +1 -1
- package/build/i18n/it.json +3 -0
- package/build/i18n/it.json.js +3 -0
- package/build/i18n/it.json.js.map +1 -1
- package/build/i18n/it.json.mjs +3 -0
- package/build/i18n/it.json.mjs.map +1 -1
- package/build/i18n/ja.json +3 -0
- package/build/i18n/ja.json.js +3 -0
- package/build/i18n/ja.json.js.map +1 -1
- package/build/i18n/ja.json.mjs +3 -0
- package/build/i18n/ja.json.mjs.map +1 -1
- package/build/i18n/nl.json +6 -3
- package/build/i18n/pl.json +3 -0
- package/build/i18n/pl.json.js +3 -0
- package/build/i18n/pl.json.js.map +1 -1
- package/build/i18n/pl.json.mjs +3 -0
- package/build/i18n/pl.json.mjs.map +1 -1
- package/build/i18n/pt.json +3 -0
- package/build/i18n/pt.json.js +3 -0
- package/build/i18n/pt.json.js.map +1 -1
- package/build/i18n/pt.json.mjs +3 -0
- package/build/i18n/pt.json.mjs.map +1 -1
- package/build/i18n/ro.json +3 -0
- package/build/i18n/ro.json.js +3 -0
- package/build/i18n/ro.json.js.map +1 -1
- package/build/i18n/ro.json.mjs +3 -0
- package/build/i18n/ro.json.mjs.map +1 -1
- package/build/i18n/ru.json +3 -0
- package/build/i18n/ru.json.js +3 -0
- package/build/i18n/ru.json.js.map +1 -1
- package/build/i18n/ru.json.mjs +3 -0
- package/build/i18n/ru.json.mjs.map +1 -1
- package/build/i18n/th.json +3 -0
- package/build/i18n/th.json.js +3 -0
- package/build/i18n/th.json.js.map +1 -1
- package/build/i18n/th.json.mjs +3 -0
- package/build/i18n/th.json.mjs.map +1 -1
- package/build/i18n/tr.json +3 -0
- package/build/i18n/tr.json.js +3 -0
- package/build/i18n/tr.json.js.map +1 -1
- package/build/i18n/tr.json.mjs +3 -0
- package/build/i18n/tr.json.mjs.map +1 -1
- package/build/i18n/zh-CN.json +3 -0
- package/build/i18n/zh-CN.json.js +3 -0
- package/build/i18n/zh-CN.json.js.map +1 -1
- package/build/i18n/zh-CN.json.mjs +3 -0
- package/build/i18n/zh-CN.json.mjs.map +1 -1
- package/build/i18n/zh-HK.json +3 -0
- package/build/i18n/zh-HK.json.js +3 -0
- package/build/i18n/zh-HK.json.js.map +1 -1
- package/build/i18n/zh-HK.json.mjs +3 -0
- package/build/i18n/zh-HK.json.mjs.map +1 -1
- 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/main.css +5 -2
- package/build/moneyInput/MoneyInput.js +2 -6
- package/build/moneyInput/MoneyInput.js.map +1 -1
- package/build/moneyInput/MoneyInput.messages.js +3 -0
- package/build/moneyInput/MoneyInput.messages.js.map +1 -1
- package/build/moneyInput/MoneyInput.messages.mjs +3 -0
- package/build/moneyInput/MoneyInput.messages.mjs.map +1 -1
- package/build/moneyInput/MoneyInput.mjs +2 -6
- package/build/moneyInput/MoneyInput.mjs.map +1 -1
- package/build/phoneNumberInput/PhoneNumberInput.js +36 -2
- package/build/phoneNumberInput/PhoneNumberInput.js.map +1 -1
- package/build/phoneNumberInput/PhoneNumberInput.messages.js +6 -0
- package/build/phoneNumberInput/PhoneNumberInput.messages.js.map +1 -1
- package/build/phoneNumberInput/PhoneNumberInput.messages.mjs +6 -0
- package/build/phoneNumberInput/PhoneNumberInput.messages.mjs.map +1 -1
- package/build/phoneNumberInput/PhoneNumberInput.mjs +36 -2
- package/build/phoneNumberInput/PhoneNumberInput.mjs.map +1 -1
- package/build/styles/circularButton/CircularButton.css +1 -0
- package/build/styles/dateInput/DateInput.css +2 -1
- package/build/styles/main.css +5 -2
- package/build/styles/uploadInput/uploadItem/UploadItem.css +2 -1
- package/build/types/alert/Alert.d.ts.map +1 -1
- package/build/types/common/closeButton/CloseButton.d.ts +2 -0
- package/build/types/common/closeButton/CloseButton.d.ts.map +1 -1
- package/build/types/image/Image.d.ts +0 -1
- package/build/types/image/Image.d.ts.map +1 -1
- package/build/types/moneyInput/MoneyInput.d.ts.map +1 -1
- package/build/types/moneyInput/MoneyInput.messages.d.ts +5 -0
- package/build/types/moneyInput/MoneyInput.messages.d.ts.map +1 -1
- package/build/types/phoneNumberInput/PhoneNumberInput.d.ts.map +1 -1
- package/build/types/phoneNumberInput/PhoneNumberInput.messages.d.ts +8 -0
- package/build/types/phoneNumberInput/PhoneNumberInput.messages.d.ts.map +1 -1
- package/build/types/test-utils/index.d.ts +6 -0
- package/build/types/test-utils/index.d.ts.map +1 -1
- package/build/types/upload/Upload.d.ts +1 -2
- package/build/types/upload/Upload.d.ts.map +1 -1
- package/build/types/upload/steps/processingStep/processingStep.d.ts +1 -3
- package/build/types/upload/steps/processingStep/processingStep.d.ts.map +1 -1
- package/build/types/uploadInput/UploadInput.d.ts.map +1 -1
- package/build/types/uploadInput/uploadItem/UploadItem.d.ts +1 -1
- package/build/types/uploadInput/uploadItem/UploadItem.d.ts.map +1 -1
- package/build/types/withDisplayFormat/WithDisplayFormat.d.ts.map +1 -1
- package/build/upload/Upload.js +27 -43
- package/build/upload/Upload.js.map +1 -1
- package/build/upload/Upload.mjs +27 -43
- package/build/upload/Upload.mjs.map +1 -1
- package/build/upload/steps/processingStep/processingStep.js +1 -3
- package/build/upload/steps/processingStep/processingStep.js.map +1 -1
- package/build/upload/steps/processingStep/processingStep.mjs +1 -3
- package/build/upload/steps/processingStep/processingStep.mjs.map +1 -1
- package/build/uploadInput/UploadInput.js +55 -6
- package/build/uploadInput/UploadInput.js.map +1 -1
- package/build/uploadInput/UploadInput.mjs +55 -6
- package/build/uploadInput/UploadInput.mjs.map +1 -1
- package/build/uploadInput/uploadItem/UploadItem.js +12 -6
- package/build/uploadInput/uploadItem/UploadItem.js.map +1 -1
- package/build/uploadInput/uploadItem/UploadItem.mjs +12 -6
- package/build/uploadInput/uploadItem/UploadItem.mjs.map +1 -1
- package/build/withDisplayFormat/WithDisplayFormat.js +3 -2
- package/build/withDisplayFormat/WithDisplayFormat.js.map +1 -1
- package/build/withDisplayFormat/WithDisplayFormat.mjs +3 -2
- package/build/withDisplayFormat/WithDisplayFormat.mjs.map +1 -1
- package/package.json +6 -9
- package/src/alert/Alert.spec.tsx +11 -0
- package/src/alert/Alert.story.tsx +23 -9
- package/src/alert/Alert.tsx +14 -1
- package/src/circularButton/CircularButton.css +1 -0
- package/src/circularButton/CircularButton.less +1 -0
- package/src/circularButton/CircularButton.tests.story.tsx +23 -0
- package/src/common/closeButton/CloseButton.spec.tsx +13 -1
- package/src/common/closeButton/CloseButton.tsx +3 -0
- package/src/dateInput/DateInput.css +2 -1
- package/src/dateInput/DateInput.less +7 -4
- package/src/i18n/cs.json +3 -0
- package/src/i18n/de.json +3 -0
- package/src/i18n/en.json +3 -0
- package/src/i18n/es.json +3 -0
- package/src/i18n/fr.json +3 -0
- package/src/i18n/hu.json +3 -0
- package/src/i18n/id.json +3 -0
- package/src/i18n/it.json +3 -0
- package/src/i18n/ja.json +3 -0
- package/src/i18n/nl.json +6 -3
- package/src/i18n/pl.json +3 -0
- package/src/i18n/pt.json +3 -0
- package/src/i18n/ro.json +3 -0
- package/src/i18n/ru.json +3 -0
- package/src/i18n/th.json +3 -0
- package/src/i18n/tr.json +3 -0
- package/src/i18n/zh-CN.json +3 -0
- package/src/i18n/zh-HK.json +3 -0
- package/src/image/Image.spec.tsx +3 -3
- package/src/image/Image.tsx +10 -12
- package/src/main.css +5 -2
- package/src/moneyInput/MoneyInput.messages.ts +5 -0
- package/src/moneyInput/MoneyInput.spec.tsx +42 -5
- package/src/moneyInput/MoneyInput.story.tsx +11 -2
- package/src/moneyInput/MoneyInput.tsx +5 -7
- package/src/phoneNumberInput/PhoneNumberInput.messages.ts +8 -0
- package/src/phoneNumberInput/PhoneNumberInput.spec.tsx +77 -43
- package/src/phoneNumberInput/PhoneNumberInput.tsx +34 -2
- package/src/promoCard/__snapshots__/PromoCard.spec.tsx.snap +1 -0
- package/src/promoCard/__snapshots__/PromoCardGroup.spec.tsx.snap +2 -0
- package/src/test-utils/jest.setup.ts +0 -4
- package/src/typeahead/Typeahead.spec.tsx +182 -0
- package/src/typeahead/typeaheadInput/TypeaheadInput.spec.tsx +103 -0
- package/src/typeahead/util/highlight.spec.tsx +43 -0
- package/src/upload/Upload.spec.tsx +63 -0
- package/src/upload/Upload.story.tsx +0 -51
- package/src/upload/Upload.tests.story.tsx +93 -0
- package/src/upload/Upload.tsx +28 -49
- package/src/upload/steps/processingStep/processingStep.tsx +2 -7
- package/src/uploadInput/UploadInput.tsx +81 -8
- package/src/uploadInput/uploadItem/UploadItem.css +2 -1
- package/src/uploadInput/uploadItem/UploadItem.less +1 -1
- package/src/uploadInput/uploadItem/UploadItem.tsx +11 -6
- package/src/withDisplayFormat/WithDisplayFormat.spec.js +11 -15
- package/src/withDisplayFormat/WithDisplayFormat.tsx +3 -2
- package/src/typeahead/Typeahead.rtl.spec.tsx +0 -54
- package/src/typeahead/Typeahead.spec.js +0 -404
- package/src/typeahead/typeaheadInput/TypeaheadInput.spec.js +0 -74
- package/src/typeahead/typeaheadOption/TypeaheadOption.spec.js +0 -75
- package/src/typeahead/util/highlight.spec.js +0 -34
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;;;;"}
|
package/build/main.css
CHANGED
|
@@ -1402,6 +1402,7 @@
|
|
|
1402
1402
|
}
|
|
1403
1403
|
.np-circular-btn-primary-default .np-circular-btn-label,
|
|
1404
1404
|
.np-circular-btn-secondary-default .np-circular-btn-label {
|
|
1405
|
+
text-align: center;
|
|
1405
1406
|
color: var(--color-interactive-primary);
|
|
1406
1407
|
}
|
|
1407
1408
|
.np-circular-btn-primary-default .np-circular-btn-label:not(.disabled):not(:disabled):hover,
|
|
@@ -1909,8 +1910,9 @@ button.np-option {
|
|
|
1909
1910
|
border-color: rgba(0,0,0,0.10196);
|
|
1910
1911
|
border-color: var(--color-border-neutral);
|
|
1911
1912
|
}
|
|
1912
|
-
.tw-date label {
|
|
1913
|
+
.np-theme-personal .tw-date label {
|
|
1913
1914
|
width: 100%;
|
|
1915
|
+
margin-bottom: 0;
|
|
1914
1916
|
}
|
|
1915
1917
|
.tw-date-lookup-menu {
|
|
1916
1918
|
width: 400px;
|
|
@@ -6243,7 +6245,8 @@ html:not([dir="rtl"]) .np-navigation-option {
|
|
|
6243
6245
|
padding-left: var(--size-16);
|
|
6244
6246
|
}
|
|
6245
6247
|
.np-upload-input__item .np-upload-input-errors > li::before {
|
|
6246
|
-
content: '•';
|
|
6248
|
+
content: '•' ;
|
|
6249
|
+
content: '•' / '';
|
|
6247
6250
|
position: absolute;
|
|
6248
6251
|
display: block;
|
|
6249
6252
|
left: 0;
|
|
@@ -193,10 +193,6 @@ class MoneyInput extends React.Component {
|
|
|
193
193
|
this.handleSearchChange('');
|
|
194
194
|
this.props.onCurrencyChange?.(value);
|
|
195
195
|
};
|
|
196
|
-
handleCustomAction = () => {
|
|
197
|
-
this.handleSearchChange('');
|
|
198
|
-
this.props.onCustomAction?.();
|
|
199
|
-
};
|
|
200
196
|
handleSearchChange = searchQuery => {
|
|
201
197
|
this.setState({
|
|
202
198
|
searchQuery
|
|
@@ -310,12 +306,12 @@ class MoneyInput extends React.Component {
|
|
|
310
306
|
jsxRuntime.jsx("div", {
|
|
311
307
|
role: "button",
|
|
312
308
|
tabIndex: 0,
|
|
313
|
-
onClick: this.
|
|
309
|
+
onClick: this.props.onCustomAction,
|
|
314
310
|
children: this.props.customActionLabel
|
|
315
311
|
}) : undefined,
|
|
316
312
|
placeholder: this.props.intl.formatMessage(MoneyInput_messages.default.selectPlaceholder),
|
|
317
313
|
filterable: true,
|
|
318
|
-
filterPlaceholder: this.props.searchPlaceholder,
|
|
314
|
+
filterPlaceholder: this.props.searchPlaceholder || this.props.intl.formatMessage(MoneyInput_messages.default.searchPlaceholder),
|
|
319
315
|
disabled: disabled,
|
|
320
316
|
size: size,
|
|
321
317
|
onChange: this.handleSelectChange,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MoneyInput.js","sources":["../../src/moneyInput/MoneyInput.tsx"],"sourcesContent":["import { isEmpty, isNumber, isNull } from '@transferwise/neptune-validation';\nimport { Flag } from '@wise/art';\nimport { clsx } from 'clsx';\nimport { Component } from 'react';\nimport { injectIntl, WrappedComponentProps } from 'react-intl';\n\nimport { Typography, Size, SizeLarge, SizeMedium, SizeSmall } from '../common';\nimport { withInputAttributes, WithInputAttributesProps } from '../inputs/contexts';\nimport { Input } from '../inputs/Input';\nimport {\n SelectInput,\n SelectInputItem,\n SelectInputOptionContent,\n SelectInputOptionItem,\n SelectInputProps,\n} from '../inputs/SelectInput';\nimport Title from '../title';\n\nimport messages from './MoneyInput.messages';\nimport { formatAmount, parseAmount } from './currencyFormatting';\nimport withId from '../withId';\n\nexport interface CurrencyOptionItem {\n header?: never;\n value: string;\n label: string;\n currency: string;\n note?: string;\n searchable?: string;\n}\n\nexport interface CurrencyHeaderItem {\n header: string;\n}\n\nexport type CurrencyItem = CurrencyOptionItem | CurrencyHeaderItem;\n\nconst isNumberOrNull = (v: unknown): v is number | null => isNumber(v) || isNull(v);\n\nconst formatAmountIfSet = ({\n amount,\n currency,\n locale,\n}: {\n amount: number | null | undefined;\n currency: string;\n locale: string;\n}) => {\n return typeof amount === 'number' ? formatAmount(amount, currency, locale) : '';\n};\n\nconst parseNumber = ({\n amount,\n currency,\n locale,\n}: {\n amount: string;\n currency: string;\n locale: string;\n}) => {\n return parseAmount(amount, currency, locale);\n};\n\nconst allowedInputKeys = new Set([\n 'Backspace',\n 'Delete',\n ',',\n '.',\n 'ArrowDown',\n 'ArrowUp',\n 'ArrowLeft',\n 'ArrowRight',\n 'Enter',\n 'Escape',\n 'Tab',\n]);\n\nexport interface MoneyInputProps extends WrappedComponentProps {\n id?: string;\n 'aria-labelledby'?: string;\n currencies: readonly CurrencyItem[];\n selectedCurrency: CurrencyOptionItem;\n onCurrencyChange?: (value: CurrencyOptionItem) => void;\n placeholder?: number;\n amount: number | null;\n size?: SizeSmall | SizeMedium | SizeLarge;\n onAmountChange?: (value: number | null) => void;\n addon?: React.ReactNode;\n searchPlaceholder?: string;\n /**\n * Allows the consumer to react to searching, while the search itself is handled internally.\n */\n onSearchChange?: (value: { searchQuery: string; filteredOptions: CurrencyItem[] }) => void;\n customActionLabel?: React.ReactNode;\n onCustomAction?: () => void;\n classNames?: Record<string, string>;\n selectProps?: Partial<SelectInputProps<CurrencyOptionItem>>;\n}\n\nexport type MoneyInputPropsWithInputAttributes = MoneyInputProps &\n Partial<WithInputAttributesProps>;\n\ninterface MoneyInputState {\n searchQuery: string;\n formattedAmount: string;\n locale: string;\n}\n\nclass MoneyInput extends Component<MoneyInputPropsWithInputAttributes, MoneyInputState> {\n declare props: MoneyInputPropsWithInputAttributes &\n Required<Pick<MoneyInputPropsWithInputAttributes, keyof typeof MoneyInput.defaultProps>>;\n\n static defaultProps = {\n size: Size.LARGE,\n classNames: {},\n selectProps: {},\n } satisfies Partial<MoneyInputPropsWithInputAttributes>;\n\n amountFocused = false;\n\n constructor(props: MoneyInputProps) {\n super(props);\n this.state = {\n searchQuery: '',\n formattedAmount: formatAmountIfSet({\n amount: props.amount,\n currency: props.selectedCurrency.currency,\n locale: props.intl.locale,\n }),\n locale: props.intl.locale,\n };\n }\n\n UNSAFE_componentWillReceiveProps(nextProps: MoneyInputProps) {\n this.setState({ locale: nextProps.intl.locale });\n\n if (!this.amountFocused) {\n this.setState({\n formattedAmount: formatAmountIfSet({\n amount: nextProps.amount,\n currency: nextProps.selectedCurrency.currency,\n locale: nextProps.intl.locale,\n }),\n });\n }\n }\n\n isInputAllowedForKeyEvent = (event: React.KeyboardEvent<HTMLInputElement>) => {\n const { metaKey, key, ctrlKey } = event;\n const isNumberKey = isNumber(Number.parseInt(key, 10));\n\n return isNumberKey || metaKey || ctrlKey || allowedInputKeys.has(key);\n };\n\n handleKeyDown: React.KeyboardEventHandler<HTMLInputElement> = (event) => {\n if (!this.isInputAllowedForKeyEvent(event)) {\n event.preventDefault();\n }\n };\n\n handlePaste: React.ClipboardEventHandler<HTMLInputElement> = (event) => {\n const paste = event.clipboardData.getData('text');\n const { locale } = this.state;\n const parsed = isEmpty(paste)\n ? null\n : parseNumber({\n amount: paste,\n currency: this.props.selectedCurrency.currency,\n locale,\n });\n\n if (isNumberOrNull(parsed)) {\n this.setState({\n formattedAmount: formatAmountIfSet({\n amount: parsed,\n currency: this.props.selectedCurrency.currency,\n locale,\n }),\n });\n this.props.onAmountChange?.(parsed);\n }\n\n event.preventDefault();\n };\n\n onAmountChange: React.ChangeEventHandler<HTMLInputElement> = (event) => {\n const { value } = event.target;\n this.setState({\n formattedAmount: value,\n });\n const parsed = isEmpty(value)\n ? null\n : parseNumber({\n amount: value,\n currency: this.props.selectedCurrency.currency,\n locale: this.state.locale,\n });\n if (isNumberOrNull(parsed)) {\n this.props.onAmountChange?.(parsed);\n }\n };\n\n onAmountBlur = () => {\n this.amountFocused = false;\n this.setAmount();\n };\n\n onAmountFocus = () => {\n this.amountFocused = true;\n };\n\n getSelectOptions() {\n const selectOptions = filterCurrenciesForQuery(this.props.currencies, this.state.searchQuery);\n\n const formattedOptions: SelectInputItem<CurrencyOptionItem>[] = [];\n let currentGroupOptions: SelectInputOptionItem<CurrencyOptionItem>[] | undefined;\n\n selectOptions.forEach((item) => {\n if (item.header != null) {\n currentGroupOptions = [];\n formattedOptions.push({\n type: 'group',\n label: item.header,\n options: currentGroupOptions,\n });\n } else {\n (currentGroupOptions ?? formattedOptions).push({\n type: 'option',\n value: item,\n filterMatchers: [item.value, item.label, item.note ?? '', item.searchable ?? ''],\n });\n }\n });\n\n return formattedOptions;\n }\n\n setAmount() {\n this.setState((previousState) => {\n const parsed = parseNumber({\n amount: previousState.formattedAmount,\n currency: this.props.selectedCurrency.currency,\n locale: previousState.locale,\n });\n if (!isNumberOrNull(parsed)) {\n return {\n formattedAmount: previousState.formattedAmount,\n };\n }\n return {\n formattedAmount: formatAmountIfSet({\n amount: parsed,\n currency: this.props.selectedCurrency.currency,\n locale: previousState.locale,\n }),\n };\n });\n }\n\n handleSelectChange = (value: CurrencyOptionItem) => {\n this.handleSearchChange('');\n this.props.onCurrencyChange?.(value);\n };\n\n handleCustomAction = () => {\n this.handleSearchChange('');\n this.props.onCustomAction?.();\n };\n\n handleSearchChange = (searchQuery: string) => {\n this.setState({ searchQuery });\n this.props.onSearchChange?.({\n searchQuery,\n filteredOptions: filterCurrenciesForQuery(this.props.currencies, searchQuery),\n });\n };\n\n style = (className: string) => this.props.classNames[className] || className;\n\n render() {\n const {\n inputAttributes,\n id: amountInputId,\n 'aria-labelledby': ariaLabelledByProp,\n selectedCurrency,\n onCurrencyChange,\n size,\n addon,\n selectProps,\n } = this.props;\n const ariaLabelledBy = ariaLabelledByProp ?? inputAttributes?.['aria-labelledby'];\n const selectOptions = this.getSelectOptions();\n\n const hasSingleCurrency = () => {\n if (selectOptions.length !== 0) {\n const firstItem = selectOptions[0];\n\n if (selectOptions.length === 1) {\n if (firstItem.type === 'option') {\n return firstItem.value.currency === selectedCurrency.currency;\n }\n if (firstItem.type === 'group') {\n return (\n firstItem.options.length === 1 &&\n !(this.props.onCustomAction && this.props.customActionLabel)\n );\n }\n }\n } else if (selectedCurrency?.currency) {\n return true;\n }\n\n return false;\n };\n\n const isFixedCurrency = (!this.state.searchQuery && hasSingleCurrency()) || !onCurrencyChange;\n const disabled = !this.props.onAmountChange;\n const selectedCurrencyElementId = `${inputAttributes?.id ?? amountInputId}SelectedCurrency`;\n\n return (\n <div\n role=\"group\"\n {...inputAttributes}\n aria-labelledby={ariaLabelledBy}\n className={clsx(\n this.style('tw-money-input'),\n this.style('input-group'),\n this.style(`input-group-${size}`),\n )}\n >\n <Input\n id={amountInputId}\n value={this.state.formattedAmount}\n inputMode=\"decimal\"\n disabled={disabled}\n placeholder={formatAmountIfSet({\n amount: this.props.placeholder,\n currency: this.props.selectedCurrency.currency,\n locale: this.state.locale,\n })}\n autoComplete=\"off\"\n aria-describedby={selectedCurrencyElementId}\n onKeyDown={this.handleKeyDown}\n onChange={this.onAmountChange}\n onFocus={this.onAmountFocus}\n onBlur={this.onAmountBlur}\n onPaste={this.handlePaste}\n />\n {addon && (\n <span\n className={clsx(\n this.style('input-group-addon'),\n this.style(`input-${size}`),\n disabled ? this.style('disabled') : '',\n )}\n >\n {addon}\n </span>\n )}\n {isFixedCurrency ? (\n <div\n className={clsx(\n this.style('input-group-addon'),\n this.style(`input-${size}`),\n this.style('tw-money-input__fixed-currency'),\n disabled ? this.style('disabled') : '',\n )}\n id={selectedCurrencyElementId}\n >\n {(size === 'lg' || size === 'md') && (\n <span className={clsx(this.style('money-input-currency-flag'), this.style('m-r-2'))}>\n <Flag code={selectedCurrency.currency.toLowerCase()} intrinsicSize={24} />\n </span>\n )}\n <Title\n as=\"span\"\n type={Typography.TITLE_SUBSECTION}\n className={size === 'lg' ? this.style('m-r-1') : ''}\n >\n {selectedCurrency.currency.toUpperCase()}\n </Title>\n </div>\n ) : (\n <div\n translate=\"no\"\n className={clsx(\n this.style('input-group-btn'),\n this.style('amount-currency-select-btn'),\n )}\n >\n <SelectInput\n UNSAFE_triggerButtonProps={{\n id: undefined,\n 'aria-labelledby': undefined,\n 'aria-describedby': ariaLabelledBy,\n 'aria-invalid': undefined,\n 'aria-label': this.props.intl.formatMessage(messages.selectCurrencyLabel),\n }}\n id={selectedCurrencyElementId}\n items={selectOptions}\n value={selectedCurrency}\n compareValues=\"currency\"\n renderValue={(currency, withinTrigger) => {\n return (\n <SelectInputOptionContent\n title={withinTrigger ? currency.currency.toUpperCase() : currency.label}\n note={withinTrigger ? undefined : currency.note}\n icon={<Flag code={currency.currency} intrinsicSize={24} />}\n />\n );\n }}\n renderFooter={\n this.props.onCustomAction\n ? () => (\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events\n <div role=\"button\" tabIndex={0} onClick={this.handleCustomAction}>\n {this.props.customActionLabel}\n </div>\n )\n : undefined\n }\n placeholder={this.props.intl.formatMessage(messages.selectPlaceholder)}\n filterable\n filterPlaceholder={this.props.searchPlaceholder}\n disabled={disabled}\n size={size}\n onChange={this.handleSelectChange}\n onFilterChange={({ queryNormalized }) => {\n this.handleSearchChange(queryNormalized ?? '');\n }}\n {...selectProps}\n />\n </div>\n )}\n </div>\n );\n }\n}\n\nfunction filterCurrenciesForQuery(\n currencies: readonly CurrencyItem[],\n query: string,\n): CurrencyItem[] {\n if (!query) {\n return [...currencies];\n }\n\n const options = currencies.filter(\n (option): option is CurrencyOptionItem => option.header == null,\n );\n const filteredOptions = removeDuplicateValueOptions(options).filter((option) =>\n currencyOptionFitsQuery(option, query),\n );\n\n return sortOptionsLabelsToFirst(filteredOptions, query);\n}\n\nfunction removeDuplicateValueOptions(options: readonly CurrencyOptionItem[]) {\n const uniqueValues = new Set<string>();\n return options.filter((option) => {\n if (!uniqueValues.has(option.value)) {\n uniqueValues.add(option.value);\n return true;\n }\n return false;\n });\n}\n\nfunction currencyOptionFitsQuery(option: CurrencyOptionItem, query: string) {\n if (!option.value) {\n return false;\n }\n\n return (\n contains(option.label, query) ||\n contains(option.searchable, query) ||\n contains(option.note, query)\n );\n}\n\nfunction contains(property: string | undefined, query: string) {\n return property?.toLowerCase().includes(query.toLowerCase());\n}\n\nfunction sortOptionsLabelsToFirst(options: readonly CurrencyOptionItem[], query: string) {\n return [...options].sort((first, second) => {\n const firstContains = contains(first.label, query);\n const secondContains = contains(second.label, query);\n\n if (firstContains && secondContains) {\n return 0;\n }\n if (firstContains) {\n return -1;\n }\n if (secondContains) {\n return 1;\n }\n return 0;\n });\n}\n\nexport default injectIntl(withId(withInputAttributes(MoneyInput, { nonLabelable: true })));\n"],"names":["isNumberOrNull","v","isNumber","isNull","formatAmountIfSet","amount","currency","locale","formatAmount","parseNumber","parseAmount","allowedInputKeys","Set","MoneyInput","Component","defaultProps","size","Size","LARGE","classNames","selectProps","amountFocused","constructor","props","state","searchQuery","formattedAmount","selectedCurrency","intl","UNSAFE_componentWillReceiveProps","nextProps","setState","isInputAllowedForKeyEvent","event","metaKey","key","ctrlKey","isNumberKey","Number","parseInt","has","handleKeyDown","preventDefault","handlePaste","paste","clipboardData","getData","parsed","isEmpty","onAmountChange","value","target","onAmountBlur","setAmount","onAmountFocus","getSelectOptions","selectOptions","filterCurrenciesForQuery","currencies","formattedOptions","currentGroupOptions","forEach","item","header","push","type","label","options","filterMatchers","note","searchable","previousState","handleSelectChange","handleSearchChange","onCurrencyChange","handleCustomAction","onCustomAction","onSearchChange","filteredOptions","style","className","render","inputAttributes","id","amountInputId","ariaLabelledByProp","addon","ariaLabelledBy","hasSingleCurrency","length","firstItem","customActionLabel","isFixedCurrency","disabled","selectedCurrencyElementId","_jsxs","role","clsx","children","_jsx","Input","inputMode","placeholder","autoComplete","onKeyDown","onChange","onFocus","onBlur","onPaste","Flag","code","toLowerCase","intrinsicSize","Title","as","Typography","TITLE_SUBSECTION","toUpperCase","translate","SelectInput","UNSAFE_triggerButtonProps","undefined","formatMessage","messages","selectCurrencyLabel","items","compareValues","renderValue","withinTrigger","SelectInputOptionContent","title","icon","renderFooter","tabIndex","onClick","selectPlaceholder","filterable","filterPlaceholder","searchPlaceholder","onFilterChange","queryNormalized","query","filter","option","removeDuplicateValueOptions","currencyOptionFitsQuery","sortOptionsLabelsToFirst","uniqueValues","add","contains","property","includes","sort","first","second","firstContains","secondContains","injectIntl","withId","withInputAttributes","nonLabelable"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MoneyInput.js","sources":["../../src/moneyInput/MoneyInput.tsx"],"sourcesContent":["import { isEmpty, isNumber, isNull } from '@transferwise/neptune-validation';\nimport { Flag } from '@wise/art';\nimport { clsx } from 'clsx';\nimport { Component } from 'react';\nimport { injectIntl, WrappedComponentProps } from 'react-intl';\n\nimport { Typography, Size, SizeLarge, SizeMedium, SizeSmall } from '../common';\nimport { withInputAttributes, WithInputAttributesProps } from '../inputs/contexts';\nimport { Input } from '../inputs/Input';\nimport {\n SelectInput,\n SelectInputItem,\n SelectInputOptionContent,\n SelectInputOptionItem,\n SelectInputProps,\n} from '../inputs/SelectInput';\nimport Title from '../title';\n\nimport messages from './MoneyInput.messages';\nimport { formatAmount, parseAmount } from './currencyFormatting';\nimport withId from '../withId';\n\nexport interface CurrencyOptionItem {\n header?: never;\n value: string;\n label: string;\n currency: string;\n note?: string;\n searchable?: string;\n}\n\nexport interface CurrencyHeaderItem {\n header: string;\n}\n\nexport type CurrencyItem = CurrencyOptionItem | CurrencyHeaderItem;\n\nconst isNumberOrNull = (v: unknown): v is number | null => isNumber(v) || isNull(v);\n\nconst formatAmountIfSet = ({\n amount,\n currency,\n locale,\n}: {\n amount: number | null | undefined;\n currency: string;\n locale: string;\n}) => {\n return typeof amount === 'number' ? formatAmount(amount, currency, locale) : '';\n};\n\nconst parseNumber = ({\n amount,\n currency,\n locale,\n}: {\n amount: string;\n currency: string;\n locale: string;\n}) => {\n return parseAmount(amount, currency, locale);\n};\n\nconst allowedInputKeys = new Set([\n 'Backspace',\n 'Delete',\n ',',\n '.',\n 'ArrowDown',\n 'ArrowUp',\n 'ArrowLeft',\n 'ArrowRight',\n 'Enter',\n 'Escape',\n 'Tab',\n]);\n\nexport interface MoneyInputProps extends WrappedComponentProps {\n id?: string;\n 'aria-labelledby'?: string;\n currencies: readonly CurrencyItem[];\n selectedCurrency: CurrencyOptionItem;\n onCurrencyChange?: (value: CurrencyOptionItem) => void;\n placeholder?: number;\n amount: number | null;\n size?: SizeSmall | SizeMedium | SizeLarge;\n onAmountChange?: (value: number | null) => void;\n addon?: React.ReactNode;\n searchPlaceholder?: string;\n /**\n * Allows the consumer to react to searching, while the search itself is handled internally.\n */\n onSearchChange?: (value: { searchQuery: string; filteredOptions: CurrencyItem[] }) => void;\n customActionLabel?: React.ReactNode;\n onCustomAction?: () => void;\n classNames?: Record<string, string>;\n selectProps?: Partial<SelectInputProps<CurrencyOptionItem>>;\n}\n\nexport type MoneyInputPropsWithInputAttributes = MoneyInputProps &\n Partial<WithInputAttributesProps>;\n\ninterface MoneyInputState {\n searchQuery: string;\n formattedAmount: string;\n locale: string;\n}\n\nclass MoneyInput extends Component<MoneyInputPropsWithInputAttributes, MoneyInputState> {\n declare props: MoneyInputPropsWithInputAttributes &\n Required<Pick<MoneyInputPropsWithInputAttributes, keyof typeof MoneyInput.defaultProps>>;\n\n static defaultProps = {\n size: Size.LARGE,\n classNames: {},\n selectProps: {},\n } satisfies Partial<MoneyInputPropsWithInputAttributes>;\n\n amountFocused = false;\n\n constructor(props: MoneyInputProps) {\n super(props);\n this.state = {\n searchQuery: '',\n formattedAmount: formatAmountIfSet({\n amount: props.amount,\n currency: props.selectedCurrency.currency,\n locale: props.intl.locale,\n }),\n locale: props.intl.locale,\n };\n }\n\n UNSAFE_componentWillReceiveProps(nextProps: MoneyInputProps) {\n this.setState({ locale: nextProps.intl.locale });\n\n if (!this.amountFocused) {\n this.setState({\n formattedAmount: formatAmountIfSet({\n amount: nextProps.amount,\n currency: nextProps.selectedCurrency.currency,\n locale: nextProps.intl.locale,\n }),\n });\n }\n }\n\n isInputAllowedForKeyEvent = (event: React.KeyboardEvent<HTMLInputElement>) => {\n const { metaKey, key, ctrlKey } = event;\n const isNumberKey = isNumber(Number.parseInt(key, 10));\n\n return isNumberKey || metaKey || ctrlKey || allowedInputKeys.has(key);\n };\n\n handleKeyDown: React.KeyboardEventHandler<HTMLInputElement> = (event) => {\n if (!this.isInputAllowedForKeyEvent(event)) {\n event.preventDefault();\n }\n };\n\n handlePaste: React.ClipboardEventHandler<HTMLInputElement> = (event) => {\n const paste = event.clipboardData.getData('text');\n const { locale } = this.state;\n const parsed = isEmpty(paste)\n ? null\n : parseNumber({\n amount: paste,\n currency: this.props.selectedCurrency.currency,\n locale,\n });\n\n if (isNumberOrNull(parsed)) {\n this.setState({\n formattedAmount: formatAmountIfSet({\n amount: parsed,\n currency: this.props.selectedCurrency.currency,\n locale,\n }),\n });\n this.props.onAmountChange?.(parsed);\n }\n\n event.preventDefault();\n };\n\n onAmountChange: React.ChangeEventHandler<HTMLInputElement> = (event) => {\n const { value } = event.target;\n this.setState({\n formattedAmount: value,\n });\n const parsed = isEmpty(value)\n ? null\n : parseNumber({\n amount: value,\n currency: this.props.selectedCurrency.currency,\n locale: this.state.locale,\n });\n if (isNumberOrNull(parsed)) {\n this.props.onAmountChange?.(parsed);\n }\n };\n\n onAmountBlur = () => {\n this.amountFocused = false;\n this.setAmount();\n };\n\n onAmountFocus = () => {\n this.amountFocused = true;\n };\n\n getSelectOptions() {\n const selectOptions = filterCurrenciesForQuery(this.props.currencies, this.state.searchQuery);\n\n const formattedOptions: SelectInputItem<CurrencyOptionItem>[] = [];\n let currentGroupOptions: SelectInputOptionItem<CurrencyOptionItem>[] | undefined;\n\n selectOptions.forEach((item) => {\n if (item.header != null) {\n currentGroupOptions = [];\n formattedOptions.push({\n type: 'group',\n label: item.header,\n options: currentGroupOptions,\n });\n } else {\n (currentGroupOptions ?? formattedOptions).push({\n type: 'option',\n value: item,\n filterMatchers: [item.value, item.label, item.note ?? '', item.searchable ?? ''],\n });\n }\n });\n\n return formattedOptions;\n }\n\n setAmount() {\n this.setState((previousState) => {\n const parsed = parseNumber({\n amount: previousState.formattedAmount,\n currency: this.props.selectedCurrency.currency,\n locale: previousState.locale,\n });\n if (!isNumberOrNull(parsed)) {\n return {\n formattedAmount: previousState.formattedAmount,\n };\n }\n return {\n formattedAmount: formatAmountIfSet({\n amount: parsed,\n currency: this.props.selectedCurrency.currency,\n locale: previousState.locale,\n }),\n };\n });\n }\n\n handleSelectChange = (value: CurrencyOptionItem) => {\n this.handleSearchChange('');\n this.props.onCurrencyChange?.(value);\n };\n\n handleSearchChange = (searchQuery: string) => {\n this.setState({ searchQuery });\n this.props.onSearchChange?.({\n searchQuery,\n filteredOptions: filterCurrenciesForQuery(this.props.currencies, searchQuery),\n });\n };\n\n style = (className: string) => this.props.classNames[className] || className;\n\n render() {\n const {\n inputAttributes,\n id: amountInputId,\n 'aria-labelledby': ariaLabelledByProp,\n selectedCurrency,\n onCurrencyChange,\n size,\n addon,\n selectProps,\n } = this.props;\n const ariaLabelledBy = ariaLabelledByProp ?? inputAttributes?.['aria-labelledby'];\n const selectOptions = this.getSelectOptions();\n\n const hasSingleCurrency = () => {\n if (selectOptions.length !== 0) {\n const firstItem = selectOptions[0];\n\n if (selectOptions.length === 1) {\n if (firstItem.type === 'option') {\n return firstItem.value.currency === selectedCurrency.currency;\n }\n if (firstItem.type === 'group') {\n return (\n firstItem.options.length === 1 &&\n !(this.props.onCustomAction && this.props.customActionLabel)\n );\n }\n }\n } else if (selectedCurrency?.currency) {\n return true;\n }\n\n return false;\n };\n\n const isFixedCurrency = (!this.state.searchQuery && hasSingleCurrency()) || !onCurrencyChange;\n const disabled = !this.props.onAmountChange;\n const selectedCurrencyElementId = `${inputAttributes?.id ?? amountInputId}SelectedCurrency`;\n\n return (\n <div\n role=\"group\"\n {...inputAttributes}\n aria-labelledby={ariaLabelledBy}\n className={clsx(\n this.style('tw-money-input'),\n this.style('input-group'),\n this.style(`input-group-${size}`),\n )}\n >\n <Input\n id={amountInputId}\n value={this.state.formattedAmount}\n inputMode=\"decimal\"\n disabled={disabled}\n placeholder={formatAmountIfSet({\n amount: this.props.placeholder,\n currency: this.props.selectedCurrency.currency,\n locale: this.state.locale,\n })}\n autoComplete=\"off\"\n aria-describedby={selectedCurrencyElementId}\n onKeyDown={this.handleKeyDown}\n onChange={this.onAmountChange}\n onFocus={this.onAmountFocus}\n onBlur={this.onAmountBlur}\n onPaste={this.handlePaste}\n />\n {addon && (\n <span\n className={clsx(\n this.style('input-group-addon'),\n this.style(`input-${size}`),\n disabled ? this.style('disabled') : '',\n )}\n >\n {addon}\n </span>\n )}\n {isFixedCurrency ? (\n <div\n className={clsx(\n this.style('input-group-addon'),\n this.style(`input-${size}`),\n this.style('tw-money-input__fixed-currency'),\n disabled ? this.style('disabled') : '',\n )}\n id={selectedCurrencyElementId}\n >\n {(size === 'lg' || size === 'md') && (\n <span className={clsx(this.style('money-input-currency-flag'), this.style('m-r-2'))}>\n <Flag code={selectedCurrency.currency.toLowerCase()} intrinsicSize={24} />\n </span>\n )}\n <Title\n as=\"span\"\n type={Typography.TITLE_SUBSECTION}\n className={size === 'lg' ? this.style('m-r-1') : ''}\n >\n {selectedCurrency.currency.toUpperCase()}\n </Title>\n </div>\n ) : (\n <div\n translate=\"no\"\n className={clsx(\n this.style('input-group-btn'),\n this.style('amount-currency-select-btn'),\n )}\n >\n <SelectInput\n UNSAFE_triggerButtonProps={{\n id: undefined,\n 'aria-labelledby': undefined,\n 'aria-describedby': ariaLabelledBy,\n 'aria-invalid': undefined,\n 'aria-label': this.props.intl.formatMessage(messages.selectCurrencyLabel),\n }}\n id={selectedCurrencyElementId}\n items={selectOptions}\n value={selectedCurrency}\n compareValues=\"currency\"\n renderValue={(currency, withinTrigger) => {\n return (\n <SelectInputOptionContent\n title={withinTrigger ? currency.currency.toUpperCase() : currency.label}\n note={withinTrigger ? undefined : currency.note}\n icon={<Flag code={currency.currency} intrinsicSize={24} />}\n />\n );\n }}\n renderFooter={\n this.props.onCustomAction\n ? () => (\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events\n <div role=\"button\" tabIndex={0} onClick={this.props.onCustomAction}>\n {this.props.customActionLabel}\n </div>\n )\n : undefined\n }\n placeholder={this.props.intl.formatMessage(messages.selectPlaceholder)}\n filterable\n filterPlaceholder={\n this.props.searchPlaceholder ||\n this.props.intl.formatMessage(messages.searchPlaceholder)\n }\n disabled={disabled}\n size={size}\n onChange={this.handleSelectChange}\n onFilterChange={({ queryNormalized }) => {\n this.handleSearchChange(queryNormalized ?? '');\n }}\n {...selectProps}\n />\n </div>\n )}\n </div>\n );\n }\n}\n\nfunction filterCurrenciesForQuery(\n currencies: readonly CurrencyItem[],\n query: string,\n): CurrencyItem[] {\n if (!query) {\n return [...currencies];\n }\n\n const options = currencies.filter(\n (option): option is CurrencyOptionItem => option.header == null,\n );\n const filteredOptions = removeDuplicateValueOptions(options).filter((option) =>\n currencyOptionFitsQuery(option, query),\n );\n\n return sortOptionsLabelsToFirst(filteredOptions, query);\n}\n\nfunction removeDuplicateValueOptions(options: readonly CurrencyOptionItem[]) {\n const uniqueValues = new Set<string>();\n return options.filter((option) => {\n if (!uniqueValues.has(option.value)) {\n uniqueValues.add(option.value);\n return true;\n }\n return false;\n });\n}\n\nfunction currencyOptionFitsQuery(option: CurrencyOptionItem, query: string) {\n if (!option.value) {\n return false;\n }\n\n return (\n contains(option.label, query) ||\n contains(option.searchable, query) ||\n contains(option.note, query)\n );\n}\n\nfunction contains(property: string | undefined, query: string) {\n return property?.toLowerCase().includes(query.toLowerCase());\n}\n\nfunction sortOptionsLabelsToFirst(options: readonly CurrencyOptionItem[], query: string) {\n return [...options].sort((first, second) => {\n const firstContains = contains(first.label, query);\n const secondContains = contains(second.label, query);\n\n if (firstContains && secondContains) {\n return 0;\n }\n if (firstContains) {\n return -1;\n }\n if (secondContains) {\n return 1;\n }\n return 0;\n });\n}\n\nexport default injectIntl(withId(withInputAttributes(MoneyInput, { nonLabelable: true })));\n"],"names":["isNumberOrNull","v","isNumber","isNull","formatAmountIfSet","amount","currency","locale","formatAmount","parseNumber","parseAmount","allowedInputKeys","Set","MoneyInput","Component","defaultProps","size","Size","LARGE","classNames","selectProps","amountFocused","constructor","props","state","searchQuery","formattedAmount","selectedCurrency","intl","UNSAFE_componentWillReceiveProps","nextProps","setState","isInputAllowedForKeyEvent","event","metaKey","key","ctrlKey","isNumberKey","Number","parseInt","has","handleKeyDown","preventDefault","handlePaste","paste","clipboardData","getData","parsed","isEmpty","onAmountChange","value","target","onAmountBlur","setAmount","onAmountFocus","getSelectOptions","selectOptions","filterCurrenciesForQuery","currencies","formattedOptions","currentGroupOptions","forEach","item","header","push","type","label","options","filterMatchers","note","searchable","previousState","handleSelectChange","handleSearchChange","onCurrencyChange","onSearchChange","filteredOptions","style","className","render","inputAttributes","id","amountInputId","ariaLabelledByProp","addon","ariaLabelledBy","hasSingleCurrency","length","firstItem","onCustomAction","customActionLabel","isFixedCurrency","disabled","selectedCurrencyElementId","_jsxs","role","clsx","children","_jsx","Input","inputMode","placeholder","autoComplete","onKeyDown","onChange","onFocus","onBlur","onPaste","Flag","code","toLowerCase","intrinsicSize","Title","as","Typography","TITLE_SUBSECTION","toUpperCase","translate","SelectInput","UNSAFE_triggerButtonProps","undefined","formatMessage","messages","selectCurrencyLabel","items","compareValues","renderValue","withinTrigger","SelectInputOptionContent","title","icon","renderFooter","tabIndex","onClick","selectPlaceholder","filterable","filterPlaceholder","searchPlaceholder","onFilterChange","queryNormalized","query","filter","option","removeDuplicateValueOptions","currencyOptionFitsQuery","sortOptionsLabelsToFirst","uniqueValues","add","contains","property","includes","sort","first","second","firstContains","secondContains","injectIntl","withId","withInputAttributes","nonLabelable"],"mappings":"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"}
|
|
@@ -8,6 +8,9 @@ var messages = reactIntl.defineMessages({
|
|
|
8
8
|
selectPlaceholder: {
|
|
9
9
|
id: "neptune.MoneyInput.Select.placeholder"
|
|
10
10
|
},
|
|
11
|
+
searchPlaceholder: {
|
|
12
|
+
id: "neptune.MoneyInput.Select.searchPlaceholder"
|
|
13
|
+
},
|
|
11
14
|
selectCurrencyLabel: {
|
|
12
15
|
id: "neptune.MoneyInput.Select.selectCurrencyLabel"
|
|
13
16
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MoneyInput.messages.js","sources":["../../src/moneyInput/MoneyInput.messages.ts"],"sourcesContent":["import { defineMessages } from 'react-intl';\n\nexport default defineMessages({\n selectPlaceholder: {\n id: 'neptune.MoneyInput.Select.placeholder',\n defaultMessage: 'Select an option...',\n },\n selectCurrencyLabel: {\n id: 'neptune.MoneyInput.Select.selectCurrencyLabel',\n defaultMessage: 'Select currency',\n description: 'Visually hidden label for the currency selector input.',\n },\n});\n"],"names":["defineMessages","selectPlaceholder","id","selectCurrencyLabel"],"mappings":";;;;;;AAEA,eAAeA,wBAAc,CAAC;AAC5BC,EAAAA,iBAAiB,EAAE;IACjBC,EAAE,EAAA;GAEH;AACDC,EAAAA,mBAAmB,EAAE;
|
|
1
|
+
{"version":3,"file":"MoneyInput.messages.js","sources":["../../src/moneyInput/MoneyInput.messages.ts"],"sourcesContent":["import { defineMessages } from 'react-intl';\n\nexport default defineMessages({\n selectPlaceholder: {\n id: 'neptune.MoneyInput.Select.placeholder',\n defaultMessage: 'Select an option...',\n },\n searchPlaceholder: {\n id: 'neptune.MoneyInput.Select.searchPlaceholder',\n defaultMessage: 'Type a currency or country',\n description: 'Default placeholder text for the search input in the currency selector.',\n },\n selectCurrencyLabel: {\n id: 'neptune.MoneyInput.Select.selectCurrencyLabel',\n defaultMessage: 'Select currency',\n description: 'Visually hidden label for the currency selector input.',\n },\n});\n"],"names":["defineMessages","selectPlaceholder","id","searchPlaceholder","selectCurrencyLabel"],"mappings":";;;;;;AAEA,eAAeA,wBAAc,CAAC;AAC5BC,EAAAA,iBAAiB,EAAE;IACjBC,EAAE,EAAA;GAEH;AACDC,EAAAA,iBAAiB,EAAE;IACjBD,EAAE,EAAA;GAGH;AACDE,EAAAA,mBAAmB,EAAE;IACnBF,EAAE,EAAA;AAGH;AACF,CAAA,CAAC;;;;"}
|
|
@@ -4,6 +4,9 @@ var messages = defineMessages({
|
|
|
4
4
|
selectPlaceholder: {
|
|
5
5
|
id: "neptune.MoneyInput.Select.placeholder"
|
|
6
6
|
},
|
|
7
|
+
searchPlaceholder: {
|
|
8
|
+
id: "neptune.MoneyInput.Select.searchPlaceholder"
|
|
9
|
+
},
|
|
7
10
|
selectCurrencyLabel: {
|
|
8
11
|
id: "neptune.MoneyInput.Select.selectCurrencyLabel"
|
|
9
12
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MoneyInput.messages.mjs","sources":["../../src/moneyInput/MoneyInput.messages.ts"],"sourcesContent":["import { defineMessages } from 'react-intl';\n\nexport default defineMessages({\n selectPlaceholder: {\n id: 'neptune.MoneyInput.Select.placeholder',\n defaultMessage: 'Select an option...',\n },\n selectCurrencyLabel: {\n id: 'neptune.MoneyInput.Select.selectCurrencyLabel',\n defaultMessage: 'Select currency',\n description: 'Visually hidden label for the currency selector input.',\n },\n});\n"],"names":["defineMessages","selectPlaceholder","id","selectCurrencyLabel"],"mappings":";;AAEA,eAAeA,cAAc,CAAC;AAC5BC,EAAAA,iBAAiB,EAAE;IACjBC,EAAE,EAAA;GAEH;AACDC,EAAAA,mBAAmB,EAAE;
|
|
1
|
+
{"version":3,"file":"MoneyInput.messages.mjs","sources":["../../src/moneyInput/MoneyInput.messages.ts"],"sourcesContent":["import { defineMessages } from 'react-intl';\n\nexport default defineMessages({\n selectPlaceholder: {\n id: 'neptune.MoneyInput.Select.placeholder',\n defaultMessage: 'Select an option...',\n },\n searchPlaceholder: {\n id: 'neptune.MoneyInput.Select.searchPlaceholder',\n defaultMessage: 'Type a currency or country',\n description: 'Default placeholder text for the search input in the currency selector.',\n },\n selectCurrencyLabel: {\n id: 'neptune.MoneyInput.Select.selectCurrencyLabel',\n defaultMessage: 'Select currency',\n description: 'Visually hidden label for the currency selector input.',\n },\n});\n"],"names":["defineMessages","selectPlaceholder","id","searchPlaceholder","selectCurrencyLabel"],"mappings":";;AAEA,eAAeA,cAAc,CAAC;AAC5BC,EAAAA,iBAAiB,EAAE;IACjBC,EAAE,EAAA;GAEH;AACDC,EAAAA,iBAAiB,EAAE;IACjBD,EAAE,EAAA;GAGH;AACDE,EAAAA,mBAAmB,EAAE;IACnBF,EAAE,EAAA;AAGH;AACF,CAAA,CAAC;;;;"}
|
|
@@ -189,10 +189,6 @@ class MoneyInput extends Component {
|
|
|
189
189
|
this.handleSearchChange('');
|
|
190
190
|
this.props.onCurrencyChange?.(value);
|
|
191
191
|
};
|
|
192
|
-
handleCustomAction = () => {
|
|
193
|
-
this.handleSearchChange('');
|
|
194
|
-
this.props.onCustomAction?.();
|
|
195
|
-
};
|
|
196
192
|
handleSearchChange = searchQuery => {
|
|
197
193
|
this.setState({
|
|
198
194
|
searchQuery
|
|
@@ -306,12 +302,12 @@ class MoneyInput extends Component {
|
|
|
306
302
|
jsx("div", {
|
|
307
303
|
role: "button",
|
|
308
304
|
tabIndex: 0,
|
|
309
|
-
onClick: this.
|
|
305
|
+
onClick: this.props.onCustomAction,
|
|
310
306
|
children: this.props.customActionLabel
|
|
311
307
|
}) : undefined,
|
|
312
308
|
placeholder: this.props.intl.formatMessage(messages.selectPlaceholder),
|
|
313
309
|
filterable: true,
|
|
314
|
-
filterPlaceholder: this.props.searchPlaceholder,
|
|
310
|
+
filterPlaceholder: this.props.searchPlaceholder || this.props.intl.formatMessage(messages.searchPlaceholder),
|
|
315
311
|
disabled: disabled,
|
|
316
312
|
size: size,
|
|
317
313
|
onChange: this.handleSelectChange,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MoneyInput.mjs","sources":["../../src/moneyInput/MoneyInput.tsx"],"sourcesContent":["import { isEmpty, isNumber, isNull } from '@transferwise/neptune-validation';\nimport { Flag } from '@wise/art';\nimport { clsx } from 'clsx';\nimport { Component } from 'react';\nimport { injectIntl, WrappedComponentProps } from 'react-intl';\n\nimport { Typography, Size, SizeLarge, SizeMedium, SizeSmall } from '../common';\nimport { withInputAttributes, WithInputAttributesProps } from '../inputs/contexts';\nimport { Input } from '../inputs/Input';\nimport {\n SelectInput,\n SelectInputItem,\n SelectInputOptionContent,\n SelectInputOptionItem,\n SelectInputProps,\n} from '../inputs/SelectInput';\nimport Title from '../title';\n\nimport messages from './MoneyInput.messages';\nimport { formatAmount, parseAmount } from './currencyFormatting';\nimport withId from '../withId';\n\nexport interface CurrencyOptionItem {\n header?: never;\n value: string;\n label: string;\n currency: string;\n note?: string;\n searchable?: string;\n}\n\nexport interface CurrencyHeaderItem {\n header: string;\n}\n\nexport type CurrencyItem = CurrencyOptionItem | CurrencyHeaderItem;\n\nconst isNumberOrNull = (v: unknown): v is number | null => isNumber(v) || isNull(v);\n\nconst formatAmountIfSet = ({\n amount,\n currency,\n locale,\n}: {\n amount: number | null | undefined;\n currency: string;\n locale: string;\n}) => {\n return typeof amount === 'number' ? formatAmount(amount, currency, locale) : '';\n};\n\nconst parseNumber = ({\n amount,\n currency,\n locale,\n}: {\n amount: string;\n currency: string;\n locale: string;\n}) => {\n return parseAmount(amount, currency, locale);\n};\n\nconst allowedInputKeys = new Set([\n 'Backspace',\n 'Delete',\n ',',\n '.',\n 'ArrowDown',\n 'ArrowUp',\n 'ArrowLeft',\n 'ArrowRight',\n 'Enter',\n 'Escape',\n 'Tab',\n]);\n\nexport interface MoneyInputProps extends WrappedComponentProps {\n id?: string;\n 'aria-labelledby'?: string;\n currencies: readonly CurrencyItem[];\n selectedCurrency: CurrencyOptionItem;\n onCurrencyChange?: (value: CurrencyOptionItem) => void;\n placeholder?: number;\n amount: number | null;\n size?: SizeSmall | SizeMedium | SizeLarge;\n onAmountChange?: (value: number | null) => void;\n addon?: React.ReactNode;\n searchPlaceholder?: string;\n /**\n * Allows the consumer to react to searching, while the search itself is handled internally.\n */\n onSearchChange?: (value: { searchQuery: string; filteredOptions: CurrencyItem[] }) => void;\n customActionLabel?: React.ReactNode;\n onCustomAction?: () => void;\n classNames?: Record<string, string>;\n selectProps?: Partial<SelectInputProps<CurrencyOptionItem>>;\n}\n\nexport type MoneyInputPropsWithInputAttributes = MoneyInputProps &\n Partial<WithInputAttributesProps>;\n\ninterface MoneyInputState {\n searchQuery: string;\n formattedAmount: string;\n locale: string;\n}\n\nclass MoneyInput extends Component<MoneyInputPropsWithInputAttributes, MoneyInputState> {\n declare props: MoneyInputPropsWithInputAttributes &\n Required<Pick<MoneyInputPropsWithInputAttributes, keyof typeof MoneyInput.defaultProps>>;\n\n static defaultProps = {\n size: Size.LARGE,\n classNames: {},\n selectProps: {},\n } satisfies Partial<MoneyInputPropsWithInputAttributes>;\n\n amountFocused = false;\n\n constructor(props: MoneyInputProps) {\n super(props);\n this.state = {\n searchQuery: '',\n formattedAmount: formatAmountIfSet({\n amount: props.amount,\n currency: props.selectedCurrency.currency,\n locale: props.intl.locale,\n }),\n locale: props.intl.locale,\n };\n }\n\n UNSAFE_componentWillReceiveProps(nextProps: MoneyInputProps) {\n this.setState({ locale: nextProps.intl.locale });\n\n if (!this.amountFocused) {\n this.setState({\n formattedAmount: formatAmountIfSet({\n amount: nextProps.amount,\n currency: nextProps.selectedCurrency.currency,\n locale: nextProps.intl.locale,\n }),\n });\n }\n }\n\n isInputAllowedForKeyEvent = (event: React.KeyboardEvent<HTMLInputElement>) => {\n const { metaKey, key, ctrlKey } = event;\n const isNumberKey = isNumber(Number.parseInt(key, 10));\n\n return isNumberKey || metaKey || ctrlKey || allowedInputKeys.has(key);\n };\n\n handleKeyDown: React.KeyboardEventHandler<HTMLInputElement> = (event) => {\n if (!this.isInputAllowedForKeyEvent(event)) {\n event.preventDefault();\n }\n };\n\n handlePaste: React.ClipboardEventHandler<HTMLInputElement> = (event) => {\n const paste = event.clipboardData.getData('text');\n const { locale } = this.state;\n const parsed = isEmpty(paste)\n ? null\n : parseNumber({\n amount: paste,\n currency: this.props.selectedCurrency.currency,\n locale,\n });\n\n if (isNumberOrNull(parsed)) {\n this.setState({\n formattedAmount: formatAmountIfSet({\n amount: parsed,\n currency: this.props.selectedCurrency.currency,\n locale,\n }),\n });\n this.props.onAmountChange?.(parsed);\n }\n\n event.preventDefault();\n };\n\n onAmountChange: React.ChangeEventHandler<HTMLInputElement> = (event) => {\n const { value } = event.target;\n this.setState({\n formattedAmount: value,\n });\n const parsed = isEmpty(value)\n ? null\n : parseNumber({\n amount: value,\n currency: this.props.selectedCurrency.currency,\n locale: this.state.locale,\n });\n if (isNumberOrNull(parsed)) {\n this.props.onAmountChange?.(parsed);\n }\n };\n\n onAmountBlur = () => {\n this.amountFocused = false;\n this.setAmount();\n };\n\n onAmountFocus = () => {\n this.amountFocused = true;\n };\n\n getSelectOptions() {\n const selectOptions = filterCurrenciesForQuery(this.props.currencies, this.state.searchQuery);\n\n const formattedOptions: SelectInputItem<CurrencyOptionItem>[] = [];\n let currentGroupOptions: SelectInputOptionItem<CurrencyOptionItem>[] | undefined;\n\n selectOptions.forEach((item) => {\n if (item.header != null) {\n currentGroupOptions = [];\n formattedOptions.push({\n type: 'group',\n label: item.header,\n options: currentGroupOptions,\n });\n } else {\n (currentGroupOptions ?? formattedOptions).push({\n type: 'option',\n value: item,\n filterMatchers: [item.value, item.label, item.note ?? '', item.searchable ?? ''],\n });\n }\n });\n\n return formattedOptions;\n }\n\n setAmount() {\n this.setState((previousState) => {\n const parsed = parseNumber({\n amount: previousState.formattedAmount,\n currency: this.props.selectedCurrency.currency,\n locale: previousState.locale,\n });\n if (!isNumberOrNull(parsed)) {\n return {\n formattedAmount: previousState.formattedAmount,\n };\n }\n return {\n formattedAmount: formatAmountIfSet({\n amount: parsed,\n currency: this.props.selectedCurrency.currency,\n locale: previousState.locale,\n }),\n };\n });\n }\n\n handleSelectChange = (value: CurrencyOptionItem) => {\n this.handleSearchChange('');\n this.props.onCurrencyChange?.(value);\n };\n\n handleCustomAction = () => {\n this.handleSearchChange('');\n this.props.onCustomAction?.();\n };\n\n handleSearchChange = (searchQuery: string) => {\n this.setState({ searchQuery });\n this.props.onSearchChange?.({\n searchQuery,\n filteredOptions: filterCurrenciesForQuery(this.props.currencies, searchQuery),\n });\n };\n\n style = (className: string) => this.props.classNames[className] || className;\n\n render() {\n const {\n inputAttributes,\n id: amountInputId,\n 'aria-labelledby': ariaLabelledByProp,\n selectedCurrency,\n onCurrencyChange,\n size,\n addon,\n selectProps,\n } = this.props;\n const ariaLabelledBy = ariaLabelledByProp ?? inputAttributes?.['aria-labelledby'];\n const selectOptions = this.getSelectOptions();\n\n const hasSingleCurrency = () => {\n if (selectOptions.length !== 0) {\n const firstItem = selectOptions[0];\n\n if (selectOptions.length === 1) {\n if (firstItem.type === 'option') {\n return firstItem.value.currency === selectedCurrency.currency;\n }\n if (firstItem.type === 'group') {\n return (\n firstItem.options.length === 1 &&\n !(this.props.onCustomAction && this.props.customActionLabel)\n );\n }\n }\n } else if (selectedCurrency?.currency) {\n return true;\n }\n\n return false;\n };\n\n const isFixedCurrency = (!this.state.searchQuery && hasSingleCurrency()) || !onCurrencyChange;\n const disabled = !this.props.onAmountChange;\n const selectedCurrencyElementId = `${inputAttributes?.id ?? amountInputId}SelectedCurrency`;\n\n return (\n <div\n role=\"group\"\n {...inputAttributes}\n aria-labelledby={ariaLabelledBy}\n className={clsx(\n this.style('tw-money-input'),\n this.style('input-group'),\n this.style(`input-group-${size}`),\n )}\n >\n <Input\n id={amountInputId}\n value={this.state.formattedAmount}\n inputMode=\"decimal\"\n disabled={disabled}\n placeholder={formatAmountIfSet({\n amount: this.props.placeholder,\n currency: this.props.selectedCurrency.currency,\n locale: this.state.locale,\n })}\n autoComplete=\"off\"\n aria-describedby={selectedCurrencyElementId}\n onKeyDown={this.handleKeyDown}\n onChange={this.onAmountChange}\n onFocus={this.onAmountFocus}\n onBlur={this.onAmountBlur}\n onPaste={this.handlePaste}\n />\n {addon && (\n <span\n className={clsx(\n this.style('input-group-addon'),\n this.style(`input-${size}`),\n disabled ? this.style('disabled') : '',\n )}\n >\n {addon}\n </span>\n )}\n {isFixedCurrency ? (\n <div\n className={clsx(\n this.style('input-group-addon'),\n this.style(`input-${size}`),\n this.style('tw-money-input__fixed-currency'),\n disabled ? this.style('disabled') : '',\n )}\n id={selectedCurrencyElementId}\n >\n {(size === 'lg' || size === 'md') && (\n <span className={clsx(this.style('money-input-currency-flag'), this.style('m-r-2'))}>\n <Flag code={selectedCurrency.currency.toLowerCase()} intrinsicSize={24} />\n </span>\n )}\n <Title\n as=\"span\"\n type={Typography.TITLE_SUBSECTION}\n className={size === 'lg' ? this.style('m-r-1') : ''}\n >\n {selectedCurrency.currency.toUpperCase()}\n </Title>\n </div>\n ) : (\n <div\n translate=\"no\"\n className={clsx(\n this.style('input-group-btn'),\n this.style('amount-currency-select-btn'),\n )}\n >\n <SelectInput\n UNSAFE_triggerButtonProps={{\n id: undefined,\n 'aria-labelledby': undefined,\n 'aria-describedby': ariaLabelledBy,\n 'aria-invalid': undefined,\n 'aria-label': this.props.intl.formatMessage(messages.selectCurrencyLabel),\n }}\n id={selectedCurrencyElementId}\n items={selectOptions}\n value={selectedCurrency}\n compareValues=\"currency\"\n renderValue={(currency, withinTrigger) => {\n return (\n <SelectInputOptionContent\n title={withinTrigger ? currency.currency.toUpperCase() : currency.label}\n note={withinTrigger ? undefined : currency.note}\n icon={<Flag code={currency.currency} intrinsicSize={24} />}\n />\n );\n }}\n renderFooter={\n this.props.onCustomAction\n ? () => (\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events\n <div role=\"button\" tabIndex={0} onClick={this.handleCustomAction}>\n {this.props.customActionLabel}\n </div>\n )\n : undefined\n }\n placeholder={this.props.intl.formatMessage(messages.selectPlaceholder)}\n filterable\n filterPlaceholder={this.props.searchPlaceholder}\n disabled={disabled}\n size={size}\n onChange={this.handleSelectChange}\n onFilterChange={({ queryNormalized }) => {\n this.handleSearchChange(queryNormalized ?? '');\n }}\n {...selectProps}\n />\n </div>\n )}\n </div>\n );\n }\n}\n\nfunction filterCurrenciesForQuery(\n currencies: readonly CurrencyItem[],\n query: string,\n): CurrencyItem[] {\n if (!query) {\n return [...currencies];\n }\n\n const options = currencies.filter(\n (option): option is CurrencyOptionItem => option.header == null,\n );\n const filteredOptions = removeDuplicateValueOptions(options).filter((option) =>\n currencyOptionFitsQuery(option, query),\n );\n\n return sortOptionsLabelsToFirst(filteredOptions, query);\n}\n\nfunction removeDuplicateValueOptions(options: readonly CurrencyOptionItem[]) {\n const uniqueValues = new Set<string>();\n return options.filter((option) => {\n if (!uniqueValues.has(option.value)) {\n uniqueValues.add(option.value);\n return true;\n }\n return false;\n });\n}\n\nfunction currencyOptionFitsQuery(option: CurrencyOptionItem, query: string) {\n if (!option.value) {\n return false;\n }\n\n return (\n contains(option.label, query) ||\n contains(option.searchable, query) ||\n contains(option.note, query)\n );\n}\n\nfunction contains(property: string | undefined, query: string) {\n return property?.toLowerCase().includes(query.toLowerCase());\n}\n\nfunction sortOptionsLabelsToFirst(options: readonly CurrencyOptionItem[], query: string) {\n return [...options].sort((first, second) => {\n const firstContains = contains(first.label, query);\n const secondContains = contains(second.label, query);\n\n if (firstContains && secondContains) {\n return 0;\n }\n if (firstContains) {\n return -1;\n }\n if (secondContains) {\n return 1;\n }\n return 0;\n });\n}\n\nexport default injectIntl(withId(withInputAttributes(MoneyInput, { nonLabelable: true })));\n"],"names":["isNumberOrNull","v","isNumber","isNull","formatAmountIfSet","amount","currency","locale","formatAmount","parseNumber","parseAmount","allowedInputKeys","Set","MoneyInput","Component","defaultProps","size","Size","LARGE","classNames","selectProps","amountFocused","constructor","props","state","searchQuery","formattedAmount","selectedCurrency","intl","UNSAFE_componentWillReceiveProps","nextProps","setState","isInputAllowedForKeyEvent","event","metaKey","key","ctrlKey","isNumberKey","Number","parseInt","has","handleKeyDown","preventDefault","handlePaste","paste","clipboardData","getData","parsed","isEmpty","onAmountChange","value","target","onAmountBlur","setAmount","onAmountFocus","getSelectOptions","selectOptions","filterCurrenciesForQuery","currencies","formattedOptions","currentGroupOptions","forEach","item","header","push","type","label","options","filterMatchers","note","searchable","previousState","handleSelectChange","handleSearchChange","onCurrencyChange","handleCustomAction","onCustomAction","onSearchChange","filteredOptions","style","className","render","inputAttributes","id","amountInputId","ariaLabelledByProp","addon","ariaLabelledBy","hasSingleCurrency","length","firstItem","customActionLabel","isFixedCurrency","disabled","selectedCurrencyElementId","_jsxs","role","clsx","children","_jsx","Input","inputMode","placeholder","autoComplete","onKeyDown","onChange","onFocus","onBlur","onPaste","Flag","code","toLowerCase","intrinsicSize","Title","as","Typography","TITLE_SUBSECTION","toUpperCase","translate","SelectInput","UNSAFE_triggerButtonProps","undefined","formatMessage","messages","selectCurrencyLabel","items","compareValues","renderValue","withinTrigger","SelectInputOptionContent","title","icon","renderFooter","tabIndex","onClick","selectPlaceholder","filterable","filterPlaceholder","searchPlaceholder","onFilterChange","queryNormalized","query","filter","option","removeDuplicateValueOptions","currencyOptionFitsQuery","sortOptionsLabelsToFirst","uniqueValues","add","contains","property","includes","sort","first","second","firstContains","secondContains","injectIntl","withId","withInputAttributes","nonLabelable"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MoneyInput.mjs","sources":["../../src/moneyInput/MoneyInput.tsx"],"sourcesContent":["import { isEmpty, isNumber, isNull } from '@transferwise/neptune-validation';\nimport { Flag } from '@wise/art';\nimport { clsx } from 'clsx';\nimport { Component } from 'react';\nimport { injectIntl, WrappedComponentProps } from 'react-intl';\n\nimport { Typography, Size, SizeLarge, SizeMedium, SizeSmall } from '../common';\nimport { withInputAttributes, WithInputAttributesProps } from '../inputs/contexts';\nimport { Input } from '../inputs/Input';\nimport {\n SelectInput,\n SelectInputItem,\n SelectInputOptionContent,\n SelectInputOptionItem,\n SelectInputProps,\n} from '../inputs/SelectInput';\nimport Title from '../title';\n\nimport messages from './MoneyInput.messages';\nimport { formatAmount, parseAmount } from './currencyFormatting';\nimport withId from '../withId';\n\nexport interface CurrencyOptionItem {\n header?: never;\n value: string;\n label: string;\n currency: string;\n note?: string;\n searchable?: string;\n}\n\nexport interface CurrencyHeaderItem {\n header: string;\n}\n\nexport type CurrencyItem = CurrencyOptionItem | CurrencyHeaderItem;\n\nconst isNumberOrNull = (v: unknown): v is number | null => isNumber(v) || isNull(v);\n\nconst formatAmountIfSet = ({\n amount,\n currency,\n locale,\n}: {\n amount: number | null | undefined;\n currency: string;\n locale: string;\n}) => {\n return typeof amount === 'number' ? formatAmount(amount, currency, locale) : '';\n};\n\nconst parseNumber = ({\n amount,\n currency,\n locale,\n}: {\n amount: string;\n currency: string;\n locale: string;\n}) => {\n return parseAmount(amount, currency, locale);\n};\n\nconst allowedInputKeys = new Set([\n 'Backspace',\n 'Delete',\n ',',\n '.',\n 'ArrowDown',\n 'ArrowUp',\n 'ArrowLeft',\n 'ArrowRight',\n 'Enter',\n 'Escape',\n 'Tab',\n]);\n\nexport interface MoneyInputProps extends WrappedComponentProps {\n id?: string;\n 'aria-labelledby'?: string;\n currencies: readonly CurrencyItem[];\n selectedCurrency: CurrencyOptionItem;\n onCurrencyChange?: (value: CurrencyOptionItem) => void;\n placeholder?: number;\n amount: number | null;\n size?: SizeSmall | SizeMedium | SizeLarge;\n onAmountChange?: (value: number | null) => void;\n addon?: React.ReactNode;\n searchPlaceholder?: string;\n /**\n * Allows the consumer to react to searching, while the search itself is handled internally.\n */\n onSearchChange?: (value: { searchQuery: string; filteredOptions: CurrencyItem[] }) => void;\n customActionLabel?: React.ReactNode;\n onCustomAction?: () => void;\n classNames?: Record<string, string>;\n selectProps?: Partial<SelectInputProps<CurrencyOptionItem>>;\n}\n\nexport type MoneyInputPropsWithInputAttributes = MoneyInputProps &\n Partial<WithInputAttributesProps>;\n\ninterface MoneyInputState {\n searchQuery: string;\n formattedAmount: string;\n locale: string;\n}\n\nclass MoneyInput extends Component<MoneyInputPropsWithInputAttributes, MoneyInputState> {\n declare props: MoneyInputPropsWithInputAttributes &\n Required<Pick<MoneyInputPropsWithInputAttributes, keyof typeof MoneyInput.defaultProps>>;\n\n static defaultProps = {\n size: Size.LARGE,\n classNames: {},\n selectProps: {},\n } satisfies Partial<MoneyInputPropsWithInputAttributes>;\n\n amountFocused = false;\n\n constructor(props: MoneyInputProps) {\n super(props);\n this.state = {\n searchQuery: '',\n formattedAmount: formatAmountIfSet({\n amount: props.amount,\n currency: props.selectedCurrency.currency,\n locale: props.intl.locale,\n }),\n locale: props.intl.locale,\n };\n }\n\n UNSAFE_componentWillReceiveProps(nextProps: MoneyInputProps) {\n this.setState({ locale: nextProps.intl.locale });\n\n if (!this.amountFocused) {\n this.setState({\n formattedAmount: formatAmountIfSet({\n amount: nextProps.amount,\n currency: nextProps.selectedCurrency.currency,\n locale: nextProps.intl.locale,\n }),\n });\n }\n }\n\n isInputAllowedForKeyEvent = (event: React.KeyboardEvent<HTMLInputElement>) => {\n const { metaKey, key, ctrlKey } = event;\n const isNumberKey = isNumber(Number.parseInt(key, 10));\n\n return isNumberKey || metaKey || ctrlKey || allowedInputKeys.has(key);\n };\n\n handleKeyDown: React.KeyboardEventHandler<HTMLInputElement> = (event) => {\n if (!this.isInputAllowedForKeyEvent(event)) {\n event.preventDefault();\n }\n };\n\n handlePaste: React.ClipboardEventHandler<HTMLInputElement> = (event) => {\n const paste = event.clipboardData.getData('text');\n const { locale } = this.state;\n const parsed = isEmpty(paste)\n ? null\n : parseNumber({\n amount: paste,\n currency: this.props.selectedCurrency.currency,\n locale,\n });\n\n if (isNumberOrNull(parsed)) {\n this.setState({\n formattedAmount: formatAmountIfSet({\n amount: parsed,\n currency: this.props.selectedCurrency.currency,\n locale,\n }),\n });\n this.props.onAmountChange?.(parsed);\n }\n\n event.preventDefault();\n };\n\n onAmountChange: React.ChangeEventHandler<HTMLInputElement> = (event) => {\n const { value } = event.target;\n this.setState({\n formattedAmount: value,\n });\n const parsed = isEmpty(value)\n ? null\n : parseNumber({\n amount: value,\n currency: this.props.selectedCurrency.currency,\n locale: this.state.locale,\n });\n if (isNumberOrNull(parsed)) {\n this.props.onAmountChange?.(parsed);\n }\n };\n\n onAmountBlur = () => {\n this.amountFocused = false;\n this.setAmount();\n };\n\n onAmountFocus = () => {\n this.amountFocused = true;\n };\n\n getSelectOptions() {\n const selectOptions = filterCurrenciesForQuery(this.props.currencies, this.state.searchQuery);\n\n const formattedOptions: SelectInputItem<CurrencyOptionItem>[] = [];\n let currentGroupOptions: SelectInputOptionItem<CurrencyOptionItem>[] | undefined;\n\n selectOptions.forEach((item) => {\n if (item.header != null) {\n currentGroupOptions = [];\n formattedOptions.push({\n type: 'group',\n label: item.header,\n options: currentGroupOptions,\n });\n } else {\n (currentGroupOptions ?? formattedOptions).push({\n type: 'option',\n value: item,\n filterMatchers: [item.value, item.label, item.note ?? '', item.searchable ?? ''],\n });\n }\n });\n\n return formattedOptions;\n }\n\n setAmount() {\n this.setState((previousState) => {\n const parsed = parseNumber({\n amount: previousState.formattedAmount,\n currency: this.props.selectedCurrency.currency,\n locale: previousState.locale,\n });\n if (!isNumberOrNull(parsed)) {\n return {\n formattedAmount: previousState.formattedAmount,\n };\n }\n return {\n formattedAmount: formatAmountIfSet({\n amount: parsed,\n currency: this.props.selectedCurrency.currency,\n locale: previousState.locale,\n }),\n };\n });\n }\n\n handleSelectChange = (value: CurrencyOptionItem) => {\n this.handleSearchChange('');\n this.props.onCurrencyChange?.(value);\n };\n\n handleSearchChange = (searchQuery: string) => {\n this.setState({ searchQuery });\n this.props.onSearchChange?.({\n searchQuery,\n filteredOptions: filterCurrenciesForQuery(this.props.currencies, searchQuery),\n });\n };\n\n style = (className: string) => this.props.classNames[className] || className;\n\n render() {\n const {\n inputAttributes,\n id: amountInputId,\n 'aria-labelledby': ariaLabelledByProp,\n selectedCurrency,\n onCurrencyChange,\n size,\n addon,\n selectProps,\n } = this.props;\n const ariaLabelledBy = ariaLabelledByProp ?? inputAttributes?.['aria-labelledby'];\n const selectOptions = this.getSelectOptions();\n\n const hasSingleCurrency = () => {\n if (selectOptions.length !== 0) {\n const firstItem = selectOptions[0];\n\n if (selectOptions.length === 1) {\n if (firstItem.type === 'option') {\n return firstItem.value.currency === selectedCurrency.currency;\n }\n if (firstItem.type === 'group') {\n return (\n firstItem.options.length === 1 &&\n !(this.props.onCustomAction && this.props.customActionLabel)\n );\n }\n }\n } else if (selectedCurrency?.currency) {\n return true;\n }\n\n return false;\n };\n\n const isFixedCurrency = (!this.state.searchQuery && hasSingleCurrency()) || !onCurrencyChange;\n const disabled = !this.props.onAmountChange;\n const selectedCurrencyElementId = `${inputAttributes?.id ?? amountInputId}SelectedCurrency`;\n\n return (\n <div\n role=\"group\"\n {...inputAttributes}\n aria-labelledby={ariaLabelledBy}\n className={clsx(\n this.style('tw-money-input'),\n this.style('input-group'),\n this.style(`input-group-${size}`),\n )}\n >\n <Input\n id={amountInputId}\n value={this.state.formattedAmount}\n inputMode=\"decimal\"\n disabled={disabled}\n placeholder={formatAmountIfSet({\n amount: this.props.placeholder,\n currency: this.props.selectedCurrency.currency,\n locale: this.state.locale,\n })}\n autoComplete=\"off\"\n aria-describedby={selectedCurrencyElementId}\n onKeyDown={this.handleKeyDown}\n onChange={this.onAmountChange}\n onFocus={this.onAmountFocus}\n onBlur={this.onAmountBlur}\n onPaste={this.handlePaste}\n />\n {addon && (\n <span\n className={clsx(\n this.style('input-group-addon'),\n this.style(`input-${size}`),\n disabled ? this.style('disabled') : '',\n )}\n >\n {addon}\n </span>\n )}\n {isFixedCurrency ? (\n <div\n className={clsx(\n this.style('input-group-addon'),\n this.style(`input-${size}`),\n this.style('tw-money-input__fixed-currency'),\n disabled ? this.style('disabled') : '',\n )}\n id={selectedCurrencyElementId}\n >\n {(size === 'lg' || size === 'md') && (\n <span className={clsx(this.style('money-input-currency-flag'), this.style('m-r-2'))}>\n <Flag code={selectedCurrency.currency.toLowerCase()} intrinsicSize={24} />\n </span>\n )}\n <Title\n as=\"span\"\n type={Typography.TITLE_SUBSECTION}\n className={size === 'lg' ? this.style('m-r-1') : ''}\n >\n {selectedCurrency.currency.toUpperCase()}\n </Title>\n </div>\n ) : (\n <div\n translate=\"no\"\n className={clsx(\n this.style('input-group-btn'),\n this.style('amount-currency-select-btn'),\n )}\n >\n <SelectInput\n UNSAFE_triggerButtonProps={{\n id: undefined,\n 'aria-labelledby': undefined,\n 'aria-describedby': ariaLabelledBy,\n 'aria-invalid': undefined,\n 'aria-label': this.props.intl.formatMessage(messages.selectCurrencyLabel),\n }}\n id={selectedCurrencyElementId}\n items={selectOptions}\n value={selectedCurrency}\n compareValues=\"currency\"\n renderValue={(currency, withinTrigger) => {\n return (\n <SelectInputOptionContent\n title={withinTrigger ? currency.currency.toUpperCase() : currency.label}\n note={withinTrigger ? undefined : currency.note}\n icon={<Flag code={currency.currency} intrinsicSize={24} />}\n />\n );\n }}\n renderFooter={\n this.props.onCustomAction\n ? () => (\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events\n <div role=\"button\" tabIndex={0} onClick={this.props.onCustomAction}>\n {this.props.customActionLabel}\n </div>\n )\n : undefined\n }\n placeholder={this.props.intl.formatMessage(messages.selectPlaceholder)}\n filterable\n filterPlaceholder={\n this.props.searchPlaceholder ||\n this.props.intl.formatMessage(messages.searchPlaceholder)\n }\n disabled={disabled}\n size={size}\n onChange={this.handleSelectChange}\n onFilterChange={({ queryNormalized }) => {\n this.handleSearchChange(queryNormalized ?? '');\n }}\n {...selectProps}\n />\n </div>\n )}\n </div>\n );\n }\n}\n\nfunction filterCurrenciesForQuery(\n currencies: readonly CurrencyItem[],\n query: string,\n): CurrencyItem[] {\n if (!query) {\n return [...currencies];\n }\n\n const options = currencies.filter(\n (option): option is CurrencyOptionItem => option.header == null,\n );\n const filteredOptions = removeDuplicateValueOptions(options).filter((option) =>\n currencyOptionFitsQuery(option, query),\n );\n\n return sortOptionsLabelsToFirst(filteredOptions, query);\n}\n\nfunction removeDuplicateValueOptions(options: readonly CurrencyOptionItem[]) {\n const uniqueValues = new Set<string>();\n return options.filter((option) => {\n if (!uniqueValues.has(option.value)) {\n uniqueValues.add(option.value);\n return true;\n }\n return false;\n });\n}\n\nfunction currencyOptionFitsQuery(option: CurrencyOptionItem, query: string) {\n if (!option.value) {\n return false;\n }\n\n return (\n contains(option.label, query) ||\n contains(option.searchable, query) ||\n contains(option.note, query)\n );\n}\n\nfunction contains(property: string | undefined, query: string) {\n return property?.toLowerCase().includes(query.toLowerCase());\n}\n\nfunction sortOptionsLabelsToFirst(options: readonly CurrencyOptionItem[], query: string) {\n return [...options].sort((first, second) => {\n const firstContains = contains(first.label, query);\n const secondContains = contains(second.label, query);\n\n if (firstContains && secondContains) {\n return 0;\n }\n if (firstContains) {\n return -1;\n }\n if (secondContains) {\n return 1;\n }\n return 0;\n });\n}\n\nexport default injectIntl(withId(withInputAttributes(MoneyInput, { nonLabelable: true })));\n"],"names":["isNumberOrNull","v","isNumber","isNull","formatAmountIfSet","amount","currency","locale","formatAmount","parseNumber","parseAmount","allowedInputKeys","Set","MoneyInput","Component","defaultProps","size","Size","LARGE","classNames","selectProps","amountFocused","constructor","props","state","searchQuery","formattedAmount","selectedCurrency","intl","UNSAFE_componentWillReceiveProps","nextProps","setState","isInputAllowedForKeyEvent","event","metaKey","key","ctrlKey","isNumberKey","Number","parseInt","has","handleKeyDown","preventDefault","handlePaste","paste","clipboardData","getData","parsed","isEmpty","onAmountChange","value","target","onAmountBlur","setAmount","onAmountFocus","getSelectOptions","selectOptions","filterCurrenciesForQuery","currencies","formattedOptions","currentGroupOptions","forEach","item","header","push","type","label","options","filterMatchers","note","searchable","previousState","handleSelectChange","handleSearchChange","onCurrencyChange","onSearchChange","filteredOptions","style","className","render","inputAttributes","id","amountInputId","ariaLabelledByProp","addon","ariaLabelledBy","hasSingleCurrency","length","firstItem","onCustomAction","customActionLabel","isFixedCurrency","disabled","selectedCurrencyElementId","_jsxs","role","clsx","children","_jsx","Input","inputMode","placeholder","autoComplete","onKeyDown","onChange","onFocus","onBlur","onPaste","Flag","code","toLowerCase","intrinsicSize","Title","as","Typography","TITLE_SUBSECTION","toUpperCase","translate","SelectInput","UNSAFE_triggerButtonProps","undefined","formatMessage","messages","selectCurrencyLabel","items","compareValues","renderValue","withinTrigger","SelectInputOptionContent","title","icon","renderFooter","tabIndex","onClick","selectPlaceholder","filterable","filterPlaceholder","searchPlaceholder","onFilterChange","queryNormalized","query","filter","option","removeDuplicateValueOptions","currencyOptionFitsQuery","sortOptionsLabelsToFirst","uniqueValues","add","contains","property","includes","sort","first","second","firstContains","secondContains","injectIntl","withId","withInputAttributes","nonLabelable"],"mappings":"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"}
|