@transferwise/components 0.0.0-experimental-ffa47f4 → 0.0.0-experimental-499f93d

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 (351) 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 +4 -20
  14. package/build/alert/Alert.js.map +1 -1
  15. package/build/alert/Alert.mjs +4 -20
  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 +4 -23
  122. package/build/drawer/Drawer.js.map +1 -1
  123. package/build/drawer/Drawer.mjs +4 -23
  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 +1 -19
  158. package/build/instructionsList/InstructionsList.js.map +1 -1
  159. package/build/instructionsList/InstructionsList.mjs +1 -19
  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 +2 -20
  166. package/build/markdown/Markdown.js.map +1 -1
  167. package/build/markdown/Markdown.mjs +2 -20
  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 +4 -21
  194. package/build/popover/Popover.js.map +1 -1
  195. package/build/popover/Popover.mjs +4 -21
  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/navigationOption/NavigationOption.d.ts +0 -1
  284. package/build/types/navigationOption/NavigationOption.d.ts.map +1 -1
  285. package/build/types/test-utils/style-mock.d.ts +1 -0
  286. package/build/types/test-utils/style-mock.d.ts.map +1 -0
  287. package/build/types/utilities/deprecatedProperty/deprecatedProperty.d.ts +8 -6
  288. package/build/types/utilities/deprecatedProperty/deprecatedProperty.d.ts.map +1 -1
  289. package/build/types/utilities/deprecatedProperty/index.d.ts +1 -1
  290. package/build/types/utilities/deprecatedProperty/index.d.ts.map +1 -1
  291. package/build/types/utilities/index.d.ts +2 -2
  292. package/build/types/utilities/index.d.ts.map +1 -1
  293. package/build/types/utilities/logActionRequired.d.ts +2 -2
  294. package/build/types/utilities/logActionRequired.d.ts.map +1 -1
  295. package/build/upload/Upload.js +1 -19
  296. package/build/upload/Upload.js.map +1 -1
  297. package/build/upload/Upload.mjs +1 -19
  298. package/build/upload/Upload.mjs.map +1 -1
  299. package/build/upload/steps/processingStep/processingStep.js +2 -19
  300. package/build/upload/steps/processingStep/processingStep.js.map +1 -1
  301. package/build/upload/steps/processingStep/processingStep.mjs +2 -19
  302. package/build/upload/steps/processingStep/processingStep.mjs.map +1 -1
  303. package/build/upload/steps/uploadImageStep/uploadImageStep.js +2 -19
  304. package/build/upload/steps/uploadImageStep/uploadImageStep.js.map +1 -1
  305. package/build/upload/steps/uploadImageStep/uploadImageStep.mjs +2 -19
  306. package/build/upload/steps/uploadImageStep/uploadImageStep.mjs.map +1 -1
  307. package/build/uploadInput/UploadInput.js +2 -19
  308. package/build/uploadInput/UploadInput.js.map +1 -1
  309. package/build/uploadInput/UploadInput.mjs +2 -19
  310. package/build/uploadInput/UploadInput.mjs.map +1 -1
  311. package/build/uploadInput/uploadButton/UploadButton.js +1 -19
  312. package/build/uploadInput/uploadButton/UploadButton.js.map +1 -1
  313. package/build/uploadInput/uploadButton/UploadButton.mjs +1 -19
  314. package/build/uploadInput/uploadButton/UploadButton.mjs.map +1 -1
  315. package/build/uploadInput/uploadButton/defaults.js +0 -18
  316. package/build/uploadInput/uploadButton/defaults.js.map +1 -1
  317. package/build/uploadInput/uploadButton/defaults.mjs +0 -18
  318. package/build/uploadInput/uploadButton/defaults.mjs.map +1 -1
  319. package/build/uploadInput/uploadItem/UploadItem.js +3 -19
  320. package/build/uploadInput/uploadItem/UploadItem.js.map +1 -1
  321. package/build/uploadInput/uploadItem/UploadItem.mjs +3 -19
  322. package/build/uploadInput/uploadItem/UploadItem.mjs.map +1 -1
  323. package/build/utilities/logActionRequired.js.map +1 -1
  324. package/build/utilities/logActionRequired.mjs.map +1 -1
  325. package/build/withDisplayFormat/WithDisplayFormat.js +1 -20
  326. package/build/withDisplayFormat/WithDisplayFormat.js.map +1 -1
  327. package/build/withDisplayFormat/WithDisplayFormat.mjs +1 -20
  328. package/build/withDisplayFormat/WithDisplayFormat.mjs.map +1 -1
  329. package/package.json +3 -3
  330. package/src/common/{fakeEvents.ts → fakeEvents.js} +1 -1
  331. package/src/common/hooks/useHasIntersected/{useHasIntersected.ts → useHasIntersected.js} +11 -17
  332. package/src/common/{requirements.ts → requirements.js} +36 -106
  333. package/src/inputWithDisplayFormat/InputWithDisplayFormat.story.tsx +78 -0
  334. package/src/navigationOption/{NavigationOption.story.tsx → NavigationOption.story.js} +5 -23
  335. package/src/navigationOption/NavigationOption.tsx +1 -1
  336. package/src/utilities/deprecatedProperty/{deprecatedProperty.js → deprecatedProperty.ts} +24 -3
  337. package/src/utilities/{logActionRequired.js → logActionRequired.ts} +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/build/types/common/requirements.d.ts +0 -47
  341. package/build/types/common/requirements.d.ts.map +0 -1
  342. package/src/inputWithDisplayFormat/InputWithDisplayFormat.story.js +0 -85
  343. /package/src/common/hooks/{index.ts → index.js} +0 -0
  344. /package/src/common/hooks/useConditionalListener/{index.ts → index.js} +0 -0
  345. /package/src/common/hooks/useDirection/{index.ts → index.js} +0 -0
  346. /package/src/common/hooks/useHasIntersected/{index.ts → index.js} +0 -0
  347. /package/src/common/{index.ts → index.js} +0 -0
  348. /package/src/common/responsivePanel/{index.ts → index.js} +0 -0
  349. /package/src/test-utils/{style-mock.js → style-mock.ts} +0 -0
  350. /package/src/utilities/deprecatedProperty/{index.js → index.ts} +0 -0
  351. /package/src/utilities/{index.js → index.ts} +0 -0
@@ -1,29 +1,10 @@
1
1
  import * as React from 'react';
2
- import HistoryNavigator from '../common/historyNavigator/historyNavigator.mjs';
3
- import '../common/theme.mjs';
4
- import '../common/direction.mjs';
5
- import '../common/propsValues/control.mjs';
6
- import '../common/propsValues/breakpoint.mjs';
7
- import '../common/propsValues/size.mjs';
8
- import '../common/propsValues/typography.mjs';
9
- import '../common/propsValues/width.mjs';
10
- import '../common/propsValues/type.mjs';
11
- import '../common/propsValues/dateMode.mjs';
12
- import '../common/propsValues/monthFormat.mjs';
13
- import '../common/propsValues/position.mjs';
14
- import '../common/propsValues/layouts.mjs';
15
- import '../common/propsValues/status.mjs';
16
- import '../common/propsValues/sentiment.mjs';
17
- import '../common/propsValues/profileType.mjs';
18
- import '../common/propsValues/variant.mjs';
19
- import '../common/propsValues/scroll.mjs';
20
- import '../common/propsValues/markdownNodeType.mjs';
21
- import '../common/fileType.mjs';
22
2
  import formatWithPattern from '../common/textFormat/formatWithPattern/formatWithPattern.mjs';
23
3
  import unformatWithPattern from '../common/textFormat/unformatWithPattern/unformatWithPattern.mjs';
24
4
  import getCountOfSymbolsInSelection from '../common/textFormat/getCountOfSymbolsInSelection/getCountOfSymbolsInSelection.mjs';
25
5
  import getCursorPositionAfterActionStroke from '../common/textFormat/getCursorPositionAfterKeystroke/getCursorPositionAfterKeystroke.mjs';
26
6
  import { getDistanceToNextSymbol, getDistanceToPreviousSymbol } from '../common/textFormat/getDistanceToSymbol/getDistanceToSymbol.mjs';
7
+ import HistoryNavigator from '../common/historyNavigator/historyNavigator.mjs';
27
8
 
