@ledgerhq/lumen-ui-rnative 0.1.47 → 0.1.49

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 (362) hide show
  1. package/dist/module/i18n/locales/de.json +1 -3
  2. package/dist/module/i18n/locales/en.json +1 -3
  3. package/dist/module/i18n/locales/es.json +1 -3
  4. package/dist/module/i18n/locales/fr.json +1 -3
  5. package/dist/module/i18n/locales/ja.json +1 -3
  6. package/dist/module/i18n/locales/ko.json +1 -3
  7. package/dist/module/i18n/locales/pt.json +1 -3
  8. package/dist/module/i18n/locales/ru.json +1 -3
  9. package/dist/module/i18n/locales/th.json +1 -3
  10. package/dist/module/i18n/locales/tr.json +1 -3
  11. package/dist/module/i18n/locales/zh.json +1 -3
  12. package/dist/module/lib/Animations/Pulse/Pulse.js +3 -3
  13. package/dist/module/lib/Animations/Pulse/Pulse.js.map +1 -1
  14. package/dist/module/lib/Animations/Pulse/Pulse.mdx +0 -1
  15. package/dist/module/lib/Animations/Spin/Spin.js +3 -3
  16. package/dist/module/lib/Animations/Spin/Spin.js.map +1 -1
  17. package/dist/module/lib/Animations/Spin/Spin.mdx +0 -1
  18. package/dist/module/lib/Components/AddressInput/AddressInput.figma.js +36 -0
  19. package/dist/module/lib/Components/AddressInput/AddressInput.figma.js.map +1 -0
  20. package/dist/module/lib/Components/AddressInput/AddressInput.mdx +0 -183
  21. package/dist/module/lib/Components/AmountDisplay/AmountDisplay.figma.js +31 -0
  22. package/dist/module/lib/Components/AmountDisplay/AmountDisplay.figma.js.map +1 -0
  23. package/dist/module/lib/Components/AmountDisplay/AmountDisplay.mdx +0 -90
  24. package/dist/module/lib/Components/AmountInput/AmountInput.figma.js +70 -0
  25. package/dist/module/lib/Components/AmountInput/AmountInput.figma.js.map +1 -0
  26. package/dist/module/lib/Components/AmountInput/AmountInput.js +3 -1
  27. package/dist/module/lib/Components/AmountInput/AmountInput.js.map +1 -1
  28. package/dist/module/lib/Components/AmountInput/AmountInput.mdx +0 -190
  29. package/dist/module/lib/Components/AmountInput/AmountInput.stories.js +15 -0
  30. package/dist/module/lib/Components/AmountInput/AmountInput.stories.js.map +1 -1
  31. package/dist/module/lib/Components/AmountInput/useAmountInputFormatting/useAmountInputFormatting.js +1 -1
  32. package/dist/module/lib/Components/AmountInput/useAmountInputFormatting/useAmountInputFormatting.js.map +1 -1
  33. package/dist/module/lib/Components/AmountInput/useAmountInputFormatting/useAmountInputFormatting.test.js +20 -1
  34. package/dist/module/lib/Components/AmountInput/useAmountInputFormatting/useAmountInputFormatting.test.js.map +1 -1
  35. package/dist/module/lib/Components/Avatar/Avatar.figma.js +15 -12
  36. package/dist/module/lib/Components/Avatar/Avatar.figma.js.map +1 -1
  37. package/dist/module/lib/Components/Avatar/Avatar.js +4 -27
  38. package/dist/module/lib/Components/Avatar/Avatar.js.map +1 -1
  39. package/dist/module/lib/Components/Avatar/Avatar.mdx +53 -69
  40. package/dist/module/lib/Components/Avatar/Avatar.stories.js +27 -33
  41. package/dist/module/lib/Components/Avatar/Avatar.stories.js.map +1 -1
  42. package/dist/module/lib/Components/Avatar/Avatar.test.js +21 -39
  43. package/dist/module/lib/Components/Avatar/Avatar.test.js.map +1 -1
  44. package/dist/module/lib/Components/Banner/Banner.figma.js +107 -0
  45. package/dist/module/lib/Components/Banner/Banner.figma.js.map +1 -0
  46. package/dist/module/lib/Components/Banner/Banner.mdx +0 -86
  47. package/dist/module/lib/Components/BottomSheet/BottomSheet.figma.js +49 -0
  48. package/dist/module/lib/Components/BottomSheet/BottomSheet.figma.js.map +1 -0
  49. package/dist/module/lib/Components/BottomSheet/BottomSheet.mdx +0 -119
  50. package/dist/module/lib/Components/Button/Button.figma.js +45 -0
  51. package/dist/module/lib/Components/Button/Button.figma.js.map +1 -0
  52. package/dist/module/lib/Components/Button/Button.mdx +25 -224
  53. package/dist/module/lib/Components/Button/Button.stories.js +4 -36
  54. package/dist/module/lib/Components/Button/Button.stories.js.map +1 -1
  55. package/dist/module/lib/Components/Card/Card.figma.js +143 -0
  56. package/dist/module/lib/Components/Card/Card.figma.js.map +1 -0
  57. package/dist/module/lib/Components/Card/Card.mdx +0 -160
  58. package/dist/module/lib/Components/CardButton/CardButton.figma.js +38 -0
  59. package/dist/module/lib/Components/CardButton/CardButton.figma.js.map +1 -0
  60. package/dist/module/lib/Components/CardButton/CardButton.mdx +0 -48
  61. package/dist/module/lib/Components/Checkbox/Checkbox.figma.js +48 -0
  62. package/dist/module/lib/Components/Checkbox/Checkbox.figma.js.map +1 -0
  63. package/dist/module/lib/Components/Checkbox/Checkbox.mdx +0 -73
  64. package/dist/module/lib/Components/ContentBanner/ContentBanner.figma.js +91 -0
  65. package/dist/module/lib/Components/ContentBanner/ContentBanner.figma.js.map +1 -0
  66. package/dist/module/lib/Components/ContentBanner/ContentBanner.mdx +0 -2
  67. package/dist/module/lib/Components/CryptoIcon/CryptoIcon.figma.js +17 -0
  68. package/dist/module/lib/Components/CryptoIcon/CryptoIcon.figma.js.map +1 -0
  69. package/dist/module/lib/Components/DescriptionItem/DescriptionItem.figma.js +29 -0
  70. package/dist/module/lib/Components/DescriptionItem/DescriptionItem.figma.js.map +1 -0
  71. package/dist/module/lib/Components/Divider/Divider.figma.js +10 -0
  72. package/dist/module/lib/Components/Divider/Divider.figma.js.map +1 -0
  73. package/dist/module/lib/Components/Divider/Divider.mdx +0 -2
  74. package/dist/module/lib/Components/DotCount/DotCount.figma.js +29 -0
  75. package/dist/module/lib/Components/DotCount/DotCount.figma.js.map +1 -0
  76. package/dist/module/lib/Components/DotIndicator/DotIndicator.figma.js +29 -0
  77. package/dist/module/lib/Components/DotIndicator/DotIndicator.figma.js.map +1 -0
  78. package/dist/module/lib/Components/DotIndicator/DotIndicator.stories.js +6 -3
  79. package/dist/module/lib/Components/DotIndicator/DotIndicator.stories.js.map +1 -1
  80. package/dist/module/lib/Components/DotIndicator/getDotIndicatorProps.js +17 -0
  81. package/dist/module/lib/Components/DotIndicator/getDotIndicatorProps.js.map +1 -0
  82. package/dist/module/lib/Components/DotIndicator/getDotIndicatorProps.test.js +17 -0
  83. package/dist/module/lib/Components/DotIndicator/getDotIndicatorProps.test.js.map +1 -0
  84. package/dist/module/lib/Components/DotIndicator/index.js +1 -0
  85. package/dist/module/lib/Components/DotIndicator/index.js.map +1 -1
  86. package/dist/module/lib/Components/Icon/Icon.figma.js +1840 -0
  87. package/dist/module/lib/Components/Icon/Icon.figma.js.map +1 -0
  88. package/dist/module/lib/Components/Icon/Icon.mdx +0 -62
  89. package/dist/module/lib/Components/IconButton/IconButton.figma.js +42 -0
  90. package/dist/module/lib/Components/IconButton/IconButton.figma.js.map +1 -0
  91. package/dist/module/lib/Components/IconButton/IconButton.mdx +0 -68
  92. package/dist/module/lib/Components/InteractiveIcon/InteractiveIcon.figma.js +51 -0
  93. package/dist/module/lib/Components/InteractiveIcon/InteractiveIcon.figma.js.map +1 -0
  94. package/dist/module/lib/Components/InteractiveIcon/InteractiveIcon.mdx +0 -107
  95. package/dist/module/lib/Components/Link/Link.figma.js +41 -0
  96. package/dist/module/lib/Components/Link/Link.figma.js.map +1 -0
  97. package/dist/module/lib/Components/Link/Link.mdx +0 -102
  98. package/dist/module/lib/Components/ListItem/ListItem.figma.js +416 -0
  99. package/dist/module/lib/Components/ListItem/ListItem.figma.js.map +1 -0
  100. package/dist/module/lib/Components/ListItem/ListItem.mdx +0 -129
  101. package/dist/module/lib/Components/MediaBanner/MediaBanner.figma.js +25 -0
  102. package/dist/module/lib/Components/MediaBanner/MediaBanner.figma.js.map +1 -0
  103. package/dist/module/lib/Components/MediaBanner/MediaBanner.mdx +0 -3
  104. package/dist/module/lib/Components/MediaButton/MediaButton.figma.js +72 -0
  105. package/dist/module/lib/Components/MediaButton/MediaButton.figma.js.map +1 -0
  106. package/dist/module/lib/Components/MediaCard/MediaCard.figma.js +28 -0
  107. package/dist/module/lib/Components/MediaCard/MediaCard.figma.js.map +1 -0
  108. package/dist/module/lib/Components/MediaCard/MediaCard.mdx +0 -2
  109. package/dist/module/lib/Components/MediaImage/MediaImage.mdx +0 -1
  110. package/dist/module/lib/Components/MediaTag/MediaTag.figma.js +100 -0
  111. package/dist/module/lib/Components/MediaTag/MediaTag.figma.js.map +1 -0
  112. package/dist/module/lib/Components/MediaTag/MediaTag.mdx +0 -2
  113. package/dist/module/lib/Components/NavBar/NavBar.figma.js +79 -0
  114. package/dist/module/lib/Components/NavBar/NavBar.figma.js.map +1 -0
  115. package/dist/module/lib/Components/NavBar/NavBar.mdx +0 -2
  116. package/dist/module/lib/Components/OptionList/OptionList.js +16 -1
  117. package/dist/module/lib/Components/OptionList/OptionList.js.map +1 -1
  118. package/dist/module/lib/Components/OptionList/OptionList.mdx +45 -90
  119. package/dist/module/lib/Components/OptionList/OptionList.stories.js +61 -1
  120. package/dist/module/lib/Components/OptionList/OptionList.stories.js.map +1 -1
  121. package/dist/module/lib/Components/OptionList/OptionList.test.js +43 -1
  122. package/dist/module/lib/Components/OptionList/OptionList.test.js.map +1 -1
  123. package/dist/module/lib/Components/OptionList/useOptionList/useOptionListItems.js.map +1 -1
  124. package/dist/module/lib/Components/PageIndicator/PageIndicator.figma.js +13 -0
  125. package/dist/module/lib/Components/PageIndicator/PageIndicator.figma.js.map +1 -0
  126. package/dist/module/lib/Components/PageIndicator/PageIndicator.mdx +0 -2
  127. package/dist/module/lib/Components/SearchInput/SearchInput.figma.js +31 -0
  128. package/dist/module/lib/Components/SearchInput/SearchInput.figma.js.map +1 -0
  129. package/dist/module/lib/Components/SearchInput/SearchInput.mdx +0 -199
  130. package/dist/module/lib/Components/SegmentedControl/SegmentedControl.figma.js +35 -0
  131. package/dist/module/lib/Components/SegmentedControl/SegmentedControl.figma.js.map +1 -0
  132. package/dist/module/lib/Components/SegmentedControl/SegmentedControl.js +7 -1
  133. package/dist/module/lib/Components/SegmentedControl/SegmentedControl.js.map +1 -1
  134. package/dist/module/lib/Components/SegmentedControl/SegmentedControl.mdx +28 -1
  135. package/dist/module/lib/Components/SegmentedControl/SegmentedControl.stories.js +24 -1
  136. package/dist/module/lib/Components/SegmentedControl/SegmentedControl.stories.js.map +1 -1
  137. package/dist/module/lib/Components/SegmentedControl/SegmentedControl.test.js +28 -1
  138. package/dist/module/lib/Components/SegmentedControl/SegmentedControl.test.js.map +1 -1
  139. package/dist/module/lib/Components/Skeleton/Skeleton.figma.js +18 -0
  140. package/dist/module/lib/Components/Skeleton/Skeleton.figma.js.map +1 -0
  141. package/dist/module/lib/Components/Skeleton/Skeleton.mdx +0 -71
  142. package/dist/module/lib/Components/Spinner/Spinner.figma.js +13 -0
  143. package/dist/module/lib/Components/Spinner/Spinner.figma.js.map +1 -0
  144. package/dist/module/lib/Components/Spinner/Spinner.mdx +0 -100
  145. package/dist/module/lib/Components/Spot/Spot.figma.js +37 -0
  146. package/dist/module/lib/Components/Spot/Spot.figma.js.map +1 -0
  147. package/dist/module/lib/Components/Spot/Spot.mdx +0 -94
  148. package/dist/module/lib/Components/Stepper/Stepper.figma.js +13 -0
  149. package/dist/module/lib/Components/Stepper/Stepper.figma.js.map +1 -0
  150. package/dist/module/lib/Components/Stepper/Stepper.mdx +0 -67
  151. package/dist/module/lib/Components/Subheader/Subheader.figma.js +67 -0
  152. package/dist/module/lib/Components/Subheader/Subheader.figma.js.map +1 -0
  153. package/dist/module/lib/Components/Subheader/Subheader.mdx +0 -116
  154. package/dist/module/lib/Components/Switch/Switch.figma.js +58 -0
  155. package/dist/module/lib/Components/Switch/Switch.figma.js.map +1 -0
  156. package/dist/module/lib/Components/Switch/Switch.mdx +0 -39
  157. package/dist/module/lib/Components/TabBar/TabBar.figma.js +98 -0
  158. package/dist/module/lib/Components/TabBar/TabBar.figma.js.map +1 -0
  159. package/dist/module/lib/Components/TabBar/TabBar.js +7 -4
  160. package/dist/module/lib/Components/TabBar/TabBar.js.map +1 -1
  161. package/dist/module/lib/Components/TabBar/TabBar.mdx +29 -5
  162. package/dist/module/lib/Components/TabBar/TabBar.stories.js +35 -1
  163. package/dist/module/lib/Components/TabBar/TabBar.stories.js.map +1 -1
  164. package/dist/module/lib/Components/TabBar/TabBar.test.js +28 -1
  165. package/dist/module/lib/Components/TabBar/TabBar.test.js.map +1 -1
  166. package/dist/module/lib/Components/TabBar/index.js +2 -1
  167. package/dist/module/lib/Components/TabBar/index.js.map +1 -1
  168. package/dist/module/lib/Components/Tag/Tag.figma.js +41 -0
  169. package/dist/module/lib/Components/Tag/Tag.figma.js.map +1 -0
  170. package/dist/module/lib/Components/Tag/Tag.mdx +0 -2
  171. package/dist/module/lib/Components/TextInput/TextInput.figma.js +37 -0
  172. package/dist/module/lib/Components/TextInput/TextInput.figma.js.map +1 -0
  173. package/dist/module/lib/Components/TextInput/TextInput.mdx +0 -178
  174. package/dist/module/lib/Components/Tile/Tile.figma.js +111 -0
  175. package/dist/module/lib/Components/Tile/Tile.figma.js.map +1 -0
  176. package/dist/module/lib/Components/Tile/Tile.mdx +0 -53
  177. package/dist/module/lib/Components/TileButton/TileButton.figma.js +23 -0
  178. package/dist/module/lib/Components/TileButton/TileButton.figma.js.map +1 -0
  179. package/dist/module/lib/Components/TileButton/TileButton.mdx +0 -40
  180. package/dist/module/lib/Components/Tooltip/Tooltip.figma.js +26 -0
  181. package/dist/module/lib/Components/Tooltip/Tooltip.figma.js.map +1 -0
  182. package/dist/module/lib/Components/Tooltip/Tooltip.mdx +0 -183
  183. package/dist/module/lib/Components/Trend/Trend.figma.js +29 -0
  184. package/dist/module/lib/Components/Trend/Trend.figma.js.map +1 -0
  185. package/dist/module/lib/Components/Trend/Trend.mdx +0 -2
  186. package/dist/module/lib/Components/Utility/Text/Text.mdx +0 -1
  187. package/dist/module/lib/Symbols/Icons/ChevronAscending.js +1 -1
  188. package/dist/module/lib/Symbols/Icons/ChevronDescending.js +1 -1
  189. package/dist/module/lib/Symbols/Icons/Contact.js +50 -0
  190. package/dist/module/lib/Symbols/Icons/Contact.js.map +1 -0
  191. package/dist/module/lib/Symbols/index.js +1 -0
  192. package/dist/module/lib/Symbols/index.js.map +1 -1
  193. package/dist/typescript/src/lib/Animations/Pulse/Pulse.d.ts.map +1 -1
  194. package/dist/typescript/src/lib/Animations/Spin/Spin.d.ts.map +1 -1
  195. package/dist/typescript/src/lib/Components/AmountInput/AmountInput.d.ts +1 -1
  196. package/dist/typescript/src/lib/Components/AmountInput/AmountInput.d.ts.map +1 -1
  197. package/dist/typescript/src/lib/Components/AmountInput/types.d.ts +8 -0
  198. package/dist/typescript/src/lib/Components/AmountInput/types.d.ts.map +1 -1
  199. package/dist/typescript/src/lib/Components/AmountInput/useAmountInputFormatting/useAmountInputFormatting.d.ts +1 -0
  200. package/dist/typescript/src/lib/Components/AmountInput/useAmountInputFormatting/useAmountInputFormatting.d.ts.map +1 -1
  201. package/dist/typescript/src/lib/Components/Avatar/Avatar.d.ts +1 -4
  202. package/dist/typescript/src/lib/Components/Avatar/Avatar.d.ts.map +1 -1
  203. package/dist/typescript/src/lib/Components/Avatar/types.d.ts +0 -6
  204. package/dist/typescript/src/lib/Components/Avatar/types.d.ts.map +1 -1
  205. package/dist/typescript/src/lib/Components/DotIndicator/getDotIndicatorProps.d.ts +24 -0
  206. package/dist/typescript/src/lib/Components/DotIndicator/getDotIndicatorProps.d.ts.map +1 -0
  207. package/dist/typescript/src/lib/Components/DotIndicator/index.d.ts +1 -0
  208. package/dist/typescript/src/lib/Components/DotIndicator/index.d.ts.map +1 -1
  209. package/dist/typescript/src/lib/Components/OptionList/OptionList.d.ts +18 -4
  210. package/dist/typescript/src/lib/Components/OptionList/OptionList.d.ts.map +1 -1
  211. package/dist/typescript/src/lib/Components/OptionList/types.d.ts +16 -15
  212. package/dist/typescript/src/lib/Components/OptionList/types.d.ts.map +1 -1
  213. package/dist/typescript/src/lib/Components/OptionList/useOptionList/useOptionListItems.d.ts +9 -9
  214. package/dist/typescript/src/lib/Components/OptionList/useOptionList/useOptionListItems.d.ts.map +1 -1
  215. package/dist/typescript/src/lib/Components/SegmentedControl/SegmentedControl.d.ts +8 -3
  216. package/dist/typescript/src/lib/Components/SegmentedControl/SegmentedControl.d.ts.map +1 -1
  217. package/dist/typescript/src/lib/Components/SegmentedControl/types.d.ts +6 -5
  218. package/dist/typescript/src/lib/Components/SegmentedControl/types.d.ts.map +1 -1
  219. package/dist/typescript/src/lib/Components/TabBar/TabBar.d.ts +7 -2
  220. package/dist/typescript/src/lib/Components/TabBar/TabBar.d.ts.map +1 -1
  221. package/dist/typescript/src/lib/Components/TabBar/index.d.ts +2 -2
  222. package/dist/typescript/src/lib/Components/TabBar/index.d.ts.map +1 -1
  223. package/dist/typescript/src/lib/Components/TabBar/types.d.ts +17 -16
  224. package/dist/typescript/src/lib/Components/TabBar/types.d.ts.map +1 -1
  225. package/dist/typescript/src/lib/Symbols/Icons/Contact.d.ts +35 -0
  226. package/dist/typescript/src/lib/Symbols/Icons/Contact.d.ts.map +1 -0
  227. package/dist/typescript/src/lib/Symbols/index.d.ts +1 -0
  228. package/dist/typescript/src/lib/Symbols/index.d.ts.map +1 -1
  229. package/package.json +3 -3
  230. package/src/i18n/locales/de.json +1 -3
  231. package/src/i18n/locales/en.json +1 -3
  232. package/src/i18n/locales/es.json +1 -3
  233. package/src/i18n/locales/fr.json +1 -3
  234. package/src/i18n/locales/ja.json +1 -3
  235. package/src/i18n/locales/ko.json +1 -3
  236. package/src/i18n/locales/pt.json +1 -3
  237. package/src/i18n/locales/ru.json +1 -3
  238. package/src/i18n/locales/th.json +1 -3
  239. package/src/i18n/locales/tr.json +1 -3
  240. package/src/i18n/locales/zh.json +1 -3
  241. package/src/lib/Animations/Pulse/Pulse.mdx +0 -1
  242. package/src/lib/Animations/Pulse/Pulse.tsx +8 -1
  243. package/src/lib/Animations/Spin/Spin.mdx +0 -1
  244. package/src/lib/Animations/Spin/Spin.tsx +8 -1
  245. package/src/lib/Components/AddressInput/AddressInput.figma.tsx +39 -0
  246. package/src/lib/Components/AddressInput/AddressInput.mdx +0 -183
  247. package/src/lib/Components/AmountDisplay/AmountDisplay.figma.tsx +37 -0
  248. package/src/lib/Components/AmountDisplay/AmountDisplay.mdx +0 -90
  249. package/src/lib/Components/AmountInput/AmountInput.figma.tsx +78 -0
  250. package/src/lib/Components/AmountInput/AmountInput.mdx +0 -190
  251. package/src/lib/Components/AmountInput/AmountInput.stories.tsx +14 -0
  252. package/src/lib/Components/AmountInput/AmountInput.tsx +2 -0
  253. package/src/lib/Components/AmountInput/types.ts +8 -0
  254. package/src/lib/Components/AmountInput/useAmountInputFormatting/useAmountInputFormatting.test.ts +20 -0
  255. package/src/lib/Components/AmountInput/useAmountInputFormatting/useAmountInputFormatting.ts +2 -0
  256. package/src/lib/Components/Avatar/Avatar.figma.tsx +24 -14
  257. package/src/lib/Components/Avatar/Avatar.mdx +53 -69
  258. package/src/lib/Components/Avatar/Avatar.stories.tsx +16 -50
  259. package/src/lib/Components/Avatar/Avatar.test.tsx +12 -32
  260. package/src/lib/Components/Avatar/Avatar.tsx +4 -34
  261. package/src/lib/Components/Avatar/types.ts +0 -6
  262. package/src/lib/Components/Banner/Banner.figma.tsx +115 -0
  263. package/src/lib/Components/Banner/Banner.mdx +0 -86
  264. package/src/lib/Components/BottomSheet/BottomSheet.figma.tsx +52 -0
  265. package/src/lib/Components/BottomSheet/BottomSheet.mdx +0 -119
  266. package/src/lib/Components/Button/Button.figma.tsx +57 -0
  267. package/src/lib/Components/Button/Button.mdx +25 -224
  268. package/src/lib/Components/Button/Button.stories.tsx +3 -35
  269. package/src/lib/Components/Card/Card.figma.tsx +149 -0
  270. package/src/lib/Components/Card/Card.mdx +0 -160
  271. package/src/lib/Components/CardButton/CardButton.figma.tsx +49 -0
  272. package/src/lib/Components/CardButton/CardButton.mdx +0 -48
  273. package/src/lib/Components/Checkbox/Checkbox.figma.tsx +54 -0
  274. package/src/lib/Components/Checkbox/Checkbox.mdx +0 -73
  275. package/src/lib/Components/ContentBanner/ContentBanner.figma.tsx +108 -0
  276. package/src/lib/Components/ContentBanner/ContentBanner.mdx +0 -2
  277. package/src/lib/Components/CryptoIcon/CryptoIcon.figma.tsx +20 -0
  278. package/src/lib/Components/DescriptionItem/DescriptionItem.figma.tsx +36 -0
  279. package/src/lib/Components/Divider/Divider.figma.tsx +11 -0
  280. package/src/lib/Components/Divider/Divider.mdx +0 -2
  281. package/src/lib/Components/DotCount/DotCount.figma.tsx +32 -0
  282. package/src/lib/Components/DotIndicator/DotIndicator.figma.tsx +32 -0
  283. package/src/lib/Components/DotIndicator/DotIndicator.stories.tsx +4 -1
  284. package/src/lib/Components/DotIndicator/getDotIndicatorProps.test.ts +15 -0
  285. package/src/lib/Components/DotIndicator/getDotIndicatorProps.ts +10 -0
  286. package/src/lib/Components/DotIndicator/index.ts +1 -0
  287. package/src/lib/Components/Icon/Icon.figma.tsx +3085 -0
  288. package/src/lib/Components/Icon/Icon.mdx +0 -62
  289. package/src/lib/Components/IconButton/IconButton.figma.tsx +53 -0
  290. package/src/lib/Components/IconButton/IconButton.mdx +0 -68
  291. package/src/lib/Components/InteractiveIcon/InteractiveIcon.figma.tsx +52 -0
  292. package/src/lib/Components/InteractiveIcon/InteractiveIcon.mdx +0 -107
  293. package/src/lib/Components/Link/Link.figma.tsx +53 -0
  294. package/src/lib/Components/Link/Link.mdx +0 -102
  295. package/src/lib/Components/ListItem/ListItem.figma.tsx +431 -0
  296. package/src/lib/Components/ListItem/ListItem.mdx +0 -129
  297. package/src/lib/Components/MediaBanner/MediaBanner.figma.tsx +32 -0
  298. package/src/lib/Components/MediaBanner/MediaBanner.mdx +0 -3
  299. package/src/lib/Components/MediaButton/MediaButton.figma.tsx +60 -0
  300. package/src/lib/Components/MediaCard/MediaCard.figma.tsx +27 -0
  301. package/src/lib/Components/MediaCard/MediaCard.mdx +0 -2
  302. package/src/lib/Components/MediaImage/MediaImage.mdx +0 -1
  303. package/src/lib/Components/MediaTag/MediaTag.figma.tsx +116 -0
  304. package/src/lib/Components/MediaTag/MediaTag.mdx +0 -2
  305. package/src/lib/Components/NavBar/NavBar.figma.tsx +84 -0
  306. package/src/lib/Components/NavBar/NavBar.mdx +0 -2
  307. package/src/lib/Components/OptionList/OptionList.mdx +45 -90
  308. package/src/lib/Components/OptionList/OptionList.stories.tsx +63 -0
  309. package/src/lib/Components/OptionList/OptionList.test.tsx +40 -0
  310. package/src/lib/Components/OptionList/OptionList.tsx +57 -10
  311. package/src/lib/Components/OptionList/types.ts +34 -15
  312. package/src/lib/Components/OptionList/useOptionList/useOptionListItems.ts +28 -13
  313. package/src/lib/Components/PageIndicator/PageIndicator.figma.tsx +11 -0
  314. package/src/lib/Components/PageIndicator/PageIndicator.mdx +0 -2
  315. package/src/lib/Components/SearchInput/SearchInput.figma.tsx +34 -0
  316. package/src/lib/Components/SearchInput/SearchInput.mdx +0 -199
  317. package/src/lib/Components/SegmentedControl/SegmentedControl.figma.tsx +34 -0
  318. package/src/lib/Components/SegmentedControl/SegmentedControl.mdx +28 -1
  319. package/src/lib/Components/SegmentedControl/SegmentedControl.stories.tsx +34 -1
  320. package/src/lib/Components/SegmentedControl/SegmentedControl.test.tsx +32 -1
  321. package/src/lib/Components/SegmentedControl/SegmentedControl.tsx +22 -5
  322. package/src/lib/Components/SegmentedControl/types.ts +11 -5
  323. package/src/lib/Components/Skeleton/Skeleton.figma.tsx +17 -0
  324. package/src/lib/Components/Skeleton/Skeleton.mdx +0 -71
  325. package/src/lib/Components/Spinner/Spinner.figma.tsx +12 -0
  326. package/src/lib/Components/Spinner/Spinner.mdx +0 -100
  327. package/src/lib/Components/Spot/Spot.figma.tsx +50 -0
  328. package/src/lib/Components/Spot/Spot.mdx +0 -94
  329. package/src/lib/Components/Stepper/Stepper.figma.tsx +11 -0
  330. package/src/lib/Components/Stepper/Stepper.mdx +0 -67
  331. package/src/lib/Components/Subheader/Subheader.figma.tsx +72 -0
  332. package/src/lib/Components/Subheader/Subheader.mdx +0 -116
  333. package/src/lib/Components/Switch/Switch.figma.tsx +66 -0
  334. package/src/lib/Components/Switch/Switch.mdx +0 -39
  335. package/src/lib/Components/TabBar/TabBar.figma.tsx +70 -0
  336. package/src/lib/Components/TabBar/TabBar.mdx +29 -5
  337. package/src/lib/Components/TabBar/TabBar.stories.tsx +34 -1
  338. package/src/lib/Components/TabBar/TabBar.test.tsx +23 -1
  339. package/src/lib/Components/TabBar/TabBar.tsx +17 -9
  340. package/src/lib/Components/TabBar/index.ts +2 -2
  341. package/src/lib/Components/TabBar/types.ts +19 -17
  342. package/src/lib/Components/Tag/Tag.figma.tsx +52 -0
  343. package/src/lib/Components/Tag/Tag.mdx +0 -2
  344. package/src/lib/Components/TextInput/TextInput.figma.tsx +40 -0
  345. package/src/lib/Components/TextInput/TextInput.mdx +0 -178
  346. package/src/lib/Components/Tile/Tile.figma.tsx +113 -0
  347. package/src/lib/Components/Tile/Tile.mdx +0 -53
  348. package/src/lib/Components/TileButton/TileButton.figma.tsx +35 -0
  349. package/src/lib/Components/TileButton/TileButton.mdx +0 -40
  350. package/src/lib/Components/Tooltip/Tooltip.figma.tsx +30 -0
  351. package/src/lib/Components/Tooltip/Tooltip.mdx +0 -183
  352. package/src/lib/Components/Trend/Trend.figma.tsx +28 -0
  353. package/src/lib/Components/Trend/Trend.mdx +0 -2
  354. package/src/lib/Components/Utility/Text/Text.mdx +0 -1
  355. package/src/lib/Symbols/Icons/ChevronAscending.tsx +1 -1
  356. package/src/lib/Symbols/Icons/ChevronDescending.tsx +1 -1
  357. package/src/lib/Symbols/Icons/Contact.tsx +45 -0
  358. package/src/lib/Symbols/index.ts +1 -0
  359. package/dist/typescript/src/lib/Components/Avatar/Avatar.figma.d.ts +0 -2
  360. package/dist/typescript/src/lib/Components/Avatar/Avatar.figma.d.ts.map +0 -1
  361. package/dist/typescript/src/lib/Components/OptionList/OptionList.figma.d.ts +0 -2
  362. package/dist/typescript/src/lib/Components/OptionList/OptionList.figma.d.ts.map +0 -1
