@transferwise/components 0.0.0-experimental-84199a4 → 0.0.0-experimental-046a59f

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 (345) hide show
  1. package/build/accordion/AccordionItem/AccordionItem.js +3 -19
  2. package/build/accordion/AccordionItem/AccordionItem.js.map +1 -1
  3. package/build/accordion/AccordionItem/AccordionItem.mjs +3 -19
  4. package/build/accordion/AccordionItem/AccordionItem.mjs.map +1 -1
  5. package/build/actionButton/ActionButton.js +1 -19
  6. package/build/actionButton/ActionButton.js.map +1 -1
  7. package/build/actionButton/ActionButton.mjs +1 -19
  8. package/build/actionButton/ActionButton.mjs.map +1 -1
  9. package/build/actionOption/ActionOption.js +1 -19
  10. package/build/actionOption/ActionOption.js.map +1 -1
  11. package/build/actionOption/ActionOption.mjs +1 -19
  12. package/build/actionOption/ActionOption.mjs.map +1 -1
  13. package/build/alert/Alert.js +3 -19
  14. package/build/alert/Alert.js.map +1 -1
  15. package/build/alert/Alert.mjs +3 -19
  16. package/build/alert/Alert.mjs.map +1 -1
  17. package/build/alert/inlineMarkdown/InlineMarkdown.js +1 -19
  18. package/build/alert/inlineMarkdown/InlineMarkdown.js.map +1 -1
  19. package/build/alert/inlineMarkdown/InlineMarkdown.mjs +1 -19
  20. package/build/alert/inlineMarkdown/InlineMarkdown.mjs.map +1 -1
  21. package/build/avatar/Avatar.js +1 -19
  22. package/build/avatar/Avatar.js.map +1 -1
  23. package/build/avatar/Avatar.mjs +1 -19
  24. package/build/avatar/Avatar.mjs.map +1 -1
  25. package/build/avatarWrapper/AvatarWrapper.js +2 -19
  26. package/build/avatarWrapper/AvatarWrapper.js.map +1 -1
  27. package/build/avatarWrapper/AvatarWrapper.mjs +2 -19
  28. package/build/avatarWrapper/AvatarWrapper.mjs.map +1 -1
  29. package/build/badge/Badge.js +2 -19
  30. package/build/badge/Badge.js.map +1 -1
  31. package/build/badge/Badge.mjs +2 -19
  32. package/build/badge/Badge.mjs.map +1 -1
  33. package/build/button/Button.js +2 -19
  34. package/build/button/Button.js.map +1 -1
  35. package/build/button/Button.mjs +2 -19
  36. package/build/button/Button.mjs.map +1 -1
  37. package/build/button/classMap.js +0 -18
  38. package/build/button/classMap.js.map +1 -1
  39. package/build/button/classMap.mjs +0 -18
  40. package/build/button/classMap.mjs.map +1 -1
  41. package/build/button/legacyUtils/legacyUtils.js +2 -18
  42. package/build/button/legacyUtils/legacyUtils.js.map +1 -1
  43. package/build/button/legacyUtils/legacyUtils.mjs +2 -18
  44. package/build/button/legacyUtils/legacyUtils.mjs.map +1 -1
  45. package/build/card/Card.js +2 -19
  46. package/build/card/Card.js.map +1 -1
  47. package/build/card/Card.mjs +2 -19
  48. package/build/card/Card.mjs.map +1 -1
  49. package/build/checkbox/Checkbox.js +1 -19
  50. package/build/checkbox/Checkbox.js.map +1 -1
  51. package/build/checkbox/Checkbox.mjs +1 -19
  52. package/build/checkbox/Checkbox.mjs.map +1 -1
  53. package/build/chevron/Chevron.js +1 -18
  54. package/build/chevron/Chevron.js.map +1 -1
  55. package/build/chevron/Chevron.mjs +1 -18
  56. package/build/chevron/Chevron.mjs.map +1 -1
  57. package/build/chips/Chip.js +1 -19
  58. package/build/chips/Chip.js.map +1 -1
  59. package/build/chips/Chip.mjs +1 -19
  60. package/build/chips/Chip.mjs.map +1 -1
  61. package/build/circularButton/CircularButton.js +2 -19
  62. package/build/circularButton/CircularButton.js.map +1 -1
  63. package/build/circularButton/CircularButton.mjs +2 -19
  64. package/build/circularButton/CircularButton.mjs.map +1 -1
  65. package/build/common/bottomSheet/BottomSheet.js +2 -3
  66. package/build/common/bottomSheet/BottomSheet.js.map +1 -1
  67. package/build/common/bottomSheet/BottomSheet.mjs +2 -3
  68. package/build/common/bottomSheet/BottomSheet.mjs.map +1 -1
  69. package/build/common/hooks/useHasIntersected/useHasIntersected.js +9 -7
  70. package/build/common/hooks/useHasIntersected/useHasIntersected.js.map +1 -1
  71. package/build/common/hooks/useHasIntersected/useHasIntersected.mjs +9 -7
  72. package/build/common/hooks/useHasIntersected/useHasIntersected.mjs.map +1 -1
  73. package/build/common/locale/index.js +0 -18
  74. package/build/common/locale/index.js.map +1 -1
  75. package/build/common/locale/index.mjs +0 -18
  76. package/build/common/locale/index.mjs.map +1 -1
  77. package/build/common/panel/Panel.js +1 -19
  78. package/build/common/panel/Panel.js.map +1 -1
  79. package/build/common/panel/Panel.mjs +1 -19
  80. package/build/common/panel/Panel.mjs.map +1 -1
  81. package/build/common/responsivePanel/ResponsivePanel.js +2 -22
  82. package/build/common/responsivePanel/ResponsivePanel.js.map +1 -1
  83. package/build/common/responsivePanel/ResponsivePanel.mjs +2 -22
  84. package/build/common/responsivePanel/ResponsivePanel.mjs.map +1 -1
  85. package/build/criticalBanner/CriticalCommsBanner.js +3 -19
  86. package/build/criticalBanner/CriticalCommsBanner.js.map +1 -1
  87. package/build/criticalBanner/CriticalCommsBanner.mjs +3 -19
  88. package/build/criticalBanner/CriticalCommsBanner.mjs.map +1 -1
  89. package/build/dateInput/DateInput.js +4 -19
  90. package/build/dateInput/DateInput.js.map +1 -1
  91. package/build/dateInput/DateInput.mjs +4 -19
  92. package/build/dateInput/DateInput.mjs.map +1 -1
  93. package/build/dateLookup/DateLookup.js +5 -20
  94. package/build/dateLookup/DateLookup.js.map +1 -1
  95. package/build/dateLookup/DateLookup.mjs +5 -20
  96. package/build/dateLookup/DateLookup.mjs.map +1 -1
  97. package/build/dateLookup/dateHeader/DateHeader.js +4 -23
  98. package/build/dateLookup/dateHeader/DateHeader.js.map +1 -1
  99. package/build/dateLookup/dateHeader/DateHeader.mjs +4 -23
  100. package/build/dateLookup/dateHeader/DateHeader.mjs.map +1 -1
  101. package/build/dateLookup/dateTrigger/DateTrigger.js +3 -19
  102. package/build/dateLookup/dateTrigger/DateTrigger.js.map +1 -1
  103. package/build/dateLookup/dateTrigger/DateTrigger.mjs +3 -19
  104. package/build/dateLookup/dateTrigger/DateTrigger.mjs.map +1 -1
  105. package/build/decision/Decision.js +2 -19
  106. package/build/decision/Decision.js.map +1 -1
  107. package/build/decision/Decision.mjs +2 -19
  108. package/build/decision/Decision.mjs.map +1 -1
  109. package/build/definitionList/DefinitionList.js +1 -19
  110. package/build/definitionList/DefinitionList.js.map +1 -1
  111. package/build/definitionList/DefinitionList.mjs +1 -19
  112. package/build/definitionList/DefinitionList.mjs.map +1 -1
  113. package/build/dimmer/Dimmer.js +1 -20
  114. package/build/dimmer/Dimmer.js.map +1 -1
  115. package/build/dimmer/Dimmer.mjs +1 -20
  116. package/build/dimmer/Dimmer.mjs.map +1 -1
  117. package/build/display/Display.js +1 -19
  118. package/build/display/Display.js.map +1 -1
  119. package/build/display/Display.mjs +1 -19
  120. package/build/display/Display.mjs.map +1 -1
  121. package/build/drawer/Drawer.js +3 -22
  122. package/build/drawer/Drawer.js.map +1 -1
  123. package/build/drawer/Drawer.mjs +3 -22
  124. package/build/drawer/Drawer.mjs.map +1 -1
  125. package/build/field/Field.js +1 -19
  126. package/build/field/Field.js.map +1 -1
  127. package/build/field/Field.mjs +1 -19
  128. package/build/field/Field.mjs.map +1 -1
  129. package/build/flowNavigation/FlowNavigation.js +2 -19
  130. package/build/flowNavigation/FlowNavigation.js.map +1 -1
  131. package/build/flowNavigation/FlowNavigation.mjs +2 -19
  132. package/build/flowNavigation/FlowNavigation.mjs.map +1 -1
  133. package/build/header/Header.js +1 -19
  134. package/build/header/Header.js.map +1 -1
  135. package/build/header/Header.mjs +1 -19
  136. package/build/header/Header.mjs.map +1 -1
  137. package/build/image/Image.js +1 -4
  138. package/build/image/Image.js.map +1 -1
  139. package/build/image/Image.mjs +1 -4
  140. package/build/image/Image.mjs.map +1 -1
  141. package/build/index.js +62 -64
  142. package/build/index.js.map +1 -1
  143. package/build/index.mjs +20 -22
  144. package/build/index.mjs.map +1 -1
  145. package/build/info/Info.js +2 -19
  146. package/build/info/Info.js.map +1 -1
  147. package/build/info/Info.mjs +2 -19
  148. package/build/info/Info.mjs.map +1 -1
  149. package/build/inlineAlert/InlineAlert.js +2 -19
  150. package/build/inlineAlert/InlineAlert.js.map +1 -1
  151. package/build/inlineAlert/InlineAlert.mjs +2 -19
  152. package/build/inlineAlert/InlineAlert.mjs.map +1 -1
  153. package/build/inputs/SearchInput.js +1 -19
  154. package/build/inputs/SearchInput.js.map +1 -1
  155. package/build/inputs/SearchInput.mjs +1 -19
  156. package/build/inputs/SearchInput.mjs.map +1 -1
  157. package/build/instructionsList/InstructionsList.js +5 -22
  158. package/build/instructionsList/InstructionsList.js.map +1 -1
  159. package/build/instructionsList/InstructionsList.mjs +5 -22
  160. package/build/instructionsList/InstructionsList.mjs.map +1 -1
  161. package/build/loader/Loader.js +1 -19
  162. package/build/loader/Loader.js.map +1 -1
  163. package/build/loader/Loader.mjs +1 -19
  164. package/build/loader/Loader.mjs.map +1 -1
  165. package/build/markdown/Markdown.js +1 -19
  166. package/build/markdown/Markdown.js.map +1 -1
  167. package/build/markdown/Markdown.mjs +1 -19
  168. package/build/markdown/Markdown.mjs.map +1 -1
  169. package/build/modal/Modal.js +5 -22
  170. package/build/modal/Modal.js.map +1 -1
  171. package/build/modal/Modal.mjs +5 -22
  172. package/build/modal/Modal.mjs.map +1 -1
  173. package/build/moneyInput/MoneyInput.js +2 -19
  174. package/build/moneyInput/MoneyInput.js.map +1 -1
  175. package/build/moneyInput/MoneyInput.mjs +2 -19
  176. package/build/moneyInput/MoneyInput.mjs.map +1 -1
  177. package/build/navigationOption/NavigationOption.js +1 -19
  178. package/build/navigationOption/NavigationOption.js.map +1 -1
  179. package/build/navigationOption/NavigationOption.mjs +1 -19
  180. package/build/navigationOption/NavigationOption.mjs.map +1 -1
  181. package/build/nudge/Nudge.js +1 -19
  182. package/build/nudge/Nudge.js.map +1 -1
  183. package/build/nudge/Nudge.mjs +1 -19
  184. package/build/nudge/Nudge.mjs.map +1 -1
  185. package/build/overlayHeader/OverlayHeader.js +1 -19
  186. package/build/overlayHeader/OverlayHeader.js.map +1 -1
  187. package/build/overlayHeader/OverlayHeader.mjs +1 -19
  188. package/build/overlayHeader/OverlayHeader.mjs.map +1 -1
  189. package/build/phoneNumberInput/PhoneNumberInput.js +1 -19
  190. package/build/phoneNumberInput/PhoneNumberInput.js.map +1 -1
  191. package/build/phoneNumberInput/PhoneNumberInput.mjs +1 -19
  192. package/build/phoneNumberInput/PhoneNumberInput.mjs.map +1 -1
  193. package/build/popover/Popover.js +3 -20
  194. package/build/popover/Popover.js.map +1 -1
  195. package/build/popover/Popover.mjs +3 -20
  196. package/build/popover/Popover.mjs.map +1 -1
  197. package/build/processIndicator/ProcessIndicator.js +1 -19
  198. package/build/processIndicator/ProcessIndicator.js.map +1 -1
  199. package/build/processIndicator/ProcessIndicator.mjs +1 -19
  200. package/build/processIndicator/ProcessIndicator.mjs.map +1 -1
  201. package/build/progressBar/ProgressBar.js +1 -19
  202. package/build/progressBar/ProgressBar.js.map +1 -1
  203. package/build/progressBar/ProgressBar.mjs +1 -19
  204. package/build/progressBar/ProgressBar.mjs.map +1 -1
  205. package/build/promoCard/PromoCard.js +1 -19
  206. package/build/promoCard/PromoCard.js.map +1 -1
  207. package/build/promoCard/PromoCard.mjs +1 -19
  208. package/build/promoCard/PromoCard.mjs.map +1 -1
  209. package/build/promoCard/PromoCardIndicator.js +1 -19
  210. package/build/promoCard/PromoCardIndicator.js.map +1 -1
  211. package/build/promoCard/PromoCardIndicator.mjs +1 -19
  212. package/build/promoCard/PromoCardIndicator.mjs.map +1 -1
  213. package/build/provider/Provider.js +1 -20
  214. package/build/provider/Provider.js.map +1 -1
  215. package/build/provider/Provider.mjs +1 -20
  216. package/build/provider/Provider.mjs.map +1 -1
  217. package/build/radio/Radio.js +1 -19
  218. package/build/radio/Radio.js.map +1 -1
  219. package/build/radio/Radio.mjs +1 -19
  220. package/build/radio/Radio.mjs.map +1 -1
  221. package/build/segmentedControl/SegmentedControl.js +1 -19
  222. package/build/segmentedControl/SegmentedControl.js.map +1 -1
  223. package/build/segmentedControl/SegmentedControl.mjs +1 -19
  224. package/build/segmentedControl/SegmentedControl.mjs.map +1 -1
  225. package/build/select/Select.js +3 -23
  226. package/build/select/Select.js.map +1 -1
  227. package/build/select/Select.mjs +3 -23
  228. package/build/select/Select.mjs.map +1 -1
  229. package/build/select/option/Option.js +1 -19
  230. package/build/select/option/Option.js.map +1 -1
  231. package/build/select/option/Option.mjs +1 -19
  232. package/build/select/option/Option.mjs.map +1 -1
  233. package/build/selectOption/SelectOption.js +3 -20
  234. package/build/selectOption/SelectOption.js.map +1 -1
  235. package/build/selectOption/SelectOption.mjs +3 -20
  236. package/build/selectOption/SelectOption.mjs.map +1 -1
  237. package/build/stepper/Stepper.js +2 -21
  238. package/build/stepper/Stepper.js.map +1 -1
  239. package/build/stepper/Stepper.mjs +2 -21
  240. package/build/stepper/Stepper.mjs.map +1 -1
  241. package/build/sticky/Sticky.js +1 -19
  242. package/build/sticky/Sticky.js.map +1 -1
  243. package/build/sticky/Sticky.mjs +1 -19
  244. package/build/sticky/Sticky.mjs.map +1 -1
  245. package/build/summary/Summary.js +4 -19
  246. package/build/summary/Summary.js.map +1 -1
  247. package/build/summary/Summary.mjs +4 -19
  248. package/build/summary/Summary.mjs.map +1 -1
  249. package/build/tabs/Tabs.js +2 -19
  250. package/build/tabs/Tabs.js.map +1 -1
  251. package/build/tabs/Tabs.mjs +2 -19
  252. package/build/tabs/Tabs.mjs.map +1 -1
  253. package/build/tile/Tile.js +1 -19
  254. package/build/tile/Tile.js.map +1 -1
  255. package/build/tile/Tile.mjs +1 -19
  256. package/build/tile/Tile.mjs.map +1 -1
  257. package/build/title/Title.js +1 -19
  258. package/build/title/Title.js.map +1 -1
  259. package/build/title/Title.mjs +1 -19
  260. package/build/title/Title.mjs.map +1 -1
  261. package/build/tooltip/Tooltip.js +1 -19
  262. package/build/tooltip/Tooltip.js.map +1 -1
  263. package/build/tooltip/Tooltip.mjs +1 -19
  264. package/build/tooltip/Tooltip.mjs.map +1 -1
  265. package/build/typeahead/Typeahead.js +3 -20
  266. package/build/typeahead/Typeahead.js.map +1 -1
  267. package/build/typeahead/Typeahead.mjs +3 -20
  268. package/build/typeahead/Typeahead.mjs.map +1 -1
  269. package/build/types/common/hooks/index.d.ts +4 -4
  270. package/build/types/common/hooks/index.d.ts.map +1 -1
  271. package/build/types/common/hooks/useConditionalListener/index.d.ts +1 -1
  272. package/build/types/common/hooks/useConditionalListener/index.d.ts.map +1 -1
  273. package/build/types/common/hooks/useDirection/index.d.ts +1 -1
  274. package/build/types/common/hooks/useDirection/index.d.ts.map +1 -1
  275. package/build/types/common/hooks/useHasIntersected/index.d.ts +1 -1
  276. package/build/types/common/hooks/useHasIntersected/index.d.ts.map +1 -1
  277. package/build/types/common/hooks/useHasIntersected/useHasIntersected.d.ts +4 -15
  278. package/build/types/common/hooks/useHasIntersected/useHasIntersected.d.ts.map +1 -1
  279. package/build/types/common/index.d.ts +24 -24
  280. package/build/types/common/index.d.ts.map +1 -1
  281. package/build/types/common/responsivePanel/index.d.ts +1 -1
  282. package/build/types/common/responsivePanel/index.d.ts.map +1 -1
  283. package/build/types/index.d.ts +0 -1
  284. package/build/types/index.d.ts.map +1 -1
  285. package/build/types/instructionsList/InstructionsList.d.ts.map +1 -1
  286. package/build/types/navigationOption/NavigationOption.d.ts +0 -1
  287. package/build/types/navigationOption/NavigationOption.d.ts.map +1 -1
  288. package/build/upload/Upload.js +1 -19
  289. package/build/upload/Upload.js.map +1 -1
  290. package/build/upload/Upload.mjs +1 -19
  291. package/build/upload/Upload.mjs.map +1 -1
  292. package/build/upload/steps/processingStep/processingStep.js +2 -19
  293. package/build/upload/steps/processingStep/processingStep.js.map +1 -1
  294. package/build/upload/steps/processingStep/processingStep.mjs +2 -19
  295. package/build/upload/steps/processingStep/processingStep.mjs.map +1 -1
  296. package/build/upload/steps/uploadImageStep/uploadImageStep.js +2 -19
  297. package/build/upload/steps/uploadImageStep/uploadImageStep.js.map +1 -1
  298. package/build/upload/steps/uploadImageStep/uploadImageStep.mjs +2 -19
  299. package/build/upload/steps/uploadImageStep/uploadImageStep.mjs.map +1 -1
  300. package/build/uploadInput/UploadInput.js +2 -19
  301. package/build/uploadInput/UploadInput.js.map +1 -1
  302. package/build/uploadInput/UploadInput.mjs +2 -19
  303. package/build/uploadInput/UploadInput.mjs.map +1 -1
  304. package/build/uploadInput/uploadButton/UploadButton.js +1 -19
  305. package/build/uploadInput/uploadButton/UploadButton.js.map +1 -1
  306. package/build/uploadInput/uploadButton/UploadButton.mjs +1 -19
  307. package/build/uploadInput/uploadButton/UploadButton.mjs.map +1 -1
  308. package/build/uploadInput/uploadButton/defaults.js +0 -18
  309. package/build/uploadInput/uploadButton/defaults.js.map +1 -1
  310. package/build/uploadInput/uploadButton/defaults.mjs +0 -18
  311. package/build/uploadInput/uploadButton/defaults.mjs.map +1 -1
  312. package/build/uploadInput/uploadItem/UploadItem.js +3 -19
  313. package/build/uploadInput/uploadItem/UploadItem.js.map +1 -1
  314. package/build/uploadInput/uploadItem/UploadItem.mjs +3 -19
  315. package/build/uploadInput/uploadItem/UploadItem.mjs.map +1 -1
  316. package/build/withDisplayFormat/WithDisplayFormat.js +1 -20
  317. package/build/withDisplayFormat/WithDisplayFormat.js.map +1 -1
  318. package/build/withDisplayFormat/WithDisplayFormat.mjs +1 -20
  319. package/build/withDisplayFormat/WithDisplayFormat.mjs.map +1 -1
  320. package/package.json +3 -3
  321. package/src/accordion/AccordionItem/__snapshots__/AccordionItem.spec.js.snap +4 -4
  322. package/src/avatarWrapper/__snapshots__/AvatarWrapper.spec.tsx.snap +8 -8
  323. package/src/chips/__snapshots__/Chips.spec.tsx.snap +2 -2
  324. package/src/circularButton/__snapshots__/CircularButton.spec.tsx.snap +20 -20
  325. package/src/common/bottomSheet/__snapshots__/BottomSheet.spec.tsx.snap +2 -2
  326. package/src/common/closeButton/__snapshots__/CloseButton.spec.tsx.snap +2 -2
  327. package/src/common/{fakeEvents.ts → fakeEvents.js} +1 -1
  328. package/src/common/hooks/useHasIntersected/{useHasIntersected.ts → useHasIntersected.js} +11 -17
  329. package/src/common/requirements.js +440 -0
  330. package/src/drawer/__snapshots__/Drawer.rtl.spec.tsx.snap +2 -2
  331. package/src/flowNavigation/__snapshots__/FlowNavigation.spec.js.snap +4 -4
  332. package/src/index.ts +0 -1
  333. package/src/instructionsList/InstructionsList.spec.tsx +21 -5
  334. package/src/instructionsList/InstructionsList.tsx +11 -3
  335. package/src/navigationOption/{NavigationOption.story.tsx → NavigationOption.story.js} +5 -23
  336. package/src/navigationOption/NavigationOption.tsx +1 -1
  337. package/src/overlayHeader/__snapshots__/OverlayHeader.spec.tsx.snap +2 -2
  338. package/build/types/common/fakeEvents.d.ts +0 -23
  339. package/build/types/common/fakeEvents.d.ts.map +0 -1
  340. /package/src/common/hooks/{index.ts → index.js} +0 -0
  341. /package/src/common/hooks/useConditionalListener/{index.ts → index.js} +0 -0
  342. /package/src/common/hooks/useDirection/{index.ts → index.js} +0 -0
  343. /package/src/common/hooks/useHasIntersected/{index.ts → index.js} +0 -0
  344. /package/src/common/{index.ts → index.js} +0 -0
  345. /package/src/common/responsivePanel/{index.ts → index.js} +0 -0
