@transferwise/components 46.53.0 → 46.54.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.
Files changed (45) hide show
  1. package/build/i18n/en.json +1 -0
  2. package/build/i18n/en.json.js +1 -0
  3. package/build/i18n/en.json.js.map +1 -1
  4. package/build/i18n/en.json.mjs +1 -0
  5. package/build/i18n/en.json.mjs.map +1 -1
  6. package/build/main.css +10 -0
  7. package/build/styles/main.css +10 -0
  8. package/build/styles/upload/Upload.css +10 -0
  9. package/build/types/upload/Upload.d.ts +1 -0
  10. package/build/types/upload/Upload.d.ts.map +1 -1
  11. package/build/types/upload/Upload.messages.d.ts +4 -0
  12. package/build/types/upload/Upload.messages.d.ts.map +1 -1
  13. package/build/types/upload/steps/completeStep/completeStep.d.ts +1 -3
  14. package/build/types/upload/steps/completeStep/completeStep.d.ts.map +1 -1
  15. package/build/types/upload/steps/uploadImageStep/uploadImageStep.d.ts +1 -0
  16. package/build/types/upload/steps/uploadImageStep/uploadImageStep.d.ts.map +1 -1
  17. package/build/upload/Upload.js +26 -12
  18. package/build/upload/Upload.js.map +1 -1
  19. package/build/upload/Upload.messages.js +3 -0
  20. package/build/upload/Upload.messages.js.map +1 -1
  21. package/build/upload/Upload.messages.mjs +3 -0
  22. package/build/upload/Upload.messages.mjs.map +1 -1
  23. package/build/upload/Upload.mjs +26 -12
  24. package/build/upload/Upload.mjs.map +1 -1
  25. package/build/upload/steps/completeStep/completeStep.js +15 -30
  26. package/build/upload/steps/completeStep/completeStep.js.map +1 -1
  27. package/build/upload/steps/completeStep/completeStep.mjs +16 -31
  28. package/build/upload/steps/completeStep/completeStep.mjs.map +1 -1
  29. package/build/upload/steps/uploadImageStep/uploadImageStep.js +56 -32
  30. package/build/upload/steps/uploadImageStep/uploadImageStep.js.map +1 -1
  31. package/build/upload/steps/uploadImageStep/uploadImageStep.mjs +56 -32
  32. package/build/upload/steps/uploadImageStep/uploadImageStep.mjs.map +1 -1
  33. package/package.json +2 -2
  34. package/src/i18n/en.json +1 -0
  35. package/src/main.css +10 -0
  36. package/src/upload/Upload.css +10 -0
  37. package/src/upload/Upload.less +9 -0
  38. package/src/upload/Upload.messages.ts +4 -0
  39. package/src/upload/Upload.spec.js +8 -7
  40. package/src/upload/Upload.story.tsx +1 -0
  41. package/src/upload/Upload.tsx +39 -20
  42. package/src/upload/steps/completeStep/completeStep.spec.js +0 -9
  43. package/src/upload/steps/completeStep/completeStep.tsx +14 -29
  44. package/src/upload/steps/uploadImageStep/uploadImageStep.spec.js +12 -0
  45. package/src/upload/steps/uploadImageStep/uploadImageStep.tsx +43 -24
@@ -3,20 +3,15 @@
3
3
  var icons = require('@transferwise/icons');
4
4
  var Body = require('../../../body/Body.js');
5
5
  var Button = require('../../../button/Button.js');
6
- var StatusIcon = require('../../../statusIcon/StatusIcon.js');
7
6
  var Title = require('../../../title/Title.js');
8
7
  var jsxRuntime = require('react/jsx-runtime');
9
- var sentiment = require('../../../common/propsValues/sentiment.js');
10
- var size = require('../../../common/propsValues/size.js');
11
8
  var typography = require('../../../common/propsValues/typography.js');
12
9
 