@@ -2,8 +2,6 @@ import { Meta, Canvas, Controls } from '@storybook/addon-docs/blocks';
2
2
  import * as AddressInputStories from './AddressInput.stories';
3
3
  import { AddressInput } from './AddressInput';
4
4
  import { CustomTabs, Tab } from '../../../../.storybook/components';
5
- import { DoVsDontRow, DoBlockItem, DontBlockItem } from '../../../../.storybook/components/DoVsDont';
6
- import CommonRulesDoAndDont from '../../../../.storybook/components/DoVsDont/CommonRulesDoAndDont.mdx';
7
5
 
8
6
  <Meta title='Core/AddressInput' of={AddressInputStories} />
9
7
 
@@ -453,187 +451,6 @@ function AddressForm() {
453
451
  }
454
452
  ```
455
453
 
456
- ## Do's and Don'ts
457
-
458
- <div style={{ display: 'flex', flexDirection: 'column', gap: 24 }}>
459
- <DoVsDontRow>
460
- <DoBlockItem
461
- title='Use controlled input pattern'
462
- description='Use value and onChangeText props for controlled input state management'
463
- >
464
-
465
- {/* prettier-ignore */}
466
- ```tsx
467
- import { AddressInput } from '@ledgerhq/lumen-ui-rnative';
468
- import { useState } from 'react';
469
-
470
- const [address, setAddress] = useState('');
471
-
472
- <AddressInput
473
- placeholder='Enter address or ENS'
474
- value={address}
475
- onChangeText={setAddress}
476
- onQrCodeClick={() => openQrScanner()}
477
- />
478
- ```
479
-
480
- </DoBlockItem>
481
- <DontBlockItem
482
- title="Don't mix controlled and uncontrolled patterns"
483
- description='Avoid using both value and defaultValue props together'
484
- >
485
-
486
- {/* prettier-ignore */}
487
- ```tsx
488
- import { AddressInput } from '@ledgerhq/lumen-ui-rnative';
489
- import { useState } from 'react';
490
-
491
- const [address, setAddress] = useState('');
492
-
493
- <AddressInput
494
- placeholder='Enter address or ENS'
495
- value={address}
496
- defaultValue='initial'
497
- onChangeText={setAddress}
498
- />
499
- ```
500
-
501
- </DontBlockItem>
502
-
503
- </DoVsDontRow>
504
-
505
- <DoVsDontRow>
506
- <DoBlockItem
507
- title='Use onClear for custom logic only'
508
- description='Let the component handle clearing automatically, add onClear only for additional logic'
509
- >
510
-
511
- {/* prettier-ignore */}
512
- ```tsx
513
- import { AddressInput } from '@ledgerhq/lumen-ui-rnative';
514
- import { useState } from 'react';
515
-
516
- const [address, setAddress] = useState('');
517
- const [error, setError] = useState('');
518
-
519
- <AddressInput
520
- placeholder='Enter address or ENS'
521
- value={address}
522
- onChangeText={setAddress}
523
- onClear={() => {
524
- // Default clearing happens automatically
525
- setError(''); // Clear error state
526
- }}
527
- />
528
- ```
529
-
530
- </DoBlockItem>
531
- <DontBlockItem
532
- title="Don't manually clear value in onClear"
533
- description='Value clearing happens automatically - no need to call setAddress'
534
- >
535
-
536
- {/* prettier-ignore */}
537
- ```tsx
538
- import { AddressInput } from '@ledgerhq/lumen-ui-rnative';
539
- import { useState } from 'react';
540
-
541
- const [address, setAddress] = useState('');
542
- const [error, setError] = useState('');
543
-
544
- <AddressInput
545
- placeholder='Enter address or ENS'
546
- value={address}
547
- onChangeText={setAddress}
548
- onClear={() => setAddress('')}
549
- />
550
- ```
551
-
552
- </DontBlockItem>
553
-
554
- </DoVsDontRow>
555
-
556
- <DoVsDontRow>
557
- <DoBlockItem
558
- title='Use short, descriptive prefixes'
559
- description='Keep prefix text concise - typically 1-3 words'
560
- >
561
-
562
- {/* prettier-ignore */}
563
- ```tsx
564
- import { AddressInput } from '@ledgerhq/lumen-ui-rnative';
565
-
566
- <AddressInput
567
- prefix='To:'
568
- placeholder='Enter recipient'
569
- value={address}
570
- onChangeText={setAddress}
571
- />
572
- ```
573
-
574
- </DoBlockItem>
575
- <DontBlockItem
576
- title="Don't use overly long prefixes"
577
- description='Long prefixes take up too much space and reduce usability'
578
- >
579
-
580
- {/* prettier-ignore */}
581
- ```tsx
582
- import { AddressInput } from '@ledgerhq/lumen-ui-rnative';
583
-
584
- <AddressInput
585
- prefix="Please enter the recipient's wallet address:"
586
- placeholder='Enter recipient'
587
- value={address}
588
- onChangeText={setAddress}
589
- />
590
- ```
591
-
592
- </DontBlockItem>
593
-
594
- </DoVsDontRow>
595
-
596
- <DoVsDontRow>
597
- <DoBlockItem
598
- title='Always provide onQrCodeClick for QR scanning'
599
- description='Enable QR code scanning to improve user experience'
600
- >
601
-
602
- {/* prettier-ignore */}
603
- ```tsx
604
- import { AddressInput } from '@ledgerhq/lumen-ui-rnative';
605
-
606
- <AddressInput
607
- placeholder='Enter address or ENS'
608
- value={address}
609
- onChangeText={setAddress}
610
- onQrCodeClick={() => openQrScanner()}
611
- />
612
- ```
613
-
614
- </DoBlockItem>
615
- <DontBlockItem
616
- title="Don't omit QR scanning capability"
617
- description='Users should not have to manually type long addresses'
618
- >
619
-
620
- {/* prettier-ignore */}
621
- ```tsx
622
- import { AddressInput } from '@ledgerhq/lumen-ui-rnative';
623
-
624
- <AddressInput
625
- placeholder='Enter address or ENS'
626
- value={address}
627
- onChangeText={setAddress}
628
- />
629
- ```
630
-
631
- </DontBlockItem>
632
-
633
- </DoVsDontRow>
634
-
635
- <CommonRulesDoAndDont />
636
- </div>
637
454
 
638
455
  ## Platform Considerations
639
456
 
@@ -0,0 +1,37 @@
1
+ import figma from '@figma/code-connect';
2
+ import { AmountDisplay } from './AmountDisplay';
3
+
4
+ figma.connect(
5
+ AmountDisplay,
6
+ 'https://www.figma.com/design/JxaLVMTWirCpU0rsbZ30k7?node-id=11065-2691',
7
+ {
8
+ imports: [
9
+ "import { AmountDisplay } from '@ledgerhq/lumen-ui-rnative'",
10
+ "import type { FormattedValue } from '@ledgerhq/lumen-ui-rnative'",
11
+ ],
12
+ props: {
13
+ hidden: figma.boolean('hide-amount', {
14
+ true: true,
15
+ false: false,
16
+ }),
17
+ size: figma.enum('size', {
18
+ md: 'md',
19
+ sm: 'sm',
20
+ }),
21
+ },
22
+ example: (props) => (
23
+ <AmountDisplay
24
+ value={2258.93}
25
+ hidden={props.hidden}
26
+ size={props.size}
27
+ formatter={() => ({
28
+ integerPart: '2568',
29
+ decimalPart: '93',
30
+ currencyText: '$',
31
+ decimalSeparator: '.',
32
+ currencyPosition: 'start',
33
+ })}
34
+ />
35
+ ),
36
+ },
37
+ );
@@ -4,11 +4,7 @@ import { AmountDisplay } from './AmountDisplay';
4
4
  import {
5
5
  CustomTabs,
6
6
  Tab,
7
- DoVsDontRow,
8
- DoBlockItem,
9
- DontBlockItem,
10
7
  } from '../../../../.storybook/components';
11
- import CommonRulesDoAndDont from '../../../../.storybook/components/DoVsDont/CommonRulesDoAndDont.mdx';
12
8
 
13
9
  <Meta title='Core/AmountDisplay' of={AmountDisplayStories} />
14
10
 
@@ -199,92 +195,6 @@ function PrivateAmount() {
199
195
  }
200
196
  ```