@@ -0,0 +1,440 @@
1
+ /* eslint-disable no-unused-vars */
2
+ /* eslint-disable no-param-reassign */
3
+
4
+ const prepRequirements = (alternatives) => {
5
+ if (!alternatives || alternatives.length === 0) {
6
+ return [];
7
+ }
8
+
9
+ const preppedAlternatives = copyOf(alternatives);
10
+
11
+ preppedAlternatives.forEach((alternative) => {
12
+ if (alternative.prepared) {
13
+ return;
14
+ }
15
+
16
+ prepLegacyAlternatives(alternative);
17
+
18
+ alternative.properties = prepFields(alternative.properties || alternative.fields);
19
+
20
+ // If we're still treating type as a special case, move it to a hidden value
21
+ if (alternative.type && alternative.type !== 'object' && !alternative.types) {
22
+ alternative.properties.type = {
23
+ type: 'string',
24
+ enum: [alternative.type],
25
+ required: true,
26
+ hidden: true,
27
+ };
28
+
29
+ alternative.type = 'object';
30
+ }
31
+
32
+ alternative.prepared = true;
33
+ });
34
+
35
+ return preppedAlternatives;
36
+ };
37
+
38
+ const prepFields = (fields, model, validationMessages) => {
39
+ if (!fields) {
40
+ return {};
41
+ }
42
+
43
+ let preparedFields = copyOf(fields);
44
+
45
+ preparedFields = flattenFieldsWithGroups(preparedFields);
46
+ preparedFields = transformFieldArrayToMap(preparedFields);
47
+ preparedFields = transformNestedKeysToNestedSpecs(preparedFields);
48
+
49
+ Object.keys(preparedFields).forEach((key) => {
50
+ preparedFields[key] = prepField(preparedFields[key], model, validationMessages);
51
+ });
52
+
53
+ return preparedFields;
54
+ };
55
+
56
+ const prepField = (field, model, validationMessages) => {
57
+ const preparedField = copyOf(field);
58
+
59
+ prepLegacyProps(preparedField);
60
+ prepType(preparedField);
61
+ prepPattern(preparedField);
62
+ prepValidationMessages(preparedField, validationMessages);
63
+
64
+ return preparedField;
65
+ };
66
+
67
+ /**
68
+ * In an older format we had an extra fieldGroup level, here we flatten that out
69
+ * So the inner arrays of fields within the different field groups are flattened
70
+ * to a single array, which is returned.
71
+ *
72
+ * @param fields
73
+ */
74
+ const flattenFieldsWithGroups = (fields) => {
75
+ if (Array.isArray(fields)) {
76
+ let flattenedFields = [];
77
+ fields.forEach((field) => {
78
+ // If we've been given a group with nested fields, break them out.
79
+ if (field.fields) {
80
+ flattenedFields = flattenedFields.concat(flattenFieldWithGroup(field, field.fields));
81
+ } else if (field.group) {
82
+ flattenedFields = flattenedFields.concat(flattenFieldWithGroup(field, field.group));
83
+ } else {
84
+ // Otherwise it's a regular field, just add it.
85
+ flattenedFields.push(field);
86
+ }
87
+ });
88
+ return flattenedFields;
89
+ }
90
+ return fields;
91
+ };
92
+
93
+ const flattenFieldWithGroup = (field, subFields) => {
94
+ // If first field doesn't have a label, use the one from the group
95
+ if (field.name && subFields.length > 0 && !subFields[0].name) {
96
+ subFields[0].name = field.name;
97
+ }
98
+
99
+ if (field.width && subFields.length > 0 && !subFields[0].width) {
100
+ subFields[0].width = field.width;
101
+ }
102
+
103
+ // If there was a tooltip at fieldGroup level move it to first field.
104
+ if (field.tooltip && subFields.length > 0 && !subFields[0].help) {
105
+ subFields[0].help = { message: field.tooltip };
106
+ }
107
+
108
+ if (field.info && subFields.length > 0 && !subFields[0].help) {
109
+ subFields[0].help = { message: field.info };
110
+ }
111
+
112
+ // If there are two parts of this group, render them side by side
113
+ if (subFields.length === 2) {
114
+ subFields.forEach((nestedField) => {
115
+ nestedField.width = 'md';
116
+ });
117
+ }
118
+
119
+ // If there are three parts, render the first two side by side
120
+ if (subFields.length === 3) {
121
+ subFields[0].width = 'md';
122
+ subFields[1].width = 'md';
123
+ }
124
+
125
+ return subFields;
126
+ };
127
+
128
+ /*
129
+ * Some older requirements return an array of fields, where it should be a map
130
+ * from the property name to the spec. This converts arrays to maps.
131
+ */
132
+ const transformFieldArrayToMap = (fields) => {
133
+ if (Array.isArray(fields)) {
134
+ const fieldMap = {};
135
+ fields.forEach((field) => {
136
+ const key = field.key || field.name;
137
+ delete field.key;
138
+
139
+ fieldMap[key] = copyOf(field);
140
+ });
141
+ return fieldMap;
142
+ }
143
+ return fields;
144
+ };
145
+
146
+ /*
147
+ * Some older format return keys like 'address.city', expecting the value of
148
+ * city to be nested inside an address object. This function creates a spec of
149
+ * type 'object', and nests such fields inside of it. When we render we pass
150
+ * this object spec to a nested fieldset.
151
+ */
152
+ const transformNestedKeysToNestedSpecs = (fieldMap) => {
153
+ if (Array.isArray(fieldMap)) {
154
+ throw new TypeError('Expecting a map of fields, not an array');
155
+ }
156
+
157
+ const nestedFields = {};
158
+ Object.keys(fieldMap).forEach((key) => {
159
+ if (key.indexOf('.') > 0) {
160
+ // If the key contains a period we need to nest the fields in another object
161
+ const pathSections = key.split('.');
162
+ const nestedKey = pathSections[0];
163
+
164
+ // If this sub object doesn't exist yet, create it
165
+ if (!nestedFields[nestedKey]) {
166
+ nestedFields[nestedKey] = {
167
+ type: 'object',
168
+ properties: {},
169
+ };
170
+ }
171
+ nestedFields[nestedKey].properties[pathSections[1]] = fieldMap[key];
172
+ } else {
173
+ nestedFields[key] = fieldMap[key];
174
+ }
175
+ });
176
+ return nestedFields;
177
+ };
178
+
179
+ const prepType = (field) => {
180
+ const type = field.type && field.type.toLowerCase && field.type.toLowerCase();
181
+
182
+ switch (type) {
183
+ case 'text':
184
+ field.type = 'string';
185
+ break;
186
+ case 'date':
187
+ field.type = 'string';
188
+ field.format = 'date';
189
+ break;
190
+ case 'password':
191
+ field.type = 'string';
192
+ field.control = 'password';
193
+ break;
194
+ case 'checkbox':
195
+ field.type = 'boolean';
196
+ break;
197
+ case 'select':
198
+ if (!field.control) {
199
+ field.control = 'select';
200
+ }
201
+ delete field.type;
202
+ break;
203
+ case 'radio':
204
+ field.control = 'radio';
205
+ delete field.type;
206
+ break;
207
+ case 'upload':
208
+ field.type = 'string';
209
+ field.format = 'base64url';
210
+ break;
211
+ case 'tel':
212
+ field.type = 'string';
213
+ field.format = 'phone';
214
+ break;
215
+ case 'textarea':
216
+ field.type = 'string';
217
+ field.control = 'textarea';
218
+ break;
219
+ default:
220
+ }
221
+
222
+ if (!field.control && field.type !== 'object') {
223
+ field.control = getControlType(field);
224
+ }
225
+ };
226
+
227
+ const prepLegacyAlternatives = (alternative) => {
228
+ if (!alternative.title && alternative.label) {
229
+ alternative.title = alternative.label;
230
+ }
231
+ if (!alternative.title) {
232
+ alternative.title = getNameFromType(alternative.type);
233
+ }
234
+ if (!alternative.type && alternative.name) {
235
+ alternative.type = alternative.name;
236
+ }
237
+ if (!alternative.description && alternative.tooltip) {
238
+ alternative.description = alternative.tooltip;
239
+ }
240
+ if (alternative.fieldGroups && !alternative.fields) {
241
+ alternative.fields = flattenFieldsWithGroups(alternative.fieldGroups);
242
+ delete alternative.fieldGroups;
243
+ }
244
+ };
245
+
246
+ const prepLegacyProps = (field) => {
247
+ if (field.name && !field.title) {
248
+ field.title = field.name;
249
+ delete field.name;
250
+ }
251
+
252
+ if (field.validationRegexp) {
253
+ field.pattern = field.validationRegexp;
254
+ delete field.validationRegexp;
255
+ }
256
+
257
+ if (field.min) {
258
+ field.minimum = field.min;
259
+ delete field.min;
260
+ }
261
+
262
+ if (field.max) {
263
+ field.maximum = field.max;
264
+ delete field.max;
265
+ }
266
+
267
+ if (field.example && !field.placeholder) {
268
+ field.placeholder = field.example;
269
+ delete field.example;
270
+ }
271
+
272
+ if (field.tooltip && !field.help) {
273
+ field.help = { message: field.tooltip };
274
+ delete field.tooltip;
275
+ }
276
+
277
+ if (field.valuesAllowed && !field.values) {
278
+ field.values = field.valuesAllowed;
279
+ delete field.valuesAllowed;
280
+ }
281
+
282
+ if (field.values && field.values.map) {
283
+ field.values = prepLegacyValues(field.values);
284
+ }
285
+
286
+ if (field.value && !field.default) {
287
+ field.default = field.value;
288
+ delete field.value;
289
+ }
290
+
291
+ if (field.values) {
292
+ // In some legacy arrays the first value is a placeholder, extract it.
293
+ if (
294
+ field.values &&
295
+ field.values.length > 0 &&
296
+ field.values[0] &&
297
+ !field.values[0].value &&
298
+ field.values[0].label &&
299
+ !field.placeholder
300
+ ) {
301
+ field.placeholder = field.values[0].label;
302
+ field.values = field.values.slice(1);
303
+ }
304
+ }
305
+ };
306
+
307
+ const prepLegacyValues = (values) => values.map(prepLegacyValue);
308
+
309
+ const prepLegacyValue = (value) => {
310
+ if (!value.label && value.title) {
311
+ value.label = value.title;
312
+ delete value.title;
313
+ }
314
+ if (!value.label && value.name) {
315
+ value.label = value.name;
316
+ delete value.name;
317
+ }
318
+
319
+ if (!value.value && value.code) {
320
+ value.value = value.code;
321
+ delete value.code;
322
+ }
323
+ if (!value.value && value.key) {
324
+ value.value = value.key;
325
+ delete value.key;
326
+ }
327
+
328
+ return value;
329
+ };
330
+
331
+ const prepPattern = (field) => {
332
+ if (field.pattern) {
333
+ try {
334
+ new RegExp(field.pattern);
335
+ } catch {
336
+ // eslint-disable-next-line no-console
337
+ console.warn('API regexp is invalid');
338
+ delete field.pattern;
339
+ }
340
+ } else {
341
+ delete field.pattern;
342
+ }
343
+ };
344
+
345
+ const prepValidationMessages = (field, validationMessages) => {
346
+ field.validationMessages = field.validationMessages
347
+ ? field.validationMessages
348
+ : validationMessages;
349
+
350
+ if (!field.validationMessages) {
351
+ delete field.validationMessages;
352
+ return;
353
+ }
354
+
355
+ if (field.validationMessages.minimum) {
356
+ field.validationMessages.min = field.validationMessages.minimum;
357
+ delete field.validationMessages.minimum;
358
+ }
359
+ if (field.validationMessages.maximum) {
360
+ field.validationMessages.max = field.validationMessages.maximum;
361
+ delete field.validationMessages.maximum;
362
+ }
363
+ };
364
+
365
+ const getControlType = (field) => {
366
+ if (field.control) {
367
+ return field.control.toLowerCase();
368
+ }
369
+ if (field.hidden) {
370
+ return 'hidden';
371
+ }
372
+ if (field.values && field.values.length > 0) {
373
+ return getSelectionType(field);
374
+ }
375
+
376
+ switch (field.type) {
377
+ case 'string':
378
+ return getControlForStringFormat(field.format);
379
+ case 'number':
380
+ case 'integer':
381
+ return 'number';
382
+ case 'boolean':
383
+ return 'checkbox';
384
+ default:
385
+ return 'text';
386
+ }
387
+ };
388
+
389
+ const getControlForStringFormat = (format) => {
390
+ switch (format) {
391
+ case 'date':
392
+ return 'date';
393
+ case 'base64url':
394
+ return 'file';
395
+ case 'password':
396
+ return 'password';
397
+ case 'uri':
398
+ return 'text'; // 'url'; - not implemented
399
+ case 'email':
400
+ return 'text'; // 'email'; - not implemented
401
+ case 'phone':
402
+ return 'tel';
403
+ default:
404
+ return 'text';
405
+ }
406
+ };
407
+
408
+ const getSelectionType = (field) => {
409
+ if (field.control) {
410
+ return field.control;
411
+ }
412
+ if (field.type === 'select') {
413
+ return 'select';
414
+ }
415
+ if (field.type === 'radio') {
416
+ return 'radio';
417
+ }
418
+
419
+ if (field.values) {
420
+ return field.values.length > 3 ? 'select' : 'radio';
421
+ }
422
+ return 'select';
423
+ };
424
+
425
+ const copyOf = (object) => JSON.parse(JSON.stringify(object));
426
+
427
+ /**
428
+ * Some older requirments formats do not include a label for alternatives
429
+ *
430
+ * @param tabType
431
+ */
432
+ const getNameFromType = (tabType) => {
433
+ if (tabType && tabType.length > 0) {
434
+ const tabNameWithSpaces = tabType.toLowerCase().split('_').join(' '); // String.replace method only replaces first instance
435
+ return tabNameWithSpaces.charAt(0).toUpperCase() + tabNameWithSpaces.slice(1);
436
+ }
437
+ return '';
438
+ };
439
+
440
+ export { prepFields, getControlType };
@@ -24,15 +24,15 @@ exports[`Drawer renders content when open 1`] = `
24
24
  type="button"
25
25
  >
26
26
  <span
27
- aria-hidden="true"
28
27
  class="tw-icon tw-icon-cross "
29
28
  data-testid="cross-icon"
30
- role="presentation"
31
29
  >
32
30
  <svg
31
+ aria-hidden="true"
33
32
  fill="currentColor"
34
33
  focusable="false"
35
34
  height="24"
35
+ role="none"
36
36
  viewBox="0 0 24 24"
37
37
  width="24"
38
38
  >
@@ -38,15 +38,15 @@ exports[`FlowNavigation on mobile renders as expected 1`] = `
38
38
  type="button"
