@transferwise/components 0.0.0-experimental-d1cefe3 → 0.0.0-experimental-548b806

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 (195) hide show
  1. package/build/dateInput/DateInput.js +4 -4
  2. package/build/dateInput/DateInput.js.map +1 -1
  3. package/build/dateInput/DateInput.mjs +4 -4
  4. package/build/dateInput/DateInput.mjs.map +1 -1
  5. package/build/dateLookup/DateLookup.js +4 -4
  6. package/build/dateLookup/DateLookup.js.map +1 -1
  7. package/build/dateLookup/DateLookup.mjs +4 -4
  8. package/build/dateLookup/DateLookup.mjs.map +1 -1
  9. package/build/dateLookup/dayCalendar/table/DayCalendarTable.js +3 -3
  10. package/build/dateLookup/dayCalendar/table/DayCalendarTable.js.map +1 -1
  11. package/build/dateLookup/dayCalendar/table/DayCalendarTable.mjs +3 -3
  12. package/build/dateLookup/dayCalendar/table/DayCalendarTable.mjs.map +1 -1
  13. package/build/i18n/cs.json +2 -0
  14. package/build/i18n/cs.json.js +2 -0
  15. package/build/i18n/cs.json.js.map +1 -1
  16. package/build/i18n/cs.json.mjs +2 -0
  17. package/build/i18n/cs.json.mjs.map +1 -1
  18. package/build/i18n/de.json +2 -0
  19. package/build/i18n/de.json.js +2 -0
  20. package/build/i18n/de.json.js.map +1 -1
  21. package/build/i18n/de.json.mjs +2 -0
  22. package/build/i18n/de.json.mjs.map +1 -1
  23. package/build/i18n/es.json +2 -0
  24. package/build/i18n/es.json.js +2 -0
  25. package/build/i18n/es.json.js.map +1 -1
  26. package/build/i18n/es.json.mjs +2 -0
  27. package/build/i18n/es.json.mjs.map +1 -1
  28. package/build/i18n/fr.json +2 -0
  29. package/build/i18n/fr.json.js +2 -0
  30. package/build/i18n/fr.json.js.map +1 -1
  31. package/build/i18n/fr.json.mjs +2 -0
  32. package/build/i18n/fr.json.mjs.map +1 -1
  33. package/build/i18n/hu.json +2 -0
  34. package/build/i18n/hu.json.js +2 -0
  35. package/build/i18n/hu.json.js.map +1 -1
  36. package/build/i18n/hu.json.mjs +2 -0
  37. package/build/i18n/hu.json.mjs.map +1 -1
  38. package/build/i18n/id.json +2 -0
  39. package/build/i18n/id.json.js +2 -0
  40. package/build/i18n/id.json.js.map +1 -1
  41. package/build/i18n/id.json.mjs +2 -0
  42. package/build/i18n/id.json.mjs.map +1 -1
  43. package/build/i18n/it.json +2 -0
  44. package/build/i18n/it.json.js +2 -0
  45. package/build/i18n/it.json.js.map +1 -1
  46. package/build/i18n/it.json.mjs +2 -0
  47. package/build/i18n/it.json.mjs.map +1 -1
  48. package/build/i18n/ja.json +2 -0
  49. package/build/i18n/ja.json.js +2 -0
  50. package/build/i18n/ja.json.js.map +1 -1
  51. package/build/i18n/ja.json.mjs +2 -0
  52. package/build/i18n/ja.json.mjs.map +1 -1
  53. package/build/i18n/nl.json +2 -0
  54. package/build/i18n/pl.json +2 -0
  55. package/build/i18n/pl.json.js +2 -0
  56. package/build/i18n/pl.json.js.map +1 -1
  57. package/build/i18n/pl.json.mjs +2 -0
  58. package/build/i18n/pl.json.mjs.map +1 -1
  59. package/build/i18n/pt.json +2 -0
  60. package/build/i18n/pt.json.js +2 -0
  61. package/build/i18n/pt.json.js.map +1 -1
  62. package/build/i18n/pt.json.mjs +2 -0
  63. package/build/i18n/pt.json.mjs.map +1 -1
  64. package/build/i18n/ro.json +2 -0
  65. package/build/i18n/ro.json.js +2 -0
  66. package/build/i18n/ro.json.js.map +1 -1
  67. package/build/i18n/ro.json.mjs +2 -0
  68. package/build/i18n/ro.json.mjs.map +1 -1
  69. package/build/i18n/ru.json +2 -0
  70. package/build/i18n/ru.json.js +2 -0
  71. package/build/i18n/ru.json.js.map +1 -1
  72. package/build/i18n/ru.json.mjs +2 -0
  73. package/build/i18n/ru.json.mjs.map +1 -1
  74. package/build/i18n/th.json +2 -0
  75. package/build/i18n/th.json.js +2 -0
  76. package/build/i18n/th.json.js.map +1 -1
  77. package/build/i18n/th.json.mjs +2 -0
  78. package/build/i18n/th.json.mjs.map +1 -1
  79. package/build/i18n/tr.json +2 -0
  80. package/build/i18n/tr.json.js +2 -0
  81. package/build/i18n/tr.json.js.map +1 -1
  82. package/build/i18n/tr.json.mjs +2 -0
  83. package/build/i18n/tr.json.mjs.map +1 -1
  84. package/build/i18n/zh-CN.json +2 -0
  85. package/build/i18n/zh-CN.json.js +2 -0
  86. package/build/i18n/zh-CN.json.js.map +1 -1
  87. package/build/i18n/zh-CN.json.mjs +2 -0
  88. package/build/i18n/zh-CN.json.mjs.map +1 -1
  89. package/build/i18n/zh-HK.json +2 -0
  90. package/build/i18n/zh-HK.json.js +2 -0
  91. package/build/i18n/zh-HK.json.js.map +1 -1
  92. package/build/i18n/zh-HK.json.mjs +2 -0
  93. package/build/i18n/zh-HK.json.mjs.map +1 -1
  94. package/build/index.js +1 -0
  95. package/build/index.js.map +1 -1
  96. package/build/index.mjs +1 -1
  97. package/build/main.css +224 -13
  98. package/build/moneyInput/MoneyInput.js +2 -2
  99. package/build/moneyInput/MoneyInput.js.map +1 -1
  100. package/build/moneyInput/MoneyInput.mjs +2 -2
  101. package/build/moneyInput/MoneyInput.mjs.map +1 -1
  102. package/build/snackbar/Snackbar.js +1 -1
  103. package/build/snackbar/Snackbar.js.map +1 -1
  104. package/build/snackbar/Snackbar.mjs +1 -1
  105. package/build/snackbar/Snackbar.mjs.map +1 -1
  106. package/build/styles/dateInput/DateInput.css +1 -13
  107. package/build/styles/listItem/ListItem.css +223 -0
  108. package/build/styles/main.css +224 -13
  109. package/build/tabs/Tabs.js +3 -3
  110. package/build/tabs/Tabs.js.map +1 -1
  111. package/build/tabs/Tabs.mjs +3 -3
  112. package/build/tabs/Tabs.mjs.map +1 -1
  113. package/build/typeahead/Typeahead.js +2 -2
  114. package/build/typeahead/Typeahead.js.map +1 -1
  115. package/build/typeahead/Typeahead.mjs +2 -2
  116. package/build/typeahead/Typeahead.mjs.map +1 -1
  117. package/build/typeahead/typeaheadInput/TypeaheadInput.js +2 -2
  118. package/build/typeahead/typeaheadInput/TypeaheadInput.js.map +1 -1
  119. package/build/typeahead/typeaheadInput/TypeaheadInput.mjs +2 -2
  120. package/build/typeahead/typeaheadInput/TypeaheadInput.mjs.map +1 -1
  121. package/build/types/index.d.ts +2 -0
  122. package/build/types/index.d.ts.map +1 -1
  123. package/build/types/listItem/ListItem.d.ts +50 -0
  124. package/build/types/listItem/ListItem.d.ts.map +1 -0
  125. package/build/types/listItem/ListItemAdditionalInfo.d.ts +9 -0
  126. package/build/types/listItem/ListItemAdditionalInfo.d.ts.map +1 -0
  127. package/build/types/listItem/ListItemButton.d.ts +6 -0
  128. package/build/types/listItem/ListItemButton.d.ts.map +1 -0
  129. package/build/types/listItem/ListItemCheckbox.d.ts +4 -0
  130. package/build/types/listItem/ListItemCheckbox.d.ts.map +1 -0
  131. package/build/types/listItem/ListItemIconButton.d.ts +8 -0
  132. package/build/types/listItem/ListItemIconButton.d.ts.map +1 -0
  133. package/build/types/listItem/ListItemMedia.d.ts +19 -0
  134. package/build/types/listItem/ListItemMedia.d.ts.map +1 -0
  135. package/build/types/listItem/ListItemNavigation.d.ts +4 -0
  136. package/build/types/listItem/ListItemNavigation.d.ts.map +1 -0
  137. package/build/types/listItem/ListItemSwitch.d.ts +3 -0
  138. package/build/types/listItem/ListItemSwitch.d.ts.map +1 -0
  139. package/build/types/listItem/index.d.ts +6 -0
  140. package/build/types/listItem/index.d.ts.map +1 -0
  141. package/build/types/listItem/prompt/Prompt.d.ts +12 -0
  142. package/build/types/listItem/prompt/Prompt.d.ts.map +1 -0
  143. package/build/types/listItem/useItemControl.d.ts +5 -0
  144. package/build/types/listItem/useItemControl.d.ts.map +1 -0
  145. package/build/upload/Upload.js +2 -2
  146. package/build/upload/Upload.js.map +1 -1
  147. package/build/upload/Upload.mjs +2 -2
  148. package/build/upload/Upload.mjs.map +1 -1
  149. package/build/upload/steps/uploadImageStep/uploadImageStep.js +1 -1
  150. package/build/upload/steps/uploadImageStep/uploadImageStep.js.map +1 -1
  151. package/build/upload/steps/uploadImageStep/uploadImageStep.mjs +1 -1
  152. package/build/upload/steps/uploadImageStep/uploadImageStep.mjs.map +1 -1
  153. package/package.json +12 -12
  154. package/src/dateInput/DateInput.css +1 -13
  155. package/src/dateInput/DateInput.less +3 -20
  156. package/src/dateInput/DateInput.tests.story.tsx +3 -14
  157. package/src/dateInput/DateInput.tsx +4 -4
  158. package/src/i18n/cs.json +2 -0
  159. package/src/i18n/de.json +2 -0
  160. package/src/i18n/es.json +2 -0
  161. package/src/i18n/fr.json +2 -0
  162. package/src/i18n/hu.json +2 -0
  163. package/src/i18n/id.json +2 -0
  164. package/src/i18n/it.json +2 -0
  165. package/src/i18n/ja.json +2 -0
  166. package/src/i18n/nl.json +2 -0
  167. package/src/i18n/pl.json +2 -0
  168. package/src/i18n/pt.json +2 -0
  169. package/src/i18n/ro.json +2 -0
  170. package/src/i18n/ru.json +2 -0
  171. package/src/i18n/th.json +2 -0
  172. package/src/i18n/tr.json +2 -0
  173. package/src/i18n/zh-CN.json +2 -0
  174. package/src/i18n/zh-HK.json +2 -0
  175. package/src/index.ts +2 -0
  176. package/src/listItem/ListItem.css +223 -0
  177. package/src/listItem/ListItem.less +223 -0
  178. package/src/listItem/ListItem.spec.tsx +35 -0
  179. package/src/listItem/ListItem.story.tsx +582 -0
  180. package/src/listItem/ListItem.tsx +283 -0
  181. package/src/listItem/ListItemAdditionalInfo.tsx +31 -0
  182. package/src/listItem/ListItemButton.spec.tsx +92 -0
  183. package/src/listItem/ListItemButton.tsx +24 -0
  184. package/src/listItem/ListItemCheckbox.tsx +14 -0
  185. package/src/listItem/ListItemIconButton.tsx +16 -0
  186. package/src/listItem/ListItemMedia.tsx +52 -0
  187. package/src/listItem/ListItemNavigation.tsx +26 -0
  188. package/src/listItem/ListItemSwitch.tsx +8 -0
  189. package/src/listItem/index.ts +10 -0
  190. package/src/listItem/prompt/Prompt.spec.tsx +77 -0
  191. package/src/listItem/prompt/Prompt.story.tsx +170 -0
  192. package/src/listItem/prompt/Prompt.tsx +44 -0
  193. package/src/listItem/useItemControl.tsx +23 -0
  194. package/src/main.css +224 -13
  195. package/src/main.less +1 -0