13
10
  function CompleteStep({
14
11
  csButtonText,
15
- csFailureText,
16
12
  csSuccessText,
17
13
  fileName,
18
14
  isComplete,
19
- isError,
20
15
  isImage,
21
16
  onClear,
22
17
  uploadedImage
@@ -26,34 +21,24 @@ function CompleteStep({
26
21
  "aria-hidden": !isComplete,
27
22
  children: /*#__PURE__*/jsxRuntime.jsxs("div", {
28
23
  className: "droppable-card-content",
29
- children: [/*#__PURE__*/jsxRuntime.jsx("div", {
24
+ children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
30
25
  className: "droppable-card-content d-flex flex-column align-items-center",
31
26
  "aria-live": "polite",
32
- children: isError ? /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
33
- children: [/*#__PURE__*/jsxRuntime.jsx(StatusIcon, {
34
- size: size.Size.LARGE,
35
- sentiment: sentiment.Sentiment.NEGATIVE
36
- }), csFailureText && /*#__PURE__*/jsxRuntime.jsx("p", {
37
- className: "m-t-2 m-b-0",
38
- children: csFailureText
39
- })]
40
- }) : /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
41
- children: [isImage && uploadedImage ? /*#__PURE__*/jsxRuntime.jsx("img", {
42
- src: uploadedImage,
43
- alt: "OK",
44
- className: "thumbnail "
45
- }) : /*#__PURE__*/jsxRuntime.jsx(icons.Document, {}), fileName && /*#__PURE__*/jsxRuntime.jsx(Body, {
46
- as: "p",
47
- className: "m-b-0",
48
- children: fileName
49
- }), csSuccessText && /*#__PURE__*/jsxRuntime.jsx(Title, {
50
- className: "caption m-t-1",
51
- type: typography.Typography.TITLE_BODY,
52
- children: csSuccessText
53
- })]
54
- })
27
+ children: [isImage && uploadedImage ? /*#__PURE__*/jsxRuntime.jsx("img", {
28
+ src: uploadedImage,
29
+ alt: "OK",
30
+ className: "thumbnail "
31
+ }) : /*#__PURE__*/jsxRuntime.jsx(icons.Document, {}), fileName && /*#__PURE__*/jsxRuntime.jsx(Body, {
32
+ as: "p",
33
+ className: "m-b-0",
34
+ children: fileName
35
+ }), csSuccessText && /*#__PURE__*/jsxRuntime.jsx(Title, {
36
+ className: "caption m-t-1",
37
+ type: typography.Typography.TITLE_BODY,
38
+ children: csSuccessText
39
+ })]
55
40
  }), csButtonText && /*#__PURE__*/jsxRuntime.jsx(Button, {
56
- className: isError ? 'm-t-2' : 'm-t-1',
41
+ className: "m-t-1",
57
42
  onClick: onClear,
58
43
  children: csButtonText
59
44
  })]
@@ -1 +1 @@
1
- {"version":3,"file":"completeStep.js","sources":["../../../../src/upload/steps/completeStep/completeStep.tsx"],"sourcesContent":["import { Document as DocumentIcon } from '@transferwise/icons';\n\nimport { Typography } from '../../..';\nimport Body from '../../../body';\nimport Button from '../../../button';\nimport { Sentiment, Size } from '../../../common';\nimport StatusIcon from '../../../statusIcon';\nimport Title from '../../../title';\n\nexport interface CompleteStepProps {\n csButtonText: string;\n csSuccessText: string;\n csFailureText: string;\n fileName: string;\n isComplete: boolean;\n isError: boolean;\n isImage: boolean;\n uploadedImage?: string;\n onClear: React.MouseEventHandler<HTMLButtonElement>;\n}\n\nexport default function CompleteStep({\n csButtonText,\n csFailureText,\n csSuccessText,\n fileName,\n isComplete,\n isError,\n isImage,\n onClear,\n uploadedImage,\n}: CompleteStepProps) {\n return (\n <div className=\"droppable-complete-card droppable-card\" aria-hidden={!isComplete}>\n <div className=\"droppable-card-content\">\n <div\n className=\"droppable-card-content d-flex flex-column align-items-center\"\n aria-live=\"polite\"\n >\n {isError ? (\n <>\n <StatusIcon size={Size.LARGE} sentiment={Sentiment.NEGATIVE} />\n {csFailureText && <p className=\"m-t-2 m-b-0\">{csFailureText}</p>}\n </>\n ) : (\n <>\n {isImage && uploadedImage ? (\n <img src={uploadedImage} alt=\"OK\" className=\"thumbnail \" />\n ) : (\n <DocumentIcon />\n )}\n\n {fileName && (\n <Body as=\"p\" className=\"m-b-0\">\n {fileName}\n </Body>\n )}\n {csSuccessText && (\n <Title className=\"caption m-t-1\" type={Typography.TITLE_BODY}>\n {csSuccessText}\n </Title>\n )}\n </>\n )}\n </div>\n {csButtonText && (\n <Button className={isError ? 'm-t-2' : 'm-t-1'} onClick={onClear}>\n {csButtonText}\n </Button>\n )}\n </div>\n </div>\n );\n}\n"],"names":["CompleteStep","csButtonText","csFailureText","csSuccessText","fileName","isComplete","isError","isImage","onClear","uploadedImage","_jsx","className","children","_jsxs","_Fragment","StatusIcon","size","Size","LARGE","sentiment","Sentiment","NEGATIVE","src","alt","DocumentIcon","Body","as","Title","type","Typography","TITLE_BODY","Button","onClick"],"mappings":";;;;;;;;;;;;AAqBwB,SAAAA,YAAYA,CAAC;EACnCC,YAAY;EACZC,aAAa;EACbC,aAAa;EACbC,QAAQ;EACRC,UAAU;EACVC,OAAO;EACPC,OAAO;EACPC,OAAO;AACPC,EAAAA,aAAAA;AACkB,CAAA,EAAA;AAClB,EAAA,oBACEC,cAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,wCAAwC;AAAC,IAAA,aAAA,EAAa,CAACN,UAAW;AAAAO,IAAAA,QAAA,eAC/EC,eAAA,CAAA,KAAA,EAAA;AAAKF,MAAAA,SAAS,EAAC,wBAAwB;AAAAC,MAAAA,QAAA,gBACrCF,cAAA,CAAA,KAAA,EAAA;AACEC,QAAAA,SAAS,EAAC,8DAA8D;AACxE,QAAA,WAAA,EAAU,QAAQ;AAAAC,QAAAA,QAAA,EAEjBN,OAAO,gBACNO,eAAA,CAAAC,mBAAA,EAAA;UAAAF,QAAA,EAAA,cACEF,cAAA,CAACK,UAAU,EAAA;YAACC,IAAI,EAAEC,SAAI,CAACC,KAAM;YAACC,SAAS,EAAEC,mBAAS,CAACC,QAAAA;AAAS,WAC5D,CAAA,EAACnB,aAAa,iBAAIQ,cAAA,CAAA,GAAA,EAAA;AAAGC,YAAAA,SAAS,EAAC,aAAa;AAAAC,YAAAA,QAAA,EAAEV,aAAAA;AAAa,WAAI,CAAC,CAAA;AAAA,SAClE,CAAG,gBAEHW,eAAA,CAAAC,mBAAA,EAAA;AAAAF,UAAAA,QAAA,EACGL,CAAAA,OAAO,IAAIE,aAAa,gBACvBC,cAAA,CAAA,KAAA,EAAA;AAAKY,YAAAA,GAAG,EAAEb,aAAc;AAACc,YAAAA,GAAG,EAAC,IAAI;AAACZ,YAAAA,SAAS,EAAC,YAAA;AAAY,WAAA,CAAG,gBAE3DD,cAAA,CAACc,cAAY,EAAA,EAAA,CACd,EAEApB,QAAQ,iBACPM,cAAA,CAACe,IAAI,EAAA;AAACC,YAAAA,EAAE,EAAC,GAAG;AAACf,YAAAA,SAAS,EAAC,OAAO;AAAAC,YAAAA,QAAA,EAC3BR,QAAAA;AAAQ,WACL,CACP,EACAD,aAAa,iBACZO,cAAA,CAACiB,KAAK,EAAA;AAAChB,YAAAA,SAAS,EAAC,eAAe;YAACiB,IAAI,EAAEC,qBAAU,CAACC,UAAW;AAAAlB,YAAAA,QAAA,EAC1DT,aAAAA;AAAa,WACT,CACR,CAAA;SACH,CAAA;AACD,OACE,CACL,EAACF,YAAY,iBACXS,cAAA,CAACqB,MAAM,EAAA;AAACpB,QAAAA,SAAS,EAAEL,OAAO,GAAG,OAAO,GAAG,OAAQ;AAAC0B,QAAAA,OAAO,EAAExB,OAAQ;AAAAI,QAAAA,QAAA,EAC9DX,YAAAA;AAAY,OACP,CACT,CAAA;KACE,CAAA;AACP,GAAK,CAAC,CAAA;AAEV;;;;"}
1
+ {"version":3,"file":"completeStep.js","sources":["../../../../src/upload/steps/completeStep/completeStep.tsx"],"sourcesContent":["import { Document as DocumentIcon } from '@transferwise/icons';\n\nimport { Typography } from '../../..';\nimport Body from '../../../body';\nimport Button from '../../../button';\nimport Title from '../../../title';\n\nexport interface CompleteStepProps {\n csButtonText: string;\n csSuccessText: string;\n fileName: string;\n isComplete: boolean;\n isImage: boolean;\n uploadedImage?: string;\n onClear: React.MouseEventHandler<HTMLButtonElement>;\n}\n\nexport default function CompleteStep({\n csButtonText,\n csSuccessText,\n fileName,\n isComplete,\n isImage,\n onClear,\n uploadedImage,\n}: CompleteStepProps) {\n return (\n <div className=\"droppable-complete-card droppable-card\" aria-hidden={!isComplete}>\n <div className=\"droppable-card-content\">\n <div\n className=\"droppable-card-content d-flex flex-column align-items-center\"\n aria-live=\"polite\"\n >\n {isImage && uploadedImage ? (\n <img src={uploadedImage} alt=\"OK\" className=\"thumbnail \" />\n ) : (\n <DocumentIcon />\n )}\n\n {fileName && (\n <Body as=\"p\" className=\"m-b-0\">\n {fileName}\n </Body>\n )}\n {csSuccessText && (\n <Title className=\"caption m-t-1\" type={Typography.TITLE_BODY}>\n {csSuccessText}\n </Title>\n )}\n </div>\n {csButtonText && (\n <Button className=\"m-t-1\" onClick={onClear}>\n {csButtonText}\n </Button>\n )}\n </div>\n </div>\n );\n}\n"],"names":["CompleteStep","csButtonText","csSuccessText","fileName","isComplete","isImage","onClear","uploadedImage","_jsx","className","children","_jsxs","src","alt","DocumentIcon","Body","as","Title","type","Typography","TITLE_BODY","Button","onClick"],"mappings":";;;;;;;;;AAiBc,SAAUA,YAAYA,CAAC;EACnCC,YAAY;EACZC,aAAa;EACbC,QAAQ;EACRC,UAAU;EACVC,OAAO;EACPC,OAAO;AACPC,EAAAA,aAAAA;AACkB,CAAA,EAAA;AAClB,EAAA,oBACEC,cAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,wCAAwC;AAAC,IAAA,aAAA,EAAa,CAACL,UAAW;AAAAM,IAAAA,QAAA,eAC/EC,eAAA,CAAA,KAAA,EAAA;AAAKF,MAAAA,SAAS,EAAC,wBAAwB;AAAAC,MAAAA,QAAA,gBACrCC,eAAA,CAAA,KAAA,EAAA;AACEF,QAAAA,SAAS,EAAC,8DAA8D;AACxE,QAAA,WAAA,EAAU,QAAQ;AAAAC,QAAAA,QAAA,EAEjBL,CAAAA,OAAO,IAAIE,aAAa,gBACvBC,cAAA,CAAA,KAAA,EAAA;AAAKI,UAAAA,GAAG,EAAEL,aAAc;AAACM,UAAAA,GAAG,EAAC,IAAI;AAACJ,UAAAA,SAAS,EAAC,YAAA;AAAY,SAAA,CAAG,gBAE3DD,cAAA,CAACM,cAAY,EAAA,EAAA,CACd,EAEAX,QAAQ,iBACPK,cAAA,CAACO,IAAI,EAAA;AAACC,UAAAA,EAAE,EAAC,GAAG;AAACP,UAAAA,SAAS,EAAC,OAAO;AAAAC,UAAAA,QAAA,EAC3BP,QAAAA;AAAQ,SACL,CACP,EACAD,aAAa,iBACZM,cAAA,CAACS,KAAK,EAAA;AAACR,UAAAA,SAAS,EAAC,eAAe;UAACS,IAAI,EAAEC,qBAAU,CAACC,UAAW;AAAAV,UAAAA,QAAA,EAC1DR,aAAAA;AAAa,SACT,CACR,CAAA;AAAA,OACE,CACL,EAACD,YAAY,iBACXO,cAAA,CAACa,MAAM,EAAA;AAACZ,QAAAA,SAAS,EAAC,OAAO;AAACa,QAAAA,OAAO,EAAEhB,OAAQ;AAAAI,QAAAA,QAAA,EACxCT,YAAAA;AAAY,OACP,CACT,CAAA;KACE,CAAA;AACP,GAAK,CAAC,CAAA;AAEV;;;;"}
@@ -1,20 +1,15 @@
1
1
  import { Document } from '@transferwise/icons';
2
2
  import Body from '../../../body/Body.mjs';
3
3
  import Button from '../../../button/Button.mjs';
4
- import StatusIcon from '../../../statusIcon/StatusIcon.mjs';
5
4
  import Title from '../../../title/Title.mjs';
6
- import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
7
- import { Sentiment } from '../../../common/propsValues/sentiment.mjs';
8
- import { Size } from '../../../common/propsValues/size.mjs';
5
+ import { jsx, jsxs } from 'react/jsx-runtime';
9
6
  import { Typography } from '../../../common/propsValues/typography.mjs';
10
7
 
11
8
  function CompleteStep({
12
9
  csButtonText,
13
- csFailureText,
14
10
  csSuccessText,
15
11
  fileName,
16
12
  isComplete,
17
- isError,
18
13
  isImage,
19
14
  onClear,
20
15
  uploadedImage
@@ -24,34 +19,24 @@ function CompleteStep({
24
19
  "aria-hidden": !isComplete,
25
20
  children: /*#__PURE__*/jsxs("div", {
26
21
  className: "droppable-card-content",
27
- children: [/*#__PURE__*/jsx("div", {
22
+ children: [/*#__PURE__*/jsxs("div", {
28
23
  className: "droppable-card-content d-flex flex-column align-items-center",
29
24
  "aria-live": "polite",
30
- children: isError ? /*#__PURE__*/jsxs(Fragment, {
31
- children: [/*#__PURE__*/jsx(StatusIcon, {
32
- size: Size.LARGE,
33
- sentiment: Sentiment.NEGATIVE
34
- }), csFailureText && /*#__PURE__*/jsx("p", {
35
- className: "m-t-2 m-b-0",
36
- children: csFailureText
37
- })]
38
- }) : /*#__PURE__*/jsxs(Fragment, {
39
- children: [isImage && uploadedImage ? /*#__PURE__*/jsx("img", {
40
- src: uploadedImage,
41
- alt: "OK",
42
- className: "thumbnail "
43
- }) : /*#__PURE__*/jsx(Document, {}), fileName && /*#__PURE__*/jsx(Body, {
44
- as: "p",
45
- className: "m-b-0",
46
- children: fileName
47
- }), csSuccessText && /*#__PURE__*/jsx(Title, {
48
- className: "caption m-t-1",
49
- type: Typography.TITLE_BODY,
50
- children: csSuccessText
51
- })]
52
- })
25
+ children: [isImage && uploadedImage ? /*#__PURE__*/jsx("img", {
26
+ src: uploadedImage,
27
+ alt: "OK",
28
+ className: "thumbnail "
29
+ }) : /*#__PURE__*/jsx(Document, {}), fileName && /*#__PURE__*/jsx(Body, {
30
+ as: "p",
31
+ className: "m-b-0",
32
+ children: fileName
33
+ }), csSuccessText && /*#__PURE__*/jsx(Title, {
34
+ className: "caption m-t-1",
35
+ type: Typography.TITLE_BODY,
36
+ children: csSuccessText
37
+ })]
53
38
  }), csButtonText && /*#__PURE__*/jsx(Button, {
54
- className: isError ? 'm-t-2' : 'm-t-1',
39
+ className: "m-t-1",
55
40
  onClick: onClear,
56
41
  children: csButtonText
57
42
  })]
@@ -1 +1 @@
1
- {"version":3,"file":"completeStep.mjs","sources":["../../../../src/upload/steps/completeStep/completeStep.tsx"],"sourcesContent":["import { Document as DocumentIcon } from '@transferwise/icons';\n\nimport { Typography } from '../../..';\nimport Body from '../../../body';\nimport Button from '../../../button';\nimport { Sentiment, Size } from '../../../common';\nimport StatusIcon from '../../../statusIcon';\nimport Title from '../../../title';\n\nexport interface CompleteStepProps {\n csButtonText: string;\n csSuccessText: string;\n csFailureText: string;\n fileName: string;\n isComplete: boolean;\n isError: boolean;\n isImage: boolean;\n uploadedImage?: string;\n onClear: React.MouseEventHandler<HTMLButtonElement>;\n}\n\nexport default function CompleteStep({\n csButtonText,\n csFailureText,\n csSuccessText,\n fileName,\n isComplete,\n isError,\n isImage,\n onClear,\n uploadedImage,\n}: CompleteStepProps) {\n return (\n <div className=\"droppable-complete-card droppable-card\" aria-hidden={!isComplete}>\n <div className=\"droppable-card-content\">\n <div\n className=\"droppable-card-content d-flex flex-column align-items-center\"\n aria-live=\"polite\"\n >\n {isError ? (\n <>\n <StatusIcon size={Size.LARGE} sentiment={Sentiment.NEGATIVE} />\n {csFailureText && <p className=\"m-t-2 m-b-0\">{csFailureText}</p>}\n </>\n ) : (\n <>\n {isImage && uploadedImage ? (\n <img src={uploadedImage} alt=\"OK\" className=\"thumbnail \" />\n ) : (\n <DocumentIcon />\n )}\n\n {fileName && (\n <Body as=\"p\" className=\"m-b-0\">\n {fileName}\n </Body>\n )}\n {csSuccessText && (\n <Title className=\"caption m-t-1\" type={Typography.TITLE_BODY}>\n {csSuccessText}\n </Title>\n )}\n </>\n )}\n </div>\n {csButtonText && (\n <Button className={isError ? 'm-t-2' : 'm-t-1'} onClick={onClear}>\n {csButtonText}\n </Button>\n )}\n </div>\n </div>\n );\n}\n"],"names":["CompleteStep","csButtonText","csFailureText","csSuccessText","fileName","isComplete","isError","isImage","onClear","uploadedImage","_jsx","className","children","_jsxs","_Fragment","StatusIcon","size","Size","LARGE","sentiment","Sentiment","NEGATIVE","src","alt","DocumentIcon","Body","as","Title","type","Typography","TITLE_BODY","Button","onClick"],"mappings":";;;;;;;;;;AAqBwB,SAAAA,YAAYA,CAAC;EACnCC,YAAY;EACZC,aAAa;EACbC,aAAa;EACbC,QAAQ;EACRC,UAAU;EACVC,OAAO;EACPC,OAAO;EACPC,OAAO;AACPC,EAAAA,aAAAA;AACkB,CAAA,EAAA;AAClB,EAAA,oBACEC,GAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,wCAAwC;AAAC,IAAA,aAAA,EAAa,CAACN,UAAW;AAAAO,IAAAA,QAAA,eAC/EC,IAAA,CAAA,KAAA,EAAA;AAAKF,MAAAA,SAAS,EAAC,wBAAwB;AAAAC,MAAAA,QAAA,gBACrCF,GAAA,CAAA,KAAA,EAAA;AACEC,QAAAA,SAAS,EAAC,8DAA8D;AACxE,QAAA,WAAA,EAAU,QAAQ;AAAAC,QAAAA,QAAA,EAEjBN,OAAO,gBACNO,IAAA,CAAAC,QAAA,EAAA;UAAAF,QAAA,EAAA,cACEF,GAAA,CAACK,UAAU,EAAA;YAACC,IAAI,EAAEC,IAAI,CAACC,KAAM;YAACC,SAAS,EAAEC,SAAS,CAACC,QAAAA;AAAS,WAC5D,CAAA,EAACnB,aAAa,iBAAIQ,GAAA,CAAA,GAAA,EAAA;AAAGC,YAAAA,SAAS,EAAC,aAAa;AAAAC,YAAAA,QAAA,EAAEV,aAAAA;AAAa,WAAI,CAAC,CAAA;AAAA,SAClE,CAAG,gBAEHW,IAAA,CAAAC,QAAA,EAAA;AAAAF,UAAAA,QAAA,EACGL,CAAAA,OAAO,IAAIE,aAAa,gBACvBC,GAAA,CAAA,KAAA,EAAA;AAAKY,YAAAA,GAAG,EAAEb,aAAc;AAACc,YAAAA,GAAG,EAAC,IAAI;AAACZ,YAAAA,SAAS,EAAC,YAAA;AAAY,WAAA,CAAG,gBAE3DD,GAAA,CAACc,QAAY,EAAA,EAAA,CACd,EAEApB,QAAQ,iBACPM,GAAA,CAACe,IAAI,EAAA;AAACC,YAAAA,EAAE,EAAC,GAAG;AAACf,YAAAA,SAAS,EAAC,OAAO;AAAAC,YAAAA,QAAA,EAC3BR,QAAAA;AAAQ,WACL,CACP,EACAD,aAAa,iBACZO,GAAA,CAACiB,KAAK,EAAA;AAAChB,YAAAA,SAAS,EAAC,eAAe;YAACiB,IAAI,EAAEC,UAAU,CAACC,UAAW;AAAAlB,YAAAA,QAAA,EAC1DT,aAAAA;AAAa,WACT,CACR,CAAA;SACH,CAAA;AACD,OACE,CACL,EAACF,YAAY,iBACXS,GAAA,CAACqB,MAAM,EAAA;AAACpB,QAAAA,SAAS,EAAEL,OAAO,GAAG,OAAO,GAAG,OAAQ;AAAC0B,QAAAA,OAAO,EAAExB,OAAQ;AAAAI,QAAAA,QAAA,EAC9DX,YAAAA;AAAY,OACP,CACT,CAAA;KACE,CAAA;AACP,GAAK,CAAC,CAAA;AAEV;;;;"}
1
+ {"version":3,"file":"completeStep.mjs","sources":["../../../../src/upload/steps/completeStep/completeStep.tsx"],"sourcesContent":["import { Document as DocumentIcon } from '@transferwise/icons';\n\nimport { Typography } from '../../..';\nimport Body from '../../../body';\nimport Button from '../../../button';\nimport Title from '../../../title';\n\nexport interface CompleteStepProps {\n csButtonText: string;\n csSuccessText: string;\n fileName: string;\n isComplete: boolean;\n isImage: boolean;\n uploadedImage?: string;\n onClear: React.MouseEventHandler<HTMLButtonElement>;\n}\n\nexport default function CompleteStep({\n csButtonText,\n csSuccessText,\n fileName,\n isComplete,\n isImage,\n onClear,\n uploadedImage,\n}: CompleteStepProps) {\n return (\n <div className=\"droppable-complete-card droppable-card\" aria-hidden={!isComplete}>\n <div className=\"droppable-card-content\">\n <div\n className=\"droppable-card-content d-flex flex-column align-items-center\"\n aria-live=\"polite\"\n >\n {isImage && uploadedImage ? (\n <img src={uploadedImage} alt=\"OK\" className=\"thumbnail \" />\n ) : (\n <DocumentIcon />\n )}\n\n {fileName && (\n <Body as=\"p\" className=\"m-b-0\">\n {fileName}\n </Body>\n )}\n {csSuccessText && (\n <Title className=\"caption m-t-1\" type={Typography.TITLE_BODY}>\n {csSuccessText}\n </Title>\n )}\n </div>\n {csButtonText && (\n <Button className=\"m-t-1\" onClick={onClear}>\n {csButtonText}\n </Button>\n )}\n </div>\n </div>\n );\n}\n"],"names":["CompleteStep","csButtonText","csSuccessText","fileName","isComplete","isImage","onClear","uploadedImage","_jsx","className","children","_jsxs","src","alt","DocumentIcon","Body","as","Title","type","Typography","TITLE_BODY","Button","onClick"],"mappings":";;;;;;;AAiBc,SAAUA,YAAYA,CAAC;EACnCC,YAAY;EACZC,aAAa;EACbC,QAAQ;EACRC,UAAU;EACVC,OAAO;EACPC,OAAO;AACPC,EAAAA,aAAAA;AACkB,CAAA,EAAA;AAClB,EAAA,oBACEC,GAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,wCAAwC;AAAC,IAAA,aAAA,EAAa,CAACL,UAAW;AAAAM,IAAAA,QAAA,eAC/EC,IAAA,CAAA,KAAA,EAAA;AAAKF,MAAAA,SAAS,EAAC,wBAAwB;AAAAC,MAAAA,QAAA,gBACrCC,IAAA,CAAA,KAAA,EAAA;AACEF,QAAAA,SAAS,EAAC,8DAA8D;AACxE,QAAA,WAAA,EAAU,QAAQ;AAAAC,QAAAA,QAAA,EAEjBL,CAAAA,OAAO,IAAIE,aAAa,gBACvBC,GAAA,CAAA,KAAA,EAAA;AAAKI,UAAAA,GAAG,EAAEL,aAAc;AAACM,UAAAA,GAAG,EAAC,IAAI;AAACJ,UAAAA,SAAS,EAAC,YAAA;AAAY,SAAA,CAAG,gBAE3DD,GAAA,CAACM,QAAY,EAAA,EAAA,CACd,EAEAX,QAAQ,iBACPK,GAAA,CAACO,IAAI,EAAA;AAACC,UAAAA,EAAE,EAAC,GAAG;AAACP,UAAAA,SAAS,EAAC,OAAO;AAAAC,UAAAA,QAAA,EAC3BP,QAAAA;AAAQ,SACL,CACP,EACAD,aAAa,iBACZM,GAAA,CAACS,KAAK,EAAA;AAACR,UAAAA,SAAS,EAAC,eAAe;UAACS,IAAI,EAAEC,UAAU,CAACC,UAAW;AAAAV,UAAAA,QAAA,EAC1DR,aAAAA;AAAa,SACT,CACR,CAAA;AAAA,OACE,CACL,EAACD,YAAY,iBACXO,GAAA,CAACa,MAAM,EAAA;AAACZ,QAAAA,SAAS,EAAC,OAAO;AAACa,QAAAA,OAAO,EAAEhB,OAAQ;AAAAI,QAAAA,QAAA,EACxCT,YAAAA;AAAY,OACP,CACT,CAAA;KACE,CAAA;AACP,GAAK,CAAC,CAAA;AAEV;;;;"}
@@ -2,7 +2,11 @@
2
2
 
3
3
  var icons = require('@transferwise/icons');
4
4
  var React = require('react');
5
+ var StatusIcon = require('../../../statusIcon/StatusIcon.js');
6
+ var InlineAlert = require('../../../inlineAlert/InlineAlert.js');
5
7
  var jsxRuntime = require('react/jsx-runtime');
8
+ var sentiment = require('../../../common/propsValues/sentiment.js');
9
+ var size = require('../../../common/propsValues/size.js');
6
10
 
7
11
  class UploadImageStep extends React.PureComponent {
8
12
  uploadInputRef = /*#__PURE__*/React.createRef();
@@ -20,6 +24,18 @@ class UploadImageStep extends React.PureComponent {
20
24
  usHelpImage,
21
25
  usLabel
22
26
  } = this.props;
27
+ const {
28
+ errorMessage
29
+ } = this.props;
30
+ if (errorMessage) {
31
+ return /*#__PURE__*/jsxRuntime.jsx("div", {
32
+ className: "d-flex flex-column align-items-center",
33
+ children: /*#__PURE__*/jsxRuntime.jsx(StatusIcon, {
34
+ size: size.Size.LARGE,
35
+ sentiment: sentiment.Sentiment.NEGATIVE
36
+ })
37
+ });
38
+ }
23
39
  if (!usHelpImage) {
24
40
  return /*#__PURE__*/jsxRuntime.jsx("div", {
25
41
  className: "circle circle-sm circle-inverse p-t-1",
@@ -44,41 +60,49 @@ class UploadImageStep extends React.PureComponent {
44
60
  usButtonText,
45
61
  usDisabled,
46
62
  usLabel,
47
- usPlaceholder
63
+ usPlaceholder,
64
+ errorMessage
48
65
  } = this.props;
49
66
  return /*#__PURE__*/jsxRuntime.jsx("div", {
50
- children: /*#__PURE__*/jsxRuntime.jsx("div", {
51
- className: "droppable-default-card",
52
- "aria-hidden": isComplete,
53
- children: /*#__PURE__*/jsxRuntime.jsxs("div", {
54
- className: "droppable-card-content",
55
- children: [/*#__PURE__*/jsxRuntime.jsx("div", {
56
- className: "m-b-3",
57
- children: this.getImage()
58
- }), usLabel && /*#__PURE__*/jsxRuntime.jsx("h4", {
59
- className: "np-text-title-body m-b-1",
60
- children: usLabel
61
- }), usPlaceholder && /*#__PURE__*/jsxRuntime.jsx("p", {
62
- className: "np-text-body-large m-b-3",
63
- children: String(usPlaceholder)
64
- }), /*#__PURE__*/jsxRuntime.jsxs("label", {
65
- className: `btn btn-primary btn-md ${usDisabled ? 'disabled' : ''}`,
66
- children: [usButtonText ? /*#__PURE__*/jsxRuntime.jsx("span", {
67
- children: usButtonText
68
- }) : /*#__PURE__*/jsxRuntime.jsx(icons.Upload, {
69
- size: 24,
70
- className: "m-r-0"
71
- }), /*#__PURE__*/jsxRuntime.jsx("input", {
72
- ref: this.uploadInputRef,
73
- type: "file",
74
- accept: usAccept === '*' ? undefined : usAccept,
75
- className: "tw-droppable-input hidden",
76
- disabled: usDisabled,
77
- name: "file-upload",
78
- onChange: () => this.onManualUpload()
79
- })]
67
+ className: "droppable-default-card",
68
+ "aria-hidden": isComplete,
69
+ children: /*#__PURE__*/jsxRuntime.jsxs("div", {
70
+ className: "droppable-card-content",
71
+ children: [/*#__PURE__*/jsxRuntime.jsx("div", {
72
+ className: "m-b-3",
73
+ children: this.getImage()
74
+ }), usLabel && /*#__PURE__*/jsxRuntime.jsx("h4", {
75
+ className: "np-text-title-body m-b-1",
76
+ children: usLabel
77
+ }), usPlaceholder && /*#__PURE__*/jsxRuntime.jsx("p", {
78
+ className: "np-text-body-large m-b-3",
79
+ children: String(usPlaceholder)
80
+ }), /*#__PURE__*/jsxRuntime.jsxs("label", {
81
+ className: `btn btn-primary btn-md ${usDisabled ? 'disabled' : ''}`,
82
+ children: [usButtonText ? /*#__PURE__*/jsxRuntime.jsx("span", {
83
+ children: usButtonText
84
+ }) : /*#__PURE__*/jsxRuntime.jsx(icons.Upload, {
85
+ size: 24,
86
+ className: "m-r-0"
87
+ }), /*#__PURE__*/jsxRuntime.jsx("input", {
88
+ ref: this.uploadInputRef,
89
+ type: "file",
90
+ accept: usAccept === '*' ? undefined : usAccept,
91
+ className: "tw-droppable-input hidden",
92
+ disabled: usDisabled,
93
+ name: "file-upload",
94
+ onChange: () => this.onManualUpload()
80
95
  })]
81
- })
96
+ }), errorMessage && /*#__PURE__*/jsxRuntime.jsx("div", {
97
+ className: "upload-error-message",
98
+ children: /*#__PURE__*/jsxRuntime.jsx("div", {
99
+ className: "m-t-3 has-error",
100
+ children: /*#__PURE__*/jsxRuntime.jsx(InlineAlert, {
101
+ type: sentiment.Sentiment.NEGATIVE,
102
+ children: errorMessage
103
+ })
104
+ })
105
+ })]
82
106
  })
83
107
  });
84
108
  }
@@ -1 +1 @@
1
- {"version":3,"file":"uploadImageStep.js","sources":["../../../../src/upload/steps/uploadImageStep/uploadImageStep.tsx"],"sourcesContent":["import { Upload as UploadIcon } from '@transferwise/icons';\nimport { createRef, PureComponent } from 'react';\n\nexport interface UploadImageStepProps {\n fileDropped: (file: File) => void;\n isComplete: boolean;\n usAccept: string;\n usButtonText: string;\n usDisabled: boolean;\n usHelpImage: React.ReactNode;\n usLabel: string;\n usPlaceholder: string;\n}\n\nexport default class UploadImageStep extends PureComponent<UploadImageStepProps> {\n uploadInputRef = createRef<HTMLInputElement>();\n\n onManualUpload = () => {\n const { fileDropped } = this.props;\n const file = this.uploadInputRef.current?.files?.[0];\n if (file != null) {\n fileDropped(file);\n }\n };\n\n getImage = () => {\n const { usHelpImage, usLabel } = this.props;\n\n if (!usHelpImage) {\n return (\n <div className=\"circle circle-sm circle-inverse p-t-1\">\n <UploadIcon size={24} />\n </div>\n );\n }\n\n if (typeof usHelpImage === 'string') {\n return <img src={usHelpImage} alt={usLabel} className=\"thumbnail text-xs-center\" />;\n }\n\n return usHelpImage;\n };\n\n render() {\n const { isComplete, usAccept, usButtonText, usDisabled, usLabel, usPlaceholder } = this.props;\n\n return (\n <div>\n <div className=\"droppable-default-card\" aria-hidden={isComplete}>\n <div className=\"droppable-card-content\">\n <div className=\"m-b-3\">{this.getImage()}</div>\n {usLabel && <h4 className=\"np-text-title-body m-b-1\">{usLabel}</h4>}\n {usPlaceholder && <p className=\"np-text-body-large m-b-3\">{String(usPlaceholder)}</p>}\n <label className={`btn btn-primary btn-md ${usDisabled ? 'disabled' : ''}`}>\n {usButtonText ? (\n <span>{usButtonText}</span>\n ) : (\n <UploadIcon size={24} className=\"m-r-0\" />\n )}\n <input\n ref={this.uploadInputRef}\n type=\"file\"\n accept={usAccept === '*' ? undefined : usAccept}\n className=\"tw-droppable-input hidden\"\n disabled={usDisabled}\n name=\"file-upload\"\n onChange={() => this.onManualUpload()}\n />\n </label>\n </div>\n </div>\n </div>\n );\n }\n}\n"],"names":["UploadImageStep","PureComponent","uploadInputRef","createRef","onManualUpload","fileDropped","props","file","current","files","getImage","usHelpImage","usLabel","_jsx","className","children","UploadIcon","size","src","alt","render","isComplete","usAccept","usButtonText","usDisabled","usPlaceholder","_jsxs","String","ref","type","accept","undefined","disabled","name","onChange"],"mappings":"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"}
1
+ {"version":3,"file":"uploadImageStep.js","sources":["../../../../src/upload/steps/uploadImageStep/uploadImageStep.tsx"],"sourcesContent":["import { Upload as UploadIcon } from '@transferwise/icons';\nimport { createRef, PureComponent } from 'react';\nimport StatusIcon from '../../../statusIcon';\nimport { Sentiment, Size } from '../../../common';\nimport InlineAlert from '../../../inlineAlert';\n\nexport interface UploadImageStepProps {\n fileDropped: (file: File) => void;\n isComplete: boolean;\n usAccept: string;\n usButtonText: string;\n usDisabled: boolean;\n usHelpImage: React.ReactNode;\n usLabel: string;\n usPlaceholder: string;\n errorMessage?: string | string[];\n}\n\nexport default class UploadImageStep extends PureComponent<UploadImageStepProps> {\n uploadInputRef = createRef<HTMLInputElement>();\n\n onManualUpload = () => {\n const { fileDropped } = this.props;\n const file = this.uploadInputRef.current?.files?.[0];\n if (file != null) {\n fileDropped(file);\n }\n };\n\n getImage = () => {\n const { usHelpImage, usLabel } = this.props;\n const { errorMessage } = this.props;\n\n if (errorMessage) {\n return (\n <div className=\"d-flex flex-column align-items-center\">\n <StatusIcon size={Size.LARGE} sentiment={Sentiment.NEGATIVE} />\n </div>\n );\n }\n\n if (!usHelpImage) {\n return (\n <div className=\"circle circle-sm circle-inverse p-t-1\">\n <UploadIcon size={24} />\n </div>\n );\n }\n\n if (typeof usHelpImage === 'string') {\n return <img src={usHelpImage} alt={usLabel} className=\"thumbnail text-xs-center\" />;\n }\n\n return usHelpImage;\n };\n\n render() {\n const { isComplete, usAccept, usButtonText, usDisabled, usLabel, usPlaceholder, errorMessage } =\n this.props;\n\n return (\n <div className=\"droppable-default-card\" aria-hidden={isComplete}>\n <div className=\"droppable-card-content\">\n <div className=\"m-b-3\">{this.getImage()}</div>\n {usLabel && <h4 className=\"np-text-title-body m-b-1\">{usLabel}</h4>}\n {usPlaceholder && <p className=\"np-text-body-large m-b-3\">{String(usPlaceholder)}</p>}\n <label className={`btn btn-primary btn-md ${usDisabled ? 'disabled' : ''}`}>\n {usButtonText ? (\n <span>{usButtonText}</span>\n ) : (\n <UploadIcon size={24} className=\"m-r-0\" />\n )}\n <input\n ref={this.uploadInputRef}\n type=\"file\"\n accept={usAccept === '*' ? undefined : usAccept}\n className=\"tw-droppable-input hidden\"\n disabled={usDisabled}\n name=\"file-upload\"\n onChange={() => this.onManualUpload()}\n />\n </label>\n {errorMessage && (\n <div className=\"upload-error-message\">\n <div className=\"m-t-3 has-error\">\n <InlineAlert type={Sentiment.NEGATIVE}>{errorMessage}</InlineAlert>\n </div>\n </div>\n )}\n </div>\n </div>\n );\n }\n}\n"],"names":["UploadImageStep","PureComponent","uploadInputRef","createRef","onManualUpload","fileDropped","props","file","current","files","getImage","usHelpImage","usLabel","errorMessage","_jsx","className","children","StatusIcon","size","Size","LARGE","sentiment","Sentiment","NEGATIVE","UploadIcon","src","alt","render","isComplete","usAccept","usButtonText","usDisabled","usPlaceholder","_jsxs","String","ref","type","accept","undefined","disabled","name","onChange","InlineAlert"],"mappings":"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"}
@@ -1,6 +1,10 @@
1
1
  import { Upload } from '@transferwise/icons';
2
2
  import { PureComponent, createRef } from 'react';
3
+ import StatusIcon from '../../../statusIcon/StatusIcon.mjs';
4
+ import InlineAlert from '../../../inlineAlert/InlineAlert.mjs';
3
5
  import { jsx, jsxs } from 'react/jsx-runtime';
6
+ import { Sentiment } from '../../../common/propsValues/sentiment.mjs';
7
+ import { Size } from '../../../common/propsValues/size.mjs';
4
8
 
5
9
  class UploadImageStep extends PureComponent {
6
10
  uploadInputRef = /*#__PURE__*/createRef();
@@ -18,6 +22,18 @@ class UploadImageStep extends PureComponent {
18
22
  usHelpImage,
19
23
  usLabel
20
24
  } = this.props;
25
+ const {
26
+ errorMessage
27
+ } = this.props;
28
+ if (errorMessage) {
29
+ return /*#__PURE__*/jsx("div", {
30
+ className: "d-flex flex-column align-items-center",
31
+ children: /*#__PURE__*/jsx(StatusIcon, {
32
+ size: Size.LARGE,
33
+ sentiment: Sentiment.NEGATIVE
34
+ })
35
+ });
36
+ }
21
37
  if (!usHelpImage) {
22
38
  return /*#__PURE__*/jsx("div", {
23
39
  className: "circle circle-sm circle-inverse p-t-1",
@@ -42,41 +58,49 @@ class UploadImageStep extends PureComponent {
42
58
  usButtonText,
43
59
  usDisabled,
44
60
  usLabel,
45
- usPlaceholder
61
+ usPlaceholder,
62
+ errorMessage
46
63
  } = this.props;
47
64
  return /*#__PURE__*/jsx("div", {
48
- children: /*#__PURE__*/jsx("div", {
49
- className: "droppable-default-card",
50
- "aria-hidden": isComplete,
51
- children: /*#__PURE__*/jsxs("div", {
52
- className: "droppable-card-content",
53
- children: [/*#__PURE__*/jsx("div", {
54
- className: "m-b-3",
55
- children: this.getImage()
56
- }), usLabel && /*#__PURE__*/jsx("h4", {
57
- className: "np-text-title-body m-b-1",
58
- children: usLabel
59
- }), usPlaceholder && /*#__PURE__*/jsx("p", {
60
- className: "np-text-body-large m-b-3",
61
- children: String(usPlaceholder)
62
- }), /*#__PURE__*/jsxs("label", {
63
- className: `btn btn-primary btn-md ${usDisabled ? 'disabled' : ''}`,
64
- children: [usButtonText ? /*#__PURE__*/jsx("span", {
65
- children: usButtonText
66
- }) : /*#__PURE__*/jsx(Upload, {
67
- size: 24,
68
- className: "m-r-0"
69
- }), /*#__PURE__*/jsx("input", {
70
- ref: this.uploadInputRef,
71
- type: "file",
72
- accept: usAccept === '*' ? undefined : usAccept,
73
- className: "tw-droppable-input hidden",
74
- disabled: usDisabled,
75
- name: "file-upload",
76
- onChange: () => this.onManualUpload()
77
- })]
65
+ className: "droppable-default-card",
66
+ "aria-hidden": isComplete,
67
+ children: /*#__PURE__*/jsxs("div", {
68
+ className: "droppable-card-content",
69
+ children: [/*#__PURE__*/jsx("div", {
70
+ className: "m-b-3",
71
+ children: this.getImage()
72
+ }), usLabel && /*#__PURE__*/jsx("h4", {
73
+ className: "np-text-title-body m-b-1",
74
+ children: usLabel
75
+ }), usPlaceholder && /*#__PURE__*/jsx("p", {
76
+ className: "np-text-body-large m-b-3",
77
+ children: String(usPlaceholder)
78
+ }), /*#__PURE__*/jsxs("label", {
79
+ className: `btn btn-primary btn-md ${usDisabled ? 'disabled' : ''}`,
80
+ children: [usButtonText ? /*#__PURE__*/jsx("span", {
81
+ children: usButtonText
82
+ }) : /*#__PURE__*/jsx(Upload, {
83
+ size: 24,
84
+ className: "m-r-0"
85
+ }), /*#__PURE__*/jsx("input", {
86
+ ref: this.uploadInputRef,
87
+ type: "file",
88
+ accept: usAccept === '*' ? undefined : usAccept,
89
+ className: "tw-droppable-input hidden",
90
+ disabled: usDisabled,
91
+ name: "file-upload",
92
+ onChange: () => this.onManualUpload()
78
93
  })]
79
- })
94
+ }), errorMessage && /*#__PURE__*/jsx("div", {
95
+ className: "upload-error-message",
96
+ children: /*#__PURE__*/jsx("div", {
97
+ className: "m-t-3 has-error",
98
+ children: /*#__PURE__*/jsx(InlineAlert, {
99
+ type: Sentiment.NEGATIVE,
100
+ children: errorMessage
101
+ })
102
+ })
103
+ })]
80
104
  })
81
105
  });
82
106
  }
@@ -1 +1 @@
1
- {"version":3,"file":"uploadImageStep.mjs","sources":["../../../../src/upload/steps/uploadImageStep/uploadImageStep.tsx"],"sourcesContent":["import { Upload as UploadIcon } from '@transferwise/icons';\nimport { createRef, PureComponent } from 'react';\n\nexport interface UploadImageStepProps {\n fileDropped: (file: File) => void;\n isComplete: boolean;\n usAccept: string;\n usButtonText: string;\n usDisabled: boolean;\n usHelpImage: React.ReactNode;\n usLabel: string;\n usPlaceholder: string;\n}\n\nexport default class UploadImageStep extends PureComponent<UploadImageStepProps> {\n uploadInputRef = createRef<HTMLInputElement>();\n\n onManualUpload = () => {\n const { fileDropped } = this.props;\n const file = this.uploadInputRef.current?.files?.[0];\n if (file != null) {\n fileDropped(file);\n }\n };\n\n getImage = () => {\n const { usHelpImage, usLabel } = this.props;\n\n if (!usHelpImage) {\n return (\n <div className=\"circle circle-sm circle-inverse p-t-1\">\n <UploadIcon size={24} />\n </div>\n );\n }\n\n if (typeof usHelpImage === 'string') {\n return <img src={usHelpImage} alt={usLabel} className=\"thumbnail text-xs-center\" />;\n }\n\n return usHelpImage;\n };\n\n render() {\n const { isComplete, usAccept, usButtonText, usDisabled, usLabel, usPlaceholder } = this.props;\n\n return (\n <div>\n <div className=\"droppable-default-card\" aria-hidden={isComplete}>\n <div className=\"droppable-card-content\">\n <div className=\"m-b-3\">{this.getImage()}</div>\n {usLabel && <h4 className=\"np-text-title-body m-b-1\">{usLabel}</h4>}\n {usPlaceholder && <p className=\"np-text-body-large m-b-3\">{String(usPlaceholder)}</p>}\n <label className={`btn btn-primary btn-md ${usDisabled ? 'disabled' : ''}`}>\n {usButtonText ? (\n <span>{usButtonText}</span>\n ) : (\n <UploadIcon size={24} className=\"m-r-0\" />\n )}\n <input\n ref={this.uploadInputRef}\n type=\"file\"\n accept={usAccept === '*' ? undefined : usAccept}\n className=\"tw-droppable-input hidden\"\n disabled={usDisabled}\n name=\"file-upload\"\n onChange={() => this.onManualUpload()}\n />\n </label>\n </div>\n </div>\n </div>\n );\n }\n}\n"],"names":["UploadImageStep","PureComponent","uploadInputRef","createRef","onManualUpload","fileDropped","props","file","current","files","getImage","usHelpImage","usLabel","_jsx","className","children","UploadIcon","size","src","alt","render","isComplete","usAccept","usButtonText","usDisabled","usPlaceholder","_jsxs","String","ref","type","accept","undefined","disabled","name","onChange"],"mappings":"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"}
1
+ {"version":3,"file":"uploadImageStep.mjs","sources":["../../../../src/upload/steps/uploadImageStep/uploadImageStep.tsx"],"sourcesContent":["import { Upload as UploadIcon } from '@transferwise/icons';\nimport { createRef, PureComponent } from 'react';\nimport StatusIcon from '../../../statusIcon';\nimport { Sentiment, Size } from '../../../common';\nimport InlineAlert from '../../../inlineAlert';\n\nexport interface UploadImageStepProps {\n fileDropped: (file: File) => void;\n isComplete: boolean;\n usAccept: string;\n usButtonText: string;\n usDisabled: boolean;\n usHelpImage: React.ReactNode;\n usLabel: string;\n usPlaceholder: string;\n errorMessage?: string | string[];\n}\n\nexport default class UploadImageStep extends PureComponent<UploadImageStepProps> {\n uploadInputRef = createRef<HTMLInputElement>();\n\n onManualUpload = () => {\n const { fileDropped } = this.props;\n const file = this.uploadInputRef.current?.files?.[0];\n if (file != null) {\n fileDropped(file);\n }\n };\n\n getImage = () => {\n const { usHelpImage, usLabel } = this.props;\n const { errorMessage } = this.props;\n\n if (errorMessage) {\n return (\n <div className=\"d-flex flex-column align-items-center\">\n <StatusIcon size={Size.LARGE} sentiment={Sentiment.NEGATIVE} />\n </div>\n );\n }\n\n if (!usHelpImage) {\n return (\n <div className=\"circle circle-sm circle-inverse p-t-1\">\n <UploadIcon size={24} />\n </div>\n );\n }\n\n if (typeof usHelpImage === 'string') {\n return <img src={usHelpImage} alt={usLabel} className=\"thumbnail text-xs-center\" />;\n }\n\n return usHelpImage;\n };\n\n render() {\n const { isComplete, usAccept, usButtonText, usDisabled, usLabel, usPlaceholder, errorMessage } =\n this.props;\n\n return (\n <div className=\"droppable-default-card\" aria-hidden={isComplete}>\n <div className=\"droppable-card-content\">\n <div className=\"m-b-3\">{this.getImage()}</div>\n {usLabel && <h4 className=\"np-text-title-body m-b-1\">{usLabel}</h4>}\n {usPlaceholder && <p className=\"np-text-body-large m-b-3\">{String(usPlaceholder)}</p>}\n <label className={`btn btn-primary btn-md ${usDisabled ? 'disabled' : ''}`}>\n {usButtonText ? (\n <span>{usButtonText}</span>\n ) : (\n <UploadIcon size={24} className=\"m-r-0\" />\n )}\n <input\n ref={this.uploadInputRef}\n type=\"file\"\n accept={usAccept === '*' ? undefined : usAccept}\n className=\"tw-droppable-input hidden\"\n disabled={usDisabled}\n name=\"file-upload\"\n onChange={() => this.onManualUpload()}\n />\n </label>\n {errorMessage && (\n <div className=\"upload-error-message\">\n <div className=\"m-t-3 has-error\">\n <InlineAlert type={Sentiment.NEGATIVE}>{errorMessage}</InlineAlert>\n </div>\n </div>\n )}\n </div>\n </div>\n );\n }\n}\n"],"names":["UploadImageStep","PureComponent","uploadInputRef","createRef","onManualUpload","fileDropped","props","file","current","files","getImage","usHelpImage","usLabel","errorMessage","_jsx","className","children","StatusIcon","size","Size","LARGE","sentiment","Sentiment","NEGATIVE","UploadIcon","src","alt","render","isComplete","usAccept","usButtonText","usDisabled","usPlaceholder","_jsxs","String","ref","type","accept","undefined","disabled","name","onChange","InlineAlert"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@transferwise/components",
3
- "version": "46.53.0",
3
+ "version": "46.54.0",
4
4
  "description": "Neptune React components",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -93,7 +93,7 @@
93
93
  "rollup-preserve-directives": "^1.1.1",
94
94
  "storybook": "^8.2.2",
95
95
  "@transferwise/less-config": "3.1.0",
96
- "@transferwise/neptune-css": "14.13.0",
96
+ "@transferwise/neptune-css": "14.13.1",
97
97
  "@wise/components-theming": "1.5.0"
98
98
  },
99
99
  "peerDependencies": {
package/src/i18n/en.json CHANGED
@@ -36,6 +36,7 @@
36
36
  "neptune.Upload.csWrongTypeMessage": "File type not supported. Please try again with a different file",
37
37
  "neptune.Upload.psButtonText": "Cancel",
38
38
  "neptune.Upload.psProcessingText": "Uploading...",
39
+ "neptune.Upload.retry": "Retry",
39
40
  "neptune.Upload.usButtonText": "Or select a file",
40
41
  "neptune.Upload.usDropMessage": "Drop file to start upload",
41
42
  "neptune.Upload.usPlaceholder": "Drag and drop a file less than {maxSize}MB",
package/src/main.css CHANGED
@@ -5440,6 +5440,16 @@ html:not([dir="rtl"]) .np-navigation-option {
5440
5440
  .tw-droppable-sm {
5441
5441
  min-height: 245px;
5442
5442
  }
5443
+ .upload-error-message {
5444
+ margin-top: 24px;
5445
+ margin-top: var(--padding-medium);
5446
+ border-top: 1px solid rgba(0,0,0,0.10196);
5447
+ border-top: 1px solid var(--color-border-neutral);
5448
+ text-align: start;
5449
+ }
5450
+ .upload-error-message .alert {
5451
+ min-width: 100px;
5452
+ }
5443
5453
  .np-upload-button-container {
5444
5454
  border-style: solid;
5445
5455
  }
@@ -13,3 +13,13 @@
13
13
  .tw-droppable-sm {
14
14
  min-height: 245px;
15
15
  }
16
+ .upload-error-message {
17
+ margin-top: 24px;
18
+ margin-top: var(--padding-medium);
19
+ border-top: 1px solid rgba(0,0,0,0.10196);
20
+ border-top: 1px solid var(--color-border-neutral);
21
+ text-align: start;
22
+ }
23
+ .upload-error-message .alert {
24
+ min-width: 100px;
25
+ }
@@ -19,3 +19,12 @@
19
19
  .tw-droppable-sm {
20
20
  min-height: 245px;
21
21
  }
22
+
23
+ .upload-error-message {
24
+ margin-top: var(--padding-medium);
25
+ border-top: 1px solid var(--color-border-neutral);
26
+ text-align: start;
27
+ .alert {
28
+ min-width: 100px;
29
+ }
30
+ }
@@ -41,4 +41,8 @@ export default defineMessages({
41
41
  id: 'neptune.Upload.usPlaceholder',
42
42
  defaultMessage: 'Drag and drop a file less than {maxSize}MB',
43
43
  },
44
+ retry: {
45
+ id: 'neptune.Upload.retry',
46
+ defaultMessage: 'Retry',
47
+ },
44
48
  });
@@ -46,6 +46,7 @@ const props = {
46
46
  psProcessingText: 'psProcessingText',
47
47
  usAccept: 'image/*',
48
48
  usButtonText: 'Or Select File',
49
+ usButtonRetryText: 'Try again',
49
50
  usDropMessage: 'Drop file to start upload',
50
51
  usPlaceholder: 'Drag and drop a file less than 5MB',
51
52
  };
@@ -231,7 +232,7 @@ describe('Upload', () => {
231
232
  expect(component.find(CompleteStep)).toHaveLength(1);
232
233
  });
233
234
 
234
- it('step CompleteStep is called with error props', async () => {
235
+ it('step UploadImageStep is called with error props', async () => {
235
236
  component = mount(<Upload {...props} />);
236
237
  const upload = component.children();
237
238
  asyncFileRead.mockImplementation(async () => {
@@ -244,12 +245,12 @@ describe('Upload', () => {
244
245
  await waitForUpload();
245
246
  component.update();
246
247
 
247
- expect(component.find(CompleteStep).props()).toStrictEqual({
248
- ...COMPLETED_STEP_PROPS,
249
- isImage: false,
250
- isComplete: true,
251
- isError: true,
252
- uploadedImage: undefined,
248
+ expect(component.find(UploadImageStep).props()).toStrictEqual({
249
+ ...UPLOADIMAGE_STEP_PROPS,
250
+ isComplete: false,
251
+ errorMessage: 'csFailureText',
252
+ usButtonText: 'Try again',
253
+ usHelpImage: null,
253
254
  });
254
255
  });
255
256
 
@@ -6,6 +6,7 @@ import { MAX_SIZE_DEFAULT } from './Upload';
6
6
 
7
7
  const meta = {
8
8
  component: Upload,
9
+ title: 'Forms/Upload',
9
10
  tags: ['autodocs'],
10
11
  argTypes: {
11
12
  maxSize: {