201
197
 
202
- ## Do's and Don'ts
203
-
204
- <div className='flex flex-col gap-24'>
205
- <DoVsDontRow>
206
- <DoBlockItem
207
- title='Use formatter for all display logic'
208
- description='Keep all formatting logic in the formatter function'
209
- >
210
-
211
- {/* prettier-ignore */}
212
- ```tsx
213
- const formatter = (value: number): FormattedValue => {
214
- const [integerPart, decimalPart] = value.toFixed(2).split('.');
215
- return {
216
- integerPart,
217
- decimalPart,
218
- currencyText: '$',
219
- decimalSeparator: '.',
220
- currencyPosition: 'start',
221
- };
222
- };
223
-
224
- <AmountDisplay value={1234.56} formatter={formatter} />
225
- ```
226
-
227
- </DoBlockItem>
228
- <DontBlockItem
229
- title="Don't format the value outside the component"
230
- description='Pass the raw number value, not a pre-formatted string'
231
- >
232
-
233
- {/* prettier-ignore */}
234
- ```tsx
235
- const formattedValue = `$${value.toFixed(2)}`;
236
-
237
- <AmountDisplay
238
- value={formattedValue}
239
- formatter={(v) => ({ integerPart: v, currencyText: '' })}
240
- />
241
- ```
242
-
243
- </DontBlockItem>
244
- </DoVsDontRow>
245
-
246
- <DoVsDontRow>
247
- <DoBlockItem
248
- title='Use the hidden prop for privacy'
249
- description='Use the built-in hidden prop to toggle amount visibility'
250
- >
251
-
252
- {/* prettier-ignore */}
253
- ```tsx
254
- const [hidden, setHidden] = useState(false);
255
-
256
- <AmountDisplay
257
- value={1234.56}
258
- formatter={usdFormatter}
259
- hidden={hidden}
260
- />
261
- ```
262
-
263
- </DoBlockItem>
264
- <DontBlockItem
265
- title="Don't create separate formatters for hiding"
266
- description='Avoid creating custom formatters just to show bullet points'
267
- >
268
-
269
- {/* prettier-ignore */}
270
- ```tsx
271
- const hiddenFormatter = () => ({
272
- integerPart: '••••',
273
- currencyText: '$',
274
- currencyPosition: 'start',
275
- });
276
-
277
- <AmountDisplay
278
- value={1234.56}
279
- formatter={hidden ? hiddenFormatter : usdFormatter}
280
- />
281
- ```
282
-
283
- </DontBlockItem>
284
- </DoVsDontRow>
285
-
286
- <CommonRulesDoAndDont />
287
- </div>
288
198
 