@@ -1 +1 @@
1
- {"version":3,"file":"Upload.js","sources":["../../src/upload/Upload.tsx"],"sourcesContent":["import { Plus as PlusIcon } from '@transferwise/icons';\nimport { clsx } from 'clsx';\nimport { Component } from 'react';\nimport { injectIntl, WrappedComponentProps } from 'react-intl';\n\nimport { Size, Typography } from '../common';\nimport Title from '../title';\n\nimport messages from './Upload.messages';\nimport { UploadImageStep, ProcessingStep, CompleteStep } from './steps';\nimport { postData, asyncFileRead, isSizeValid, isTypeValid, getFileType } from './utils';\nimport { PostDataFetcher, PostDataHTTPOptions, ResponseError } from './utils/postData/postData';\nimport { ProcessIndicatorStatus } from '../processIndicator';\n\nexport const MAX_SIZE_DEFAULT = 5000000;\n\nexport enum UploadStep {\n UPLOAD_IMAGE_STEP = 'uploadImageStep',\n}\n\nexport interface UploadProps extends WrappedComponentProps {\n animationDelay?: number;\n csButtonText?: string;\n csFailureText?: string;\n csSuccessText?: string;\n csTooLargeMessage?: string;\n csWrongTypeMessage?: string;\n httpOptions?: PostDataHTTPOptions & {\n fileInputName?: string;\n data?: Record<string, string | Blob>;\n };\n /**\n * You can provide a fetcher function with the same interface as the global fetch function, which is used by default.\n * function fetcher(input: RequestInfo, init?: RequestInit): Promise<Response>\n */\n fetcher?: PostDataFetcher;\n maxSize?: number;\n psButtonText?: string;\n psButtonDisabled?: boolean;\n psProcessingText?: string;\n size?: `${Size.SMALL | Size.MEDIUM | Size.LARGE}`;\n /**\n * You can provide multiple rules separated by comma, e.g.: \"application/pdf,image/*\".\n * Using \"*\" will allow every file type to be uploaded.\n */\n usAccept?: string;\n usButtonText?: string;\n usButtonRetryText?: string;\n usDisabled?: boolean;\n usDropMessage?: string;\n usHelpImage?: React.ReactNode;\n usLabel?: string;\n usPlaceholder?: string;\n /**\n * Override for the [InlineAlert icon's default, accessible name](/?path=/docs/other-statusicon-accessibility--docs)\n * announced by the screen readers\n * */\n errorIconLabel?: string;\n /** @deprecated Only a single variant exists, please remove this prop. */\n uploadStep?: `${UploadStep}`;\n onCancel?: () => void;\n onFailure?: (error: unknown) => void;\n onStart?: (file: File) => void;\n onSuccess?: (response: string | Response, fileName: string) => void;\n}\n\ninterface UploadState {\n fileName: string;\n isDroppable: boolean;\n isComplete: boolean;\n isError: boolean;\n isImage: boolean;\n isProcessing: boolean;\n isSuccess: boolean;\n response: unknown;\n uploadedImage: string | undefined;\n}\n\nexport class Upload extends Component<UploadProps, UploadState> {\n declare props: UploadProps & Required<Pick<UploadProps, keyof typeof Upload.defaultProps>>;\n\n static defaultProps = {\n animationDelay: 300,\n maxSize: MAX_SIZE_DEFAULT,\n psButtonDisabled: false,\n size: 'md',\n usAccept: 'image/*',\n usDisabled: false,\n usLabel: '',\n } satisfies Partial<UploadProps>;\n\n dragCounter = 0;\n timeouts = 0;\n\n constructor(props: UploadProps) {\n super(props);\n\n this.state = {\n fileName: '',\n isDroppable: false,\n isComplete: false,\n isError: false,\n isImage: false,\n isProcessing: false,\n isSuccess: false,\n response: undefined,\n uploadedImage: undefined,\n };\n }\n\n getErrorMessage(status?: number) {\n const { csFailureText, csTooLargeMessage, csWrongTypeMessage, maxSize, intl } = this.props;\n switch (status) {\n case 413:\n return (\n csTooLargeMessage ||\n intl.formatMessage(messages.csTooLargeMessage, {\n maxSize: roundFileSize(maxSize),\n })\n );\n case 415:\n return csWrongTypeMessage || intl.formatMessage(messages.csWrongTypeMessage);\n default:\n return csFailureText || intl.formatMessage(messages.csFailureText);\n }\n }\n\n onDragLeave(event: React.DragEvent<HTMLDivElement>) {\n event.preventDefault();\n this.dragCounter -= 1;\n if (this.dragCounter === 0) {\n this.setState({ isDroppable: false });\n }\n }\n\n onDragEnter(event: React.DragEvent<HTMLDivElement>) {\n event.preventDefault();\n this.dragCounter += 1;\n const { usDisabled } = this.props;\n const { isProcessing } = this.state;\n if (this.dragCounter === 1 && !usDisabled && !isProcessing) {\n this.setState({ isDroppable: true });\n }\n }\n\n async onDrop(event: React.DragEvent<HTMLDivElement>) {\n const { isProcessing } = this.state;\n event.preventDefault();\n if (!isProcessing) {\n this.reset();\n }\n\n if (event.dataTransfer?.files?.[0]) {\n await this.fileDropped(event.dataTransfer.files[0]);\n }\n }\n\n asyncPost = async (file: File) => {\n const { httpOptions, fetcher } = this.props;\n if (httpOptions == null) {\n throw new Error('Cannot find HTTP options');\n }\n\n const { fileInputName = file.name, data = {} } = httpOptions;\n\n const formData = new FormData();\n formData.append(fileInputName, file);\n Object.keys(data).forEach((key) => formData.append(key, data[key]));\n return postData(httpOptions, formData, fetcher);\n };\n\n handleUploadComplete = (type: 'success' | 'error', response: unknown) => {\n const { animationDelay, onSuccess, onFailure } = this.props;\n const { fileName } = this.state;\n\n window.clearTimeout(this.timeouts);\n this.timeouts = window.setTimeout(() => {\n this.setState(\n {\n isProcessing: false,\n isComplete: true,\n },\n () => {\n if (type === 'success') {\n onSuccess?.(response as string | Response, fileName);\n } else {\n onFailure?.(response);\n }\n },\n );\n }, animationDelay);\n };\n\n asyncResponse = (response: unknown, type: 'success' | 'error') => {\n this.setState(\n {\n response,\n isError: type === 'error',\n isSuccess: type === 'success',\n },\n () => this.handleUploadComplete(type, response),\n );\n };\n\n handleOnClear: React.MouseEventHandler<HTMLButtonElement> = (event) => {\n event.preventDefault();\n const { onCancel } = this.props;\n onCancel?.();\n\n this.reset();\n };\n\n reset = () => {\n this.dragCounter = 0;\n window.clearTimeout(this.timeouts);\n this.setState({\n isComplete: false,\n isError: false,\n isProcessing: false,\n isSuccess: false,\n });\n };\n\n showDataImage = (dataUrl: string) => {\n const { isImage } = this.state;\n if (isImage) {\n this.setState({\n uploadedImage: dataUrl,\n });\n }\n };\n\n fileDropped = async (file: File) => {\n const { httpOptions, maxSize, onStart, usDisabled, usAccept } = this.props;\n const { isProcessing } = this.state;\n\n if (usDisabled || isProcessing) {\n return false;\n }\n\n if (!file) {\n throw new Error('Could not retrieve file');\n }\n\n this.setState({\n fileName: file.name,\n isDroppable: false,\n isProcessing: true,\n });\n\n onStart?.(file);\n\n let file64 = null;\n\n try {\n file64 = await asyncFileRead(file);\n } catch (error) {\n this.asyncResponse(error, 'error');\n }\n\n if (!file64) {\n return false;\n }\n\n this.setState({\n isImage: getFileType(file, file64).includes('image'),\n });\n\n if (!isTypeValid(file, usAccept, file64)) {\n this.asyncResponse(\n new ResponseError(\n new Response(null, {\n status: 415,\n statusText: 'Unsupported Media Type',\n }),\n ),\n 'error',\n );\n return false;\n }\n\n if (!isSizeValid(file, maxSize)) {\n this.asyncResponse(\n new ResponseError(\n new Response(null, {\n status: 413,\n statusText: 'Request Entity Too Large',\n }),\n ),\n 'error',\n );\n return false;\n }\n\n if (httpOptions) {\n // Post the file to provided endpoint\n let response;\n try {\n response = await this.asyncPost(file);\n } catch (error) {\n this.asyncResponse(error, 'error');\n return false;\n }\n this.asyncResponse(response, 'success');\n this.showDataImage(file64);\n return true;\n }\n // Post on form submit. And return the encoded image.\n this.showDataImage(file64);\n this.asyncResponse(file64, 'success');\n return true;\n };\n\n render() {\n const {\n maxSize,\n usDropMessage,\n usAccept,\n usButtonText,\n usButtonRetryText,\n usDisabled,\n usHelpImage,\n usLabel,\n usPlaceholder,\n psButtonText,\n psProcessingText,\n psButtonDisabled,\n csButtonText,\n csSuccessText,\n size,\n intl,\n errorIconLabel,\n } = this.props;\n\n const {\n response,\n fileName,\n isComplete,\n isDroppable,\n isError,\n isImage,\n isProcessing,\n isSuccess,\n uploadedImage,\n } = this.state;\n\n return (\n <div\n className={clsx('droppable-area', {\n droppable: true,\n 'tw-droppable-sm droppable-sm': size === 'sm',\n 'tw-droppable-md droppable-md': size === 'md' || !size,\n 'tw-droppable-lg droppable-lg': size === 'lg',\n 'droppable-dropping': isDroppable,\n 'droppable-processing': isProcessing,\n 'droppable-complete': isComplete && !isError,\n 'droppable-negative': isError && !isProcessing,\n })}\n onDragEnter={(event) => this.onDragEnter(event)}\n onDragLeave={(event) => this.onDragLeave(event)}\n onDrop={async (event) => this.onDrop(event)}\n onDragOver={(event) => event.preventDefault()}\n >\n {!isProcessing && !isComplete && (\n <UploadImageStep\n fileDropped={async (file) => this.fileDropped(file)}\n isComplete={isComplete}\n usAccept={usAccept}\n usButtonText={usButtonText || intl.formatMessage(messages.usButtonText)}\n usDisabled={usDisabled}\n usHelpImage={usHelpImage}\n usLabel={usLabel}\n usPlaceholder={\n usPlaceholder ||\n intl.formatMessage(messages.usPlaceholder, { maxSize: roundFileSize(maxSize) })\n }\n />\n )}\n\n {(isSuccess || isComplete) && !isError && (\n <CompleteStep\n fileName={fileName}\n isComplete={isComplete}\n isImage={isImage}\n csButtonText={csButtonText || intl.formatMessage(messages.csButtonText)}\n csSuccessText={csSuccessText || intl.formatMessage(messages.csSuccessText)}\n uploadedImage={uploadedImage}\n onClear={(event) => this.handleOnClear(event)}\n />\n )}\n {isError && !isProcessing && (\n <UploadImageStep\n fileDropped={async (file) => {\n this.reset();\n await this.fileDropped(file);\n }}\n isComplete={!isError}\n usAccept={usAccept}\n usButtonText={usButtonRetryText || intl.formatMessage(messages.retry)}\n usDisabled={usDisabled}\n usHelpImage={null}\n usLabel={usLabel}\n usPlaceholder={\n usPlaceholder ||\n intl.formatMessage(messages.usPlaceholder, { maxSize: roundFileSize(maxSize) })\n }\n errorMessage={this.getErrorMessage(\n response != null &&\n typeof response === 'object' &&\n 'status' in response &&\n typeof response.status === 'number'\n ? response.status\n : undefined,\n )}\n errorIconLabel={errorIconLabel}\n />\n )}\n {isProcessing && (\n <ProcessingStep\n isComplete={isComplete}\n isError={isError}\n isSuccess={isSuccess}\n psButtonText={psButtonText || intl.formatMessage(messages.psButtonText)}\n psProcessingText={psProcessingText || intl.formatMessage(messages.psProcessingText)}\n psButtonDisabled={psButtonDisabled}\n onClear={(event) => this.handleOnClear(event)}\n />\n )}\n {!isProcessing && (\n <div className=\"droppable-dropping-card droppable-card\" aria-live=\"polite\">\n <div className=\"droppable-card-content\">\n <div className=\"circle circle-sm text-primary\">\n <PlusIcon size=\"16\" />\n </div>\n <Title type={Typography.TITLE_BODY} className=\"m-t-3\">\n {usDropMessage || intl.formatMessage(messages.usDropMessage)}\n </Title>\n </div>\n </div>\n )}\n </div>\n );\n }\n}\n\nexport default injectIntl(Upload);\n\nconst roundFileSize = (bytes: number) => {\n const megabytes = bytes / 1000000;\n if (megabytes >= 0.1) {\n const isRound = Math.floor(megabytes) === megabytes;\n return isRound ? `${megabytes}` : megabytes.toFixed(1);\n }\n if (megabytes >= 0.01) {\n return megabytes.toFixed(2);\n }\n return megabytes.toFixed(3);\n};\n"],"names":["MAX_SIZE_DEFAULT","UploadStep","Upload","Component","defaultProps","animationDelay","maxSize","psButtonDisabled","size","usAccept","usDisabled","usLabel","dragCounter","timeouts","constructor","props","state","fileName","isDroppable","isComplete","isError","isImage","isProcessing","isSuccess","response","undefined","uploadedImage","getErrorMessage","status","csFailureText","csTooLargeMessage","csWrongTypeMessage","intl","formatMessage","messages","roundFileSize","onDragLeave","event","preventDefault","setState","onDragEnter","onDrop","reset","dataTransfer","files","fileDropped","asyncPost","file","httpOptions","fetcher","Error","fileInputName","name","data","formData","FormData","append","Object","keys","forEach","key","postData","handleUploadComplete","type","onSuccess","onFailure","window","clearTimeout","setTimeout","asyncResponse","handleOnClear","onCancel","showDataImage","dataUrl","onStart","file64","asyncFileRead","error","getFileType","includes","isTypeValid","ResponseError","Response","statusText","isSizeValid","render","usDropMessage","usButtonText","usButtonRetryText","usHelpImage","usPlaceholder","psButtonText","psProcessingText","csButtonText","csSuccessText","errorIconLabel","_jsxs","className","clsx","droppable","onDragOver","children","_jsx","UploadImageStep","CompleteStep","onClear","retry","errorMessage","ProcessingStep","PlusIcon","Title","Typography","TITLE_BODY","injectIntl","bytes","megabytes","isRound","Math","floor","toFixed"],"mappings":"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"}
1
+ {"version":3,"file":"Upload.js","sources":["../../src/upload/Upload.tsx"],"sourcesContent":["import { Plus as PlusIcon } from '@transferwise/icons';\nimport { clsx } from 'clsx';\nimport { Component } from 'react';\nimport { injectIntl, WrappedComponentProps } from 'react-intl';\n\nimport { Size, Typography } from '../common';\nimport Title from '../title';\n\nimport messages from './Upload.messages';\nimport { UploadImageStep, ProcessingStep, CompleteStep } from './steps';\nimport { postData, asyncFileRead, isSizeValid, isTypeValid, getFileType } from './utils';\nimport { PostDataFetcher, PostDataHTTPOptions, ResponseError } from './utils/postData/postData';\nimport { ProcessIndicatorStatus } from '../processIndicator';\n\nexport const MAX_SIZE_DEFAULT = 5000000;\n\nexport enum UploadStep {\n UPLOAD_IMAGE_STEP = 'uploadImageStep',\n}\n\nexport interface UploadProps extends WrappedComponentProps {\n animationDelay?: number;\n csButtonText?: string;\n csFailureText?: string;\n csSuccessText?: string;\n csTooLargeMessage?: string;\n csWrongTypeMessage?: string;\n httpOptions?: PostDataHTTPOptions & {\n fileInputName?: string;\n data?: Record<string, string | Blob>;\n };\n /**\n * You can provide a fetcher function with the same interface as the global fetch function, which is used by default.\n * function fetcher(input: RequestInfo, init?: RequestInit): Promise<Response>\n */\n fetcher?: PostDataFetcher;\n maxSize?: number;\n psButtonText?: string;\n psButtonDisabled?: boolean;\n psProcessingText?: string;\n size?: `${Size.SMALL | Size.MEDIUM | Size.LARGE}`;\n /**\n * You can provide multiple rules separated by comma, e.g.: \"application/pdf,image/*\".\n * Using \"*\" will allow every file type to be uploaded.\n */\n usAccept?: string;\n usButtonText?: string;\n usButtonRetryText?: string;\n usDisabled?: boolean;\n usDropMessage?: string;\n usHelpImage?: React.ReactNode;\n usLabel?: string;\n usPlaceholder?: string;\n /**\n * Override for the [InlineAlert icon's default, accessible name](/?path=/docs/other-statusicon-accessibility--docs)\n * announced by the screen readers\n * */\n errorIconLabel?: string;\n /** @deprecated Only a single variant exists, please remove this prop. */\n uploadStep?: `${UploadStep}`;\n onCancel?: () => void;\n onFailure?: (error: unknown) => void;\n onStart?: (file: File) => void;\n onSuccess?: (response: string | Response, fileName: string) => void;\n}\n\ninterface UploadState {\n fileName: string;\n isDroppable: boolean;\n isComplete: boolean;\n isError: boolean;\n isImage: boolean;\n isProcessing: boolean;\n isSuccess: boolean;\n response: unknown;\n uploadedImage: string | undefined;\n}\n\nexport class Upload extends Component<UploadProps, UploadState> {\n declare props: UploadProps & Required<Pick<UploadProps, keyof typeof Upload.defaultProps>>;\n\n static defaultProps = {\n animationDelay: 300,\n maxSize: MAX_SIZE_DEFAULT,\n psButtonDisabled: false,\n size: 'md',\n usAccept: 'image/*',\n usDisabled: false,\n usLabel: '',\n } satisfies Partial<UploadProps>;\n\n dragCounter = 0;\n timeouts = 0;\n\n constructor(props: UploadProps) {\n super(props);\n\n this.state = {\n fileName: '',\n isDroppable: false,\n isComplete: false,\n isError: false,\n isImage: false,\n isProcessing: false,\n isSuccess: false,\n response: undefined,\n uploadedImage: undefined,\n };\n }\n\n getErrorMessage(status?: number) {\n const { csFailureText, csTooLargeMessage, csWrongTypeMessage, maxSize, intl } = this.props;\n switch (status) {\n case 413:\n return (\n csTooLargeMessage ||\n intl.formatMessage(messages.csTooLargeMessage, {\n maxSize: roundFileSize(maxSize),\n })\n );\n case 415:\n return csWrongTypeMessage || intl.formatMessage(messages.csWrongTypeMessage);\n default:\n return csFailureText || intl.formatMessage(messages.csFailureText);\n }\n }\n\n onDragLeave(event: React.DragEvent<HTMLDivElement>) {\n event.preventDefault();\n this.dragCounter -= 1;\n if (this.dragCounter === 0) {\n this.setState({ isDroppable: false });\n }\n }\n\n onDragEnter(event: React.DragEvent<HTMLDivElement>) {\n event.preventDefault();\n this.dragCounter += 1;\n const { usDisabled } = this.props;\n const { isProcessing } = this.state;\n if (this.dragCounter === 1 && !usDisabled && !isProcessing) {\n this.setState({ isDroppable: true });\n }\n }\n\n async onDrop(event: React.DragEvent<HTMLDivElement>) {\n const { isProcessing } = this.state;\n event.preventDefault();\n if (!isProcessing) {\n this.reset();\n }\n\n if (event.dataTransfer?.files?.[0]) {\n await this.fileDropped(event.dataTransfer.files[0]);\n }\n }\n\n asyncPost = async (file: File) => {\n const { httpOptions, fetcher } = this.props;\n if (httpOptions == null) {\n throw new Error('Cannot find HTTP options');\n }\n\n const { fileInputName = file.name, data = {} } = httpOptions;\n\n const formData = new FormData();\n formData.append(fileInputName, file);\n Object.keys(data).forEach((key) => formData.append(key, data[key]));\n return postData(httpOptions, formData, fetcher);\n };\n\n handleUploadComplete = (type: 'success' | 'error', response: unknown) => {\n const { animationDelay, onSuccess, onFailure } = this.props;\n const { fileName } = this.state;\n\n window.clearTimeout(this.timeouts);\n this.timeouts = window.setTimeout(() => {\n this.setState(\n {\n isProcessing: false,\n isComplete: true,\n },\n () => {\n if (type === 'success') {\n onSuccess?.(response as string | Response, fileName);\n } else {\n onFailure?.(response);\n }\n },\n );\n }, animationDelay);\n };\n\n asyncResponse = (response: unknown, type: 'success' | 'error') => {\n this.setState(\n {\n response,\n isError: type === 'error',\n isSuccess: type === 'success',\n },\n () => this.handleUploadComplete(type, response),\n );\n };\n\n handleOnClear: React.MouseEventHandler<HTMLButtonElement> = (event) => {\n event.preventDefault();\n const { onCancel } = this.props;\n onCancel?.();\n\n this.reset();\n };\n\n reset = () => {\n this.dragCounter = 0;\n window.clearTimeout(this.timeouts);\n this.setState({\n isComplete: false,\n isError: false,\n isProcessing: false,\n isSuccess: false,\n });\n };\n\n showDataImage = (dataUrl: string) => {\n const { isImage } = this.state;\n if (isImage) {\n this.setState({\n uploadedImage: dataUrl,\n });\n }\n };\n\n fileDropped = async (file: File) => {\n const { httpOptions, maxSize, onStart, usDisabled, usAccept } = this.props;\n const { isProcessing } = this.state;\n\n if (usDisabled || isProcessing) {\n return false;\n }\n\n if (!file) {\n throw new Error('Could not retrieve file');\n }\n\n this.setState({\n fileName: file.name,\n isDroppable: false,\n isProcessing: true,\n });\n\n onStart?.(file);\n\n let file64 = null;\n\n try {\n file64 = await asyncFileRead(file);\n } catch (error) {\n this.asyncResponse(error, 'error');\n }\n\n if (!file64) {\n return false;\n }\n\n this.setState({\n isImage: getFileType(file, file64).includes('image'),\n });\n\n if (!isTypeValid(file, usAccept, file64)) {\n this.asyncResponse(\n new ResponseError(\n new Response(null, {\n status: 415,\n statusText: 'Unsupported Media Type',\n }),\n ),\n 'error',\n );\n return false;\n }\n\n if (!isSizeValid(file, maxSize)) {\n this.asyncResponse(\n new ResponseError(\n new Response(null, {\n status: 413,\n statusText: 'Request Entity Too Large',\n }),\n ),\n 'error',\n );\n return false;\n }\n\n if (httpOptions) {\n // Post the file to provided endpoint\n let response;\n try {\n response = await this.asyncPost(file);\n } catch (error) {\n this.asyncResponse(error, 'error');\n return false;\n }\n this.asyncResponse(response, 'success');\n this.showDataImage(file64);\n return true;\n }\n // Post on form submit. And return the encoded image.\n this.showDataImage(file64);\n this.asyncResponse(file64, 'success');\n return true;\n };\n\n render() {\n const {\n maxSize,\n usDropMessage,\n usAccept,\n usButtonText,\n usButtonRetryText,\n usDisabled,\n usHelpImage,\n usLabel,\n usPlaceholder,\n psButtonText,\n psProcessingText,\n psButtonDisabled,\n csButtonText,\n csSuccessText,\n size,\n intl,\n errorIconLabel,\n } = this.props;\n\n const {\n response,\n fileName,\n isComplete,\n isDroppable,\n isError,\n isImage,\n isProcessing,\n isSuccess,\n uploadedImage,\n } = this.state;\n\n return (\n <div\n className={clsx('droppable-area', {\n droppable: true,\n 'tw-droppable-sm droppable-sm': size === 'sm',\n 'tw-droppable-md droppable-md': size === 'md' || !size,\n 'tw-droppable-lg droppable-lg': size === 'lg',\n 'droppable-dropping': isDroppable,\n 'droppable-processing': isProcessing,\n 'droppable-complete': isComplete && !isError,\n 'droppable-negative': isError && !isProcessing,\n })}\n onDragEnter={(event) => this.onDragEnter(event)}\n onDragLeave={(event) => this.onDragLeave(event)}\n onDrop={async (event) => this.onDrop(event)}\n onDragOver={(event) => event.preventDefault()}\n >\n {!isProcessing && !isComplete && (\n <UploadImageStep\n fileDropped={async (file) => this.fileDropped(file)}\n isComplete={isComplete}\n usAccept={usAccept}\n usButtonText={usButtonText || intl.formatMessage(messages.usButtonText)}\n usDisabled={usDisabled}\n usHelpImage={usHelpImage}\n usLabel={usLabel}\n usPlaceholder={\n usPlaceholder ||\n intl.formatMessage(messages.usPlaceholder, { maxSize: roundFileSize(maxSize) })\n }\n />\n )}\n\n {(isSuccess || isComplete) && !isError && (\n <CompleteStep\n fileName={fileName}\n isComplete={isComplete}\n isImage={isImage}\n csButtonText={csButtonText || intl.formatMessage(messages.csButtonText)}\n csSuccessText={csSuccessText || intl.formatMessage(messages.csSuccessText)}\n uploadedImage={uploadedImage}\n onClear={(event) => this.handleOnClear(event)}\n />\n )}\n {isError && !isProcessing && (\n <UploadImageStep\n fileDropped={async (file) => {\n this.reset();\n await this.fileDropped(file);\n }}\n isComplete={!isError}\n usAccept={usAccept}\n usButtonText={usButtonRetryText || intl.formatMessage(messages.retry)}\n usDisabled={usDisabled}\n usHelpImage={null}\n usLabel={usLabel}\n usPlaceholder={\n usPlaceholder ||\n intl.formatMessage(messages.usPlaceholder, { maxSize: roundFileSize(maxSize) })\n }\n errorMessage={this.getErrorMessage(\n response != null &&\n typeof response === 'object' &&\n 'status' in response &&\n typeof response.status === 'number'\n ? response.status\n : undefined,\n )}\n errorIconLabel={errorIconLabel}\n />\n )}\n {isProcessing && (\n <ProcessingStep\n isComplete={isComplete}\n isError={isError}\n isSuccess={isSuccess}\n psButtonText={psButtonText || intl.formatMessage(messages.psButtonText)}\n psProcessingText={psProcessingText || intl.formatMessage(messages.psProcessingText)}\n psButtonDisabled={psButtonDisabled}\n onClear={(event) => this.handleOnClear(event)}\n />\n )}\n {!isProcessing && (\n <div className=\"droppable-dropping-card droppable-card\" aria-live=\"polite\">\n <div className=\"droppable-card-content\">\n <div className=\"circle circle-sm text-primary\">\n <PlusIcon size=\"16\" />\n </div>\n <Title type={Typography.TITLE_BODY} className=\"m-t-3\">\n {usDropMessage || intl.formatMessage(messages.usDropMessage)}\n </Title>\n </div>\n </div>\n )}\n </div>\n );\n }\n}\n\nexport default injectIntl(Upload);\n\nconst roundFileSize = (bytes: number) => {\n const megabytes = bytes / 1000000;\n if (megabytes >= 0.1) {\n const isRound = Math.floor(megabytes) === megabytes;\n return isRound ? `${megabytes}` : megabytes.toFixed(1);\n }\n if (megabytes >= 0.01) {\n return megabytes.toFixed(2);\n }\n return megabytes.toFixed(3);\n};\n"],"names":["MAX_SIZE_DEFAULT","UploadStep","Upload","Component","defaultProps","animationDelay","maxSize","psButtonDisabled","size","usAccept","usDisabled","usLabel","dragCounter","timeouts","constructor","props","state","fileName","isDroppable","isComplete","isError","isImage","isProcessing","isSuccess","response","undefined","uploadedImage","getErrorMessage","status","csFailureText","csTooLargeMessage","csWrongTypeMessage","intl","formatMessage","messages","roundFileSize","onDragLeave","event","preventDefault","setState","onDragEnter","onDrop","reset","dataTransfer","files","fileDropped","asyncPost","file","httpOptions","fetcher","Error","fileInputName","name","data","formData","FormData","append","Object","keys","forEach","key","postData","handleUploadComplete","type","onSuccess","onFailure","window","clearTimeout","setTimeout","asyncResponse","handleOnClear","onCancel","showDataImage","dataUrl","onStart","file64","asyncFileRead","error","getFileType","includes","isTypeValid","ResponseError","Response","statusText","isSizeValid","render","usDropMessage","usButtonText","usButtonRetryText","usHelpImage","usPlaceholder","psButtonText","psProcessingText","csButtonText","csSuccessText","errorIconLabel","_jsxs","className","clsx","droppable","onDragOver","children","_jsx","UploadImageStep","CompleteStep","onClear","retry","errorMessage","ProcessingStep","PlusIcon","Title","Typography","TITLE_BODY","injectIntl","bytes","megabytes","isRound","Math","floor","toFixed"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcO,MAAMA,gBAAgB,GAAG;AAEpBC;AAAZ,CAAA,UAAYA,UAAU,EAAA;AACpBA,EAAAA,UAAA,CAAA,mBAAA,CAAA,GAAA,iBAAqC;AACvC,CAAC,EAFWA,kBAAU,KAAVA,kBAAU,GAErB,EAAA,CAAA,CAAA;AA4DK,MAAOC,MAAO,SAAQC,eAAmC,CAAA;AAG7D,EAAA,OAAOC,YAAY,GAAG,CAAA,OAAA;AACpBC,IAAAA,cAAc,EAAE,GAAG;AACnBC,IAAAA,OAAO,EAAEN,gBAAgB;AACzBO,IAAAA,gBAAgB,EAAE,KAAK;AACvBC,IAAAA,IAAI,EAAE,IAAI;AACVC,IAAAA,QAAQ,EAAE,SAAS;AACnBC,IAAAA,UAAU,EAAE,KAAK;AACjBC,IAAAA,OAAO,EAAE;GACqB,CAAA,GAAA;AAEhCC,EAAAA,WAAW,GAAG,CAAC;AACfC,EAAAA,QAAQ,GAAG,CAAC;EAEZC,WAAAA,CAAYC,KAAkB,EAAA;IAC5B,KAAK,CAACA,KAAK,CAAC;IAEZ,IAAI,CAACC,KAAK,GAAG;AACXC,MAAAA,QAAQ,EAAE,EAAE;AACZC,MAAAA,WAAW,EAAE,KAAK;AAClBC,MAAAA,UAAU,EAAE,KAAK;AACjBC,MAAAA,OAAO,EAAE,KAAK;AACdC,MAAAA,OAAO,EAAE,KAAK;AACdC,MAAAA,YAAY,EAAE,KAAK;AACnBC,MAAAA,SAAS,EAAE,KAAK;AAChBC,MAAAA,QAAQ,EAAEC,SAAS;AACnBC,MAAAA,aAAa,EAAED;KAChB;AACH;EAEAE,eAAeA,CAACC,MAAe,EAAA;IAC7B,MAAM;MAAEC,aAAa;MAAEC,iBAAiB;MAAEC,kBAAkB;MAAEzB,OAAO;AAAE0B,MAAAA;KAAM,GAAG,IAAI,CAACjB,KAAK;AAC1F,IAAA,QAAQa,MAAM;AACZ,MAAA,KAAK,GAAG;QACN,OACEE,iBAAiB,IACjBE,IAAI,CAACC,aAAa,CAACC,uBAAQ,CAACJ,iBAAiB,EAAE;UAC7CxB,OAAO,EAAE6B,aAAa,CAAC7B,OAAO;AAC/B,SAAA,CAAC;AAEN,MAAA,KAAK,GAAG;QACN,OAAOyB,kBAAkB,IAAIC,IAAI,CAACC,aAAa,CAACC,uBAAQ,CAACH,kBAAkB,CAAC;AAC9E,MAAA;QACE,OAAOF,aAAa,IAAIG,IAAI,CAACC,aAAa,CAACC,uBAAQ,CAACL,aAAa,CAAC;AACtE;AACF;EAEAO,WAAWA,CAACC,KAAsC,EAAA;IAChDA,KAAK,CAACC,cAAc,EAAE;IACtB,IAAI,CAAC1B,WAAW,IAAI,CAAC;AACrB,IAAA,IAAI,IAAI,CAACA,WAAW,KAAK,CAAC,EAAE;MAC1B,IAAI,CAAC2B,QAAQ,CAAC;AAAErB,QAAAA,WAAW,EAAE;AAAO,OAAA,CAAC;AACvC;AACF;EAEAsB,WAAWA,CAACH,KAAsC,EAAA;IAChDA,KAAK,CAACC,cAAc,EAAE;IACtB,IAAI,CAAC1B,WAAW,IAAI,CAAC;IACrB,MAAM;AAAEF,MAAAA;KAAY,GAAG,IAAI,CAACK,KAAK;IACjC,MAAM;AAAEO,MAAAA;KAAc,GAAG,IAAI,CAACN,KAAK;IACnC,IAAI,IAAI,CAACJ,WAAW,KAAK,CAAC,IAAI,CAACF,UAAU,IAAI,CAACY,YAAY,EAAE;MAC1D,IAAI,CAACiB,QAAQ,CAAC;AAAErB,QAAAA,WAAW,EAAE;AAAM,OAAA,CAAC;AACtC;AACF;EAEA,MAAMuB,MAAMA,CAACJ,KAAsC,EAAA;IACjD,MAAM;AAAEf,MAAAA;KAAc,GAAG,IAAI,CAACN,KAAK;IACnCqB,KAAK,CAACC,cAAc,EAAE;IACtB,IAAI,CAAChB,YAAY,EAAE;MACjB,IAAI,CAACoB,KAAK,EAAE;AACd;IAEA,IAAIL,KAAK,CAACM,YAAY,EAAEC,KAAK,GAAG,CAAC,CAAC,EAAE;AAClC,MAAA,MAAM,IAAI,CAACC,WAAW,CAACR,KAAK,CAACM,YAAY,CAACC,KAAK,CAAC,CAAC,CAAC,CAAC;AACrD;AACF;EAEAE,SAAS,GAAG,MAAOC,IAAU,IAAI;IAC/B,MAAM;MAAEC,WAAW;AAAEC,MAAAA;KAAS,GAAG,IAAI,CAAClC,KAAK;IAC3C,IAAIiC,WAAW,IAAI,IAAI,EAAE;AACvB,MAAA,MAAM,IAAIE,KAAK,CAAC,0BAA0B,CAAC;AAC7C;IAEA,MAAM;MAAEC,aAAa,GAAGJ,IAAI,CAACK,IAAI;AAAEC,MAAAA,IAAI,GAAG;AAAI,KAAA,GAAGL,WAAW;AAE5D,IAAA,MAAMM,QAAQ,GAAG,IAAIC,QAAQ,EAAE;AAC/BD,IAAAA,QAAQ,CAACE,MAAM,CAACL,aAAa,EAAEJ,IAAI,CAAC;IACpCU,MAAM,CAACC,IAAI,CAACL,IAAI,CAAC,CAACM,OAAO,CAAEC,GAAG,IAAKN,QAAQ,CAACE,MAAM,CAACI,GAAG,EAAEP,IAAI,CAACO,GAAG,CAAC,CAAC,CAAC;AACnE,IAAA,OAAOC,iBAAQ,CAACb,WAAW,EAAEM,QAAQ,EAAEL,OAAO,CAAC;GAChD;AAEDa,EAAAA,oBAAoB,GAAGA,CAACC,IAAyB,EAAEvC,QAAiB,KAAI;IACtE,MAAM;MAAEnB,cAAc;MAAE2D,SAAS;AAAEC,MAAAA;KAAW,GAAG,IAAI,CAAClD,KAAK;IAC3D,MAAM;AAAEE,MAAAA;KAAU,GAAG,IAAI,CAACD,KAAK;AAE/BkD,IAAAA,MAAM,CAACC,YAAY,CAAC,IAAI,CAACtD,QAAQ,CAAC;AAClC,IAAA,IAAI,CAACA,QAAQ,GAAGqD,MAAM,CAACE,UAAU,CAAC,MAAK;MACrC,IAAI,CAAC7B,QAAQ,CACX;AACEjB,QAAAA,YAAY,EAAE,KAAK;AACnBH,QAAAA,UAAU,EAAE;AACb,OAAA,EACD,MAAK;QACH,IAAI4C,IAAI,KAAK,SAAS,EAAE;AACtBC,UAAAA,SAAS,GAAGxC,QAA6B,EAAEP,QAAQ,CAAC;AACtD,SAAC,MAAM;UACLgD,SAAS,GAAGzC,QAAQ,CAAC;AACvB;AACF,OAAC,CACF;KACF,EAAEnB,cAAc,CAAC;GACnB;AAEDgE,EAAAA,aAAa,GAAGA,CAAC7C,QAAiB,EAAEuC,IAAyB,KAAI;IAC/D,IAAI,CAACxB,QAAQ,CACX;MACEf,QAAQ;MACRJ,OAAO,EAAE2C,IAAI,KAAK,OAAO;MACzBxC,SAAS,EAAEwC,IAAI,KAAK;KACrB,EACD,MAAM,IAAI,CAACD,oBAAoB,CAACC,IAAI,EAAEvC,QAAQ,CAAC,CAChD;GACF;EAED8C,aAAa,GAAgDjC,KAAK,IAAI;IACpEA,KAAK,CAACC,cAAc,EAAE;IACtB,MAAM;AAAEiC,MAAAA;KAAU,GAAG,IAAI,CAACxD,KAAK;AAC/BwD,IAAAA,QAAQ,IAAI;IAEZ,IAAI,CAAC7B,KAAK,EAAE;GACb;EAEDA,KAAK,GAAGA,MAAK;IACX,IAAI,CAAC9B,WAAW,GAAG,CAAC;AACpBsD,IAAAA,MAAM,CAACC,YAAY,CAAC,IAAI,CAACtD,QAAQ,CAAC;IAClC,IAAI,CAAC0B,QAAQ,CAAC;AACZpB,MAAAA,UAAU,EAAE,KAAK;AACjBC,MAAAA,OAAO,EAAE,KAAK;AACdE,MAAAA,YAAY,EAAE,KAAK;AACnBC,MAAAA,SAAS,EAAE;AACZ,KAAA,CAAC;GACH;EAEDiD,aAAa,GAAIC,OAAe,IAAI;IAClC,MAAM;AAAEpD,MAAAA;KAAS,GAAG,IAAI,CAACL,KAAK;AAC9B,IAAA,IAAIK,OAAO,EAAE;MACX,IAAI,CAACkB,QAAQ,CAAC;AACZb,QAAAA,aAAa,EAAE+C;AAChB,OAAA,CAAC;AACJ;GACD;EAED5B,WAAW,GAAG,MAAOE,IAAU,IAAI;IACjC,MAAM;MAAEC,WAAW;MAAE1C,OAAO;MAAEoE,OAAO;MAAEhE,UAAU;AAAED,MAAAA;KAAU,GAAG,IAAI,CAACM,KAAK;IAC1E,MAAM;AAAEO,MAAAA;KAAc,GAAG,IAAI,CAACN,KAAK;IAEnC,IAAIN,UAAU,IAAIY,YAAY,EAAE;AAC9B,MAAA,OAAO,KAAK;AACd;IAEA,IAAI,CAACyB,IAAI,EAAE;AACT,MAAA,MAAM,IAAIG,KAAK,CAAC,yBAAyB,CAAC;AAC5C;IAEA,IAAI,CAACX,QAAQ,CAAC;MACZtB,QAAQ,EAAE8B,IAAI,CAACK,IAAI;AACnBlC,MAAAA,WAAW,EAAE,KAAK;AAClBI,MAAAA,YAAY,EAAE;AACf,KAAA,CAAC;IAEFoD,OAAO,GAAG3B,IAAI,CAAC;IAEf,IAAI4B,MAAM,GAAG,IAAI;IAEjB,IAAI;AACFA,MAAAA,MAAM,GAAG,MAAMC,2BAAa,CAAC7B,IAAI,CAAC;KACnC,CAAC,OAAO8B,KAAK,EAAE;AACd,MAAA,IAAI,CAACR,aAAa,CAACQ,KAAK,EAAE,OAAO,CAAC;AACpC;IAEA,IAAI,CAACF,MAAM,EAAE;AACX,MAAA,OAAO,KAAK;AACd;IAEA,IAAI,CAACpC,QAAQ,CAAC;MACZlB,OAAO,EAAEyD,uBAAW,CAAC/B,IAAI,EAAE4B,MAAM,CAAC,CAACI,QAAQ,CAAC,OAAO;AACpD,KAAA,CAAC;IAEF,IAAI,CAACC,uBAAW,CAACjC,IAAI,EAAEtC,QAAQ,EAAEkE,MAAM,CAAC,EAAE;MACxC,IAAI,CAACN,aAAa,CAChB,IAAIY,sBAAa,CACf,IAAIC,QAAQ,CAAC,IAAI,EAAE;AACjBtD,QAAAA,MAAM,EAAE,GAAG;AACXuD,QAAAA,UAAU,EAAE;AACb,OAAA,CAAC,CACH,EACD,OAAO,CACR;AACD,MAAA,OAAO,KAAK;AACd;AAEA,IAAA,IAAI,CAACC,uBAAW,CAACrC,IAAI,EAAEzC,OAAO,CAAC,EAAE;MAC/B,IAAI,CAAC+D,aAAa,CAChB,IAAIY,sBAAa,CACf,IAAIC,QAAQ,CAAC,IAAI,EAAE;AACjBtD,QAAAA,MAAM,EAAE,GAAG;AACXuD,QAAAA,UAAU,EAAE;AACb,OAAA,CAAC,CACH,EACD,OAAO,CACR;AACD,MAAA,OAAO,KAAK;AACd;AAEA,IAAA,IAAInC,WAAW,EAAE;AACf;AACA,MAAA,IAAIxB,QAAQ;MACZ,IAAI;AACFA,QAAAA,QAAQ,GAAG,MAAM,IAAI,CAACsB,SAAS,CAACC,IAAI,CAAC;OACtC,CAAC,OAAO8B,KAAK,EAAE;AACd,QAAA,IAAI,CAACR,aAAa,CAACQ,KAAK,EAAE,OAAO,CAAC;AAClC,QAAA,OAAO,KAAK;AACd;AACA,MAAA,IAAI,CAACR,aAAa,CAAC7C,QAAQ,EAAE,SAAS,CAAC;AACvC,MAAA,IAAI,CAACgD,aAAa,CAACG,MAAM,CAAC;AAC1B,MAAA,OAAO,IAAI;AACb;AACA;AACA,IAAA,IAAI,CAACH,aAAa,CAACG,MAAM,CAAC;AAC1B,IAAA,IAAI,CAACN,aAAa,CAACM,MAAM,EAAE,SAAS,CAAC;AACrC,IAAA,OAAO,IAAI;GACZ;AAEDU,EAAAA,MAAMA,GAAA;IACJ,MAAM;MACJ/E,OAAO;MACPgF,aAAa;MACb7E,QAAQ;MACR8E,YAAY;MACZC,iBAAiB;MACjB9E,UAAU;MACV+E,WAAW;MACX9E,OAAO;MACP+E,aAAa;MACbC,YAAY;MACZC,gBAAgB;MAChBrF,gBAAgB;MAChBsF,YAAY;MACZC,aAAa;MACbtF,IAAI;MACJwB,IAAI;AACJ+D,MAAAA;KACD,GAAG,IAAI,CAAChF,KAAK;IAEd,MAAM;MACJS,QAAQ;MACRP,QAAQ;MACRE,UAAU;MACVD,WAAW;MACXE,OAAO;MACPC,OAAO;MACPC,YAAY;MACZC,SAAS;AACTG,MAAAA;KACD,GAAG,IAAI,CAACV,KAAK;AAEd,IAAA,oBACEgF,eAAA,CAAA,KAAA,EAAA;AACEC,MAAAA,SAAS,EAAEC,SAAI,CAAC,gBAAgB,EAAE;AAChCC,QAAAA,SAAS,EAAE,IAAI;QACf,8BAA8B,EAAE3F,IAAI,KAAK,IAAI;AAC7C,QAAA,8BAA8B,EAAEA,IAAI,KAAK,IAAI,IAAI,CAACA,IAAI;QACtD,8BAA8B,EAAEA,IAAI,KAAK,IAAI;AAC7C,QAAA,oBAAoB,EAAEU,WAAW;AACjC,QAAA,sBAAsB,EAAEI,YAAY;AACpC,QAAA,oBAAoB,EAAEH,UAAU,IAAI,CAACC,OAAO;QAC5C,oBAAoB,EAAEA,OAAO,IAAI,CAACE;AACnC,OAAA,CAAE;MACHkB,WAAW,EAAGH,KAAK,IAAK,IAAI,CAACG,WAAW,CAACH,KAAK,CAAE;MAChDD,WAAW,EAAGC,KAAK,IAAK,IAAI,CAACD,WAAW,CAACC,KAAK,CAAE;MAChDI,MAAM,EAAE,MAAOJ,KAAK,IAAK,IAAI,CAACI,MAAM,CAACJ,KAAK,CAAE;AAC5C+D,MAAAA,UAAU,EAAG/D,KAAK,IAAKA,KAAK,CAACC,cAAc,EAAG;MAAA+D,QAAA,EAAA,CAE7C,CAAC/E,YAAY,IAAI,CAACH,UAAU,iBAC3BmF,cAAA,CAACC,uBAAe,EAAA;QACd1D,WAAW,EAAE,MAAOE,IAAI,IAAK,IAAI,CAACF,WAAW,CAACE,IAAI,CAAE;AACpD5B,QAAAA,UAAU,EAAEA,UAAW;AACvBV,QAAAA,QAAQ,EAAEA,QAAS;QACnB8E,YAAY,EAAEA,YAAY,IAAIvD,IAAI,CAACC,aAAa,CAACC,uBAAQ,CAACqD,YAAY,CAAE;AACxE7E,QAAAA,UAAU,EAAEA,UAAW;AACvB+E,QAAAA,WAAW,EAAEA,WAAY;AACzB9E,QAAAA,OAAO,EAAEA,OAAQ;QACjB+E,aAAa,EACXA,aAAa,IACb1D,IAAI,CAACC,aAAa,CAACC,uBAAQ,CAACwD,aAAa,EAAE;UAAEpF,OAAO,EAAE6B,aAAa,CAAC7B,OAAO;SAAG;AAC/E,OAAA,CAEJ,EAEA,CAACiB,SAAS,IAAIJ,UAAU,KAAK,CAACC,OAAO,iBACpCkF,cAAA,CAACE,oBAAY,EAAA;AACXvF,QAAAA,QAAQ,EAAEA,QAAS;AACnBE,QAAAA,UAAU,EAAEA,UAAW;AACvBE,QAAAA,OAAO,EAAEA,OAAQ;QACjBwE,YAAY,EAAEA,YAAY,IAAI7D,IAAI,CAACC,aAAa,CAACC,uBAAQ,CAAC2D,YAAY,CAAE;QACxEC,aAAa,EAAEA,aAAa,IAAI9D,IAAI,CAACC,aAAa,CAACC,uBAAQ,CAAC4D,aAAa,CAAE;AAC3EpE,QAAAA,aAAa,EAAEA,aAAc;AAC7B+E,QAAAA,OAAO,EAAGpE,KAAK,IAAK,IAAI,CAACiC,aAAa,CAACjC,KAAK;OAAE,CAEjD,EACAjB,OAAO,IAAI,CAACE,YAAY,iBACvBgF,cAAA,CAACC,uBAAe,EAAA;QACd1D,WAAW,EAAE,MAAOE,IAAI,IAAI;UAC1B,IAAI,CAACL,KAAK,EAAE;AACZ,UAAA,MAAM,IAAI,CAACG,WAAW,CAACE,IAAI,CAAC;SAC5B;QACF5B,UAAU,EAAE,CAACC,OAAQ;AACrBX,QAAAA,QAAQ,EAAEA,QAAS;QACnB8E,YAAY,EAAEC,iBAAiB,IAAIxD,IAAI,CAACC,aAAa,CAACC,uBAAQ,CAACwE,KAAK,CAAE;AACtEhG,QAAAA,UAAU,EAAEA,UAAW;AACvB+E,QAAAA,WAAW,EAAE,IAAK;AAClB9E,QAAAA,OAAO,EAAEA,OAAQ;QACjB+E,aAAa,EACXA,aAAa,IACb1D,IAAI,CAACC,aAAa,CAACC,uBAAQ,CAACwD,aAAa,EAAE;UAAEpF,OAAO,EAAE6B,aAAa,CAAC7B,OAAO;AAAC,SAAE,CAC/E;AACDqG,QAAAA,YAAY,EAAE,IAAI,CAAChF,eAAe,CAChCH,QAAQ,IAAI,IAAI,IACd,OAAOA,QAAQ,KAAK,QAAQ,IAC5B,QAAQ,IAAIA,QAAQ,IACpB,OAAOA,QAAQ,CAACI,MAAM,KAAK,QAAQ,GACjCJ,QAAQ,CAACI,MAAM,GACfH,SAAS,CACb;AACFsE,QAAAA,cAAc,EAAEA;AAAe,OAC/B,CACH,EACAzE,YAAY,iBACXgF,cAAA,CAACM,sBAAc,EAAA;AACbzF,QAAAA,UAAU,EAAEA,UAAW;AACvBC,QAAAA,OAAO,EAAEA,OAAQ;AACjBG,QAAAA,SAAS,EAAEA,SAAU;QACrBoE,YAAY,EAAEA,YAAY,IAAI3D,IAAI,CAACC,aAAa,CAACC,uBAAQ,CAACyD,YAAY,CAAE;QACxEC,gBAAgB,EAAEA,gBAAgB,IAAI5D,IAAI,CAACC,aAAa,CAACC,uBAAQ,CAAC0D,gBAAgB,CAAE;AACpFrF,QAAAA,gBAAgB,EAAEA,gBAAiB;AACnCkG,QAAAA,OAAO,EAAGpE,KAAK,IAAK,IAAI,CAACiC,aAAa,CAACjC,KAAK;AAAE,OAAA,CAEjD,EACA,CAACf,YAAY,iBACZgF,cAAA,CAAA,KAAA,EAAA;AAAKL,QAAAA,SAAS,EAAC,wCAAwC;AAAC,QAAA,WAAA,EAAU,QAAQ;AAAAI,QAAAA,QAAA,eACxEL,eAAA,CAAA,KAAA,EAAA;AAAKC,UAAAA,SAAS,EAAC,wBAAwB;AAAAI,UAAAA,QAAA,gBACrCC,cAAA,CAAA,KAAA,EAAA;AAAKL,YAAAA,SAAS,EAAC,+BAA+B;YAAAI,QAAA,eAC5CC,cAAA,CAACO,UAAQ,EAAA;AAACrG,cAAAA,IAAI,EAAC;aACjB;AAAA,WAAK,CACL,eAAA8F,cAAA,CAACQ,aAAK,EAAA;YAAC/C,IAAI,EAAEgD,qBAAU,CAACC,UAAW;AAACf,YAAAA,SAAS,EAAC,OAAO;YAAAI,QAAA,EAClDf,aAAa,IAAItD,IAAI,CAACC,aAAa,CAACC,uBAAQ,CAACoD,aAAa;AAAC,WACvD,CACT;SAAK;AACP,OAAK,CACN;AAAA,KACE,CAAC;AAEV;;AAGF,eAAe2B,oBAAU,CAAC/G,MAAM,CAAC;AAEjC,MAAMiC,aAAa,GAAI+E,KAAa,IAAI;AACtC,EAAA,MAAMC,SAAS,GAAGD,KAAK,GAAG,OAAO;EACjC,IAAIC,SAAS,IAAI,GAAG,EAAE;IACpB,MAAMC,OAAO,GAAGC,IAAI,CAACC,KAAK,CAACH,SAAS,CAAC,KAAKA,SAAS;IACnD,OAAOC,OAAO,GAAG,CAAA,EAAGD,SAAS,CAAA,CAAE,GAAGA,SAAS,CAACI,OAAO,CAAC,CAAC,CAAC;AACxD;EACA,IAAIJ,SAAS,IAAI,IAAI,EAAE;AACrB,IAAA,OAAOA,SAAS,CAACI,OAAO,CAAC,CAAC,CAAC;AAC7B;AACA,EAAA,OAAOJ,SAAS,CAACI,OAAO,CAAC,CAAC,CAAC;AAC7B,CAAC;;;;;;"}
@@ -40,7 +40,7 @@ var UploadStep;
40
40
  UploadStep["UPLOAD_IMAGE_STEP"] = "uploadImageStep";
41
41
  })(UploadStep || (UploadStep = {}));