39
39
  >
40
40
  <span
41
- aria-hidden="true"
42
41
  class="tw-icon tw-icon-cross "
43
42
  data-testid="cross-icon"
44
- role="presentation"
45
43
  >
46
44
  <svg
45
+ aria-hidden="true"
47
46
  fill="currentColor"
48
47
  focusable="false"
49
48
  height="24"
49
+ role="none"
50
50
  viewBox="0 0 24 24"
51
51
  width="24"
52
52
  >
@@ -153,15 +153,15 @@ exports[`FlowNavigation renders as expected 1`] = `
153
153
  type="button"
154
154
  >
155
155
  <span
156
- aria-hidden="true"
157
156
  class="tw-icon tw-icon-cross "
158
157
  data-testid="cross-icon"
159
- role="presentation"
160
158
  >
161
159
  <svg
160
+ aria-hidden="true"
162
161
  fill="currentColor"
163
162
  focusable="false"
164
163
  height="24"
164
+ role="none"
165
165
  viewBox="0 0 24 24"
166
166
  width="24"
167
167
  >
package/src/index.ts CHANGED
@@ -59,7 +59,6 @@ export type {
59
59
  MoneyInputProps,
60
60
  } from './moneyInput';
61
61
  export type { NavigationOptionListProps } from './navigationOptionsList';
62
- export type { NavigationOptionProps } from './navigationOption/NavigationOption';
63
62
  export type { OverlayHeaderProps } from './overlayHeader';
64
63
  export type { PanelProps } from './common/panel';
65
64
  export type { PhoneNumberInputProps } from './phoneNumberInput/PhoneNumberInput';
@@ -1,4 +1,4 @@
1
- import { render, screen } from '../test-utils';
1
+ import { render, screen, within } from '../test-utils';
2
2
 
3
3
  import InstructionsList from '.';
4
4
 
@@ -34,8 +34,16 @@ describe('InstructionsList', () => {
34
34
 
35
35
  const instructions = container.querySelectorAll('.instruction');
36
36
  expect(instructions).toHaveLength(2);
37
- expect(instructions[0]).toHaveAttribute('aria-label', dos[0]['aria-label']);
38
- expect(instructions[1]).toHaveAttribute('aria-label', donts[0]['aria-label']);
37
+ expect(
38
+ within(instructions[0] as HTMLElement).getByRole('graphics-symbol', {
39
+ name: dos[0]['aria-label'],
40
+ }),
41
+ ).toBeInTheDocument();
42
+ expect(
43
+ within(instructions[1] as HTMLElement).getByRole('graphics-symbol', {
44
+ name: donts[0]['aria-label'],
45
+ }),
46
+ ).toBeInTheDocument();
39
47
  });
40
48
 
41
49
  it('should render donts first when sort is set to `dontsFirst`', () => {
@@ -48,7 +56,15 @@ describe('InstructionsList', () => {
48
56
 
49
57
  const instructions = container.querySelectorAll('.instruction');
50
58
  expect(instructions).toHaveLength(2);
51
- expect(instructions[0]).toHaveAttribute('aria-label', donts[0]['aria-label']);
52
- expect(instructions[1]).toHaveAttribute('aria-label', dos[0]['aria-label']);
59
+ expect(
60
+ within(instructions[0] as HTMLElement).getByRole('graphics-symbol', {
61
+ name: donts[0]['aria-label'],
62
+ }),
63
+ ).toBeInTheDocument();
64
+ expect(
65
+ within(instructions[1] as HTMLElement).getByRole('graphics-symbol', {
66
+ name: dos[0]['aria-label'],
67
+ }),
68
+ ).toBeInTheDocument();
53
69
  });
54
70
  });
@@ -57,11 +57,19 @@ function Instruction({ item, type }: { item: ReactNode | InstructionNode; type:
57
57
  const isInstructionNode =
58
58
  typeof item === 'object' && item !== null && 'content' in item && 'aria-label' in item;
59
59
  return (
60
- <li className="instruction" aria-label={isInstructionNode ? item['aria-label'] : undefined}>
60
+ <li className="instruction">
61
61
  {type === 'do' ? (
62
- <DoIcon size={24} className={type} />
62
+ <DoIcon
63
+ size={24}
64
+ className={type}
65
+ title={isInstructionNode ? item['aria-label'] : undefined}
66
+ />
63
67
  ) : (
64
- <DontIcon size={24} className={type} />
68
+ <DontIcon
69
+ size={24}
70
+ className={type}
71
+ title={isInstructionNode ? item['aria-label'] : undefined}
72
+ />
65
73
  )}
66
74
  <Body className="text-primary" type={Typography.BODY_LARGE}>
67
75
  {isInstructionNode ? item.content : item}
@@ -1,4 +1,3 @@
1
- import { ReactNode } from 'react';
2
1
  import { action } from '@storybook/addon-actions';
3
2
  import { text, boolean } from '@storybook/addon-knobs';
4
3
  import {
@@ -20,22 +19,8 @@ export default {
20
19
  tags: ['autodocs'],
21
20
  };
22
21
 
23
- type TemplateTypes = {
24
- href?: string;
25
- title?: string;
26
- content?: string;
27
- complex?: boolean;
28
- disabled?: boolean;
29
- showMediaAtAllSizes?: boolean;
30
- showMediaCircle?: boolean;
31
- isContainerAligned?: boolean;
32
- className?: string;
33
- hasTitleOnly?: boolean;
34
- media?: ReactNode;
35
- };
36
-
37
- const Template = (props: TemplateTypes) => {
38
- const href = text('href', props.href ?? '');
22
+ const Template = (props) => {
23
+ const href = text('href', props.href);
39
24
  const title = text('title', props.title ?? 'Navigation option');
40
25
  const content = text('content', props.content ?? 'Button and icon are vertically centered.');
41
26
  const complex = boolean('complex', props.complex ?? false);
@@ -43,7 +28,7 @@ const Template = (props: TemplateTypes) => {
43
28
  const showMediaAtAllSizes = boolean('showMediaAtAllSizes', props.showMediaAtAllSizes ?? false);
44
29
  const showMediaCircle = props.showMediaCircle ?? boolean('showMediaCircle', true);
45
30
  const isContainerAligned = boolean('isContainerAligned', false);
46
- const className = text('className', props.className ?? '');
31
+ const className = text('className', props.className);
47
32
 
48
33
  return (
49
34
  <NavigationOption
@@ -155,10 +140,7 @@ export const Multiple = () => (
155
140
 
156
141
  export const WithIllustration = () => {
157
142
  return (
158
- <Template
159
- media={<Illustration name={Assets.GLOBE} disablePadding alt="" />}
160
- showMediaCircle={false}
161
- />
143
+ <Template media={<Illustration name={Assets.GLOBE} disablePadding />} showMediaCircle={false} />
162
144
  );
163
145
  };
164
146
 
@@ -184,7 +166,7 @@ export const WithContainerContent = () => (
184
166
  </>
185
167
  );
186
168
 
187
- const NavigationOptionTemplate = (props: TemplateTypes) => {
169
+ const NavigationOptionTemplate = (props) => {
188
170
  const {
189
171
  href,
190
172
  title,
@@ -6,7 +6,7 @@ import { Position } from '../common';
6
6
  import Option from '../common/Option';
7
7
  import { OptionProps, ReferenceType } from '../common/Option/Option';
8
8
 
9
- export type NavigationOptionProps = OptionProps;
9
+ type NavigationOptionProps = OptionProps;
10
10
 
11
11
  const NavigationOption = forwardRef<ReferenceType, NavigationOptionProps>(
12
12
  ({ as: component = 'button', disabled = false, onClick, className, ...rest }, reference) => {
@@ -35,15 +35,15 @@ exports[`OverlayHeader renders as expected 1`] = `
35
35
  type="button"