289
199
  </Tab>
290
200
  </CustomTabs>
@@ -0,0 +1,78 @@
1
+ import figma from '@figma/code-connect';
2
+ import { AmountInput } from './AmountInput';
3
+
4
+ figma.connect(
5
+ AmountInput,
6
+ 'https://www.figma.com/design/JxaLVMTWirCpU0rsbZ30k7?node-id=17523-37413',
7
+ {
8
+ imports: ["import { AmountInput } from '@ledgerhq/lumen-ui-rnative'"],
9
+ props: {
10
+ size: figma.enum('size', {
11
+ md: 'md',
12
+ sm: 'sm',
13
+ }),
14
+ value: figma.string('amount'),
15
+ currencyText: figma.enum('currency', {
16
+ $: '$',
17
+ '€': '€',
18
+ '£': '£',
19
+ }),
20
+ currencyPosition: figma.enum('currency', {
21
+ $: 'left',
22
+ '£': 'left',
23
+ '€': 'right',
24
+ }),
25
+ disabled: figma.enum('state', {
26
+ disabled: true,
27
+ }),
28
+ isInvalid: figma.enum('state', {
29
+ error: true,
30
+ }),
31
+ },
32
+ example: (props) => (
33
+ <AmountInput
34
+ size={props.size}
35
+ disabled={props.disabled}
36
+ isInvalid={props.isInvalid}
37
+ value={props.value}
38
+ onChangeText={() => {}}
39
+ currencyText={props.currencyText}
40
+ currencyPosition={props.currencyPosition}
41
+ />
42
+ ),
43
+ },
44
+ );
45
+
46
+ figma.connect(
47
+ AmountInput,
48
+ 'https://www.figma.com/design/JxaLVMTWirCpU0rsbZ30k7?node-id=17523-37413',
49
+ {
50
+ imports: ["import { AmountInput } from '@ledgerhq/lumen-ui-rnative'"],
51
+ variant: { currency: 'crypto' },
52
+ props: {
53
+ size: figma.enum('size', {
54
+ md: 'md',
55
+ sm: 'sm',
56
+ }),
57
+ value: figma.string('amount'),
58
+ currencyText: figma.string('crypto'),
59
+ disabled: figma.enum('state', {
60
+ disabled: true,
61
+ }),
62
+ isInvalid: figma.enum('state', {
63
+ error: true,
64
+ }),
65
+ },
66
+ example: (props) => (
67
+ <AmountInput
68
+ size={props.size}
69
+ disabled={props.disabled}
70
+ isInvalid={props.isInvalid}
71
+ value={props.value}
72
+ onChangeText={() => {}}
73
+ currencyText={props.currencyText}
74
+ currencyPosition='right'
75
+ />
76
+ ),
77
+ },
78
+ );
@@ -2,8 +2,6 @@ import { Meta, Canvas, Controls } from '@storybook/addon-docs/blocks';
2
2
  import * as AmountInputStories from './AmountInput.stories';