28
9
  class WithDisplayFormat extends React.Component {
29
10
  static defaultProps = {
@@ -1 +1 @@
1
- {"version":3,"file":"WithDisplayFormat.mjs","sources":["../../src/withDisplayFormat/WithDisplayFormat.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { HistoryNavigator } from '../common';\nimport {\n formatWithPattern,\n getCountOfSymbolsInSelection,\n getCursorPositionAfterKeystroke,\n unformatWithPattern,\n getDistanceToPreviousSymbol,\n getDistanceToNextSymbol,\n} from '../common/textFormat';\nimport { InputProps } from '../inputs/Input';\nimport { TextAreaProps } from '../inputs/TextArea';\n\ntype HTMLTextElement = HTMLInputElement | HTMLTextAreaElement;\ntype TextElementProps = InputProps | TextAreaProps;\n\nexport type EventType =\n | 'KeyDown'\n | 'Paste'\n | 'Cut'\n | 'Undo'\n | 'Redo'\n | 'Backspace'\n | 'Delete'\n | 'Initial';\n\ninterface WithDisplayFormatState {\n value: string;\n historyNavigator: HistoryNavigator;\n prevDisplayPattern: string;\n triggerType: EventType;\n triggerEvent: React.KeyboardEvent<HTMLTextElement> | null;\n pastedLength: number;\n selectionStart: number;\n selectionEnd: number;\n}\n\nexport interface WithDisplayFormatProps<T extends TextElementProps = TextElementProps>\n extends Pick<\n TextElementProps,\n | 'className'\n | 'disabled'\n | 'id'\n | 'maxLength'\n | 'minLength'\n | 'name'\n | 'placeholder'\n | 'readOnly'\n | 'required'\n | 'inputMode'\n > {\n value?: string;\n displayPattern: string;\n /**\n * autocomplete hides our form help so we need to disable it when help text\n * is present. Chrome ignores autocomplete=off, the only way to disable it is\n * to provide an 'invalid' value, for which 'disabled' serves.\n */\n autoComplete?: TextElementProps['autoComplete'] | 'disabled';\n onChange?: (value: string) => void;\n onBlur?: (value: string) => void;\n onFocus?: (value: string) => void;\n render: (renderProps: T) => React.JSX.Element;\n}\n\nclass WithDisplayFormat<T extends TextElementProps> extends React.Component<\n WithDisplayFormatProps<T>,\n WithDisplayFormatState\n> {\n declare props: WithDisplayFormatProps<T> &\n Required<Pick<WithDisplayFormatProps<T>, keyof typeof WithDisplayFormat.defaultProps>>;\n static defaultProps = {\n autoComplete: 'off',\n displayPattern: '',\n value: '',\n };\n\n constructor(props: WithDisplayFormatProps) {\n super(props);\n const unformattedValue = unformatWithPattern(props.value ?? '', props.displayPattern);\n this.state = {\n value: formatWithPattern(unformattedValue, props.displayPattern),\n historyNavigator: new HistoryNavigator(),\n prevDisplayPattern: props.displayPattern,\n triggerType: 'Initial',\n triggerEvent: null,\n selectionStart: 0,\n selectionEnd: 0,\n pastedLength: 0,\n };\n }\n\n static getDerivedStateFromProps(\n { displayPattern }: WithDisplayFormatProps,\n { prevDisplayPattern = displayPattern, value, historyNavigator }: WithDisplayFormatState,\n ) {\n if (prevDisplayPattern !== displayPattern) {\n const unFormattedValue = unformatWithPattern(value, prevDisplayPattern);\n historyNavigator.reset();\n\n return {\n prevDisplayPattern: displayPattern,\n value: formatWithPattern(unFormattedValue, displayPattern),\n triggerType: null,\n triggerEvent: null,\n pastedLength: 0,\n };\n }\n return null;\n }\n\n getUserAction = (unformattedValue: string): EventType | string => {\n const { triggerEvent, triggerType, value } = this.state;\n const { displayPattern } = this.props;\n\n if (triggerEvent) {\n const charCode = String.fromCharCode(triggerEvent.which).toLowerCase();\n\n if (triggerType === 'Paste' || triggerType === 'Cut') {\n return triggerType;\n }\n\n if ((triggerEvent.ctrlKey || triggerEvent.metaKey) && charCode === 'z') {\n return triggerEvent.shiftKey ? 'Redo' : 'Undo';\n }\n // Detect mouse event redo\n if (triggerEvent.ctrlKey && charCode === 'd') {\n return 'Delete';\n }\n\n // Android Fix.\n if (\n typeof triggerEvent.key === 'undefined' &&\n unformattedValue.length <= unformatWithPattern(value, displayPattern).length\n ) {\n return 'Backspace';\n }\n return triggerEvent.key;\n }\n // triggerEvent can be null only in case of \"autofilling\" (via password manager extension or browser build-in one) events\n return 'Paste';\n };\n\n resetEvent = () => {\n this.setState({\n triggerType: 'Initial',\n triggerEvent: null,\n pastedLength: 0,\n });\n };\n\n detectUndoRedo = (event: React.KeyboardEvent<HTMLTextElement>) => {\n const charCode = String.fromCharCode(event.which).toLowerCase();\n if ((event.ctrlKey || event.metaKey) && charCode === 'z') {\n return event.shiftKey ? 'Redo' : 'Undo';\n }\n return null;\n };\n\n handleOnKeyDown: React.KeyboardEventHandler<HTMLTextElement> = (event) => {\n event.persist();\n const { selectionStart, selectionEnd } = event.currentTarget;\n const { historyNavigator } = this.state;\n const { displayPattern } = this.props;\n\n // Unfortunately Undo and Redo don't trigger OnChange event so we need to handle some value logic here.\n let newFormattedValue = '';\n\n if (this.detectUndoRedo(event) === 'Undo') {\n newFormattedValue = formatWithPattern(historyNavigator.undo().toString(), displayPattern);\n this.setState({ value: newFormattedValue, triggerType: 'Undo' });\n } else if (this.detectUndoRedo(event) === 'Redo') {\n newFormattedValue = formatWithPattern(historyNavigator.redo().toString(), displayPattern);\n this.setState({ value: newFormattedValue, triggerType: 'Redo' });\n } else {\n this.setState({\n triggerEvent: event,\n triggerType: 'KeyDown',\n selectionStart: selectionStart ?? 0,\n selectionEnd: selectionEnd ?? 0,\n });\n }\n };\n\n handleOnPaste: React.ClipboardEventHandler<HTMLTextElement> = (event) => {\n const { displayPattern } = this.props;\n const pastedLength = unformatWithPattern(\n event.clipboardData.getData('Text'),\n displayPattern,\n ).length;\n\n this.setState({ triggerType: 'Paste', pastedLength });\n };\n\n handleOnCut: React.ClipboardEventHandler<HTMLTextElement> = () => {\n this.setState({ triggerType: 'Cut' });\n };\n\n isKeyAllowed = (action: EventType | string) => {\n const { displayPattern } = this.props;\n const symbolsInPattern = displayPattern.split('').filter((character) => character !== '*');\n\n return !symbolsInPattern.includes(action);\n };\n\n handleOnChange: React.ChangeEventHandler<HTMLTextElement> = (event) => {\n const { historyNavigator, triggerType } = this.state;\n const { displayPattern, onChange } = this.props;\n const { value } = event.target;\n let unformattedValue = unformatWithPattern(value, displayPattern);\n const action = this.getUserAction(unformattedValue);\n if (!this.isKeyAllowed(action) || triggerType === 'Undo' || triggerType === 'Redo') {\n return;\n }\n\n if (action === 'Backspace' || action === 'Delete') {\n unformattedValue = this.handleDelete(unformattedValue, action);\n }\n\n const newFormattedValue = formatWithPattern(unformattedValue, displayPattern);\n historyNavigator.add(unformattedValue);\n\n this.handleCursorPositioning(action);\n\n this.setState({ value: newFormattedValue }, () => {\n this.resetEvent();\n if (onChange) {\n const broadcastValue = unformatWithPattern(newFormattedValue, displayPattern);\n onChange(broadcastValue);\n }\n });\n };\n\n handleOnBlur: React.FocusEventHandler<HTMLTextElement> = (event) => {\n this.props.onBlur?.(unformatWithPattern(event.target.value, this.props.displayPattern));\n };\n\n handleOnFocus: React.FocusEventHandler<HTMLTextElement> = (event) => {\n const { displayPattern, onFocus } = this.props;\n if (onFocus) {\n this.handleOnChange(event);\n onFocus(unformatWithPattern(event.target.value, displayPattern));\n }\n };\n\n handleDelete = (unformattedValue: string, action: EventType) => {\n const { displayPattern } = this.props;\n const { selectionStart, selectionEnd } = this.state;\n const newStack = [...unformattedValue];\n if (selectionStart === selectionEnd) {\n let startPosition =\n selectionStart - getCountOfSymbolsInSelection(0, selectionStart, displayPattern);\n let toDelete = 0;\n\n let count = getDistanceToNextSymbol(selectionStart, displayPattern);\n if (action === 'Backspace') {\n startPosition -= 1;\n count = getDistanceToPreviousSymbol(selectionStart, displayPattern);\n }\n\n if (startPosition >= 0 && count) {\n toDelete = 1;\n }\n\n newStack.splice(startPosition, toDelete);\n }\n\n return newStack.join('');\n };\n\n handleCursorPositioning = (action: string) => {\n const { displayPattern } = this.props;\n const { triggerEvent, selectionStart, selectionEnd, pastedLength } = this.state;\n const target = triggerEvent?.currentTarget;\n\n const cursorPosition = getCursorPositionAfterKeystroke(\n action,\n selectionStart,\n selectionEnd,\n displayPattern,\n pastedLength,\n );\n\n setTimeout(() => {\n target?.setSelectionRange(cursorPosition, cursorPosition);\n this.setState({ selectionStart: cursorPosition, selectionEnd: cursorPosition });\n }, 0);\n };\n\n render() {\n const {\n inputMode,\n className,\n id,\n name,\n placeholder,\n readOnly,\n required,\n minLength,\n maxLength,\n disabled,\n autoComplete,\n } = this.props;\n const { value } = this.state;\n const renderProps: TextElementProps = {\n inputMode,\n className,\n id,\n name,\n placeholder,\n readOnly,\n required,\n minLength,\n maxLength,\n disabled,\n autoComplete,\n value,\n onFocus: this.handleOnFocus,\n onBlur: this.handleOnBlur,\n onPaste: this.handleOnPaste,\n onKeyDown: this.handleOnKeyDown,\n onChange: this.handleOnChange,\n onCut: this.handleOnCut,\n };\n return this.props.render(renderProps as T);\n }\n}\n\nexport default WithDisplayFormat;\n"],"names":["WithDisplayFormat","React","Component","defaultProps","autoComplete","displayPattern","value","constructor","props","unformattedValue","unformatWithPattern","state","formatWithPattern","historyNavigator","HistoryNavigator","prevDisplayPattern","triggerType","triggerEvent","selectionStart","selectionEnd","pastedLength","getDerivedStateFromProps","unFormattedValue","reset","getUserAction","charCode","String","fromCharCode","which","toLowerCase","ctrlKey","metaKey","shiftKey","key","length","resetEvent","setState","detectUndoRedo","event","handleOnKeyDown","persist","currentTarget","newFormattedValue","undo","toString","redo","handleOnPaste","clipboardData","getData","handleOnCut","isKeyAllowed","action","symbolsInPattern","split","filter","character","includes","handleOnChange","onChange","target","handleDelete","add","handleCursorPositioning","broadcastValue","handleOnBlur","onBlur","handleOnFocus","onFocus","newStack","startPosition","getCountOfSymbolsInSelection","toDelete","count","getDistanceToNextSymbol","getDistanceToPreviousSymbol","splice","join","cursorPosition","getCursorPositionAfterKeystroke","setTimeout","setSelectionRange","render","inputMode","className","id","name","placeholder","readOnly","required","minLength","maxLength","disabled","renderProps","onPaste","onKeyDown","onCut"],"mappings":"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"}
1
+ {"version":3,"file":"WithDisplayFormat.mjs","sources":["../../src/withDisplayFormat/WithDisplayFormat.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { HistoryNavigator } from '../common';\nimport {\n formatWithPattern,\n getCountOfSymbolsInSelection,\n getCursorPositionAfterKeystroke,\n unformatWithPattern,\n getDistanceToPreviousSymbol,\n getDistanceToNextSymbol,\n} from '../common/textFormat';\nimport { InputProps } from '../inputs/Input';\nimport { TextAreaProps } from '../inputs/TextArea';\n\ntype HTMLTextElement = HTMLInputElement | HTMLTextAreaElement;\ntype TextElementProps = InputProps | TextAreaProps;\n\nexport type EventType =\n | 'KeyDown'\n | 'Paste'\n | 'Cut'\n | 'Undo'\n | 'Redo'\n | 'Backspace'\n | 'Delete'\n | 'Initial';\n\ninterface WithDisplayFormatState {\n value: string;\n historyNavigator: HistoryNavigator;\n prevDisplayPattern: string;\n triggerType: EventType;\n triggerEvent: React.KeyboardEvent<HTMLTextElement> | null;\n pastedLength: number;\n selectionStart: number;\n selectionEnd: number;\n}\n\nexport interface WithDisplayFormatProps<T extends TextElementProps = TextElementProps>\n extends Pick<\n TextElementProps,\n | 'className'\n | 'disabled'\n | 'id'\n | 'maxLength'\n | 'minLength'\n | 'name'\n | 'placeholder'\n | 'readOnly'\n | 'required'\n | 'inputMode'\n > {\n value?: string;\n displayPattern: string;\n /**\n * autocomplete hides our form help so we need to disable it when help text\n * is present. Chrome ignores autocomplete=off, the only way to disable it is\n * to provide an 'invalid' value, for which 'disabled' serves.\n */\n autoComplete?: TextElementProps['autoComplete'] | 'disabled';\n onChange?: (value: string) => void;\n onBlur?: (value: string) => void;\n onFocus?: (value: string) => void;\n render: (renderProps: T) => React.JSX.Element;\n}\n\nclass WithDisplayFormat<T extends TextElementProps> extends React.Component<\n WithDisplayFormatProps<T>,\n WithDisplayFormatState\n> {\n declare props: WithDisplayFormatProps<T> &\n Required<Pick<WithDisplayFormatProps<T>, keyof typeof WithDisplayFormat.defaultProps>>;\n static defaultProps = {\n autoComplete: 'off',\n displayPattern: '',\n value: '',\n };\n\n constructor(props: WithDisplayFormatProps) {\n super(props);\n const unformattedValue = unformatWithPattern(props.value ?? '', props.displayPattern);\n this.state = {\n value: formatWithPattern(unformattedValue, props.displayPattern),\n historyNavigator: new HistoryNavigator(),\n prevDisplayPattern: props.displayPattern,\n triggerType: 'Initial',\n triggerEvent: null,\n selectionStart: 0,\n selectionEnd: 0,\n pastedLength: 0,\n };\n }\n\n static getDerivedStateFromProps(\n { displayPattern }: WithDisplayFormatProps,\n { prevDisplayPattern = displayPattern, value, historyNavigator }: WithDisplayFormatState,\n ) {\n if (prevDisplayPattern !== displayPattern) {\n const unFormattedValue = unformatWithPattern(value, prevDisplayPattern);\n historyNavigator.reset();\n\n return {\n prevDisplayPattern: displayPattern,\n value: formatWithPattern(unFormattedValue, displayPattern),\n triggerType: null,\n triggerEvent: null,\n pastedLength: 0,\n };\n }\n return null;\n }\n\n getUserAction = (unformattedValue: string): EventType | string => {\n const { triggerEvent, triggerType, value } = this.state;\n const { displayPattern } = this.props;\n\n if (triggerEvent) {\n const charCode = String.fromCharCode(triggerEvent.which).toLowerCase();\n\n if (triggerType === 'Paste' || triggerType === 'Cut') {\n return triggerType;\n }\n\n if ((triggerEvent.ctrlKey || triggerEvent.metaKey) && charCode === 'z') {\n return triggerEvent.shiftKey ? 'Redo' : 'Undo';\n }\n // Detect mouse event redo\n if (triggerEvent.ctrlKey && charCode === 'd') {\n return 'Delete';\n }\n\n // Android Fix.\n if (\n typeof triggerEvent.key === 'undefined' &&\n unformattedValue.length <= unformatWithPattern(value, displayPattern).length\n ) {\n return 'Backspace';\n }\n return triggerEvent.key;\n }\n // triggerEvent can be null only in case of \"autofilling\" (via password manager extension or browser build-in one) events\n return 'Paste';\n };\n\n resetEvent = () => {\n this.setState({\n triggerType: 'Initial',\n triggerEvent: null,\n pastedLength: 0,\n });\n };\n\n detectUndoRedo = (event: React.KeyboardEvent<HTMLTextElement>) => {\n const charCode = String.fromCharCode(event.which).toLowerCase();\n if ((event.ctrlKey || event.metaKey) && charCode === 'z') {\n return event.shiftKey ? 'Redo' : 'Undo';\n }\n return null;\n };\n\n handleOnKeyDown: React.KeyboardEventHandler<HTMLTextElement> = (event) => {\n event.persist();\n const { selectionStart, selectionEnd } = event.currentTarget;\n const { historyNavigator } = this.state;\n const { displayPattern } = this.props;\n\n // Unfortunately Undo and Redo don't trigger OnChange event so we need to handle some value logic here.\n let newFormattedValue = '';\n\n if (this.detectUndoRedo(event) === 'Undo') {\n newFormattedValue = formatWithPattern(historyNavigator.undo().toString(), displayPattern);\n this.setState({ value: newFormattedValue, triggerType: 'Undo' });\n } else if (this.detectUndoRedo(event) === 'Redo') {\n newFormattedValue = formatWithPattern(historyNavigator.redo().toString(), displayPattern);\n this.setState({ value: newFormattedValue, triggerType: 'Redo' });\n } else {\n this.setState({\n triggerEvent: event,\n triggerType: 'KeyDown',\n selectionStart: selectionStart ?? 0,\n selectionEnd: selectionEnd ?? 0,\n });\n }\n };\n\n handleOnPaste: React.ClipboardEventHandler<HTMLTextElement> = (event) => {\n const { displayPattern } = this.props;\n const pastedLength = unformatWithPattern(\n event.clipboardData.getData('Text'),\n displayPattern,\n ).length;\n\n this.setState({ triggerType: 'Paste', pastedLength });\n };\n\n handleOnCut: React.ClipboardEventHandler<HTMLTextElement> = () => {\n this.setState({ triggerType: 'Cut' });\n };\n\n isKeyAllowed = (action: EventType | string) => {\n const { displayPattern } = this.props;\n const symbolsInPattern = displayPattern.split('').filter((character) => character !== '*');\n\n return !symbolsInPattern.includes(action);\n };\n\n handleOnChange: React.ChangeEventHandler<HTMLTextElement> = (event) => {\n const { historyNavigator, triggerType } = this.state;\n const { displayPattern, onChange } = this.props;\n const { value } = event.target;\n let unformattedValue = unformatWithPattern(value, displayPattern);\n const action = this.getUserAction(unformattedValue);\n if (!this.isKeyAllowed(action) || triggerType === 'Undo' || triggerType === 'Redo') {\n return;\n }\n\n if (action === 'Backspace' || action === 'Delete') {\n unformattedValue = this.handleDelete(unformattedValue, action);\n }\n\n const newFormattedValue = formatWithPattern(unformattedValue, displayPattern);\n historyNavigator.add(unformattedValue);\n\n this.handleCursorPositioning(action);\n\n this.setState({ value: newFormattedValue }, () => {\n this.resetEvent();\n if (onChange) {\n const broadcastValue = unformatWithPattern(newFormattedValue, displayPattern);\n onChange(broadcastValue);\n }\n });\n };\n\n handleOnBlur: React.FocusEventHandler<HTMLTextElement> = (event) => {\n this.props.onBlur?.(unformatWithPattern(event.target.value, this.props.displayPattern));\n };\n\n handleOnFocus: React.FocusEventHandler<HTMLTextElement> = (event) => {\n const { displayPattern, onFocus } = this.props;\n if (onFocus) {\n this.handleOnChange(event);\n onFocus(unformatWithPattern(event.target.value, displayPattern));\n }\n };\n\n handleDelete = (unformattedValue: string, action: EventType) => {\n const { displayPattern } = this.props;\n const { selectionStart, selectionEnd } = this.state;\n const newStack = [...unformattedValue];\n if (selectionStart === selectionEnd) {\n let startPosition =\n selectionStart - getCountOfSymbolsInSelection(0, selectionStart, displayPattern);\n let toDelete = 0;\n\n let count = getDistanceToNextSymbol(selectionStart, displayPattern);\n if (action === 'Backspace') {\n startPosition -= 1;\n count = getDistanceToPreviousSymbol(selectionStart, displayPattern);\n }\n\n if (startPosition >= 0 && count) {\n toDelete = 1;\n }\n\n newStack.splice(startPosition, toDelete);\n }\n\n return newStack.join('');\n };\n\n handleCursorPositioning = (action: string) => {\n const { displayPattern } = this.props;\n const { triggerEvent, selectionStart, selectionEnd, pastedLength } = this.state;\n const target = triggerEvent?.currentTarget;\n\n const cursorPosition = getCursorPositionAfterKeystroke(\n action,\n selectionStart,\n selectionEnd,\n displayPattern,\n pastedLength,\n );\n\n setTimeout(() => {\n target?.setSelectionRange(cursorPosition, cursorPosition);\n this.setState({ selectionStart: cursorPosition, selectionEnd: cursorPosition });\n }, 0);\n };\n\n render() {\n const {\n inputMode,\n className,\n id,\n name,\n placeholder,\n readOnly,\n required,\n minLength,\n maxLength,\n disabled,\n autoComplete,\n } = this.props;\n const { value } = this.state;\n const renderProps: TextElementProps = {\n inputMode,\n className,\n id,\n name,\n placeholder,\n readOnly,\n required,\n minLength,\n maxLength,\n disabled,\n autoComplete,\n value,\n onFocus: this.handleOnFocus,\n onBlur: this.handleOnBlur,\n onPaste: this.handleOnPaste,\n onKeyDown: this.handleOnKeyDown,\n onChange: this.handleOnChange,\n onCut: this.handleOnCut,\n };\n return this.props.render(renderProps as T);\n }\n}\n\nexport default WithDisplayFormat;\n"],"names":["WithDisplayFormat","React","Component","defaultProps","autoComplete","displayPattern","value","constructor","props","unformattedValue","unformatWithPattern","state","formatWithPattern","historyNavigator","HistoryNavigator","prevDisplayPattern","triggerType","triggerEvent","selectionStart","selectionEnd","pastedLength","getDerivedStateFromProps","unFormattedValue","reset","getUserAction","charCode","String","fromCharCode","which","toLowerCase","ctrlKey","metaKey","shiftKey","key","length","resetEvent","setState","detectUndoRedo","event","handleOnKeyDown","persist","currentTarget","newFormattedValue","undo","toString","redo","handleOnPaste","clipboardData","getData","handleOnCut","isKeyAllowed","action","symbolsInPattern","split","filter","character","includes","handleOnChange","onChange","target","handleDelete","add","handleCursorPositioning","broadcastValue","handleOnBlur","onBlur","handleOnFocus","onFocus","newStack","startPosition","getCountOfSymbolsInSelection","toDelete","count","getDistanceToNextSymbol","getDistanceToPreviousSymbol","splice","join","cursorPosition","getCursorPositionAfterKeystroke","setTimeout","setSelectionRange","render","inputMode","className","id","name","placeholder","readOnly","required","minLength","maxLength","disabled","renderProps","onPaste","onKeyDown","onCut"],"mappings":";;;;;;;;AAkEA,MAAMA,iBAA8C,SAAQC,KAAK,CAACC,SAGjE,CAAA;AAGC,EAAA,OAAOC,YAAY,GAAG;AACpBC,IAAAA,YAAY,EAAE,KAAK;AACnBC,IAAAA,cAAc,EAAE,EAAE;AAClBC,IAAAA,KAAK,EAAE,EAAA;GACR,CAAA;EAEDC,WAAAA,CAAYC,KAA6B,EAAA;IACvC,KAAK,CAACA,KAAK,CAAC,CAAA;AACZ,IAAA,MAAMC,gBAAgB,GAAGC,mBAAmB,CAACF,KAAK,CAACF,KAAK,IAAI,EAAE,EAAEE,KAAK,CAACH,cAAc,CAAC,CAAA;IACrF,IAAI,CAACM,KAAK,GAAG;MACXL,KAAK,EAAEM,iBAAiB,CAACH,gBAAgB,EAAED,KAAK,CAACH,cAAc,CAAC;AAChEQ,MAAAA,gBAAgB,EAAE,IAAIC,gBAAgB,EAAE;MACxCC,kBAAkB,EAAEP,KAAK,CAACH,cAAc;AACxCW,MAAAA,WAAW,EAAE,SAAS;AACtBC,MAAAA,YAAY,EAAE,IAAI;AAClBC,MAAAA,cAAc,EAAE,CAAC;AACjBC,MAAAA,YAAY,EAAE,CAAC;AACfC,MAAAA,YAAY,EAAE,CAAA;KACf,CAAA;AACH,GAAA;AAEA,EAAA,OAAOC,wBAAwBA,CAC7B;AAAEhB,IAAAA,cAAAA;AAAwC,GAAA,EAC1C;AAAEU,IAAAA,kBAAkB,GAAGV,cAAc;IAAEC,KAAK;AAAEO,IAAAA,gBAAAA;AAA0C,GAAA,EAAA;IAExF,IAAIE,kBAAkB,KAAKV,cAAc,EAAE;AACzC,MAAA,MAAMiB,gBAAgB,GAAGZ,mBAAmB,CAACJ,KAAK,EAAES,kBAAkB,CAAC,CAAA;MACvEF,gBAAgB,CAACU,KAAK,EAAE,CAAA;MAExB,OAAO;AACLR,QAAAA,kBAAkB,EAAEV,cAAc;AAClCC,QAAAA,KAAK,EAAEM,iBAAiB,CAACU,gBAAgB,EAAEjB,cAAc,CAAC;AAC1DW,QAAAA,WAAW,EAAE,IAAI;AACjBC,QAAAA,YAAY,EAAE,IAAI;AAClBG,QAAAA,YAAY,EAAE,CAAA;OACf,CAAA;AACH,KAAA;AACA,IAAA,OAAO,IAAI,CAAA;AACb,GAAA;EAEAI,aAAa,GAAIf,gBAAwB,IAAwB;IAC/D,MAAM;MAAEQ,YAAY;MAAED,WAAW;AAAEV,MAAAA,KAAAA;KAAO,GAAG,IAAI,CAACK,KAAK,CAAA;IACvD,MAAM;AAAEN,MAAAA,cAAAA;KAAgB,GAAG,IAAI,CAACG,KAAK,CAAA;AAErC,IAAA,IAAIS,YAAY,EAAE;AAChB,MAAA,MAAMQ,QAAQ,GAAGC,MAAM,CAACC,YAAY,CAACV,YAAY,CAACW,KAAK,CAAC,CAACC,WAAW,EAAE,CAAA;AAEtE,MAAA,IAAIb,WAAW,KAAK,OAAO,IAAIA,WAAW,KAAK,KAAK,EAAE;AACpD,QAAA,OAAOA,WAAW,CAAA;AACpB,OAAA;AAEA,MAAA,IAAI,CAACC,YAAY,CAACa,OAAO,IAAIb,YAAY,CAACc,OAAO,KAAKN,QAAQ,KAAK,GAAG,EAAE;AACtE,QAAA,OAAOR,YAAY,CAACe,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAA;AAChD,OAAA;AACA;AACA,MAAA,IAAIf,YAAY,CAACa,OAAO,IAAIL,QAAQ,KAAK,GAAG,EAAE;AAC5C,QAAA,OAAO,QAAQ,CAAA;AACjB,OAAA;AAEA;AACA,MAAA,IACE,OAAOR,YAAY,CAACgB,GAAG,KAAK,WAAW,IACvCxB,gBAAgB,CAACyB,MAAM,IAAIxB,mBAAmB,CAACJ,KAAK,EAAED,cAAc,CAAC,CAAC6B,MAAM,EAC5E;AACA,QAAA,OAAO,WAAW,CAAA;AACpB,OAAA;MACA,OAAOjB,YAAY,CAACgB,GAAG,CAAA;AACzB,KAAA;AACA;AACA,IAAA,OAAO,OAAO,CAAA;GACf,CAAA;EAEDE,UAAU,GAAGA,MAAK;IAChB,IAAI,CAACC,QAAQ,CAAC;AACZpB,MAAAA,WAAW,EAAE,SAAS;AACtBC,MAAAA,YAAY,EAAE,IAAI;AAClBG,MAAAA,YAAY,EAAE,CAAA;AACf,KAAA,CAAC,CAAA;GACH,CAAA;EAEDiB,cAAc,GAAIC,KAA2C,IAAI;AAC/D,IAAA,MAAMb,QAAQ,GAAGC,MAAM,CAACC,YAAY,CAACW,KAAK,CAACV,KAAK,CAAC,CAACC,WAAW,EAAE,CAAA;AAC/D,IAAA,IAAI,CAACS,KAAK,CAACR,OAAO,IAAIQ,KAAK,CAACP,OAAO,KAAKN,QAAQ,KAAK,GAAG,EAAE;AACxD,MAAA,OAAOa,KAAK,CAACN,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAA;AACzC,KAAA;AACA,IAAA,OAAO,IAAI,CAAA;GACZ,CAAA;EAEDO,eAAe,GAAiDD,KAAK,IAAI;IACvEA,KAAK,CAACE,OAAO,EAAE,CAAA;IACf,MAAM;MAAEtB,cAAc;AAAEC,MAAAA,YAAAA;KAAc,GAAGmB,KAAK,CAACG,aAAa,CAAA;IAC5D,MAAM;AAAE5B,MAAAA,gBAAAA;KAAkB,GAAG,IAAI,CAACF,KAAK,CAAA;IACvC,MAAM;AAAEN,MAAAA,cAAAA;KAAgB,GAAG,IAAI,CAACG,KAAK,CAAA;AAErC;IACA,IAAIkC,iBAAiB,GAAG,EAAE,CAAA;IAE1B,IAAI,IAAI,CAACL,cAAc,CAACC,KAAK,CAAC,KAAK,MAAM,EAAE;AACzCI,MAAAA,iBAAiB,GAAG9B,iBAAiB,CAACC,gBAAgB,CAAC8B,IAAI,EAAE,CAACC,QAAQ,EAAE,EAAEvC,cAAc,CAAC,CAAA;MACzF,IAAI,CAAC+B,QAAQ,CAAC;AAAE9B,QAAAA,KAAK,EAAEoC,iBAAiB;AAAE1B,QAAAA,WAAW,EAAE,MAAA;AAAM,OAAE,CAAC,CAAA;KACjE,MAAM,IAAI,IAAI,CAACqB,cAAc,CAACC,KAAK,CAAC,KAAK,MAAM,EAAE;AAChDI,MAAAA,iBAAiB,GAAG9B,iBAAiB,CAACC,gBAAgB,CAACgC,IAAI,EAAE,CAACD,QAAQ,EAAE,EAAEvC,cAAc,CAAC,CAAA;MACzF,IAAI,CAAC+B,QAAQ,CAAC;AAAE9B,QAAAA,KAAK,EAAEoC,iBAAiB;AAAE1B,QAAAA,WAAW,EAAE,MAAA;AAAM,OAAE,CAAC,CAAA;AAClE,KAAC,MAAM;MACL,IAAI,CAACoB,QAAQ,CAAC;AACZnB,QAAAA,YAAY,EAAEqB,KAAK;AACnBtB,QAAAA,WAAW,EAAE,SAAS;QACtBE,cAAc,EAAEA,cAAc,IAAI,CAAC;QACnCC,YAAY,EAAEA,YAAY,IAAI,CAAA;AAC/B,OAAA,CAAC,CAAA;AACJ,KAAA;GACD,CAAA;EAED2B,aAAa,GAAkDR,KAAK,IAAI;IACtE,MAAM;AAAEjC,MAAAA,cAAAA;KAAgB,GAAG,IAAI,CAACG,KAAK,CAAA;AACrC,IAAA,MAAMY,YAAY,GAAGV,mBAAmB,CACtC4B,KAAK,CAACS,aAAa,CAACC,OAAO,CAAC,MAAM,CAAC,EACnC3C,cAAc,CACf,CAAC6B,MAAM,CAAA;IAER,IAAI,CAACE,QAAQ,CAAC;AAAEpB,MAAAA,WAAW,EAAE,OAAO;AAAEI,MAAAA,YAAAA;AAAc,KAAA,CAAC,CAAA;GACtD,CAAA;EAED6B,WAAW,GAAiDA,MAAK;IAC/D,IAAI,CAACb,QAAQ,CAAC;AAAEpB,MAAAA,WAAW,EAAE,KAAA;AAAO,KAAA,CAAC,CAAA;GACtC,CAAA;EAEDkC,YAAY,GAAIC,MAA0B,IAAI;IAC5C,MAAM;AAAE9C,MAAAA,cAAAA;KAAgB,GAAG,IAAI,CAACG,KAAK,CAAA;AACrC,IAAA,MAAM4C,gBAAgB,GAAG/C,cAAc,CAACgD,KAAK,CAAC,EAAE,CAAC,CAACC,MAAM,CAAEC,SAAS,IAAKA,SAAS,KAAK,GAAG,CAAC,CAAA;AAE1F,IAAA,OAAO,CAACH,gBAAgB,CAACI,QAAQ,CAACL,MAAM,CAAC,CAAA;GAC1C,CAAA;EAEDM,cAAc,GAA+CnB,KAAK,IAAI;IACpE,MAAM;MAAEzB,gBAAgB;AAAEG,MAAAA,WAAAA;KAAa,GAAG,IAAI,CAACL,KAAK,CAAA;IACpD,MAAM;MAAEN,cAAc;AAAEqD,MAAAA,QAAAA;KAAU,GAAG,IAAI,CAAClD,KAAK,CAAA;IAC/C,MAAM;AAAEF,MAAAA,KAAAA;KAAO,GAAGgC,KAAK,CAACqB,MAAM,CAAA;AAC9B,IAAA,IAAIlD,gBAAgB,GAAGC,mBAAmB,CAACJ,KAAK,EAAED,cAAc,CAAC,CAAA;AACjE,IAAA,MAAM8C,MAAM,GAAG,IAAI,CAAC3B,aAAa,CAACf,gBAAgB,CAAC,CAAA;AACnD,IAAA,IAAI,CAAC,IAAI,CAACyC,YAAY,CAACC,MAAM,CAAC,IAAInC,WAAW,KAAK,MAAM,IAAIA,WAAW,KAAK,MAAM,EAAE;AAClF,MAAA,OAAA;AACF,KAAA;AAEA,IAAA,IAAImC,MAAM,KAAK,WAAW,IAAIA,MAAM,KAAK,QAAQ,EAAE;MACjD1C,gBAAgB,GAAG,IAAI,CAACmD,YAAY,CAACnD,gBAAgB,EAAE0C,MAAM,CAAC,CAAA;AAChE,KAAA;AAEA,IAAA,MAAMT,iBAAiB,GAAG9B,iBAAiB,CAACH,gBAAgB,EAAEJ,cAAc,CAAC,CAAA;AAC7EQ,IAAAA,gBAAgB,CAACgD,GAAG,CAACpD,gBAAgB,CAAC,CAAA;AAEtC,IAAA,IAAI,CAACqD,uBAAuB,CAACX,MAAM,CAAC,CAAA;IAEpC,IAAI,CAACf,QAAQ,CAAC;AAAE9B,MAAAA,KAAK,EAAEoC,iBAAAA;AAAiB,KAAE,EAAE,MAAK;MAC/C,IAAI,CAACP,UAAU,EAAE,CAAA;AACjB,MAAA,IAAIuB,QAAQ,EAAE;AACZ,QAAA,MAAMK,cAAc,GAAGrD,mBAAmB,CAACgC,iBAAiB,EAAErC,cAAc,CAAC,CAAA;QAC7EqD,QAAQ,CAACK,cAAc,CAAC,CAAA;AAC1B,OAAA;AACF,KAAC,CAAC,CAAA;GACH,CAAA;EAEDC,YAAY,GAA8C1B,KAAK,IAAI;AACjE,IAAA,IAAI,CAAC9B,KAAK,CAACyD,MAAM,GAAGvD,mBAAmB,CAAC4B,KAAK,CAACqB,MAAM,CAACrD,KAAK,EAAE,IAAI,CAACE,KAAK,CAACH,cAAc,CAAC,CAAC,CAAA;GACxF,CAAA;EAED6D,aAAa,GAA8C5B,KAAK,IAAI;IAClE,MAAM;MAAEjC,cAAc;AAAE8D,MAAAA,OAAAA;KAAS,GAAG,IAAI,CAAC3D,KAAK,CAAA;AAC9C,IAAA,IAAI2D,OAAO,EAAE;AACX,MAAA,IAAI,CAACV,cAAc,CAACnB,KAAK,CAAC,CAAA;MAC1B6B,OAAO,CAACzD,mBAAmB,CAAC4B,KAAK,CAACqB,MAAM,CAACrD,KAAK,EAAED,cAAc,CAAC,CAAC,CAAA;AAClE,KAAA;GACD,CAAA;AAEDuD,EAAAA,YAAY,GAAGA,CAACnD,gBAAwB,EAAE0C,MAAiB,KAAI;IAC7D,MAAM;AAAE9C,MAAAA,cAAAA;KAAgB,GAAG,IAAI,CAACG,KAAK,CAAA;IACrC,MAAM;MAAEU,cAAc;AAAEC,MAAAA,YAAAA;KAAc,GAAG,IAAI,CAACR,KAAK,CAAA;AACnD,IAAA,MAAMyD,QAAQ,GAAG,CAAC,GAAG3D,gBAAgB,CAAC,CAAA;IACtC,IAAIS,cAAc,KAAKC,YAAY,EAAE;MACnC,IAAIkD,aAAa,GACfnD,cAAc,GAAGoD,4BAA4B,CAAC,CAAC,EAAEpD,cAAc,EAAEb,cAAc,CAAC,CAAA;MAClF,IAAIkE,QAAQ,GAAG,CAAC,CAAA;AAEhB,MAAA,IAAIC,KAAK,GAAGC,uBAAuB,CAACvD,cAAc,EAAEb,cAAc,CAAC,CAAA;MACnE,IAAI8C,MAAM,KAAK,WAAW,EAAE;AAC1BkB,QAAAA,aAAa,IAAI,CAAC,CAAA;AAClBG,QAAAA,KAAK,GAAGE,2BAA2B,CAACxD,cAAc,EAAEb,cAAc,CAAC,CAAA;AACrE,OAAA;AAEA,MAAA,IAAIgE,aAAa,IAAI,CAAC,IAAIG,KAAK,EAAE;AAC/BD,QAAAA,QAAQ,GAAG,CAAC,CAAA;AACd,OAAA;AAEAH,MAAAA,QAAQ,CAACO,MAAM,CAACN,aAAa,EAAEE,QAAQ,CAAC,CAAA;AAC1C,KAAA;AAEA,IAAA,OAAOH,QAAQ,CAACQ,IAAI,CAAC,EAAE,CAAC,CAAA;GACzB,CAAA;EAEDd,uBAAuB,GAAIX,MAAc,IAAI;IAC3C,MAAM;AAAE9C,MAAAA,cAAAA;KAAgB,GAAG,IAAI,CAACG,KAAK,CAAA;IACrC,MAAM;MAAES,YAAY;MAAEC,cAAc;MAAEC,YAAY;AAAEC,MAAAA,YAAAA;KAAc,GAAG,IAAI,CAACT,KAAK,CAAA;AAC/E,IAAA,MAAMgD,MAAM,GAAG1C,YAAY,EAAEwB,aAAa,CAAA;AAE1C,IAAA,MAAMoC,cAAc,GAAGC,kCAA+B,CACpD3B,MAAM,EACNjC,cAAc,EACdC,YAAY,EACZd,cAAc,EACde,YAAY,CACb,CAAA;AAED2D,IAAAA,UAAU,CAAC,MAAK;AACdpB,MAAAA,MAAM,EAAEqB,iBAAiB,CAACH,cAAc,EAAEA,cAAc,CAAC,CAAA;MACzD,IAAI,CAACzC,QAAQ,CAAC;AAAElB,QAAAA,cAAc,EAAE2D,cAAc;AAAE1D,QAAAA,YAAY,EAAE0D,cAAAA;AAAc,OAAE,CAAC,CAAA;KAChF,EAAE,CAAC,CAAC,CAAA;GACN,CAAA;AAEDI,EAAAA,MAAMA,GAAA;IACJ,MAAM;MACJC,SAAS;MACTC,SAAS;MACTC,EAAE;MACFC,IAAI;MACJC,WAAW;MACXC,QAAQ;MACRC,QAAQ;MACRC,SAAS;MACTC,SAAS;MACTC,QAAQ;AACRvF,MAAAA,YAAAA;KACD,GAAG,IAAI,CAACI,KAAK,CAAA;IACd,MAAM;AAAEF,MAAAA,KAAAA;KAAO,GAAG,IAAI,CAACK,KAAK,CAAA;AAC5B,IAAA,MAAMiF,WAAW,GAAqB;MACpCV,SAAS;MACTC,SAAS;MACTC,EAAE;MACFC,IAAI;MACJC,WAAW;MACXC,QAAQ;MACRC,QAAQ;MACRC,SAAS;MACTC,SAAS;MACTC,QAAQ;MACRvF,YAAY;MACZE,KAAK;MACL6D,OAAO,EAAE,IAAI,CAACD,aAAa;MAC3BD,MAAM,EAAE,IAAI,CAACD,YAAY;MACzB6B,OAAO,EAAE,IAAI,CAAC/C,aAAa;MAC3BgD,SAAS,EAAE,IAAI,CAACvD,eAAe;MAC/BmB,QAAQ,EAAE,IAAI,CAACD,cAAc;MAC7BsC,KAAK,EAAE,IAAI,CAAC9C,WAAAA;KACb,CAAA;AACD,IAAA,OAAO,IAAI,CAACzC,KAAK,CAACyE,MAAM,CAACW,WAAgB,CAAC,CAAA;AAC5C,GAAA;;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@transferwise/components",
3
- "version": "0.0.0-experimental-ffa47f4",
3
+ "version": "0.0.0-experimental-499f93d",
4
4
  "description": "Neptune React components",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -93,8 +93,8 @@
93
93
  "rollup-preserve-directives": "^1.1.1",
94
94
  "storybook": "^8.2.2",
95
95
  "@transferwise/less-config": "3.1.0",
96
- "@wise/components-theming": "1.6.0",
97
- "@transferwise/neptune-css": "14.18.0"
96
+ "@transferwise/neptune-css": "14.18.0",
97
+ "@wise/components-theming": "1.6.0"
98
98
  },
99
99
  "peerDependencies": {
100
100
  "@transferwise/icons": "^3.7.0",
@@ -4,7 +4,7 @@ export const fakeEvent = () => ({
4
4
  preventDefault() {},
5
5
  });
6
6
 
7
- export const fakeKeyDownEventForKey = (key: string) => ({
7
+ export const fakeKeyDownEventForKey = (key) => ({
8
8
  ...fakeEvent(),
9
9
  key,
10
10
  });
@@ -1,6 +1,6 @@
1
1
  import { useEffect, useState } from 'react';
2
2
 
3
- const ObserverParams: IntersectionObserverInit = {
3
+ const ObserverParams = {
4
4
  threshold: 0.1,
5
5
  };
6
6
 
@@ -9,19 +9,13 @@ const ObserverParams: IntersectionObserverInit = {
9
9
  * Use this custom hook to detect when an element has became visible inside the viewport. This hook checks only if the intersection happend.
10
10
  * Once the intersection has happened the hook will not return false even if the element gets out of the viewport.
11
11
  *
12
- * @param {object} params
13
- * @param {object} [params.elRef] - node object that contains a react reference to the element that needs to be observed.
14
- * @param {string} [params.loading = 'eager'] - string that contains the type of loading.
12
+ * @param elRef.elRef
13
+ * @param {object} [elRef] - node object that contains a react reference to the element that needs to be observed.
14
+ * @param {strimng} [loading = 'eager'] - string that contains the type of loading.
15
15
  * @param elRef.loading
16
16
  * @usage `const [hasIntersected] = useHasIntersected({imageRef,loading});`
17
17
  */
18
- export const useHasIntersected = ({
19
- elRef,
20
- loading = 'eager',
21
- }: {
22
- elRef: React.RefObject<HTMLElement>;
23
- loading?: 'eager' | 'lazy';
24
- }) => {
18
+ export const useHasIntersected = ({ elRef, loading }) => {
25
19
  const [hasIntersected, setHasIntersected] = useState(false);
26
20
 
27
21
  const { current } = elRef || {};
@@ -30,29 +24,29 @@ export const useHasIntersected = ({
30
24
  return elRef && current;
31
25
  };
32
26
 
33
- const handleOnIntersect: IntersectionObserverCallback = (entries, observer) => {
27
+ const handleOnIntersect = (entries, observer) => {
34
28
  entries.forEach((entry) => {
35
29
  if (entry.isIntersecting) {
36
30
  setHasIntersected(true);
37
- observer.unobserve(current!);
31
+ observer.unobserve(current);
38
32
  }
39
33
  });
40
34
  };
41
35
 
42
36
  useEffect(() => {
43
- let observer: IntersectionObserver | undefined;
37
+ let observer;
44
38
  let didCancel = false;
45
39
 
46
- // Check if window is defined for SSR and Old browsers fallback
40
+ // Check if window is define for SSR and Old browsers fallback
47
41
  if (typeof window === 'undefined' || !window.IntersectionObserver || !isValidReference()) {
48
42
  setHasIntersected(true);
49
- } else if (current && !didCancel) {
43
+ } else if (!didCancel) {
50
44
  observer = new IntersectionObserver(handleOnIntersect, ObserverParams);
51
45
  observer.observe(current);
52
46
  }
53
47
  return () => {
54
48
  didCancel = true;
55
- if (observer && current) {
49
+ if (observer) {
56
50
  observer.unobserve(current);
57
51
  }
58
52
  };
@@ -1,67 +1,7 @@
1
1
  /* eslint-disable no-unused-vars */
2
2
  /* eslint-disable no-param-reassign */
3
3
 
4
- import { PrimitiveType } from 'react-intl';
5
-
6
- type ValidationMessages = Record<string, string>;
7
-
8
- type Value = {
9
- label?: string;
10
- title?: string;
11
- name?: string;
12
- value?: PrimitiveType;
13
- code?: string | number;
14
- key?: PrimitiveType;
15
- };
16
-
17
- type Field = {
18
- name?: string;
19
- title?: string;
20
- type?: string;
21
- control?: string;
22
- format?: string;
23
- pattern?: string;
24
- minimum?: number;
25
- maximum?: number;
26
- max?: number;
27
- min?: number;
28
- width?: string;
29
- example?: string;
30
- placeholder?: string;
31
- info?: string;
32
- tooltip?: string;
33
- help?: { message: string };
34
- valuesAllowed?: Value[];
35
- values?: Value[];
36
- default?: Value;
37
- value?: Value;
38
- validationMessages?: ValidationMessages;
39
- validationRegexp?: string;
40
- properties: Record<string, Field>;
41
- hidden?: boolean;
42
- key?: string;
43
- fields?: Field[];
44
- groups?: Field[];
45
- [otherKey: string]: any; // For additional fields
46
- };
47
-
48
- type FieldMapType = Record<string, Field>;
49
-
50
- type Alternative = {
51
- title?: string;
52
- label?: string;
53
- type?: string;
54
- types: string[];
55
- name?: string;
56
- description?: string;
57
- tooltip?: string;
58
- fields?: Field[];
59
- fieldGroups?: Field[];
60
- properties?: Record<string, any>;
61
- prepared?: boolean;
62
- };
63
-
64
- const prepRequirements = (alternatives: Alternative[]) => {
4
+ const prepRequirements = (alternatives) => {
65
5
  if (!alternatives || alternatives.length === 0) {
66
6
  return [];
67
7
  }
@@ -75,8 +15,7 @@ const prepRequirements = (alternatives: Alternative[]) => {
75
15
 
76
16
  prepLegacyAlternatives(alternative);
77
17
 
78
- const fieldsToPrep = Array.isArray(alternative.fields) ? alternative.fields : [];
79
- alternative.properties = prepFields(fieldsToPrep) || alternative.properties;
18
+ alternative.properties = prepFields(alternative.properties || alternative.fields);
80
19
 
81
20
  // If we're still treating type as a special case, move it to a hidden value
82
21
  if (alternative.type && alternative.type !== 'object' && !alternative.types) {
@@ -96,14 +35,16 @@ const prepRequirements = (alternatives: Alternative[]) => {
96
35
  return preppedAlternatives;
97
36
  };
98
37
 
99
- const prepFields = (fields: Field[], model?: any, validationMessages?: any): FieldMapType => {
38
+ const prepFields = (fields, model, validationMessages) => {
100
39
  if (!fields) {
101
40
  return {};
102
41
  }
103
42
 
104
- const preparedFields = transformNestedKeysToNestedSpecs(
105
- transformFieldArrayToMap(flattenFieldsWithGroups(copyOf(fields))),
106
- );
43
+ let preparedFields = copyOf(fields);
44
+
45
+ preparedFields = flattenFieldsWithGroups(preparedFields);
46
+ preparedFields = transformFieldArrayToMap(preparedFields);
47
+ preparedFields = transformNestedKeysToNestedSpecs(preparedFields);
107
48
 
108
49
  Object.keys(preparedFields).forEach((key) => {
109
50
  preparedFields[key] = prepField(preparedFields[key], model, validationMessages);
@@ -112,7 +53,7 @@ const prepFields = (fields: Field[], model?: any, validationMessages?: any): Fie
112
53
  return preparedFields;
113
54
  };
114
55
 
115
- const prepField = (field: Field, model: unknown, validationMessages: ValidationMessages) => {
56
+ const prepField = (field, model, validationMessages) => {
116
57
  const preparedField = copyOf(field);
117
58
 
118
59
  prepLegacyProps(preparedField);
@@ -130,10 +71,9 @@ const prepField = (field: Field, model: unknown, validationMessages: ValidationM
130
71
  *
131
72
  * @param fields
132
73
  */
133
- const flattenFieldsWithGroups = (fields?: Field[]): Field[] => {
74
+ const flattenFieldsWithGroups = (fields) => {
134
75
  if (Array.isArray(fields)) {
135
- let flattenedFields: Field[] = [];
136
-
76
+ let flattenedFields = [];
137
77
  fields.forEach((field) => {
138
78
  // If we've been given a group with nested fields, break them out.
139
79
  if (field.fields) {
@@ -147,11 +87,10 @@ const flattenFieldsWithGroups = (fields?: Field[]): Field[] => {
147
87
  });
148
88
  return flattenedFields;
149
89
  }
150
-
151
- return fields || [];
90
+ return fields;
152
91
  };
153
92
 
154
- const flattenFieldWithGroup = (field: Field, subFields: Field[]): Field[] => {
93
+ const flattenFieldWithGroup = (field, subFields) => {
155
94
  // If first field doesn't have a label, use the one from the group
156
95
  if (field.name && subFields.length > 0 && !subFields[0].name) {
157
96
  subFields[0].name = field.name;
@@ -190,26 +129,18 @@ const flattenFieldWithGroup = (field: Field, subFields: Field[]): Field[] => {
190
129
  * Some older requirements return an array of fields, where it should be a map
191
130
  * from the property name to the spec. This converts arrays to maps.
192
131
  */
193
- const transformFieldArrayToMap = (fields?: Field[]): FieldMapType => {
132
+ const transformFieldArrayToMap = (fields) => {
194
133
  if (Array.isArray(fields)) {
195
- const fieldMap: FieldMapType = {};
196
-
197
- fields.forEach((field: Field) => {
198
- const newKey = field.key || field.name;
199
-
200
- if ('key' in field) {
201
- delete field.key;
202
- }
134
+ const fieldMap = {};
135
+ fields.forEach((field) => {
136
+ const key = field.key || field.name;
137
+ delete field.key;
203
138
 
204
- if (newKey) {
205
- fieldMap[newKey] = copyOf(field);
206
- }
139
+ fieldMap[key] = copyOf(field);
207
140
  });
208
-
209
141
  return fieldMap;
210
142
  }
211
-
212
- return fields ?? {};
143
+ return fields;
213
144
  };
214
145
 
215
146
  /*
@@ -218,13 +149,12 @@ const transformFieldArrayToMap = (fields?: Field[]): FieldMapType => {
218
149
  * type 'object', and nests such fields inside of it. When we render we pass
219
150
  * this object spec to a nested fieldset.
220
151
  */
221
- const transformNestedKeysToNestedSpecs = (fieldMap: FieldMapType): Record<string, Field> => {
152
+ const transformNestedKeysToNestedSpecs = (fieldMap) => {
222
153
  if (Array.isArray(fieldMap)) {
223
154
  throw new TypeError('Expecting a map of fields, not an array');
224
155
  }
225
156
 
226
- const nestedFields: FieldMapType = {};
227
-
157
+ const nestedFields = {};
228
158
  Object.keys(fieldMap).forEach((key) => {
229
159
  if (key.indexOf('.') > 0) {
230
160
  // If the key contains a period we need to nest the fields in another object
@@ -246,8 +176,8 @@ const transformNestedKeysToNestedSpecs = (fieldMap: FieldMapType): Record<string
246
176
  return nestedFields;
247
177
  };
248
178
 
249
- const prepType = (field: Field) => {
250
- const type = field.type?.toLowerCase?.();
179
+ const prepType = (field) => {
180
+ const type = field.type && field.type.toLowerCase && field.type.toLowerCase();
251
181
 
252
182
  switch (type) {
253
183
  case 'text':
@@ -294,7 +224,7 @@ const prepType = (field: Field) => {
294
224
  }
295
225
  };
296
226
 
297
- const prepLegacyAlternatives = (alternative: Alternative) => {
227
+ const prepLegacyAlternatives = (alternative) => {
298
228
  if (!alternative.title && alternative.label) {
299
229
  alternative.title = alternative.label;
300
230
  }
@@ -313,7 +243,7 @@ const prepLegacyAlternatives = (alternative: Alternative) => {
313
243
  }
314
244
  };
315
245
 
316
- const prepLegacyProps = (field: Field) => {
246
+ const prepLegacyProps = (field) => {
317
247
  if (field.name && !field.title) {
318
248
  field.title = field.name;
319
249
  delete field.name;
@@ -349,7 +279,7 @@ const prepLegacyProps = (field: Field) => {
349
279
  delete field.valuesAllowed;
350
280
  }
351
281
 
352
- if (field.values && Array.isArray(field.values)) {
282
+ if (field.values && field.values.map) {
353
283
  field.values = prepLegacyValues(field.values);
354
284
  }
355
285
 
@@ -374,9 +304,9 @@ const prepLegacyProps = (field: Field) => {
374
304
  }
375
305
  };
376
306
 
377
- const prepLegacyValues = (values: Value[]) => values.map(prepLegacyValue);
307
+ const prepLegacyValues = (values) => values.map(prepLegacyValue);
378
308
 
379
- const prepLegacyValue = (value: Value) => {
309
+ const prepLegacyValue = (value) => {
380
310
  if (!value.label && value.title) {
381
311
  value.label = value.title;
382
312
  delete value.title;
@@ -398,7 +328,7 @@ const prepLegacyValue = (value: Value) => {
398
328
  return value;
399
329
  };
400
330
 
401
- const prepPattern = (field: Field) => {
331
+ const prepPattern = (field) => {
402
332
  if (field.pattern) {
403
333
  try {
404
334
  new RegExp(field.pattern);
@@ -412,7 +342,7 @@ const prepPattern = (field: Field) => {
412
342
  }
413
343
  };
414
344
 
415
- const prepValidationMessages = (field: Field, validationMessages?: ValidationMessages) => {
345
+ const prepValidationMessages = (field, validationMessages) => {
416
346
  field.validationMessages = field.validationMessages
417
347
  ? field.validationMessages
418
348
  : validationMessages;
@@ -432,7 +362,7 @@ const prepValidationMessages = (field: Field, validationMessages?: ValidationMes
432
362
  }
433
363
  };
434
364
 
435
- const getControlType = (field: Field) => {
365
+ const getControlType = (field) => {
436
366
  if (field.control) {
437
367
  return field.control.toLowerCase();
438
368
  }
@@ -456,7 +386,7 @@ const getControlType = (field: Field) => {
456
386
  }
457
387
  };
458
388
 
459
- const getControlForStringFormat = (format?: string) => {
389
+ const getControlForStringFormat = (format) => {
460
390
  switch (format) {
461
391
  case 'date':
462
392
  return 'date';
@@ -475,7 +405,7 @@ const getControlForStringFormat = (format?: string) => {
475
405
  }
476
406
  };
477
407
 
478
- const getSelectionType = (field: Field) => {
408
+ const getSelectionType = (field) => {
479
409
  if (field.control) {
480
410
  return field.control;
481
411
  }
@@ -492,14 +422,14 @@ const getSelectionType = (field: Field) => {
492
422
  return 'select';
493
423
  };
494
424
 
495
- const copyOf = <T>(object: T): T => JSON.parse(JSON.stringify(object)) as T;
425
+ const copyOf = (object) => JSON.parse(JSON.stringify(object));
496
426
 
497
427
  /**
498
428
  * Some older requirments formats do not include a label for alternatives
499
429
  *
500
430
  * @param tabType
501
431
  */
502
- const getNameFromType = (tabType?: string): string => {
432
+ const getNameFromType = (tabType) => {
503
433
  if (tabType && tabType.length > 0) {
504
434
  const tabNameWithSpaces = tabType.toLowerCase().split('_').join(' '); // String.replace method only replaces first instance
505
435
  return tabNameWithSpaces.charAt(0).toUpperCase() + tabNameWithSpaces.slice(1);
@@ -0,0 +1,78 @@
1
+ import { userEvent, within, fn } from '@storybook/test';
2
+
3
+ import InputWithDisplayFormat, { InputWithDisplayFormatProps } from '.';
4
+ import { Field, FieldProps } from '../field/Field';
5
+ import { Meta, type StoryObj } from '@storybook/react';
6
+
7
+ type Story = StoryObj<InputWithDisplayFormatProps & { label: string }>;
8
+
9
+ const meta = {
10
+ title: 'Forms/InputWithDisplayFormat',
11
+ component: InputWithDisplayFormat,
12
+ render: function Render({ label, ...args }: InputWithDisplayFormatProps & FieldProps) {
13
+ return (
14
+ <Field label={label} id={args.id}>
15
+ <InputWithDisplayFormat id={args.id} {...args} />
16
+ </Field>
17
+ );
18
+ },
19
+ args: {
20
+ onFocus: fn(),
21
+ onBlur: fn(),
22
+ onChange: fn(),
23
+ },
24
+ } satisfies Meta<typeof InputWithDisplayFormat>;
25
+ export default meta;
26
+
27
+ export const Basic: Story = {
28
+ args: {
29
+ label: 'Sort Code',
30
+ placeholder: '**-**-**',
31
+ displayPattern: '**-**-**',
32
+ },
33
+ };
34
+
35
+ export const CardNumber: Story = {
36
+ args: {
37
+ label: 'Card Number',
38
+ placeholder: '**** **** **** **** ***',
39
+ displayPattern: '**** **** **** **** ***',
40
+ },
41
+ };
42
+
43
+ export const CVC: Story = {
44
+ args: {
45
+ label: 'CVC',
46
+ placeholder: '***',
47
+ displayPattern: '***',
48
+ value: '',
49
+ },
50
+ };
51
+
52
+ export const ExpiryDate: Story = {
53
+ args: {
54
+ label: 'Expiry Date',
55
+ placeholder: '** / **',
56
+ displayPattern: '** / **',
57
+ },
58
+ };
59
+
60
+ export const SecurityPin: Story = {
61
+ args: {
62
+ label: 'Security Pin',
63
+ placeholder: '*-*-*-*-*-*',
64
+ displayPattern: '*-*-*-*-*-*',
65
+ },
66
+ };
67
+
68
+ export const SecurityPinPlay: Story = {
69
+ args: {
70
+ label: 'Security Pin Play',
71
+ placeholder: '*-*-*-*-*-*',
72
+ displayPattern: '*-*-*-*-*-*',
73
+ },
74
+ play: async ({ canvasElement }) => {
75
+ const canvas = within(canvasElement);
76
+ await userEvent.type(canvas.getByPlaceholderText('*-*-*-*-*-*'), '123456');
77
+ },
78
+ };
@@ -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) => {