36
36
  >
37
37
  <span
38
- aria-hidden="true"
39
38
  class="tw-icon tw-icon-cross "
40
39
  data-testid="cross-icon"
41
- role="presentation"
42
40
  >
43
41
  <svg
42
+ aria-hidden="true"
44
43
  fill="currentColor"
45
44
  focusable="false"
46
45
  height="24"
46
+ role="none"
47
47
  viewBox="0 0 24 24"
48
48
  width="24"
49
49
  >
@@ -1,23 +0,0 @@
1
- export declare const fakeEvent: () => {
2
- nativeEvent: {
3
- stopImmediatePropagation(): void;
4
- };
5
- stopPropagation(): void;
6
- preventDefault(): void;
7
- };
8
- export declare const fakeKeyDownEventForKey: (key: string) => {
9
- key: string;
10
- nativeEvent: {
11
- stopImmediatePropagation(): void;
12
- };
13
- stopPropagation(): void;
14
- preventDefault(): void;
15
- };
16
- export declare const fakeKeyDownEvent: (eventAttribute?: {}) => {
17
- nativeEvent: {
18
- stopImmediatePropagation(): void;
19
- };
20
- stopPropagation(): void;
21
- preventDefault(): void;
22
- };
23
- //# sourceMappingURL=fakeEvents.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fakeEvents.d.ts","sourceRoot":"","sources":["../../../src/common/fakeEvents.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS;;;;;;CAIpB,CAAC;AAEH,eAAO,MAAM,sBAAsB,QAAS,MAAM;;;;;;;CAGhD,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;CAG3B,CAAC"}
File without changes
File without changes