3
3
  import { AmountInput } from './AmountInput';
4
4
  import { CustomTabs, Tab } from '../../../../.storybook/components';
5
- import { DoVsDontRow, DoBlockItem, DontBlockItem } from '../../../../.storybook/components/DoVsDont';
6
- import CommonRulesDoAndDont from '../../../../.storybook/components/DoVsDont/CommonRulesDoAndDont.mdx';
7
5
 
8
6
  <Meta title='Core/AmountInput' of={AmountInputStories} />
9
7
 
@@ -277,194 +275,6 @@ Use the `editable` prop to disable the input:
277
275
  <AmountInput value='1000' currencyText='USD' editable={false} />
278
276
  ```
279
277
 
280
- ## Do's and Don'ts
281
-
282
- <div style={{ display: 'flex', flexDirection: 'column', gap: 24 }}>
283
- <DoVsDontRow>
284
- <DoBlockItem
285
- title='Use integer-only for whole number scenarios'
286
- description='Disable decimals for quantities, counts, or other whole number inputs'
287
- >
288
-
289
- {/* prettier-ignore */}
290
- ```tsx
291
- import { AmountInput } from '@ledgerhq/lumen-ui-rnative';
292
- import { useState } from 'react';
293
-
294
- const [quantity, setQuantity] = useState('');
295
-
296
- // Use integer-only for whole number scenarios (quantity, age, etc.)
297
- <AmountInput
298
- value={quantity}
299
- onChangeText={setQuantity}
300
- currencyText='items'
301
- allowDecimals={false}
302
- maxIntegerLength={4}
303
- />
304
- ```
305
-
306
- </DoBlockItem>
307
- <DontBlockItem
308
- title="Don't allow decimals for count-based inputs"
309
- description='Items, quantities, and counts should always be whole numbers'
310
- >
311
-
312
- {/* prettier-ignore */}
313
- ```tsx
314
- import { AmountInput } from '@ledgerhq/lumen-ui-rnative';
315
- import { useState } from 'react';
316
-
317
- const [quantity, setQuantity] = useState('');
318
-
319
- <AmountInput
320
- value={quantity}
321
- onChangeText={setQuantity}
322
- currencyText='items'
323
- allowDecimals={true}
324
- maxIntegerLength={4}
325
- />
326
- ```
327
-
328
- </DontBlockItem>
329
-
330
- </DoVsDontRow>
331
-
332
- <DoVsDontRow>
333
- <DoBlockItem
334
- title='Always use controlled input pattern'
335
- description='AmountInput requires both value and onChangeText props'
336
- >
337
-
338
- {/* prettier-ignore */}
339
- ```tsx
340
- import { AmountInput } from '@ledgerhq/lumen-ui-rnative';
341
- import { useState } from 'react';
342
-
343
- const [value, setValue] = useState('');
344
-
345
- <AmountInput
346
- value={value}
347
- onChangeText={setValue}
348
- currencyText='USD'
349
- />
350
- ```
351
-
352
- </DoBlockItem>
353
- <DontBlockItem
354
- title="Don't use uncontrolled pattern"
355
- description='AmountInput does not support defaultValue - always use controlled pattern'
356
- >
357
-
358
- {/* prettier-ignore */}
359
- ```tsx
360
- import { AmountInput } from '@ledgerhq/lumen-ui-rnative';
361
- import { useState } from 'react';
362
-
363
- const [value, setValue] = useState('');
364
-
365
- <AmountInput
366
- defaultValue='0.00'
367
- currencyText='USD'
368
- />
369
- ```
370
-
371
- </DontBlockItem>
372
-
373
- </DoVsDontRow>
374
-
375
- <DoVsDontRow>
376
- <DoBlockItem
377
- title='Use isInvalid for error states'
378
- description='Use the isInvalid prop to indicate validation errors'
379
- >
380
-
381
- {/* prettier-ignore */}
382
- ```tsx
383
- import { AmountInput } from '@ledgerhq/lumen-ui-rnative';
384
- import { useState } from 'react';
385
-
386
- const [value, setValue] = useState('');
387
- const [hasError, setHasError] = useState(false);
388
-
389
- <AmountInput
390
- value={value}
391
- onChangeText={setValue}
392
- currencyText='USD'
393
- isInvalid={hasError}
394
- />
395
- ```
396
-
397
- </DoBlockItem>
398
- <DontBlockItem
399
- title="Don't use custom error props"
400
- description='Use the isInvalid prop for error styling. AmountInput does not accept ad-hoc validation props.'
401
- >
402
-
403
- {/* prettier-ignore */}
404
- ```tsx
405
- import { AmountInput } from '@ledgerhq/lumen-ui-rnative';
406
- import { useState } from 'react';
407
-
408
- const [value, setValue] = useState('');
409
- const [hasError, setHasError] = useState(false);
410
-
411
- <AmountInput
412
- value={value}
413
- onChangeText={setValue}
414
- currencyText='USD'
415
- status={hasError ? 'error' : undefined}
416
- helperText={hasError ? 'Invalid amount' : undefined}
417
- />
418
- ```
419
-
420
- </DontBlockItem>
421
-
422
- </DoVsDontRow>
423
-
424
- <DoVsDontRow>
425
- <DoBlockItem
426
- title='Use appropriate length limits'
427
- description='Set maxIntegerLength and maxDecimalLength based on your use case'
428
- >
429
-
430
- {/* prettier-ignore */}
431
- ```tsx
432
- import { AmountInput } from '@ledgerhq/lumen-ui-rnative';
433
-
434
- <AmountInput
435
- value={amount}
436
- onChangeText={setAmount}
437
- currencyText='$'
438
- maxIntegerLength={9}
439
- maxDecimalLength={2}
440
- />
441
- ```
442
-
443
- </DoBlockItem>
444
- <DontBlockItem
445
- title="Don't use overly restrictive or excessive limits"
446
- description='Length limits should match real-world requirements'
447
- >
448
-
449
- {/* prettier-ignore */}
450
- ```tsx
451
- import { AmountInput } from '@ledgerhq/lumen-ui-rnative';
452
-
453
- <AmountInput
454
- value={amount}
455
- onChangeText={setAmount}
456
- currencyText='$'
457
- maxIntegerLength={1}
458
- maxDecimalLength={25}
459
- />
460
- ```
461
-
462
- </DontBlockItem>
463
-
464
- </DoVsDontRow>
465
-
466
- <CommonRulesDoAndDont />
467
- </div>
468
278
 
469
279
  ## Platform Considerations
470
280
 
@@ -201,6 +201,20 @@ export const WithoutThousandsSeparator: Story = {
201
201
  },
202
202
  };
203
203
 
204
+ export const DecimalSeparatorComma: Story = {
205
+ render: (args) => <AmountInputStory {...args} />,
206
+ args: {
207
+ value: '1234.5',
208
+ currencyText: '€',
209
+ currencyPosition: 'right',
210
+ allowDecimals: true,
211
+ thousandsSeparator: true,
212
+ decimalSeparator: ',',
213
+ isInvalid: false,
214
+ editable: true,
215
+ },
216
+ };
217
+
204
218
  export const ErrorState: Story = {
205
219
  render: (args) => <AmountInputStory {...args} />,
206
220
  args: {
@@ -42,6 +42,7 @@ export const AmountInput = ({
42
42
  maxDecimalLength = 9,
43
43
  allowDecimals = true,
44
44
  thousandsSeparator = true,
45
+ decimalSeparator = '.',
45
46
  value,
46
47
  onChangeText,
47
48
  isInvalid = false,
@@ -64,6 +65,7 @@ export const AmountInput = ({
64
65
  thousandsSeparator,
65
66
  maxIntegerLength,
66
67
  maxDecimalLength,
68
+ decimalSeparator,
67
69
  },
68
70
  });
69
71
 
@@ -69,6 +69,14 @@ export type AmountInputProps = Omit<
69
69
  * @default true
70
70
  */
71
71
  thousandsSeparator?: boolean;
72
+ /**
73
+ * Character used to display the decimal separator (e.g. `1 234,5` vs `1 234.5`).
74
+ * Typing always accepts both `,` and `.` regardless of this value, so it stays
75
+ * compatible with any locale keyboard. The value returned by `onChangeText`
76
+ * uses this separator.
77
+ * @default '.'
78
+ */
79
+ decimalSeparator?: '.' | ',';
72
80
  /**
73
81
  * Mark input as invalid (e.g. for error display)
74
82
  * @default false
@@ -7,6 +7,7 @@ const defaultFormatOptions = {
7
7
  thousandsSeparator: true,
8
8
  maxIntegerLength: 9,
9
9
  maxDecimalLength: 9,
10
+ decimalSeparator: '.' as const,
10
11
  };
11
12
 
12
13
  describe('useAmountInputFormatting', () => {
@@ -59,4 +60,23 @@ describe('useAmountInputFormatting', () => {
59
60
 
60
61
  expect(onChangeText).toHaveBeenCalledWith('1 000');
61
62
  });
63
+
64
+ it('displays and emits the configured decimal separator', () => {
65
+ const onChangeText = jest.fn();
66
+ const { result } = renderHook(() =>
67
+ useAmountInputFormatting({
68
+ value: '1234.5',
69
+ onChangeText,
70
+ formatOptions: { ...defaultFormatOptions, decimalSeparator: ',' },
71
+ }),
72
+ );
73
+
74
+ expect(result.current.formattedValue).toBe('1 234,5');
75
+
76
+ act(() => {
77
+ result.current.handleChangeText('12,5');
78
+ });
79
+
80
+ expect(onChangeText).toHaveBeenCalledWith('12,5');
81
+ });
62
82
  });