42
42
  class Upload extends Component {
43
- static defaultProps = {
43
+ static defaultProps = (() => ({
44
44
  animationDelay: 300,
45
45
  maxSize: MAX_SIZE_DEFAULT,
46
46
  psButtonDisabled: false,
@@ -48,7 +48,7 @@ class Upload extends Component {
48
48
  usAccept: 'image/*',
49
49
  usDisabled: false,
50
50
  usLabel: ''
51
- };
51
+ }))();
52
52
  dragCounter = 0;
53
53
  timeouts = 0;
54
54
  constructor(props) {
@@ -1 +1 @@
1
- {"version":3,"file":"Upload.mjs","sources":["../../src/upload/Upload.tsx"],"sourcesContent":["import { Plus as PlusIcon } from '@transferwise/icons';\nimport { clsx } from 'clsx';\nimport { Component } from 'react';\nimport { injectIntl, WrappedComponentProps } from 'react-intl';\n\nimport { Size, Typography } from '../common';\nimport Title from '../title';\n\nimport messages from './Upload.messages';\nimport { UploadImageStep, ProcessingStep, CompleteStep } from './steps';\nimport { postData, asyncFileRead, isSizeValid, isTypeValid, getFileType } from './utils';\nimport { PostDataFetcher, PostDataHTTPOptions, ResponseError } from './utils/postData/postData';\nimport { ProcessIndicatorStatus } from '../processIndicator';\n\nexport const MAX_SIZE_DEFAULT = 5000000;\n\nexport enum UploadStep {\n UPLOAD_IMAGE_STEP = 'uploadImageStep',\n}\n\nexport interface UploadProps extends WrappedComponentProps {\n animationDelay?: number;\n csButtonText?: string;\n csFailureText?: string;\n csSuccessText?: string;\n csTooLargeMessage?: string;\n csWrongTypeMessage?: string;\n httpOptions?: PostDataHTTPOptions & {\n fileInputName?: string;\n data?: Record<string, string | Blob>;\n };\n /**\n * You can provide a fetcher function with the same interface as the global fetch function, which is used by default.\n * function fetcher(input: RequestInfo, init?: RequestInit): Promise<Response>\n */\n fetcher?: PostDataFetcher;\n maxSize?: number;\n psButtonText?: string;\n psButtonDisabled?: boolean;\n psProcessingText?: string;\n size?: `${Size.SMALL | Size.MEDIUM | Size.LARGE}`;\n /**\n * You can provide multiple rules separated by comma, e.g.: \"application/pdf,image/*\".\n * Using \"*\" will allow every file type to be uploaded.\n */\n usAccept?: string;\n usButtonText?: string;\n usButtonRetryText?: string;\n usDisabled?: boolean;\n usDropMessage?: string;\n usHelpImage?: React.ReactNode;\n usLabel?: string;\n usPlaceholder?: string;\n /**\n * Override for the [InlineAlert icon's default, accessible name](/?path=/docs/other-statusicon-accessibility--docs)\n * announced by the screen readers\n * */\n errorIconLabel?: string;\n /** @deprecated Only a single variant exists, please remove this prop. */\n uploadStep?: `${UploadStep}`;\n onCancel?: () => void;\n onFailure?: (error: unknown) => void;\n onStart?: (file: File) => void;\n onSuccess?: (response: string | Response, fileName: string) => void;\n}\n\ninterface UploadState {\n fileName: string;\n isDroppable: boolean;\n isComplete: boolean;\n isError: boolean;\n isImage: boolean;\n isProcessing: boolean;\n isSuccess: boolean;\n response: unknown;\n uploadedImage: string | undefined;\n}\n\nexport class Upload extends Component<UploadProps, UploadState> {\n declare props: UploadProps & Required<Pick<UploadProps, keyof typeof Upload.defaultProps>>;\n\n static defaultProps = {\n animationDelay: 300,\n maxSize: MAX_SIZE_DEFAULT,\n psButtonDisabled: false,\n size: 'md',\n usAccept: 'image/*',\n usDisabled: false,\n usLabel: '',\n } satisfies Partial<UploadProps>;\n\n dragCounter = 0;\n timeouts = 0;\n\n constructor(props: UploadProps) {\n super(props);\n\n this.state = {\n fileName: '',\n isDroppable: false,\n isComplete: false,\n isError: false,\n isImage: false,\n isProcessing: false,\n isSuccess: false,\n response: undefined,\n uploadedImage: undefined,\n };\n }\n\n getErrorMessage(status?: number) {\n const { csFailureText, csTooLargeMessage, csWrongTypeMessage, maxSize, intl } = this.props;\n switch (status) {\n case 413:\n return (\n csTooLargeMessage ||\n intl.formatMessage(messages.csTooLargeMessage, {\n maxSize: roundFileSize(maxSize),\n })\n );\n case 415:\n return csWrongTypeMessage || intl.formatMessage(messages.csWrongTypeMessage);\n default:\n return csFailureText || intl.formatMessage(messages.csFailureText);\n }\n }\n\n onDragLeave(event: React.DragEvent<HTMLDivElement>) {\n event.preventDefault();\n this.dragCounter -= 1;\n if (this.dragCounter === 0) {\n this.setState({ isDroppable: false });\n }\n }\n\n onDragEnter(event: React.DragEvent<HTMLDivElement>) {\n event.preventDefault();\n this.dragCounter += 1;\n const { usDisabled } = this.props;\n const { isProcessing } = this.state;\n if (this.dragCounter === 1 && !usDisabled && !isProcessing) {\n this.setState({ isDroppable: true });\n }\n }\n\n async onDrop(event: React.DragEvent<HTMLDivElement>) {\n const { isProcessing } = this.state;\n event.preventDefault();\n if (!isProcessing) {\n this.reset();\n }\n\n if (event.dataTransfer?.files?.[0]) {\n await this.fileDropped(event.dataTransfer.files[0]);\n }\n }\n\n asyncPost = async (file: File) => {\n const { httpOptions, fetcher } = this.props;\n if (httpOptions == null) {\n throw new Error('Cannot find HTTP options');\n }\n\n const { fileInputName = file.name, data = {} } = httpOptions;\n\n const formData = new FormData();\n formData.append(fileInputName, file);\n Object.keys(data).forEach((key) => formData.append(key, data[key]));\n return postData(httpOptions, formData, fetcher);\n };\n\n handleUploadComplete = (type: 'success' | 'error', response: unknown) => {\n const { animationDelay, onSuccess, onFailure } = this.props;\n const { fileName } = this.state;\n\n window.clearTimeout(this.timeouts);\n this.timeouts = window.setTimeout(() => {\n this.setState(\n {\n isProcessing: false,\n isComplete: true,\n },\n () => {\n if (type === 'success') {\n onSuccess?.(response as string | Response, fileName);\n } else {\n onFailure?.(response);\n }\n },\n );\n }, animationDelay);\n };\n\n asyncResponse = (response: unknown, type: 'success' | 'error') => {\n this.setState(\n {\n response,\n isError: type === 'error',\n isSuccess: type === 'success',\n },\n () => this.handleUploadComplete(type, response),\n );\n };\n\n handleOnClear: React.MouseEventHandler<HTMLButtonElement> = (event) => {\n event.preventDefault();\n const { onCancel } = this.props;\n onCancel?.();\n\n this.reset();\n };\n\n reset = () => {\n this.dragCounter = 0;\n window.clearTimeout(this.timeouts);\n this.setState({\n isComplete: false,\n isError: false,\n isProcessing: false,\n isSuccess: false,\n });\n };\n\n showDataImage = (dataUrl: string) => {\n const { isImage } = this.state;\n if (isImage) {\n this.setState({\n uploadedImage: dataUrl,\n });\n }\n };\n\n fileDropped = async (file: File) => {\n const { httpOptions, maxSize, onStart, usDisabled, usAccept } = this.props;\n const { isProcessing } = this.state;\n\n if (usDisabled || isProcessing) {\n return false;\n }\n\n if (!file) {\n throw new Error('Could not retrieve file');\n }\n\n this.setState({\n fileName: file.name,\n isDroppable: false,\n isProcessing: true,\n });\n\n onStart?.(file);\n\n let file64 = null;\n\n try {\n file64 = await asyncFileRead(file);\n } catch (error) {\n this.asyncResponse(error, 'error');\n }\n\n if (!file64) {\n return false;\n }\n\n this.setState({\n isImage: getFileType(file, file64).includes('image'),\n });\n\n if (!isTypeValid(file, usAccept, file64)) {\n this.asyncResponse(\n new ResponseError(\n new Response(null, {\n status: 415,\n statusText: 'Unsupported Media Type',\n }),\n ),\n 'error',\n );\n return false;\n }\n\n if (!isSizeValid(file, maxSize)) {\n this.asyncResponse(\n new ResponseError(\n new Response(null, {\n status: 413,\n statusText: 'Request Entity Too Large',\n }),\n ),\n 'error',\n );\n return false;\n }\n\n if (httpOptions) {\n // Post the file to provided endpoint\n let response;\n try {\n response = await this.asyncPost(file);\n } catch (error) {\n this.asyncResponse(error, 'error');\n return false;\n }\n this.asyncResponse(response, 'success');\n this.showDataImage(file64);\n return true;\n }\n // Post on form submit. And return the encoded image.\n this.showDataImage(file64);\n this.asyncResponse(file64, 'success');\n return true;\n };\n\n render() {\n const {\n maxSize,\n usDropMessage,\n usAccept,\n usButtonText,\n usButtonRetryText,\n usDisabled,\n usHelpImage,\n usLabel,\n usPlaceholder,\n psButtonText,\n psProcessingText,\n psButtonDisabled,\n csButtonText,\n csSuccessText,\n size,\n intl,\n errorIconLabel,\n } = this.props;\n\n const {\n response,\n fileName,\n isComplete,\n isDroppable,\n isError,\n isImage,\n isProcessing,\n isSuccess,\n uploadedImage,\n } = this.state;\n\n return (\n <div\n className={clsx('droppable-area', {\n droppable: true,\n 'tw-droppable-sm droppable-sm': size === 'sm',\n 'tw-droppable-md droppable-md': size === 'md' || !size,\n 'tw-droppable-lg droppable-lg': size === 'lg',\n 'droppable-dropping': isDroppable,\n 'droppable-processing': isProcessing,\n 'droppable-complete': isComplete && !isError,\n 'droppable-negative': isError && !isProcessing,\n })}\n onDragEnter={(event) => this.onDragEnter(event)}\n onDragLeave={(event) => this.onDragLeave(event)}\n onDrop={async (event) => this.onDrop(event)}\n onDragOver={(event) => event.preventDefault()}\n >\n {!isProcessing && !isComplete && (\n <UploadImageStep\n fileDropped={async (file) => this.fileDropped(file)}\n isComplete={isComplete}\n usAccept={usAccept}\n usButtonText={usButtonText || intl.formatMessage(messages.usButtonText)}\n usDisabled={usDisabled}\n usHelpImage={usHelpImage}\n usLabel={usLabel}\n usPlaceholder={\n usPlaceholder ||\n intl.formatMessage(messages.usPlaceholder, { maxSize: roundFileSize(maxSize) })\n }\n />\n )}\n\n {(isSuccess || isComplete) && !isError && (\n <CompleteStep\n fileName={fileName}\n isComplete={isComplete}\n isImage={isImage}\n csButtonText={csButtonText || intl.formatMessage(messages.csButtonText)}\n csSuccessText={csSuccessText || intl.formatMessage(messages.csSuccessText)}\n uploadedImage={uploadedImage}\n onClear={(event) => this.handleOnClear(event)}\n />\n )}\n {isError && !isProcessing && (\n <UploadImageStep\n fileDropped={async (file) => {\n this.reset();\n await this.fileDropped(file);\n }}\n isComplete={!isError}\n usAccept={usAccept}\n usButtonText={usButtonRetryText || intl.formatMessage(messages.retry)}\n usDisabled={usDisabled}\n usHelpImage={null}\n usLabel={usLabel}\n usPlaceholder={\n usPlaceholder ||\n intl.formatMessage(messages.usPlaceholder, { maxSize: roundFileSize(maxSize) })\n }\n errorMessage={this.getErrorMessage(\n response != null &&\n typeof response === 'object' &&\n 'status' in response &&\n typeof response.status === 'number'\n ? response.status\n : undefined,\n )}\n errorIconLabel={errorIconLabel}\n />\n )}\n {isProcessing && (\n <ProcessingStep\n isComplete={isComplete}\n isError={isError}\n isSuccess={isSuccess}\n psButtonText={psButtonText || intl.formatMessage(messages.psButtonText)}\n psProcessingText={psProcessingText || intl.formatMessage(messages.psProcessingText)}\n psButtonDisabled={psButtonDisabled}\n onClear={(event) => this.handleOnClear(event)}\n />\n )}\n {!isProcessing && (\n <div className=\"droppable-dropping-card droppable-card\" aria-live=\"polite\">\n <div className=\"droppable-card-content\">\n <div className=\"circle circle-sm text-primary\">\n <PlusIcon size=\"16\" />\n </div>\n <Title type={Typography.TITLE_BODY} className=\"m-t-3\">\n {usDropMessage || intl.formatMessage(messages.usDropMessage)}\n </Title>\n </div>\n </div>\n )}\n </div>\n );\n }\n}\n\nexport default injectIntl(Upload);\n\nconst roundFileSize = (bytes: number) => {\n const megabytes = bytes / 1000000;\n if (megabytes >= 0.1) {\n const isRound = Math.floor(megabytes) === megabytes;\n return isRound ? `${megabytes}` : megabytes.toFixed(1);\n }\n if (megabytes >= 0.01) {\n return megabytes.toFixed(2);\n }\n return megabytes.toFixed(3);\n};\n"],"names":["MAX_SIZE_DEFAULT","UploadStep","Upload","Component","defaultProps","animationDelay","maxSize","psButtonDisabled","size","usAccept","usDisabled","usLabel","dragCounter","timeouts","constructor","props","state","fileName","isDroppable","isComplete","isError","isImage","isProcessing","isSuccess","response","undefined","uploadedImage","getErrorMessage","status","csFailureText","csTooLargeMessage","csWrongTypeMessage","intl","formatMessage","messages","roundFileSize","onDragLeave","event","preventDefault","setState","onDragEnter","onDrop","reset","dataTransfer","files","fileDropped","asyncPost","file","httpOptions","fetcher","Error","fileInputName","name","data","formData","FormData","append","Object","keys","forEach","key","postData","handleUploadComplete","type","onSuccess","onFailure","window","clearTimeout","setTimeout","asyncResponse","handleOnClear","onCancel","showDataImage","dataUrl","onStart","file64","asyncFileRead","error","getFileType","includes","isTypeValid","ResponseError","Response","statusText","isSizeValid","render","usDropMessage","usButtonText","usButtonRetryText","usHelpImage","usPlaceholder","psButtonText","psProcessingText","csButtonText","csSuccessText","errorIconLabel","_jsxs","className","clsx","droppable","onDragOver","children","_jsx","UploadImageStep","CompleteStep","onClear","retry","errorMessage","ProcessingStep","PlusIcon","Title","Typography","TITLE_BODY","injectIntl","bytes","megabytes","isRound","Math","floor","toFixed"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcO,MAAMA,gBAAgB,GAAG;IAEpBC;AAAZ,CAAA,UAAYA,UAAU,EAAA;AACpBA,EAAAA,UAAA,CAAA,mBAAA,CAAA,GAAA,iBAAqC;AACvC,CAAC,EAFWA,UAAU,KAAVA,UAAU,GAErB,EAAA,CAAA,CAAA;AA4DK,MAAOC,MAAO,SAAQC,SAAmC,CAAA;AAG7D,EAAA,OAAOC,YAAY,GAAG;AACpBC,IAAAA,cAAc,EAAE,GAAG;AACnBC,IAAAA,OAAO,EAAEN,gBAAgB;AACzBO,IAAAA,gBAAgB,EAAE,KAAK;AACvBC,IAAAA,IAAI,EAAE,IAAI;AACVC,IAAAA,QAAQ,EAAE,SAAS;AACnBC,IAAAA,UAAU,EAAE,KAAK;AACjBC,IAAAA,OAAO,EAAE;GACqB;AAEhCC,EAAAA,WAAW,GAAG,CAAC;AACfC,EAAAA,QAAQ,GAAG,CAAC;EAEZC,WAAAA,CAAYC,KAAkB,EAAA;IAC5B,KAAK,CAACA,KAAK,CAAC;IAEZ,IAAI,CAACC,KAAK,GAAG;AACXC,MAAAA,QAAQ,EAAE,EAAE;AACZC,MAAAA,WAAW,EAAE,KAAK;AAClBC,MAAAA,UAAU,EAAE,KAAK;AACjBC,MAAAA,OAAO,EAAE,KAAK;AACdC,MAAAA,OAAO,EAAE,KAAK;AACdC,MAAAA,YAAY,EAAE,KAAK;AACnBC,MAAAA,SAAS,EAAE,KAAK;AAChBC,MAAAA,QAAQ,EAAEC,SAAS;AACnBC,MAAAA,aAAa,EAAED;KAChB;AACH;EAEAE,eAAeA,CAACC,MAAe,EAAA;IAC7B,MAAM;MAAEC,aAAa;MAAEC,iBAAiB;MAAEC,kBAAkB;MAAEzB,OAAO;AAAE0B,MAAAA;KAAM,GAAG,IAAI,CAACjB,KAAK;AAC1F,IAAA,QAAQa,MAAM;AACZ,MAAA,KAAK,GAAG;QACN,OACEE,iBAAiB,IACjBE,IAAI,CAACC,aAAa,CAACC,QAAQ,CAACJ,iBAAiB,EAAE;UAC7CxB,OAAO,EAAE6B,aAAa,CAAC7B,OAAO;AAC/B,SAAA,CAAC;AAEN,MAAA,KAAK,GAAG;QACN,OAAOyB,kBAAkB,IAAIC,IAAI,CAACC,aAAa,CAACC,QAAQ,CAACH,kBAAkB,CAAC;AAC9E,MAAA;QACE,OAAOF,aAAa,IAAIG,IAAI,CAACC,aAAa,CAACC,QAAQ,CAACL,aAAa,CAAC;AACtE;AACF;EAEAO,WAAWA,CAACC,KAAsC,EAAA;IAChDA,KAAK,CAACC,cAAc,EAAE;IACtB,IAAI,CAAC1B,WAAW,IAAI,CAAC;AACrB,IAAA,IAAI,IAAI,CAACA,WAAW,KAAK,CAAC,EAAE;MAC1B,IAAI,CAAC2B,QAAQ,CAAC;AAAErB,QAAAA,WAAW,EAAE;AAAO,OAAA,CAAC;AACvC;AACF;EAEAsB,WAAWA,CAACH,KAAsC,EAAA;IAChDA,KAAK,CAACC,cAAc,EAAE;IACtB,IAAI,CAAC1B,WAAW,IAAI,CAAC;IACrB,MAAM;AAAEF,MAAAA;KAAY,GAAG,IAAI,CAACK,KAAK;IACjC,MAAM;AAAEO,MAAAA;KAAc,GAAG,IAAI,CAACN,KAAK;IACnC,IAAI,IAAI,CAACJ,WAAW,KAAK,CAAC,IAAI,CAACF,UAAU,IAAI,CAACY,YAAY,EAAE;MAC1D,IAAI,CAACiB,QAAQ,CAAC;AAAErB,QAAAA,WAAW,EAAE;AAAM,OAAA,CAAC;AACtC;AACF;EAEA,MAAMuB,MAAMA,CAACJ,KAAsC,EAAA;IACjD,MAAM;AAAEf,MAAAA;KAAc,GAAG,IAAI,CAACN,KAAK;IACnCqB,KAAK,CAACC,cAAc,EAAE;IACtB,IAAI,CAAChB,YAAY,EAAE;MACjB,IAAI,CAACoB,KAAK,EAAE;AACd;IAEA,IAAIL,KAAK,CAACM,YAAY,EAAEC,KAAK,GAAG,CAAC,CAAC,EAAE;AAClC,MAAA,MAAM,IAAI,CAACC,WAAW,CAACR,KAAK,CAACM,YAAY,CAACC,KAAK,CAAC,CAAC,CAAC,CAAC;AACrD;AACF;EAEAE,SAAS,GAAG,MAAOC,IAAU,IAAI;IAC/B,MAAM;MAAEC,WAAW;AAAEC,MAAAA;KAAS,GAAG,IAAI,CAAClC,KAAK;IAC3C,IAAIiC,WAAW,IAAI,IAAI,EAAE;AACvB,MAAA,MAAM,IAAIE,KAAK,CAAC,0BAA0B,CAAC;AAC7C;IAEA,MAAM;MAAEC,aAAa,GAAGJ,IAAI,CAACK,IAAI;AAAEC,MAAAA,IAAI,GAAG;AAAI,KAAA,GAAGL,WAAW;AAE5D,IAAA,MAAMM,QAAQ,GAAG,IAAIC,QAAQ,EAAE;AAC/BD,IAAAA,QAAQ,CAACE,MAAM,CAACL,aAAa,EAAEJ,IAAI,CAAC;IACpCU,MAAM,CAACC,IAAI,CAACL,IAAI,CAAC,CAACM,OAAO,CAAEC,GAAG,IAAKN,QAAQ,CAACE,MAAM,CAACI,GAAG,EAAEP,IAAI,CAACO,GAAG,CAAC,CAAC,CAAC;AACnE,IAAA,OAAOC,QAAQ,CAACb,WAAW,EAAEM,QAAQ,EAAEL,OAAO,CAAC;GAChD;AAEDa,EAAAA,oBAAoB,GAAGA,CAACC,IAAyB,EAAEvC,QAAiB,KAAI;IACtE,MAAM;MAAEnB,cAAc;MAAE2D,SAAS;AAAEC,MAAAA;KAAW,GAAG,IAAI,CAAClD,KAAK;IAC3D,MAAM;AAAEE,MAAAA;KAAU,GAAG,IAAI,CAACD,KAAK;AAE/BkD,IAAAA,MAAM,CAACC,YAAY,CAAC,IAAI,CAACtD,QAAQ,CAAC;AAClC,IAAA,IAAI,CAACA,QAAQ,GAAGqD,MAAM,CAACE,UAAU,CAAC,MAAK;MACrC,IAAI,CAAC7B,QAAQ,CACX;AACEjB,QAAAA,YAAY,EAAE,KAAK;AACnBH,QAAAA,UAAU,EAAE;AACb,OAAA,EACD,MAAK;QACH,IAAI4C,IAAI,KAAK,SAAS,EAAE;AACtBC,UAAAA,SAAS,GAAGxC,QAA6B,EAAEP,QAAQ,CAAC;AACtD,SAAC,MAAM;UACLgD,SAAS,GAAGzC,QAAQ,CAAC;AACvB;AACF,OAAC,CACF;KACF,EAAEnB,cAAc,CAAC;GACnB;AAEDgE,EAAAA,aAAa,GAAGA,CAAC7C,QAAiB,EAAEuC,IAAyB,KAAI;IAC/D,IAAI,CAACxB,QAAQ,CACX;MACEf,QAAQ;MACRJ,OAAO,EAAE2C,IAAI,KAAK,OAAO;MACzBxC,SAAS,EAAEwC,IAAI,KAAK;KACrB,EACD,MAAM,IAAI,CAACD,oBAAoB,CAACC,IAAI,EAAEvC,QAAQ,CAAC,CAChD;GACF;EAED8C,aAAa,GAAgDjC,KAAK,IAAI;IACpEA,KAAK,CAACC,cAAc,EAAE;IACtB,MAAM;AAAEiC,MAAAA;KAAU,GAAG,IAAI,CAACxD,KAAK;AAC/BwD,IAAAA,QAAQ,IAAI;IAEZ,IAAI,CAAC7B,KAAK,EAAE;GACb;EAEDA,KAAK,GAAGA,MAAK;IACX,IAAI,CAAC9B,WAAW,GAAG,CAAC;AACpBsD,IAAAA,MAAM,CAACC,YAAY,CAAC,IAAI,CAACtD,QAAQ,CAAC;IAClC,IAAI,CAAC0B,QAAQ,CAAC;AACZpB,MAAAA,UAAU,EAAE,KAAK;AACjBC,MAAAA,OAAO,EAAE,KAAK;AACdE,MAAAA,YAAY,EAAE,KAAK;AACnBC,MAAAA,SAAS,EAAE;AACZ,KAAA,CAAC;GACH;EAEDiD,aAAa,GAAIC,OAAe,IAAI;IAClC,MAAM;AAAEpD,MAAAA;KAAS,GAAG,IAAI,CAACL,KAAK;AAC9B,IAAA,IAAIK,OAAO,EAAE;MACX,IAAI,CAACkB,QAAQ,CAAC;AACZb,QAAAA,aAAa,EAAE+C;AAChB,OAAA,CAAC;AACJ;GACD;EAED5B,WAAW,GAAG,MAAOE,IAAU,IAAI;IACjC,MAAM;MAAEC,WAAW;MAAE1C,OAAO;MAAEoE,OAAO;MAAEhE,UAAU;AAAED,MAAAA;KAAU,GAAG,IAAI,CAACM,KAAK;IAC1E,MAAM;AAAEO,MAAAA;KAAc,GAAG,IAAI,CAACN,KAAK;IAEnC,IAAIN,UAAU,IAAIY,YAAY,EAAE;AAC9B,MAAA,OAAO,KAAK;AACd;IAEA,IAAI,CAACyB,IAAI,EAAE;AACT,MAAA,MAAM,IAAIG,KAAK,CAAC,yBAAyB,CAAC;AAC5C;IAEA,IAAI,CAACX,QAAQ,CAAC;MACZtB,QAAQ,EAAE8B,IAAI,CAACK,IAAI;AACnBlC,MAAAA,WAAW,EAAE,KAAK;AAClBI,MAAAA,YAAY,EAAE;AACf,KAAA,CAAC;IAEFoD,OAAO,GAAG3B,IAAI,CAAC;IAEf,IAAI4B,MAAM,GAAG,IAAI;IAEjB,IAAI;AACFA,MAAAA,MAAM,GAAG,MAAMC,aAAa,CAAC7B,IAAI,CAAC;KACnC,CAAC,OAAO8B,KAAK,EAAE;AACd,MAAA,IAAI,CAACR,aAAa,CAACQ,KAAK,EAAE,OAAO,CAAC;AACpC;IAEA,IAAI,CAACF,MAAM,EAAE;AACX,MAAA,OAAO,KAAK;AACd;IAEA,IAAI,CAACpC,QAAQ,CAAC;MACZlB,OAAO,EAAEyD,WAAW,CAAC/B,IAAI,EAAE4B,MAAM,CAAC,CAACI,QAAQ,CAAC,OAAO;AACpD,KAAA,CAAC;IAEF,IAAI,CAACC,WAAW,CAACjC,IAAI,EAAEtC,QAAQ,EAAEkE,MAAM,CAAC,EAAE;MACxC,IAAI,CAACN,aAAa,CAChB,IAAIY,aAAa,CACf,IAAIC,QAAQ,CAAC,IAAI,EAAE;AACjBtD,QAAAA,MAAM,EAAE,GAAG;AACXuD,QAAAA,UAAU,EAAE;AACb,OAAA,CAAC,CACH,EACD,OAAO,CACR;AACD,MAAA,OAAO,KAAK;AACd;AAEA,IAAA,IAAI,CAACC,WAAW,CAACrC,IAAI,EAAEzC,OAAO,CAAC,EAAE;MAC/B,IAAI,CAAC+D,aAAa,CAChB,IAAIY,aAAa,CACf,IAAIC,QAAQ,CAAC,IAAI,EAAE;AACjBtD,QAAAA,MAAM,EAAE,GAAG;AACXuD,QAAAA,UAAU,EAAE;AACb,OAAA,CAAC,CACH,EACD,OAAO,CACR;AACD,MAAA,OAAO,KAAK;AACd;AAEA,IAAA,IAAInC,WAAW,EAAE;AACf;AACA,MAAA,IAAIxB,QAAQ;MACZ,IAAI;AACFA,QAAAA,QAAQ,GAAG,MAAM,IAAI,CAACsB,SAAS,CAACC,IAAI,CAAC;OACtC,CAAC,OAAO8B,KAAK,EAAE;AACd,QAAA,IAAI,CAACR,aAAa,CAACQ,KAAK,EAAE,OAAO,CAAC;AAClC,QAAA,OAAO,KAAK;AACd;AACA,MAAA,IAAI,CAACR,aAAa,CAAC7C,QAAQ,EAAE,SAAS,CAAC;AACvC,MAAA,IAAI,CAACgD,aAAa,CAACG,MAAM,CAAC;AAC1B,MAAA,OAAO,IAAI;AACb;AACA;AACA,IAAA,IAAI,CAACH,aAAa,CAACG,MAAM,CAAC;AAC1B,IAAA,IAAI,CAACN,aAAa,CAACM,MAAM,EAAE,SAAS,CAAC;AACrC,IAAA,OAAO,IAAI;GACZ;AAEDU,EAAAA,MAAMA,GAAA;IACJ,MAAM;MACJ/E,OAAO;MACPgF,aAAa;MACb7E,QAAQ;MACR8E,YAAY;MACZC,iBAAiB;MACjB9E,UAAU;MACV+E,WAAW;MACX9E,OAAO;MACP+E,aAAa;MACbC,YAAY;MACZC,gBAAgB;MAChBrF,gBAAgB;MAChBsF,YAAY;MACZC,aAAa;MACbtF,IAAI;MACJwB,IAAI;AACJ+D,MAAAA;KACD,GAAG,IAAI,CAAChF,KAAK;IAEd,MAAM;MACJS,QAAQ;MACRP,QAAQ;MACRE,UAAU;MACVD,WAAW;MACXE,OAAO;MACPC,OAAO;MACPC,YAAY;MACZC,SAAS;AACTG,MAAAA;KACD,GAAG,IAAI,CAACV,KAAK;AAEd,IAAA,oBACEgF,IAAA,CAAA,KAAA,EAAA;AACEC,MAAAA,SAAS,EAAEC,IAAI,CAAC,gBAAgB,EAAE;AAChCC,QAAAA,SAAS,EAAE,IAAI;QACf,8BAA8B,EAAE3F,IAAI,KAAK,IAAI;AAC7C,QAAA,8BAA8B,EAAEA,IAAI,KAAK,IAAI,IAAI,CAACA,IAAI;QACtD,8BAA8B,EAAEA,IAAI,KAAK,IAAI;AAC7C,QAAA,oBAAoB,EAAEU,WAAW;AACjC,QAAA,sBAAsB,EAAEI,YAAY;AACpC,QAAA,oBAAoB,EAAEH,UAAU,IAAI,CAACC,OAAO;QAC5C,oBAAoB,EAAEA,OAAO,IAAI,CAACE;AACnC,OAAA,CAAE;MACHkB,WAAW,EAAGH,KAAK,IAAK,IAAI,CAACG,WAAW,CAACH,KAAK,CAAE;MAChDD,WAAW,EAAGC,KAAK,IAAK,IAAI,CAACD,WAAW,CAACC,KAAK,CAAE;MAChDI,MAAM,EAAE,MAAOJ,KAAK,IAAK,IAAI,CAACI,MAAM,CAACJ,KAAK,CAAE;AAC5C+D,MAAAA,UAAU,EAAG/D,KAAK,IAAKA,KAAK,CAACC,cAAc,EAAG;MAAA+D,QAAA,EAAA,CAE7C,CAAC/E,YAAY,IAAI,CAACH,UAAU,iBAC3BmF,GAAA,CAACC,eAAe,EAAA;QACd1D,WAAW,EAAE,MAAOE,IAAI,IAAK,IAAI,CAACF,WAAW,CAACE,IAAI,CAAE;AACpD5B,QAAAA,UAAU,EAAEA,UAAW;AACvBV,QAAAA,QAAQ,EAAEA,QAAS;QACnB8E,YAAY,EAAEA,YAAY,IAAIvD,IAAI,CAACC,aAAa,CAACC,QAAQ,CAACqD,YAAY,CAAE;AACxE7E,QAAAA,UAAU,EAAEA,UAAW;AACvB+E,QAAAA,WAAW,EAAEA,WAAY;AACzB9E,QAAAA,OAAO,EAAEA,OAAQ;QACjB+E,aAAa,EACXA,aAAa,IACb1D,IAAI,CAACC,aAAa,CAACC,QAAQ,CAACwD,aAAa,EAAE;UAAEpF,OAAO,EAAE6B,aAAa,CAAC7B,OAAO;SAAG;AAC/E,OAAA,CAEJ,EAEA,CAACiB,SAAS,IAAIJ,UAAU,KAAK,CAACC,OAAO,iBACpCkF,GAAA,CAACE,YAAY,EAAA;AACXvF,QAAAA,QAAQ,EAAEA,QAAS;AACnBE,QAAAA,UAAU,EAAEA,UAAW;AACvBE,QAAAA,OAAO,EAAEA,OAAQ;QACjBwE,YAAY,EAAEA,YAAY,IAAI7D,IAAI,CAACC,aAAa,CAACC,QAAQ,CAAC2D,YAAY,CAAE;QACxEC,aAAa,EAAEA,aAAa,IAAI9D,IAAI,CAACC,aAAa,CAACC,QAAQ,CAAC4D,aAAa,CAAE;AAC3EpE,QAAAA,aAAa,EAAEA,aAAc;AAC7B+E,QAAAA,OAAO,EAAGpE,KAAK,IAAK,IAAI,CAACiC,aAAa,CAACjC,KAAK;OAAE,CAEjD,EACAjB,OAAO,IAAI,CAACE,YAAY,iBACvBgF,GAAA,CAACC,eAAe,EAAA;QACd1D,WAAW,EAAE,MAAOE,IAAI,IAAI;UAC1B,IAAI,CAACL,KAAK,EAAE;AACZ,UAAA,MAAM,IAAI,CAACG,WAAW,CAACE,IAAI,CAAC;SAC5B;QACF5B,UAAU,EAAE,CAACC,OAAQ;AACrBX,QAAAA,QAAQ,EAAEA,QAAS;QACnB8E,YAAY,EAAEC,iBAAiB,IAAIxD,IAAI,CAACC,aAAa,CAACC,QAAQ,CAACwE,KAAK,CAAE;AACtEhG,QAAAA,UAAU,EAAEA,UAAW;AACvB+E,QAAAA,WAAW,EAAE,IAAK;AAClB9E,QAAAA,OAAO,EAAEA,OAAQ;QACjB+E,aAAa,EACXA,aAAa,IACb1D,IAAI,CAACC,aAAa,CAACC,QAAQ,CAACwD,aAAa,EAAE;UAAEpF,OAAO,EAAE6B,aAAa,CAAC7B,OAAO;AAAC,SAAE,CAC/E;AACDqG,QAAAA,YAAY,EAAE,IAAI,CAAChF,eAAe,CAChCH,QAAQ,IAAI,IAAI,IACd,OAAOA,QAAQ,KAAK,QAAQ,IAC5B,QAAQ,IAAIA,QAAQ,IACpB,OAAOA,QAAQ,CAACI,MAAM,KAAK,QAAQ,GACjCJ,QAAQ,CAACI,MAAM,GACfH,SAAS,CACb;AACFsE,QAAAA,cAAc,EAAEA;AAAe,OAC/B,CACH,EACAzE,YAAY,iBACXgF,GAAA,CAACM,cAAc,EAAA;AACbzF,QAAAA,UAAU,EAAEA,UAAW;AACvBC,QAAAA,OAAO,EAAEA,OAAQ;AACjBG,QAAAA,SAAS,EAAEA,SAAU;QACrBoE,YAAY,EAAEA,YAAY,IAAI3D,IAAI,CAACC,aAAa,CAACC,QAAQ,CAACyD,YAAY,CAAE;QACxEC,gBAAgB,EAAEA,gBAAgB,IAAI5D,IAAI,CAACC,aAAa,CAACC,QAAQ,CAAC0D,gBAAgB,CAAE;AACpFrF,QAAAA,gBAAgB,EAAEA,gBAAiB;AACnCkG,QAAAA,OAAO,EAAGpE,KAAK,IAAK,IAAI,CAACiC,aAAa,CAACjC,KAAK;AAAE,OAAA,CAEjD,EACA,CAACf,YAAY,iBACZgF,GAAA,CAAA,KAAA,EAAA;AAAKL,QAAAA,SAAS,EAAC,wCAAwC;AAAC,QAAA,WAAA,EAAU,QAAQ;AAAAI,QAAAA,QAAA,eACxEL,IAAA,CAAA,KAAA,EAAA;AAAKC,UAAAA,SAAS,EAAC,wBAAwB;AAAAI,UAAAA,QAAA,gBACrCC,GAAA,CAAA,KAAA,EAAA;AAAKL,YAAAA,SAAS,EAAC,+BAA+B;YAAAI,QAAA,eAC5CC,GAAA,CAACO,IAAQ,EAAA;AAACrG,cAAAA,IAAI,EAAC;aACjB;AAAA,WAAK,CACL,eAAA8F,GAAA,CAACQ,KAAK,EAAA;YAAC/C,IAAI,EAAEgD,UAAU,CAACC,UAAW;AAACf,YAAAA,SAAS,EAAC,OAAO;YAAAI,QAAA,EAClDf,aAAa,IAAItD,IAAI,CAACC,aAAa,CAACC,QAAQ,CAACoD,aAAa;AAAC,WACvD,CACT;SAAK;AACP,OAAK,CACN;AAAA,KACE,CAAC;AAEV;;AAGF,eAAe2B,UAAU,CAAC/G,MAAM,CAAC;AAEjC,MAAMiC,aAAa,GAAI+E,KAAa,IAAI;AACtC,EAAA,MAAMC,SAAS,GAAGD,KAAK,GAAG,OAAO;EACjC,IAAIC,SAAS,IAAI,GAAG,EAAE;IACpB,MAAMC,OAAO,GAAGC,IAAI,CAACC,KAAK,CAACH,SAAS,CAAC,KAAKA,SAAS;IACnD,OAAOC,OAAO,GAAG,CAAA,EAAGD,SAAS,CAAA,CAAE,GAAGA,SAAS,CAACI,OAAO,CAAC,CAAC,CAAC;AACxD;EACA,IAAIJ,SAAS,IAAI,IAAI,EAAE;AACrB,IAAA,OAAOA,SAAS,CAACI,OAAO,CAAC,CAAC,CAAC;AAC7B;AACA,EAAA,OAAOJ,SAAS,CAACI,OAAO,CAAC,CAAC,CAAC;AAC7B,CAAC;;;;"}
1
+ {"version":3,"file":"Upload.mjs","sources":["../../src/upload/Upload.tsx"],"sourcesContent":["import { Plus as PlusIcon } from '@transferwise/icons';\nimport { clsx } from 'clsx';\nimport { Component } from 'react';\nimport { injectIntl, WrappedComponentProps } from 'react-intl';\n\nimport { Size, Typography } from '../common';\nimport Title from '../title';\n\nimport messages from './Upload.messages';\nimport { UploadImageStep, ProcessingStep, CompleteStep } from './steps';\nimport { postData, asyncFileRead, isSizeValid, isTypeValid, getFileType } from './utils';\nimport { PostDataFetcher, PostDataHTTPOptions, ResponseError } from './utils/postData/postData';\nimport { ProcessIndicatorStatus } from '../processIndicator';\n\nexport const MAX_SIZE_DEFAULT = 5000000;\n\nexport enum UploadStep {\n UPLOAD_IMAGE_STEP = 'uploadImageStep',\n}\n\nexport interface UploadProps extends WrappedComponentProps {\n animationDelay?: number;\n csButtonText?: string;\n csFailureText?: string;\n csSuccessText?: string;\n csTooLargeMessage?: string;\n csWrongTypeMessage?: string;\n httpOptions?: PostDataHTTPOptions & {\n fileInputName?: string;\n data?: Record<string, string | Blob>;\n };\n /**\n * You can provide a fetcher function with the same interface as the global fetch function, which is used by default.\n * function fetcher(input: RequestInfo, init?: RequestInit): Promise<Response>\n */\n fetcher?: PostDataFetcher;\n maxSize?: number;\n psButtonText?: string;\n psButtonDisabled?: boolean;\n psProcessingText?: string;\n size?: `${Size.SMALL | Size.MEDIUM | Size.LARGE}`;\n /**\n * You can provide multiple rules separated by comma, e.g.: \"application/pdf,image/*\".\n * Using \"*\" will allow every file type to be uploaded.\n */\n usAccept?: string;\n usButtonText?: string;\n usButtonRetryText?: string;\n usDisabled?: boolean;\n usDropMessage?: string;\n usHelpImage?: React.ReactNode;\n usLabel?: string;\n usPlaceholder?: string;\n /**\n * Override for the [InlineAlert icon's default, accessible name](/?path=/docs/other-statusicon-accessibility--docs)\n * announced by the screen readers\n * */\n errorIconLabel?: string;\n /** @deprecated Only a single variant exists, please remove this prop. */\n uploadStep?: `${UploadStep}`;\n onCancel?: () => void;\n onFailure?: (error: unknown) => void;\n onStart?: (file: File) => void;\n onSuccess?: (response: string | Response, fileName: string) => void;\n}\n\ninterface UploadState {\n fileName: string;\n isDroppable: boolean;\n isComplete: boolean;\n isError: boolean;\n isImage: boolean;\n isProcessing: boolean;\n isSuccess: boolean;\n response: unknown;\n uploadedImage: string | undefined;\n}\n\nexport class Upload extends Component<UploadProps, UploadState> {\n declare props: UploadProps & Required<Pick<UploadProps, keyof typeof Upload.defaultProps>>;\n\n static defaultProps = {\n animationDelay: 300,\n maxSize: MAX_SIZE_DEFAULT,\n psButtonDisabled: false,\n size: 'md',\n usAccept: 'image/*',\n usDisabled: false,\n usLabel: '',\n } satisfies Partial<UploadProps>;\n\n dragCounter = 0;\n timeouts = 0;\n\n constructor(props: UploadProps) {\n super(props);\n\n this.state = {\n fileName: '',\n isDroppable: false,\n isComplete: false,\n isError: false,\n isImage: false,\n isProcessing: false,\n isSuccess: false,\n response: undefined,\n uploadedImage: undefined,\n };\n }\n\n getErrorMessage(status?: number) {\n const { csFailureText, csTooLargeMessage, csWrongTypeMessage, maxSize, intl } = this.props;\n switch (status) {\n case 413:\n return (\n csTooLargeMessage ||\n intl.formatMessage(messages.csTooLargeMessage, {\n maxSize: roundFileSize(maxSize),\n })\n );\n case 415:\n return csWrongTypeMessage || intl.formatMessage(messages.csWrongTypeMessage);\n default:\n return csFailureText || intl.formatMessage(messages.csFailureText);\n }\n }\n\n onDragLeave(event: React.DragEvent<HTMLDivElement>) {\n event.preventDefault();\n this.dragCounter -= 1;\n if (this.dragCounter === 0) {\n this.setState({ isDroppable: false });\n }\n }\n\n onDragEnter(event: React.DragEvent<HTMLDivElement>) {\n event.preventDefault();\n this.dragCounter += 1;\n const { usDisabled } = this.props;\n const { isProcessing } = this.state;\n if (this.dragCounter === 1 && !usDisabled && !isProcessing) {\n this.setState({ isDroppable: true });\n }\n }\n\n async onDrop(event: React.DragEvent<HTMLDivElement>) {\n const { isProcessing } = this.state;\n event.preventDefault();\n if (!isProcessing) {\n this.reset();\n }\n\n if (event.dataTransfer?.files?.[0]) {\n await this.fileDropped(event.dataTransfer.files[0]);\n }\n }\n\n asyncPost = async (file: File) => {\n const { httpOptions, fetcher } = this.props;\n if (httpOptions == null) {\n throw new Error('Cannot find HTTP options');\n }\n\n const { fileInputName = file.name, data = {} } = httpOptions;\n\n const formData = new FormData();\n formData.append(fileInputName, file);\n Object.keys(data).forEach((key) => formData.append(key, data[key]));\n return postData(httpOptions, formData, fetcher);\n };\n\n handleUploadComplete = (type: 'success' | 'error', response: unknown) => {\n const { animationDelay, onSuccess, onFailure } = this.props;\n const { fileName } = this.state;\n\n window.clearTimeout(this.timeouts);\n this.timeouts = window.setTimeout(() => {\n this.setState(\n {\n isProcessing: false,\n isComplete: true,\n },\n () => {\n if (type === 'success') {\n onSuccess?.(response as string | Response, fileName);\n } else {\n onFailure?.(response);\n }\n },\n );\n }, animationDelay);\n };\n\n asyncResponse = (response: unknown, type: 'success' | 'error') => {\n this.setState(\n {\n response,\n isError: type === 'error',\n isSuccess: type === 'success',\n },\n () => this.handleUploadComplete(type, response),\n );\n };\n\n handleOnClear: React.MouseEventHandler<HTMLButtonElement> = (event) => {\n event.preventDefault();\n const { onCancel } = this.props;\n onCancel?.();\n\n this.reset();\n };\n\n reset = () => {\n this.dragCounter = 0;\n window.clearTimeout(this.timeouts);\n this.setState({\n isComplete: false,\n isError: false,\n isProcessing: false,\n isSuccess: false,\n });\n };\n\n showDataImage = (dataUrl: string) => {\n const { isImage } = this.state;\n if (isImage) {\n this.setState({\n uploadedImage: dataUrl,\n });\n }\n };\n\n fileDropped = async (file: File) => {\n const { httpOptions, maxSize, onStart, usDisabled, usAccept } = this.props;\n const { isProcessing } = this.state;\n\n if (usDisabled || isProcessing) {\n return false;\n }\n\n if (!file) {\n throw new Error('Could not retrieve file');\n }\n\n this.setState({\n fileName: file.name,\n isDroppable: false,\n isProcessing: true,\n });\n\n onStart?.(file);\n\n let file64 = null;\n\n try {\n file64 = await asyncFileRead(file);\n } catch (error) {\n this.asyncResponse(error, 'error');\n }\n\n if (!file64) {\n return false;\n }\n\n this.setState({\n isImage: getFileType(file, file64).includes('image'),\n });\n\n if (!isTypeValid(file, usAccept, file64)) {\n this.asyncResponse(\n new ResponseError(\n new Response(null, {\n status: 415,\n statusText: 'Unsupported Media Type',\n }),\n ),\n 'error',\n );\n return false;\n }\n\n if (!isSizeValid(file, maxSize)) {\n this.asyncResponse(\n new ResponseError(\n new Response(null, {\n status: 413,\n statusText: 'Request Entity Too Large',\n }),\n ),\n 'error',\n );\n return false;\n }\n\n if (httpOptions) {\n // Post the file to provided endpoint\n let response;\n try {\n response = await this.asyncPost(file);\n } catch (error) {\n this.asyncResponse(error, 'error');\n return false;\n }\n this.asyncResponse(response, 'success');\n this.showDataImage(file64);\n return true;\n }\n // Post on form submit. And return the encoded image.\n this.showDataImage(file64);\n this.asyncResponse(file64, 'success');\n return true;\n };\n\n render() {\n const {\n maxSize,\n usDropMessage,\n usAccept,\n usButtonText,\n usButtonRetryText,\n usDisabled,\n usHelpImage,\n usLabel,\n usPlaceholder,\n psButtonText,\n psProcessingText,\n psButtonDisabled,\n csButtonText,\n csSuccessText,\n size,\n intl,\n errorIconLabel,\n } = this.props;\n\n const {\n response,\n fileName,\n isComplete,\n isDroppable,\n isError,\n isImage,\n isProcessing,\n isSuccess,\n uploadedImage,\n } = this.state;\n\n return (\n <div\n className={clsx('droppable-area', {\n droppable: true,\n 'tw-droppable-sm droppable-sm': size === 'sm',\n 'tw-droppable-md droppable-md': size === 'md' || !size,\n 'tw-droppable-lg droppable-lg': size === 'lg',\n 'droppable-dropping': isDroppable,\n 'droppable-processing': isProcessing,\n 'droppable-complete': isComplete && !isError,\n 'droppable-negative': isError && !isProcessing,\n })}\n onDragEnter={(event) => this.onDragEnter(event)}\n onDragLeave={(event) => this.onDragLeave(event)}\n onDrop={async (event) => this.onDrop(event)}\n onDragOver={(event) => event.preventDefault()}\n >\n {!isProcessing && !isComplete && (\n <UploadImageStep\n fileDropped={async (file) => this.fileDropped(file)}\n isComplete={isComplete}\n usAccept={usAccept}\n usButtonText={usButtonText || intl.formatMessage(messages.usButtonText)}\n usDisabled={usDisabled}\n usHelpImage={usHelpImage}\n usLabel={usLabel}\n usPlaceholder={\n usPlaceholder ||\n intl.formatMessage(messages.usPlaceholder, { maxSize: roundFileSize(maxSize) })\n }\n />\n )}\n\n {(isSuccess || isComplete) && !isError && (\n <CompleteStep\n fileName={fileName}\n isComplete={isComplete}\n isImage={isImage}\n csButtonText={csButtonText || intl.formatMessage(messages.csButtonText)}\n csSuccessText={csSuccessText || intl.formatMessage(messages.csSuccessText)}\n uploadedImage={uploadedImage}\n onClear={(event) => this.handleOnClear(event)}\n />\n )}\n {isError && !isProcessing && (\n <UploadImageStep\n fileDropped={async (file) => {\n this.reset();\n await this.fileDropped(file);\n }}\n isComplete={!isError}\n usAccept={usAccept}\n usButtonText={usButtonRetryText || intl.formatMessage(messages.retry)}\n usDisabled={usDisabled}\n usHelpImage={null}\n usLabel={usLabel}\n usPlaceholder={\n usPlaceholder ||\n intl.formatMessage(messages.usPlaceholder, { maxSize: roundFileSize(maxSize) })\n }\n errorMessage={this.getErrorMessage(\n response != null &&\n typeof response === 'object' &&\n 'status' in response &&\n typeof response.status === 'number'\n ? response.status\n : undefined,\n )}\n errorIconLabel={errorIconLabel}\n />\n )}\n {isProcessing && (\n <ProcessingStep\n isComplete={isComplete}\n isError={isError}\n isSuccess={isSuccess}\n psButtonText={psButtonText || intl.formatMessage(messages.psButtonText)}\n psProcessingText={psProcessingText || intl.formatMessage(messages.psProcessingText)}\n psButtonDisabled={psButtonDisabled}\n onClear={(event) => this.handleOnClear(event)}\n />\n )}\n {!isProcessing && (\n <div className=\"droppable-dropping-card droppable-card\" aria-live=\"polite\">\n <div className=\"droppable-card-content\">\n <div className=\"circle circle-sm text-primary\">\n <PlusIcon size=\"16\" />\n </div>\n <Title type={Typography.TITLE_BODY} className=\"m-t-3\">\n {usDropMessage || intl.formatMessage(messages.usDropMessage)}\n </Title>\n </div>\n </div>\n )}\n </div>\n );\n }\n}\n\nexport default injectIntl(Upload);\n\nconst roundFileSize = (bytes: number) => {\n const megabytes = bytes / 1000000;\n if (megabytes >= 0.1) {\n const isRound = Math.floor(megabytes) === megabytes;\n return isRound ? `${megabytes}` : megabytes.toFixed(1);\n }\n if (megabytes >= 0.01) {\n return megabytes.toFixed(2);\n }\n return megabytes.toFixed(3);\n};\n"],"names":["MAX_SIZE_DEFAULT","UploadStep","Upload","Component","defaultProps","animationDelay","maxSize","psButtonDisabled","size","usAccept","usDisabled","usLabel","dragCounter","timeouts","constructor","props","state","fileName","isDroppable","isComplete","isError","isImage","isProcessing","isSuccess","response","undefined","uploadedImage","getErrorMessage","status","csFailureText","csTooLargeMessage","csWrongTypeMessage","intl","formatMessage","messages","roundFileSize","onDragLeave","event","preventDefault","setState","onDragEnter","onDrop","reset","dataTransfer","files","fileDropped","asyncPost","file","httpOptions","fetcher","Error","fileInputName","name","data","formData","FormData","append","Object","keys","forEach","key","postData","handleUploadComplete","type","onSuccess","onFailure","window","clearTimeout","setTimeout","asyncResponse","handleOnClear","onCancel","showDataImage","dataUrl","onStart","file64","asyncFileRead","error","getFileType","includes","isTypeValid","ResponseError","Response","statusText","isSizeValid","render","usDropMessage","usButtonText","usButtonRetryText","usHelpImage","usPlaceholder","psButtonText","psProcessingText","csButtonText","csSuccessText","errorIconLabel","_jsxs","className","clsx","droppable","onDragOver","children","_jsx","UploadImageStep","CompleteStep","onClear","retry","errorMessage","ProcessingStep","PlusIcon","Title","Typography","TITLE_BODY","injectIntl","bytes","megabytes","isRound","Math","floor","toFixed"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcO,MAAMA,gBAAgB,GAAG;IAEpBC;AAAZ,CAAA,UAAYA,UAAU,EAAA;AACpBA,EAAAA,UAAA,CAAA,mBAAA,CAAA,GAAA,iBAAqC;AACvC,CAAC,EAFWA,UAAU,KAAVA,UAAU,GAErB,EAAA,CAAA,CAAA;AA4DK,MAAOC,MAAO,SAAQC,SAAmC,CAAA;AAG7D,EAAA,OAAOC,YAAY,GAAG,CAAA,OAAA;AACpBC,IAAAA,cAAc,EAAE,GAAG;AACnBC,IAAAA,OAAO,EAAEN,gBAAgB;AACzBO,IAAAA,gBAAgB,EAAE,KAAK;AACvBC,IAAAA,IAAI,EAAE,IAAI;AACVC,IAAAA,QAAQ,EAAE,SAAS;AACnBC,IAAAA,UAAU,EAAE,KAAK;AACjBC,IAAAA,OAAO,EAAE;GACqB,CAAA,GAAA;AAEhCC,EAAAA,WAAW,GAAG,CAAC;AACfC,EAAAA,QAAQ,GAAG,CAAC;EAEZC,WAAAA,CAAYC,KAAkB,EAAA;IAC5B,KAAK,CAACA,KAAK,CAAC;IAEZ,IAAI,CAACC,KAAK,GAAG;AACXC,MAAAA,QAAQ,EAAE,EAAE;AACZC,MAAAA,WAAW,EAAE,KAAK;AAClBC,MAAAA,UAAU,EAAE,KAAK;AACjBC,MAAAA,OAAO,EAAE,KAAK;AACdC,MAAAA,OAAO,EAAE,KAAK;AACdC,MAAAA,YAAY,EAAE,KAAK;AACnBC,MAAAA,SAAS,EAAE,KAAK;AAChBC,MAAAA,QAAQ,EAAEC,SAAS;AACnBC,MAAAA,aAAa,EAAED;KAChB;AACH;EAEAE,eAAeA,CAACC,MAAe,EAAA;IAC7B,MAAM;MAAEC,aAAa;MAAEC,iBAAiB;MAAEC,kBAAkB;MAAEzB,OAAO;AAAE0B,MAAAA;KAAM,GAAG,IAAI,CAACjB,KAAK;AAC1F,IAAA,QAAQa,MAAM;AACZ,MAAA,KAAK,GAAG;QACN,OACEE,iBAAiB,IACjBE,IAAI,CAACC,aAAa,CAACC,QAAQ,CAACJ,iBAAiB,EAAE;UAC7CxB,OAAO,EAAE6B,aAAa,CAAC7B,OAAO;AAC/B,SAAA,CAAC;AAEN,MAAA,KAAK,GAAG;QACN,OAAOyB,kBAAkB,IAAIC,IAAI,CAACC,aAAa,CAACC,QAAQ,CAACH,kBAAkB,CAAC;AAC9E,MAAA;QACE,OAAOF,aAAa,IAAIG,IAAI,CAACC,aAAa,CAACC,QAAQ,CAACL,aAAa,CAAC;AACtE;AACF;EAEAO,WAAWA,CAACC,KAAsC,EAAA;IAChDA,KAAK,CAACC,cAAc,EAAE;IACtB,IAAI,CAAC1B,WAAW,IAAI,CAAC;AACrB,IAAA,IAAI,IAAI,CAACA,WAAW,KAAK,CAAC,EAAE;MAC1B,IAAI,CAAC2B,QAAQ,CAAC;AAAErB,QAAAA,WAAW,EAAE;AAAO,OAAA,CAAC;AACvC;AACF;EAEAsB,WAAWA,CAACH,KAAsC,EAAA;IAChDA,KAAK,CAACC,cAAc,EAAE;IACtB,IAAI,CAAC1B,WAAW,IAAI,CAAC;IACrB,MAAM;AAAEF,MAAAA;KAAY,GAAG,IAAI,CAACK,KAAK;IACjC,MAAM;AAAEO,MAAAA;KAAc,GAAG,IAAI,CAACN,KAAK;IACnC,IAAI,IAAI,CAACJ,WAAW,KAAK,CAAC,IAAI,CAACF,UAAU,IAAI,CAACY,YAAY,EAAE;MAC1D,IAAI,CAACiB,QAAQ,CAAC;AAAErB,QAAAA,WAAW,EAAE;AAAM,OAAA,CAAC;AACtC;AACF;EAEA,MAAMuB,MAAMA,CAACJ,KAAsC,EAAA;IACjD,MAAM;AAAEf,MAAAA;KAAc,GAAG,IAAI,CAACN,KAAK;IACnCqB,KAAK,CAACC,cAAc,EAAE;IACtB,IAAI,CAAChB,YAAY,EAAE;MACjB,IAAI,CAACoB,KAAK,EAAE;AACd;IAEA,IAAIL,KAAK,CAACM,YAAY,EAAEC,KAAK,GAAG,CAAC,CAAC,EAAE;AAClC,MAAA,MAAM,IAAI,CAACC,WAAW,CAACR,KAAK,CAACM,YAAY,CAACC,KAAK,CAAC,CAAC,CAAC,CAAC;AACrD;AACF;EAEAE,SAAS,GAAG,MAAOC,IAAU,IAAI;IAC/B,MAAM;MAAEC,WAAW;AAAEC,MAAAA;KAAS,GAAG,IAAI,CAAClC,KAAK;IAC3C,IAAIiC,WAAW,IAAI,IAAI,EAAE;AACvB,MAAA,MAAM,IAAIE,KAAK,CAAC,0BAA0B,CAAC;AAC7C;IAEA,MAAM;MAAEC,aAAa,GAAGJ,IAAI,CAACK,IAAI;AAAEC,MAAAA,IAAI,GAAG;AAAI,KAAA,GAAGL,WAAW;AAE5D,IAAA,MAAMM,QAAQ,GAAG,IAAIC,QAAQ,EAAE;AAC/BD,IAAAA,QAAQ,CAACE,MAAM,CAACL,aAAa,EAAEJ,IAAI,CAAC;IACpCU,MAAM,CAACC,IAAI,CAACL,IAAI,CAAC,CAACM,OAAO,CAAEC,GAAG,IAAKN,QAAQ,CAACE,MAAM,CAACI,GAAG,EAAEP,IAAI,CAACO,GAAG,CAAC,CAAC,CAAC;AACnE,IAAA,OAAOC,QAAQ,CAACb,WAAW,EAAEM,QAAQ,EAAEL,OAAO,CAAC;GAChD;AAEDa,EAAAA,oBAAoB,GAAGA,CAACC,IAAyB,EAAEvC,QAAiB,KAAI;IACtE,MAAM;MAAEnB,cAAc;MAAE2D,SAAS;AAAEC,MAAAA;KAAW,GAAG,IAAI,CAAClD,KAAK;IAC3D,MAAM;AAAEE,MAAAA;KAAU,GAAG,IAAI,CAACD,KAAK;AAE/BkD,IAAAA,MAAM,CAACC,YAAY,CAAC,IAAI,CAACtD,QAAQ,CAAC;AAClC,IAAA,IAAI,CAACA,QAAQ,GAAGqD,MAAM,CAACE,UAAU,CAAC,MAAK;MACrC,IAAI,CAAC7B,QAAQ,CACX;AACEjB,QAAAA,YAAY,EAAE,KAAK;AACnBH,QAAAA,UAAU,EAAE;AACb,OAAA,EACD,MAAK;QACH,IAAI4C,IAAI,KAAK,SAAS,EAAE;AACtBC,UAAAA,SAAS,GAAGxC,QAA6B,EAAEP,QAAQ,CAAC;AACtD,SAAC,MAAM;UACLgD,SAAS,GAAGzC,QAAQ,CAAC;AACvB;AACF,OAAC,CACF;KACF,EAAEnB,cAAc,CAAC;GACnB;AAEDgE,EAAAA,aAAa,GAAGA,CAAC7C,QAAiB,EAAEuC,IAAyB,KAAI;IAC/D,IAAI,CAACxB,QAAQ,CACX;MACEf,QAAQ;MACRJ,OAAO,EAAE2C,IAAI,KAAK,OAAO;MACzBxC,SAAS,EAAEwC,IAAI,KAAK;KACrB,EACD,MAAM,IAAI,CAACD,oBAAoB,CAACC,IAAI,EAAEvC,QAAQ,CAAC,CAChD;GACF;EAED8C,aAAa,GAAgDjC,KAAK,IAAI;IACpEA,KAAK,CAACC,cAAc,EAAE;IACtB,MAAM;AAAEiC,MAAAA;KAAU,GAAG,IAAI,CAACxD,KAAK;AAC/BwD,IAAAA,QAAQ,IAAI;IAEZ,IAAI,CAAC7B,KAAK,EAAE;GACb;EAEDA,KAAK,GAAGA,MAAK;IACX,IAAI,CAAC9B,WAAW,GAAG,CAAC;AACpBsD,IAAAA,MAAM,CAACC,YAAY,CAAC,IAAI,CAACtD,QAAQ,CAAC;IAClC,IAAI,CAAC0B,QAAQ,CAAC;AACZpB,MAAAA,UAAU,EAAE,KAAK;AACjBC,MAAAA,OAAO,EAAE,KAAK;AACdE,MAAAA,YAAY,EAAE,KAAK;AACnBC,MAAAA,SAAS,EAAE;AACZ,KAAA,CAAC;GACH;EAEDiD,aAAa,GAAIC,OAAe,IAAI;IAClC,MAAM;AAAEpD,MAAAA;KAAS,GAAG,IAAI,CAACL,KAAK;AAC9B,IAAA,IAAIK,OAAO,EAAE;MACX,IAAI,CAACkB,QAAQ,CAAC;AACZb,QAAAA,aAAa,EAAE+C;AAChB,OAAA,CAAC;AACJ;GACD;EAED5B,WAAW,GAAG,MAAOE,IAAU,IAAI;IACjC,MAAM;MAAEC,WAAW;MAAE1C,OAAO;MAAEoE,OAAO;MAAEhE,UAAU;AAAED,MAAAA;KAAU,GAAG,IAAI,CAACM,KAAK;IAC1E,MAAM;AAAEO,MAAAA;KAAc,GAAG,IAAI,CAACN,KAAK;IAEnC,IAAIN,UAAU,IAAIY,YAAY,EAAE;AAC9B,MAAA,OAAO,KAAK;AACd;IAEA,IAAI,CAACyB,IAAI,EAAE;AACT,MAAA,MAAM,IAAIG,KAAK,CAAC,yBAAyB,CAAC;AAC5C;IAEA,IAAI,CAACX,QAAQ,CAAC;MACZtB,QAAQ,EAAE8B,IAAI,CAACK,IAAI;AACnBlC,MAAAA,WAAW,EAAE,KAAK;AAClBI,MAAAA,YAAY,EAAE;AACf,KAAA,CAAC;IAEFoD,OAAO,GAAG3B,IAAI,CAAC;IAEf,IAAI4B,MAAM,GAAG,IAAI;IAEjB,IAAI;AACFA,MAAAA,MAAM,GAAG,MAAMC,aAAa,CAAC7B,IAAI,CAAC;KACnC,CAAC,OAAO8B,KAAK,EAAE;AACd,MAAA,IAAI,CAACR,aAAa,CAACQ,KAAK,EAAE,OAAO,CAAC;AACpC;IAEA,IAAI,CAACF,MAAM,EAAE;AACX,MAAA,OAAO,KAAK;AACd;IAEA,IAAI,CAACpC,QAAQ,CAAC;MACZlB,OAAO,EAAEyD,WAAW,CAAC/B,IAAI,EAAE4B,MAAM,CAAC,CAACI,QAAQ,CAAC,OAAO;AACpD,KAAA,CAAC;IAEF,IAAI,CAACC,WAAW,CAACjC,IAAI,EAAEtC,QAAQ,EAAEkE,MAAM,CAAC,EAAE;MACxC,IAAI,CAACN,aAAa,CAChB,IAAIY,aAAa,CACf,IAAIC,QAAQ,CAAC,IAAI,EAAE;AACjBtD,QAAAA,MAAM,EAAE,GAAG;AACXuD,QAAAA,UAAU,EAAE;AACb,OAAA,CAAC,CACH,EACD,OAAO,CACR;AACD,MAAA,OAAO,KAAK;AACd;AAEA,IAAA,IAAI,CAACC,WAAW,CAACrC,IAAI,EAAEzC,OAAO,CAAC,EAAE;MAC/B,IAAI,CAAC+D,aAAa,CAChB,IAAIY,aAAa,CACf,IAAIC,QAAQ,CAAC,IAAI,EAAE;AACjBtD,QAAAA,MAAM,EAAE,GAAG;AACXuD,QAAAA,UAAU,EAAE;AACb,OAAA,CAAC,CACH,EACD,OAAO,CACR;AACD,MAAA,OAAO,KAAK;AACd;AAEA,IAAA,IAAInC,WAAW,EAAE;AACf;AACA,MAAA,IAAIxB,QAAQ;MACZ,IAAI;AACFA,QAAAA,QAAQ,GAAG,MAAM,IAAI,CAACsB,SAAS,CAACC,IAAI,CAAC;OACtC,CAAC,OAAO8B,KAAK,EAAE;AACd,QAAA,IAAI,CAACR,aAAa,CAACQ,KAAK,EAAE,OAAO,CAAC;AAClC,QAAA,OAAO,KAAK;AACd;AACA,MAAA,IAAI,CAACR,aAAa,CAAC7C,QAAQ,EAAE,SAAS,CAAC;AACvC,MAAA,IAAI,CAACgD,aAAa,CAACG,MAAM,CAAC;AAC1B,MAAA,OAAO,IAAI;AACb;AACA;AACA,IAAA,IAAI,CAACH,aAAa,CAACG,MAAM,CAAC;AAC1B,IAAA,IAAI,CAACN,aAAa,CAACM,MAAM,EAAE,SAAS,CAAC;AACrC,IAAA,OAAO,IAAI;GACZ;AAEDU,EAAAA,MAAMA,GAAA;IACJ,MAAM;MACJ/E,OAAO;MACPgF,aAAa;MACb7E,QAAQ;MACR8E,YAAY;MACZC,iBAAiB;MACjB9E,UAAU;MACV+E,WAAW;MACX9E,OAAO;MACP+E,aAAa;MACbC,YAAY;MACZC,gBAAgB;MAChBrF,gBAAgB;MAChBsF,YAAY;MACZC,aAAa;MACbtF,IAAI;MACJwB,IAAI;AACJ+D,MAAAA;KACD,GAAG,IAAI,CAAChF,KAAK;IAEd,MAAM;MACJS,QAAQ;MACRP,QAAQ;MACRE,UAAU;MACVD,WAAW;MACXE,OAAO;MACPC,OAAO;MACPC,YAAY;MACZC,SAAS;AACTG,MAAAA;KACD,GAAG,IAAI,CAACV,KAAK;AAEd,IAAA,oBACEgF,IAAA,CAAA,KAAA,EAAA;AACEC,MAAAA,SAAS,EAAEC,IAAI,CAAC,gBAAgB,EAAE;AAChCC,QAAAA,SAAS,EAAE,IAAI;QACf,8BAA8B,EAAE3F,IAAI,KAAK,IAAI;AAC7C,QAAA,8BAA8B,EAAEA,IAAI,KAAK,IAAI,IAAI,CAACA,IAAI;QACtD,8BAA8B,EAAEA,IAAI,KAAK,IAAI;AAC7C,QAAA,oBAAoB,EAAEU,WAAW;AACjC,QAAA,sBAAsB,EAAEI,YAAY;AACpC,QAAA,oBAAoB,EAAEH,UAAU,IAAI,CAACC,OAAO;QAC5C,oBAAoB,EAAEA,OAAO,IAAI,CAACE;AACnC,OAAA,CAAE;MACHkB,WAAW,EAAGH,KAAK,IAAK,IAAI,CAACG,WAAW,CAACH,KAAK,CAAE;MAChDD,WAAW,EAAGC,KAAK,IAAK,IAAI,CAACD,WAAW,CAACC,KAAK,CAAE;MAChDI,MAAM,EAAE,MAAOJ,KAAK,IAAK,IAAI,CAACI,MAAM,CAACJ,KAAK,CAAE;AAC5C+D,MAAAA,UAAU,EAAG/D,KAAK,IAAKA,KAAK,CAACC,cAAc,EAAG;MAAA+D,QAAA,EAAA,CAE7C,CAAC/E,YAAY,IAAI,CAACH,UAAU,iBAC3BmF,GAAA,CAACC,eAAe,EAAA;QACd1D,WAAW,EAAE,MAAOE,IAAI,IAAK,IAAI,CAACF,WAAW,CAACE,IAAI,CAAE;AACpD5B,QAAAA,UAAU,EAAEA,UAAW;AACvBV,QAAAA,QAAQ,EAAEA,QAAS;QACnB8E,YAAY,EAAEA,YAAY,IAAIvD,IAAI,CAACC,aAAa,CAACC,QAAQ,CAACqD,YAAY,CAAE;AACxE7E,QAAAA,UAAU,EAAEA,UAAW;AACvB+E,QAAAA,WAAW,EAAEA,WAAY;AACzB9E,QAAAA,OAAO,EAAEA,OAAQ;QACjB+E,aAAa,EACXA,aAAa,IACb1D,IAAI,CAACC,aAAa,CAACC,QAAQ,CAACwD,aAAa,EAAE;UAAEpF,OAAO,EAAE6B,aAAa,CAAC7B,OAAO;SAAG;AAC/E,OAAA,CAEJ,EAEA,CAACiB,SAAS,IAAIJ,UAAU,KAAK,CAACC,OAAO,iBACpCkF,GAAA,CAACE,YAAY,EAAA;AACXvF,QAAAA,QAAQ,EAAEA,QAAS;AACnBE,QAAAA,UAAU,EAAEA,UAAW;AACvBE,QAAAA,OAAO,EAAEA,OAAQ;QACjBwE,YAAY,EAAEA,YAAY,IAAI7D,IAAI,CAACC,aAAa,CAACC,QAAQ,CAAC2D,YAAY,CAAE;QACxEC,aAAa,EAAEA,aAAa,IAAI9D,IAAI,CAACC,aAAa,CAACC,QAAQ,CAAC4D,aAAa,CAAE;AAC3EpE,QAAAA,aAAa,EAAEA,aAAc;AAC7B+E,QAAAA,OAAO,EAAGpE,KAAK,IAAK,IAAI,CAACiC,aAAa,CAACjC,KAAK;OAAE,CAEjD,EACAjB,OAAO,IAAI,CAACE,YAAY,iBACvBgF,GAAA,CAACC,eAAe,EAAA;QACd1D,WAAW,EAAE,MAAOE,IAAI,IAAI;UAC1B,IAAI,CAACL,KAAK,EAAE;AACZ,UAAA,MAAM,IAAI,CAACG,WAAW,CAACE,IAAI,CAAC;SAC5B;QACF5B,UAAU,EAAE,CAACC,OAAQ;AACrBX,QAAAA,QAAQ,EAAEA,QAAS;QACnB8E,YAAY,EAAEC,iBAAiB,IAAIxD,IAAI,CAACC,aAAa,CAACC,QAAQ,CAACwE,KAAK,CAAE;AACtEhG,QAAAA,UAAU,EAAEA,UAAW;AACvB+E,QAAAA,WAAW,EAAE,IAAK;AAClB9E,QAAAA,OAAO,EAAEA,OAAQ;QACjB+E,aAAa,EACXA,aAAa,IACb1D,IAAI,CAACC,aAAa,CAACC,QAAQ,CAACwD,aAAa,EAAE;UAAEpF,OAAO,EAAE6B,aAAa,CAAC7B,OAAO;AAAC,SAAE,CAC/E;AACDqG,QAAAA,YAAY,EAAE,IAAI,CAAChF,eAAe,CAChCH,QAAQ,IAAI,IAAI,IACd,OAAOA,QAAQ,KAAK,QAAQ,IAC5B,QAAQ,IAAIA,QAAQ,IACpB,OAAOA,QAAQ,CAACI,MAAM,KAAK,QAAQ,GACjCJ,QAAQ,CAACI,MAAM,GACfH,SAAS,CACb;AACFsE,QAAAA,cAAc,EAAEA;AAAe,OAC/B,CACH,EACAzE,YAAY,iBACXgF,GAAA,CAACM,cAAc,EAAA;AACbzF,QAAAA,UAAU,EAAEA,UAAW;AACvBC,QAAAA,OAAO,EAAEA,OAAQ;AACjBG,QAAAA,SAAS,EAAEA,SAAU;QACrBoE,YAAY,EAAEA,YAAY,IAAI3D,IAAI,CAACC,aAAa,CAACC,QAAQ,CAACyD,YAAY,CAAE;QACxEC,gBAAgB,EAAEA,gBAAgB,IAAI5D,IAAI,CAACC,aAAa,CAACC,QAAQ,CAAC0D,gBAAgB,CAAE;AACpFrF,QAAAA,gBAAgB,EAAEA,gBAAiB;AACnCkG,QAAAA,OAAO,EAAGpE,KAAK,IAAK,IAAI,CAACiC,aAAa,CAACjC,KAAK;AAAE,OAAA,CAEjD,EACA,CAACf,YAAY,iBACZgF,GAAA,CAAA,KAAA,EAAA;AAAKL,QAAAA,SAAS,EAAC,wCAAwC;AAAC,QAAA,WAAA,EAAU,QAAQ;AAAAI,QAAAA,QAAA,eACxEL,IAAA,CAAA,KAAA,EAAA;AAAKC,UAAAA,SAAS,EAAC,wBAAwB;AAAAI,UAAAA,QAAA,gBACrCC,GAAA,CAAA,KAAA,EAAA;AAAKL,YAAAA,SAAS,EAAC,+BAA+B;YAAAI,QAAA,eAC5CC,GAAA,CAACO,IAAQ,EAAA;AAACrG,cAAAA,IAAI,EAAC;aACjB;AAAA,WAAK,CACL,eAAA8F,GAAA,CAACQ,KAAK,EAAA;YAAC/C,IAAI,EAAEgD,UAAU,CAACC,UAAW;AAACf,YAAAA,SAAS,EAAC,OAAO;YAAAI,QAAA,EAClDf,aAAa,IAAItD,IAAI,CAACC,aAAa,CAACC,QAAQ,CAACoD,aAAa;AAAC,WACvD,CACT;SAAK;AACP,OAAK,CACN;AAAA,KACE,CAAC;AAEV;;AAGF,eAAe2B,UAAU,CAAC/G,MAAM,CAAC;AAEjC,MAAMiC,aAAa,GAAI+E,KAAa,IAAI;AACtC,EAAA,MAAMC,SAAS,GAAGD,KAAK,GAAG,OAAO;EACjC,IAAIC,SAAS,IAAI,GAAG,EAAE;IACpB,MAAMC,OAAO,GAAGC,IAAI,CAACC,KAAK,CAACH,SAAS,CAAC,KAAKA,SAAS;IACnD,OAAOC,OAAO,GAAG,CAAA,EAAGD,SAAS,CAAA,CAAE,GAAGA,SAAS,CAACI,OAAO,CAAC,CAAC,CAAC;AACxD;EACA,IAAIJ,SAAS,IAAI,IAAI,EAAE;AACrB,IAAA,OAAOA,SAAS,CAACI,OAAO,CAAC,CAAC,CAAC;AAC7B;AACA,EAAA,OAAOJ,SAAS,CAACI,OAAO,CAAC,CAAC,CAAC;AAC7B,CAAC;;;;"}
@@ -31,7 +31,7 @@ var jsxRuntime = require('react/jsx-runtime');
31
31
  var InlineAlert = require('../../../inlineAlert/InlineAlert.js');
32
32
 
33
33
  class UploadImageStep extends React.PureComponent {
34
- uploadInputRef = /*#__PURE__*/React.createRef();
34
+ uploadInputRef = (() => /*#__PURE__*/React.createRef())();
35
35
  onManualUpload = () => {
36
36
  const {
37
37
  fileDropped
@@ -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';\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 errorIconLabel?: 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 onKeyDown = (event: React.KeyboardEvent<HTMLLabelElement>) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.uploadInputRef.current?.click();\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} iconLabel={null} />\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 {\n errorMessage,\n isComplete,\n errorIconLabel,\n usAccept,\n usButtonText,\n usDisabled,\n usLabel,\n usPlaceholder,\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\n className={`btn btn-primary btn-md ${usDisabled ? 'disabled' : ''}`}\n role=\"button\"\n aria-disabled={usDisabled}\n tabIndex={0}\n onKeyDown={this.onKeyDown}\n >\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} iconLabel={errorIconLabel}>\n {errorMessage}\n </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","onKeyDown","event","key","preventDefault","click","getImage","usHelpImage","usLabel","errorMessage","_jsx","className","children","StatusIcon","size","Size","LARGE","sentiment","Sentiment","NEGATIVE","iconLabel","UploadIcon","src","alt","render","isComplete","errorIconLabel","usAccept","usButtonText","usDisabled","usPlaceholder","_jsxs","String","role","tabIndex","ref","type","accept","undefined","disabled","name","onChange","InlineAlert"],"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 errorIconLabel?: 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 onKeyDown = (event: React.KeyboardEvent<HTMLLabelElement>) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.uploadInputRef.current?.click();\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} iconLabel={null} />\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 {\n errorMessage,\n isComplete,\n errorIconLabel,\n usAccept,\n usButtonText,\n usDisabled,\n usLabel,\n usPlaceholder,\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\n className={`btn btn-primary btn-md ${usDisabled ? 'disabled' : ''}`}\n role=\"button\"\n aria-disabled={usDisabled}\n tabIndex={0}\n onKeyDown={this.onKeyDown}\n >\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} iconLabel={errorIconLabel}>\n {errorMessage}\n </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","onKeyDown","event","key","preventDefault","click","getImage","usHelpImage","usLabel","errorMessage","_jsx","className","children","StatusIcon","size","Size","LARGE","sentiment","Sentiment","NEGATIVE","iconLabel","UploadIcon","src","alt","render","isComplete","errorIconLabel","usAccept","usButtonText","usDisabled","usPlaceholder","_jsxs","String","role","tabIndex","ref","type","accept","undefined","disabled","name","onChange","InlineAlert"],"mappings":"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"}
@@ -27,7 +27,7 @@ import { jsx, jsxs } from 'react/jsx-runtime';
27
27
  import InlineAlert from '../../../inlineAlert/InlineAlert.mjs';
28
28
 
29
29
  class UploadImageStep extends PureComponent {
30
- uploadInputRef = /*#__PURE__*/createRef();
30
+ uploadInputRef = (() => /*#__PURE__*/createRef())();
31
31
  onManualUpload = () => {
32
32
  const {
33
33
  fileDropped
@@ -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';\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 errorIconLabel?: 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 onKeyDown = (event: React.KeyboardEvent<HTMLLabelElement>) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.uploadInputRef.current?.click();\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} iconLabel={null} />\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 {\n errorMessage,\n isComplete,\n errorIconLabel,\n usAccept,\n usButtonText,\n usDisabled,\n usLabel,\n usPlaceholder,\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\n className={`btn btn-primary btn-md ${usDisabled ? 'disabled' : ''}`}\n role=\"button\"\n aria-disabled={usDisabled}\n tabIndex={0}\n onKeyDown={this.onKeyDown}\n >\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} iconLabel={errorIconLabel}>\n {errorMessage}\n </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","onKeyDown","event","key","preventDefault","click","getImage","usHelpImage","usLabel","errorMessage","_jsx","className","children","StatusIcon","size","Size","LARGE","sentiment","Sentiment","NEGATIVE","iconLabel","UploadIcon","src","alt","render","isComplete","errorIconLabel","usAccept","usButtonText","usDisabled","usPlaceholder","_jsxs","String","role","tabIndex","ref","type","accept","undefined","disabled","name","onChange","InlineAlert"],"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 errorIconLabel?: 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 onKeyDown = (event: React.KeyboardEvent<HTMLLabelElement>) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.uploadInputRef.current?.click();\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} iconLabel={null} />\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 {\n errorMessage,\n isComplete,\n errorIconLabel,\n usAccept,\n usButtonText,\n usDisabled,\n usLabel,\n usPlaceholder,\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\n className={`btn btn-primary btn-md ${usDisabled ? 'disabled' : ''}`}\n role=\"button\"\n aria-disabled={usDisabled}\n tabIndex={0}\n onKeyDown={this.onKeyDown}\n >\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} iconLabel={errorIconLabel}>\n {errorMessage}\n </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","onKeyDown","event","key","preventDefault","click","getImage","usHelpImage","usLabel","errorMessage","_jsx","className","children","StatusIcon","size","Size","LARGE","sentiment","Sentiment","NEGATIVE","iconLabel","UploadIcon","src","alt","render","isComplete","errorIconLabel","usAccept","usButtonText","usDisabled","usPlaceholder","_jsxs","String","role","tabIndex","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": "0.0.0-experimental-d1cefe3",
3
+ "version": "0.0.0-experimental-548b806",
4
4
  "description": "Neptune React components",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -38,8 +38,8 @@
38
38
  "!**/*.tsbuildinfo"
39
39
  ],
40
40
  "devDependencies": {
41
- "@babel/core": "^7.27.4",
42
- "@babel/plugin-transform-runtime": "^7.27.4",
41
+ "@babel/core": "^7.27.3",
42
+ "@babel/plugin-transform-runtime": "^7.27.3",
43
43
  "@babel/preset-env": "^7.27.2",
44
44
  "@babel/preset-react": "^7.27.1",
45
45
  "@babel/preset-typescript": "^7.27.1",
@@ -78,23 +78,23 @@
78
78
  "@types/react": "^18.3.23",
79
79
  "@types/react-dom": "^18.3.7",
80
80
  "@types/react-transition-group": "4.4.12",
81
- "@wise/art": "^2.21.2",
81
+ "@wise/art": "^2.21.1",
82
82
  "@wise/eslint-config": "^12.3.0",
83
83
  "babel-plugin-formatjs": "^10.5.38",
84
84
  "eslint": "^9.27.0",
85
- "gulp": "^5.0.1",
85
+ "gulp": "^5.0.0",
86
86
  "jest": "^29.7.0",
87
87
  "jest-environment-jsdom": "^29.7.0",
88
88
  "jest-fetch-mock": "^3.0.3",
89
89
  "lodash.times": "^4.3.2",
90
90
  "react-intl": "^7.1.11",
91
- "rollup": "^4.42.0",
91
+ "rollup": "^4.41.1",
92
92
  "rollup-preserve-directives": "^1.1.3",
93
93
  "storybook": "^8.6.14",
94
- "@transferwise/less-config": "3.1.2",
95
- "@transferwise/neptune-css": "14.24.4",
96
94
  "@wise/components-theming": "1.6.3",
97
- "@wise/wds-configs": "0.0.0"
95
+ "@wise/wds-configs": "0.0.0",
96
+ "@transferwise/less-config": "3.1.2",
97
+ "@transferwise/neptune-css": "14.24.4"
98
98
  },
99
99
  "peerDependencies": {
100
100
  "@transferwise/icons": "^3.22.0",
@@ -106,12 +106,12 @@
106
106
  "react-intl": "^5.10.0 || ^6"
107
107
  },
108
108
  "dependencies": {
109
- "@babel/runtime": "^7.27.6",
109
+ "@babel/runtime": "^7.27.3",
110
110
  "@floating-ui/react": "^0.27.9",
111
111
  "@headlessui/react": "^1.7.19",
112
112
  "@popperjs/core": "^2.11.8",
113
- "@react-aria/focus": "^3.20.4",
114
- "@react-aria/overlays": "^3.27.2",
113
+ "@react-aria/focus": "^3.20.3",
114
+ "@react-aria/overlays": "^3.27.1",
115
115
  "@react-spring/web": "~10.0.1",
116
116
  "@transferwise/formatting": "^2.13.1",
117
117
  "@transferwise/neptune-validation": "^3.3.0",
@@ -1,16 +1,4 @@
1
- .tw-date label {
1
+ .np-theme-personal .tw-date label {
2
2
  width: 100%;
3
- }
4
- .tw-date .tw-date--year label {
5
- margin-bottom: 0;
6
- }
7
- .tw-date .tw-date--year,
8
- .tw-date .tw-date--month,
9
- .tw-date .tw-date--day {
10
3
  margin-bottom: 0;
11
4
  }
12
- @media (min-width: 576px) {
13
- .np-theme-personal .tw-date label {
14
- margin-bottom: 0;
15
- }
16
- }
@@ -1,25 +1,8 @@
1
- .tw-date {
2
- label {
3
- width: 100%;
4
- }
5
- .tw-date--year {
1
+ .np-theme-personal {
2
+ .tw-date {
6
3
  label {
4
+ width: 100%;
7
5
  margin-bottom: 0;
8
6
  }
9
7
  }
10
- .tw-date--year,
11
- .tw-date--month,
12
- .tw-date--day {
13
- margin-bottom: 0;
14
- }
15
- }
16
-
17
- @media (--screen-sm) {
18
- .np-theme-personal {
19
- .tw-date {
20
- label {
21
- margin-bottom: 0;
22
- }
23
- }
24
- }
25
8
  }
@@ -48,22 +48,11 @@ export const WithLabel: Story = {
48
48
  };
49
49
 
50
50
  export const InputError: Story = {
51
+ ...Basic,
51
52
  render: (args) => (
52
- <>
53
- pure date input:
53
+ <Field sentiment="negative" message={lorem10}>
54
54
  <DateInput {...args} value={new Date('2010-04-05')} />
55
- <div className="p-b-3">show padding right below</div>
56
- date input wrapped in Field:
57
- <Field>
58
- <DateInput {...args} value={new Date('2010-04-05')} />
59
- </Field>
60
- <div className="p-b-3">show padding right below</div>
61
- error date input wrapped in Field:
62
- <Field sentiment="negative" message={lorem10}>
63
- <DateInput {...args} value={new Date('2010-04-05')} />
64
- </Field>
65
- <div className="p-b-3">show padding right below</div>
66
- </>
55
+ </Field>
67
56
  ),
68
57
  };
69
58
 
@@ -242,8 +242,8 @@ const DateInput = ({
242
242
  const monthYearOnly = mode === DateMode.MONTH_YEAR;
243
243
 
244
244
  const monthWidth = clsx({
245
- 'col-sm-8 tw-date--month': monthYearOnly,
246
- 'col-sm-5 tw-date--month': !monthYearOnly,
245
+ 'col-sm-8': monthYearOnly,
246
+ 'col-sm-5': !monthYearOnly,
247
247
  });
248
248
 
249
249
  const getMonth = () => {
@@ -252,7 +252,7 @@ const DateInput = ({
252
252
 
253
253
  const getDay = () => {
254
254
  return (
255
- <div className="col-sm-3 tw-date--day">
255
+ <div className="col-sm-3">
256
256
  <label>
257
257
  <Body type={Typography.BODY_DEFAULT}>{dayLabel}</Body>
258
258
  <div className={`input-group input-group-${size}`}>
@@ -279,7 +279,7 @@ const DateInput = ({
279
279
 
280
280
  const getYear = () => {
281
281
  return (
282
- <div className="col-sm-4 tw-date--year">
282
+ <div className="col-sm-4">
283
283
  <label>
284
284
  <Body type={Typography.BODY_DEFAULT}>{yearLabel}</Body>
285
285
  <div className={`input-group input-group-${size}`}>
package/src/i18n/cs.json CHANGED
@@ -28,6 +28,8 @@
28
28
  "neptune.PhoneNumberInput.phoneNumberLabel": "Telefonní číslo",
29
29
  "neptune.Select.searchPlaceholder": "Hledat...",
30
30
  "neptune.SelectInput.noResultsFound": "Nebyly nalezeny žádné výsledky",
31
+ "neptune.SelectOption.action.label": "Vybrat",
32
+ "neptune.SelectOption.selected.action.label": "Změnit zvolenou možnost",
31
33
  "neptune.StatusIcon.iconLabel.error": "Chyba:",
32
34
  "neptune.StatusIcon.iconLabel.information": "Informace:",
33
35
  "neptune.StatusIcon.iconLabel.pending": "Vyřizuje se:",
package/src/i18n/de.json CHANGED
@@ -28,6 +28,8 @@
28
28
  "neptune.PhoneNumberInput.phoneNumberLabel": "Telefonnummer",
29
29
  "neptune.Select.searchPlaceholder": "Wird gesucht...",
30
30
  "neptune.SelectInput.noResultsFound": "Keine Ergebnisse gefunden",
31
+ "neptune.SelectOption.action.label": "Auswählen",
32
+ "neptune.SelectOption.selected.action.label": "Ausgewählte Option ändern",
31
33
  "neptune.StatusIcon.iconLabel.error": "Fehler:",
32
34
  "neptune.StatusIcon.iconLabel.information": "Auskünfte:",
33
35
  "neptune.StatusIcon.iconLabel.pending": "Ausstehend:",
package/src/i18n/es.json CHANGED
@@ -28,6 +28,8 @@
28
28
  "neptune.PhoneNumberInput.phoneNumberLabel": "Número de teléfono",
29
29
  "neptune.Select.searchPlaceholder": "Buscar...",
30
30
  "neptune.SelectInput.noResultsFound": "No se han encontrado resultados",
31
+ "neptune.SelectOption.action.label": "Elegir",
32
+ "neptune.SelectOption.selected.action.label": "Cambiar opción elegida",
31
33
  "neptune.StatusIcon.iconLabel.error": "Error:",
32
34
  "neptune.StatusIcon.iconLabel.information": "Información:",
33
35
  "neptune.StatusIcon.iconLabel.pending": "Pendiente:",
package/src/i18n/fr.json CHANGED
@@ -28,6 +28,8 @@
28
28
  "neptune.PhoneNumberInput.phoneNumberLabel": "Numéro de téléphone",
29
29
  "neptune.Select.searchPlaceholder": "Recherche...",
30
30
  "neptune.SelectInput.noResultsFound": "Aucun résultat trouvé",
31
+ "neptune.SelectOption.action.label": "Sélectionner",
32
+ "neptune.SelectOption.selected.action.label": "Modifier l'option choisie",
31
33
  "neptune.StatusIcon.iconLabel.error": "Erreur :",
32
34
  "neptune.StatusIcon.iconLabel.information": "Informations :",
33
35
  "neptune.StatusIcon.iconLabel.pending": "En attente :",
package/src/i18n/hu.json CHANGED
@@ -28,6 +28,8 @@
28
28
  "neptune.PhoneNumberInput.phoneNumberLabel": "Telefonszám",
29
29
  "neptune.Select.searchPlaceholder": "Keresés...",
30
30
  "neptune.SelectInput.noResultsFound": "Nincs találat",
31
+ "neptune.SelectOption.action.label": "Kiválasztás",
32
+ "neptune.SelectOption.selected.action.label": "Kiválasztott opció módosítása",
31
33
  "neptune.StatusIcon.iconLabel.error": "Hiba:",
32
34
  "neptune.StatusIcon.iconLabel.information": "Információ:",
33
35
  "neptune.StatusIcon.iconLabel.pending": "Függőben:",
package/src/i18n/id.json CHANGED
@@ -28,6 +28,8 @@
28
28
  "neptune.PhoneNumberInput.phoneNumberLabel": "Nomor telepon",
29
29
  "neptune.Select.searchPlaceholder": "Cari...",
30
30
  "neptune.SelectInput.noResultsFound": "Hasil tidak ditemukan",
31
+ "neptune.SelectOption.action.label": "Pilih",
32
+ "neptune.SelectOption.selected.action.label": "Ubah opsi yang dipilih",
31
33
  "neptune.StatusIcon.iconLabel.error": "Kesalahan:",
32
34
  "neptune.StatusIcon.iconLabel.information": "Informasi:",
33
35
  "neptune.StatusIcon.iconLabel.pending": "Tertunda:",