jfs-components 0.1.12 → 0.1.18

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 (592) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/lib/commonjs/components/ActionFooter/ActionFooter.js +7 -24
  3. package/lib/commonjs/components/ActionTile/ActionTile.js +10 -10
  4. package/lib/commonjs/components/AmountInput/AmountInput.js +3 -3
  5. package/lib/commonjs/components/AreaLineChart/AreaLineChart.js +2 -2
  6. package/lib/commonjs/components/Attached/Attached.js +1 -1
  7. package/lib/commonjs/components/Avatar/Avatar.js +10 -10
  8. package/lib/commonjs/components/AvatarGroup/AvatarGroup.js +50 -29
  9. package/lib/commonjs/components/Badge/Badge.js +12 -12
  10. package/lib/commonjs/components/BenefitCard/BenefitCard.js +95 -21
  11. package/lib/commonjs/components/BottomNav/BottomNav.js +2 -2
  12. package/lib/commonjs/components/BottomNavItem/BottomNavItem.js +3 -3
  13. package/lib/commonjs/components/Button/Button.js +31 -19
  14. package/lib/commonjs/components/Card/Card.js +20 -20
  15. package/lib/commonjs/components/CardAdvisory/CardAdvisory.js +6 -6
  16. package/lib/commonjs/components/CardCTA/CardCTA.js +21 -21
  17. package/lib/commonjs/components/CardFeedback/CardFeedback.js +18 -18
  18. package/lib/commonjs/components/CardFinancialCondition/CardFinancialCondition.js +7 -7
  19. package/lib/commonjs/components/CardInsight/CardInsight.js +1 -2
  20. package/lib/commonjs/components/Carousel/Carousel.js +18 -12
  21. package/lib/commonjs/components/CarouselCardAccounts/CarouselCardAccounts.js +75 -0
  22. package/lib/commonjs/components/Checkbox/Checkbox.js +6 -13
  23. package/lib/commonjs/components/ChipGroup/ChipGroup.js +1 -1
  24. package/lib/commonjs/components/ChipSelect/ChipSelect.js +11 -11
  25. package/lib/commonjs/components/CircularProgressBar/CircularProgressBar.js +5 -5
  26. package/lib/commonjs/components/CircularProgressBarDoted/CircularProgressBarDoted.js +8 -8
  27. package/lib/commonjs/components/CircularRating/CircularRating.js +3 -3
  28. package/lib/commonjs/components/CompareTable/CompareTable.js +16 -16
  29. package/lib/commonjs/components/DebitCard/DebitCard.js +18 -18
  30. package/lib/commonjs/components/Disclaimer/Disclaimer.js +5 -5
  31. package/lib/commonjs/components/DonutChart/DonutChart.js +11 -11
  32. package/lib/commonjs/components/Drawer/Drawer.js +60 -60
  33. package/lib/commonjs/components/Dropdown/Dropdown.js +22 -23
  34. package/lib/commonjs/components/DropdownInput/DropdownInput.js +10 -10
  35. package/lib/commonjs/components/EmptyState/EmptyState.js +14 -14
  36. package/lib/commonjs/components/FilterBar/FilterBar.js +2 -2
  37. package/lib/commonjs/components/Form/Form.js +3 -3
  38. package/lib/commonjs/components/FormField/FormField.js +6 -6
  39. package/lib/commonjs/components/FullscreenModal/FullscreenModal.js +24 -24
  40. package/lib/commonjs/components/Gauge/Gauge.js +8 -8
  41. package/lib/commonjs/components/HoldingsCard/HoldingsCard.js +10 -10
  42. package/lib/commonjs/components/Icon/Icon.js +6 -6
  43. package/lib/commonjs/components/IconCapsule/IconCapsule.js +7 -7
  44. package/lib/commonjs/components/InputSearch/InputSearch.js +9 -9
  45. package/lib/commonjs/components/InstitutionBadge/InstitutionBadge.js +3 -3
  46. package/lib/commonjs/components/ListGroup/ListGroup.js +8 -8
  47. package/lib/commonjs/components/ListItem/ListItem.js +10 -10
  48. package/lib/commonjs/components/LottieIntroBlock/LottieIntroBlock.js +13 -13
  49. package/lib/commonjs/components/LottiePlayer/LottiePlayer.js +2 -2
  50. package/lib/commonjs/components/LottiePlayer/LottiePlayer.web.js +2 -2
  51. package/lib/commonjs/components/MediaCard/MediaCard.js +21 -21
  52. package/lib/commonjs/components/MessageField/MessageField.js +8 -8
  53. package/lib/commonjs/components/MoneyValue/MoneyValue.js +7 -7
  54. package/lib/commonjs/components/NavArrow/NavArrow.js +8 -8
  55. package/lib/commonjs/components/NoteInput/NoteInput.js +12 -12
  56. package/lib/commonjs/components/Nudge/Nudge.js +20 -20
  57. package/lib/commonjs/components/OTP/OTP.js +15 -15
  58. package/lib/commonjs/components/PageHero/PageHero.js +16 -16
  59. package/lib/commonjs/components/PaymentFeedback/PaymentFeedback.js +23 -23
  60. package/lib/commonjs/components/Popup/Popup.js +1 -1
  61. package/lib/commonjs/components/ProductMerchandisingCard/ProductMerchandisingCard.js +64 -60
  62. package/lib/commonjs/components/ProgressBadge/ProgressBadge.js +5 -5
  63. package/lib/commonjs/components/Radio/Radio.js +8 -8
  64. package/lib/commonjs/components/RechargeCard/RechargeCard.js +31 -31
  65. package/lib/commonjs/components/SavingsGoalSummary/SavingsGoalSummary.js +59 -12
  66. package/lib/commonjs/components/ScrollArea/ScrollArea.js +126 -0
  67. package/lib/commonjs/components/Section/Section.js +24 -24
  68. package/lib/commonjs/components/StatusHero/StatusHero.js +14 -14
  69. package/lib/commonjs/components/Stepper/Step.js +16 -16
  70. package/lib/commonjs/components/Stepper/StepLabel.js +16 -16
  71. package/lib/commonjs/components/Stepper/Stepper.js +3 -3
  72. package/lib/commonjs/components/SuggestiveSearch/SuggestiveSearch.js +10 -10
  73. package/lib/commonjs/components/SupportText/SupportText.js +6 -6
  74. package/lib/commonjs/components/SupportText/SupportTextIcon.js +2 -2
  75. package/lib/commonjs/components/Text/Text.js +14 -2
  76. package/lib/commonjs/components/TextInput/TextInput.js +14 -14
  77. package/lib/commonjs/components/TextSegment/TextSegment.js +14 -2
  78. package/lib/commonjs/components/ThreadHero/ThreadHero.js +17 -17
  79. package/lib/commonjs/components/Title/Title.js +38 -16
  80. package/lib/commonjs/components/Toast/Toast.js +15 -15
  81. package/lib/commonjs/components/Toggle/Toggle.js +3 -11
  82. package/lib/commonjs/components/Tooltip/Tooltip.js +12 -12
  83. package/lib/commonjs/components/TransactionBubble/TransactionBubble.js +13 -13
  84. package/lib/commonjs/components/TransactionDetails/TransactionDetails.js +10 -10
  85. package/lib/commonjs/components/TransactionStatus/TransactionStatus.js +9 -9
  86. package/lib/commonjs/components/UpiHandle/UpiHandle.js +15 -15
  87. package/lib/commonjs/components/index.js +14 -0
  88. package/lib/commonjs/design-tokens/Coin Variables-variables-full.json +1 -1
  89. package/lib/commonjs/design-tokens/figma-modes.generated.js +50 -42
  90. package/lib/commonjs/icons/components/Icon4g.js +19 -0
  91. package/lib/commonjs/icons/components/Icon4gltedata.js +19 -0
  92. package/lib/commonjs/icons/components/Icon5g.js +19 -0
  93. package/lib/commonjs/icons/components/Icon5gdoubleplus.js +19 -0
  94. package/lib/commonjs/icons/components/Icon5gplus.js +19 -0
  95. package/lib/commonjs/icons/components/IconAdblocker.js +19 -0
  96. package/lib/commonjs/icons/components/IconAdblockplus.js +19 -0
  97. package/lib/commonjs/icons/components/IconAnalytics.js +19 -0
  98. package/lib/commonjs/icons/components/IconAnalyticsdata.js +19 -0
  99. package/lib/commonjs/icons/components/IconAnalyticspiechart.js +19 -0
  100. package/lib/commonjs/icons/components/IconAnalyticspiecharttree.js +19 -0
  101. package/lib/commonjs/icons/components/IconAnalyticspiecharttwo.js +19 -0
  102. package/lib/commonjs/icons/components/IconCompoundinterest.js +19 -0
  103. package/lib/commonjs/icons/components/IconConsumptionaccounted.js +19 -0
  104. package/lib/commonjs/icons/components/IconConsumptionaverage.js +19 -0
  105. package/lib/commonjs/icons/components/IconConsumptionhigh.js +19 -0
  106. package/lib/commonjs/icons/components/IconConsumptionlow.js +19 -0
  107. package/lib/commonjs/icons/components/IconConsumptionunaccounted.js +19 -0
  108. package/lib/commonjs/icons/components/IconCsvdoc.js +19 -0
  109. package/lib/commonjs/icons/components/IconDatabase.js +19 -0
  110. package/lib/commonjs/icons/components/IconDigitalecosystem.js +19 -0
  111. package/lib/commonjs/icons/components/IconDigitalselfservice.js +19 -0
  112. package/lib/commonjs/icons/components/IconDistribution.js +19 -0
  113. package/lib/commonjs/icons/components/IconDocument.js +19 -0
  114. package/lib/commonjs/icons/components/IconDocumentdoc.js +19 -0
  115. package/lib/commonjs/icons/components/IconDocumentjpg.js +19 -0
  116. package/lib/commonjs/icons/components/IconDocumentodt.js +19 -0
  117. package/lib/commonjs/icons/components/IconDocumentpdf.js +19 -0
  118. package/lib/commonjs/icons/components/IconDocumentpng.js +19 -0
  119. package/lib/commonjs/icons/components/IconDocumentraw.js +19 -0
  120. package/lib/commonjs/icons/components/IconDocumentrtf.js +19 -0
  121. package/lib/commonjs/icons/components/IconDocumentsettings.js +19 -0
  122. package/lib/commonjs/icons/components/IconDocumenttif.js +19 -0
  123. package/lib/commonjs/icons/components/IconDocumenttxt.js +19 -0
  124. package/lib/commonjs/icons/components/IconDocumentunknown.js +19 -0
  125. package/lib/commonjs/icons/components/IconDocumentxls.js +19 -0
  126. package/lib/commonjs/icons/components/IconDocumentxlsx.js +19 -0
  127. package/lib/commonjs/icons/components/IconFilerequest.js +19 -0
  128. package/lib/commonjs/icons/components/IconFilesend.js +19 -0
  129. package/lib/commonjs/icons/components/IconFileshare.js +19 -0
  130. package/lib/commonjs/icons/components/IconFindinpage.js +19 -0
  131. package/lib/commonjs/icons/components/IconFolder.js +19 -0
  132. package/lib/commonjs/icons/components/IconFolderbookmarks.js +19 -0
  133. package/lib/commonjs/icons/components/IconFolderfavorites.js +19 -0
  134. package/lib/commonjs/icons/components/IconFolderlocked.js +19 -0
  135. package/lib/commonjs/icons/components/IconFoldermovefiles.js +19 -0
  136. package/lib/commonjs/icons/components/IconFolderpublic.js +19 -0
  137. package/lib/commonjs/icons/components/IconFolderrated.js +19 -0
  138. package/lib/commonjs/icons/components/IconFolderrequest.js +19 -0
  139. package/lib/commonjs/icons/components/IconForm.js +19 -0
  140. package/lib/commonjs/icons/components/IconFormadd.js +19 -0
  141. package/lib/commonjs/icons/components/IconForms.js +19 -0
  142. package/lib/commonjs/icons/components/IconGraphincreasing.js +19 -0
  143. package/lib/commonjs/icons/components/IconGraphlow.js +19 -0
  144. package/lib/commonjs/icons/components/IconGraphtable.js +19 -0
  145. package/lib/commonjs/icons/components/IconHealthreport.js +19 -0
  146. package/lib/commonjs/icons/components/IconHubmode.js +19 -0
  147. package/lib/commonjs/icons/components/IconInfrastructure.js +19 -0
  148. package/lib/commonjs/icons/components/IconInterestlow.js +19 -0
  149. package/lib/commonjs/icons/components/IconLte.js +19 -0
  150. package/lib/commonjs/icons/components/IconNetworkfuture.js +19 -0
  151. package/lib/commonjs/icons/components/IconPagesettings.js +19 -0
  152. package/lib/commonjs/icons/components/IconPptxdoc.js +19 -0
  153. package/lib/commonjs/icons/components/IconPreferrednumber.js +19 -0
  154. package/lib/commonjs/icons/components/IconPremiumnumber.js +19 -0
  155. package/lib/commonjs/icons/components/IconProjection.js +19 -0
  156. package/lib/commonjs/icons/components/IconRequest.js +19 -0
  157. package/lib/commonjs/icons/components/IconRoutestraffic.js +19 -0
  158. package/lib/commonjs/icons/components/IconTechnology.js +19 -0
  159. package/lib/commonjs/icons/components/IconVolte.js +19 -0
  160. package/lib/commonjs/icons/components/IconVonr.js +19 -0
  161. package/lib/commonjs/icons/components/IconVowifi.js +19 -0
  162. package/lib/commonjs/icons/components/IconVpndata.js +19 -0
  163. package/lib/commonjs/icons/components/index.js +803 -0
  164. package/lib/commonjs/icons/registry.js +2 -2
  165. package/lib/commonjs/utils/GlassFill/GlassFill.js +69 -73
  166. package/lib/commonjs/utils/index.js +25 -0
  167. package/lib/commonjs/utils/react-utils.js +62 -0
  168. package/lib/commonjs/utils/shadow.js +200 -0
  169. package/lib/module/components/ActionFooter/ActionFooter.js +7 -24
  170. package/lib/module/components/ActionTile/ActionTile.js +10 -10
  171. package/lib/module/components/AmountInput/AmountInput.js +3 -3
  172. package/lib/module/components/AreaLineChart/AreaLineChart.js +2 -2
  173. package/lib/module/components/Attached/Attached.js +1 -1
  174. package/lib/module/components/Avatar/Avatar.js +10 -10
  175. package/lib/module/components/AvatarGroup/AvatarGroup.js +52 -30
  176. package/lib/module/components/Badge/Badge.js +12 -12
  177. package/lib/module/components/BenefitCard/BenefitCard.js +95 -21
  178. package/lib/module/components/BottomNav/BottomNav.js +2 -2
  179. package/lib/module/components/BottomNavItem/BottomNavItem.js +3 -3
  180. package/lib/module/components/Button/Button.js +32 -20
  181. package/lib/module/components/Card/Card.js +20 -20
  182. package/lib/module/components/CardAdvisory/CardAdvisory.js +6 -6
  183. package/lib/module/components/CardCTA/CardCTA.js +21 -21
  184. package/lib/module/components/CardFeedback/CardFeedback.js +18 -18
  185. package/lib/module/components/CardFinancialCondition/CardFinancialCondition.js +7 -7
  186. package/lib/module/components/CardInsight/CardInsight.js +1 -2
  187. package/lib/module/components/Carousel/Carousel.js +18 -12
  188. package/lib/module/components/CarouselCardAccounts/CarouselCardAccounts.js +71 -0
  189. package/lib/module/components/Checkbox/Checkbox.js +2 -9
  190. package/lib/module/components/ChipGroup/ChipGroup.js +1 -1
  191. package/lib/module/components/ChipSelect/ChipSelect.js +11 -11
  192. package/lib/module/components/CircularProgressBar/CircularProgressBar.js +5 -5
  193. package/lib/module/components/CircularProgressBarDoted/CircularProgressBarDoted.js +8 -8
  194. package/lib/module/components/CircularRating/CircularRating.js +3 -3
  195. package/lib/module/components/CompareTable/CompareTable.js +16 -16
  196. package/lib/module/components/DebitCard/DebitCard.js +18 -18
  197. package/lib/module/components/Disclaimer/Disclaimer.js +5 -5
  198. package/lib/module/components/DonutChart/DonutChart.js +11 -11
  199. package/lib/module/components/Drawer/Drawer.js +60 -60
  200. package/lib/module/components/Dropdown/Dropdown.js +22 -23
  201. package/lib/module/components/DropdownInput/DropdownInput.js +10 -10
  202. package/lib/module/components/EmptyState/EmptyState.js +14 -14
  203. package/lib/module/components/FilterBar/FilterBar.js +2 -2
  204. package/lib/module/components/Form/Form.js +3 -3
  205. package/lib/module/components/FormField/FormField.js +6 -6
  206. package/lib/module/components/FullscreenModal/FullscreenModal.js +24 -24
  207. package/lib/module/components/Gauge/Gauge.js +8 -8
  208. package/lib/module/components/HoldingsCard/HoldingsCard.js +10 -10
  209. package/lib/module/components/Icon/Icon.js +6 -6
  210. package/lib/module/components/IconCapsule/IconCapsule.js +7 -7
  211. package/lib/module/components/InputSearch/InputSearch.js +9 -9
  212. package/lib/module/components/InstitutionBadge/InstitutionBadge.js +3 -3
  213. package/lib/module/components/ListGroup/ListGroup.js +8 -8
  214. package/lib/module/components/ListItem/ListItem.js +10 -10
  215. package/lib/module/components/LottieIntroBlock/LottieIntroBlock.js +13 -13
  216. package/lib/module/components/LottiePlayer/LottiePlayer.js +2 -2
  217. package/lib/module/components/LottiePlayer/LottiePlayer.web.js +2 -2
  218. package/lib/module/components/MediaCard/MediaCard.js +21 -21
  219. package/lib/module/components/MessageField/MessageField.js +8 -8
  220. package/lib/module/components/MoneyValue/MoneyValue.js +7 -7
  221. package/lib/module/components/NavArrow/NavArrow.js +8 -8
  222. package/lib/module/components/NoteInput/NoteInput.js +12 -12
  223. package/lib/module/components/Nudge/Nudge.js +20 -20
  224. package/lib/module/components/OTP/OTP.js +15 -15
  225. package/lib/module/components/PageHero/PageHero.js +16 -16
  226. package/lib/module/components/PaymentFeedback/PaymentFeedback.js +23 -23
  227. package/lib/module/components/Popup/Popup.js +1 -1
  228. package/lib/module/components/ProductMerchandisingCard/ProductMerchandisingCard.js +66 -62
  229. package/lib/module/components/ProgressBadge/ProgressBadge.js +5 -5
  230. package/lib/module/components/Radio/Radio.js +9 -9
  231. package/lib/module/components/RechargeCard/RechargeCard.js +31 -31
  232. package/lib/module/components/SavingsGoalSummary/SavingsGoalSummary.js +60 -13
  233. package/lib/module/components/ScrollArea/ScrollArea.js +121 -0
  234. package/lib/module/components/Section/Section.js +24 -24
  235. package/lib/module/components/StatusHero/StatusHero.js +14 -14
  236. package/lib/module/components/Stepper/Step.js +16 -16
  237. package/lib/module/components/Stepper/StepLabel.js +16 -16
  238. package/lib/module/components/Stepper/Stepper.js +3 -3
  239. package/lib/module/components/SuggestiveSearch/SuggestiveSearch.js +10 -10
  240. package/lib/module/components/SupportText/SupportText.js +6 -6
  241. package/lib/module/components/SupportText/SupportTextIcon.js +2 -2
  242. package/lib/module/components/Text/Text.js +15 -3
  243. package/lib/module/components/TextInput/TextInput.js +14 -14
  244. package/lib/module/components/TextSegment/TextSegment.js +15 -3
  245. package/lib/module/components/ThreadHero/ThreadHero.js +17 -17
  246. package/lib/module/components/Title/Title.js +39 -17
  247. package/lib/module/components/Toast/Toast.js +15 -15
  248. package/lib/module/components/Toggle/Toggle.js +4 -12
  249. package/lib/module/components/Tooltip/Tooltip.js +12 -12
  250. package/lib/module/components/TransactionBubble/TransactionBubble.js +13 -13
  251. package/lib/module/components/TransactionDetails/TransactionDetails.js +10 -10
  252. package/lib/module/components/TransactionStatus/TransactionStatus.js +9 -9
  253. package/lib/module/components/UpiHandle/UpiHandle.js +15 -15
  254. package/lib/module/components/index.js +2 -0
  255. package/lib/module/design-tokens/Coin Variables-variables-full.json +1 -1
  256. package/lib/module/design-tokens/figma-modes.generated.js +50 -42
  257. package/lib/module/icons/components/Icon4g.js +12 -0
  258. package/lib/module/icons/components/Icon4gltedata.js +12 -0
  259. package/lib/module/icons/components/Icon5g.js +12 -0
  260. package/lib/module/icons/components/Icon5gdoubleplus.js +12 -0
  261. package/lib/module/icons/components/Icon5gplus.js +12 -0
  262. package/lib/module/icons/components/IconAdblocker.js +12 -0
  263. package/lib/module/icons/components/IconAdblockplus.js +12 -0
  264. package/lib/module/icons/components/IconAnalytics.js +12 -0
  265. package/lib/module/icons/components/IconAnalyticsdata.js +12 -0
  266. package/lib/module/icons/components/IconAnalyticspiechart.js +12 -0
  267. package/lib/module/icons/components/IconAnalyticspiecharttree.js +12 -0
  268. package/lib/module/icons/components/IconAnalyticspiecharttwo.js +12 -0
  269. package/lib/module/icons/components/IconCompoundinterest.js +12 -0
  270. package/lib/module/icons/components/IconConsumptionaccounted.js +12 -0
  271. package/lib/module/icons/components/IconConsumptionaverage.js +12 -0
  272. package/lib/module/icons/components/IconConsumptionhigh.js +12 -0
  273. package/lib/module/icons/components/IconConsumptionlow.js +12 -0
  274. package/lib/module/icons/components/IconConsumptionunaccounted.js +12 -0
  275. package/lib/module/icons/components/IconCsvdoc.js +12 -0
  276. package/lib/module/icons/components/IconDatabase.js +12 -0
  277. package/lib/module/icons/components/IconDigitalecosystem.js +12 -0
  278. package/lib/module/icons/components/IconDigitalselfservice.js +12 -0
  279. package/lib/module/icons/components/IconDistribution.js +12 -0
  280. package/lib/module/icons/components/IconDocument.js +12 -0
  281. package/lib/module/icons/components/IconDocumentdoc.js +12 -0
  282. package/lib/module/icons/components/IconDocumentjpg.js +12 -0
  283. package/lib/module/icons/components/IconDocumentodt.js +12 -0
  284. package/lib/module/icons/components/IconDocumentpdf.js +12 -0
  285. package/lib/module/icons/components/IconDocumentpng.js +12 -0
  286. package/lib/module/icons/components/IconDocumentraw.js +12 -0
  287. package/lib/module/icons/components/IconDocumentrtf.js +12 -0
  288. package/lib/module/icons/components/IconDocumentsettings.js +12 -0
  289. package/lib/module/icons/components/IconDocumenttif.js +12 -0
  290. package/lib/module/icons/components/IconDocumenttxt.js +12 -0
  291. package/lib/module/icons/components/IconDocumentunknown.js +12 -0
  292. package/lib/module/icons/components/IconDocumentxls.js +12 -0
  293. package/lib/module/icons/components/IconDocumentxlsx.js +12 -0
  294. package/lib/module/icons/components/IconFilerequest.js +12 -0
  295. package/lib/module/icons/components/IconFilesend.js +12 -0
  296. package/lib/module/icons/components/IconFileshare.js +12 -0
  297. package/lib/module/icons/components/IconFindinpage.js +12 -0
  298. package/lib/module/icons/components/IconFolder.js +12 -0
  299. package/lib/module/icons/components/IconFolderbookmarks.js +12 -0
  300. package/lib/module/icons/components/IconFolderfavorites.js +12 -0
  301. package/lib/module/icons/components/IconFolderlocked.js +12 -0
  302. package/lib/module/icons/components/IconFoldermovefiles.js +12 -0
  303. package/lib/module/icons/components/IconFolderpublic.js +12 -0
  304. package/lib/module/icons/components/IconFolderrated.js +12 -0
  305. package/lib/module/icons/components/IconFolderrequest.js +12 -0
  306. package/lib/module/icons/components/IconForm.js +12 -0
  307. package/lib/module/icons/components/IconFormadd.js +12 -0
  308. package/lib/module/icons/components/IconForms.js +12 -0
  309. package/lib/module/icons/components/IconGraphincreasing.js +12 -0
  310. package/lib/module/icons/components/IconGraphlow.js +12 -0
  311. package/lib/module/icons/components/IconGraphtable.js +12 -0
  312. package/lib/module/icons/components/IconHealthreport.js +12 -0
  313. package/lib/module/icons/components/IconHubmode.js +12 -0
  314. package/lib/module/icons/components/IconInfrastructure.js +12 -0
  315. package/lib/module/icons/components/IconInterestlow.js +12 -0
  316. package/lib/module/icons/components/IconLte.js +12 -0
  317. package/lib/module/icons/components/IconNetworkfuture.js +12 -0
  318. package/lib/module/icons/components/IconPagesettings.js +12 -0
  319. package/lib/module/icons/components/IconPptxdoc.js +12 -0
  320. package/lib/module/icons/components/IconPreferrednumber.js +12 -0
  321. package/lib/module/icons/components/IconPremiumnumber.js +12 -0
  322. package/lib/module/icons/components/IconProjection.js +12 -0
  323. package/lib/module/icons/components/IconRequest.js +12 -0
  324. package/lib/module/icons/components/IconRoutestraffic.js +12 -0
  325. package/lib/module/icons/components/IconTechnology.js +12 -0
  326. package/lib/module/icons/components/IconVolte.js +12 -0
  327. package/lib/module/icons/components/IconVonr.js +12 -0
  328. package/lib/module/icons/components/IconVowifi.js +12 -0
  329. package/lib/module/icons/components/IconVpndata.js +12 -0
  330. package/lib/module/icons/components/index.js +73 -0
  331. package/lib/module/icons/registry.js +2 -2
  332. package/lib/module/utils/GlassFill/GlassFill.js +69 -72
  333. package/lib/module/utils/index.js +2 -1
  334. package/lib/module/utils/react-utils.js +61 -0
  335. package/lib/module/utils/shadow.js +194 -0
  336. package/lib/typescript/src/components/BenefitCard/BenefitCard.d.ts +33 -4
  337. package/lib/typescript/src/components/Carousel/Carousel.d.ts +11 -1
  338. package/lib/typescript/src/components/CarouselCardAccounts/CarouselCardAccounts.d.ts +57 -0
  339. package/lib/typescript/src/components/SavingsGoalSummary/SavingsGoalSummary.d.ts +11 -1
  340. package/lib/typescript/src/components/ScrollArea/ScrollArea.d.ts +77 -0
  341. package/lib/typescript/src/components/Text/Text.d.ts +12 -3
  342. package/lib/typescript/src/components/TextSegment/TextSegment.d.ts +12 -3
  343. package/lib/typescript/src/components/Title/Title.d.ts +12 -2
  344. package/lib/typescript/src/components/index.d.ts +2 -0
  345. package/lib/typescript/src/design-tokens/figma-modes.generated.d.ts +23 -15
  346. package/lib/typescript/src/icons/components/Icon4g.d.ts +3 -0
  347. package/lib/typescript/src/icons/components/Icon4gltedata.d.ts +3 -0
  348. package/lib/typescript/src/icons/components/Icon5g.d.ts +3 -0
  349. package/lib/typescript/src/icons/components/Icon5gdoubleplus.d.ts +3 -0
  350. package/lib/typescript/src/icons/components/Icon5gplus.d.ts +3 -0
  351. package/lib/typescript/src/icons/components/IconAdblocker.d.ts +3 -0
  352. package/lib/typescript/src/icons/components/IconAdblockplus.d.ts +3 -0
  353. package/lib/typescript/src/icons/components/IconAnalytics.d.ts +3 -0
  354. package/lib/typescript/src/icons/components/IconAnalyticsdata.d.ts +3 -0
  355. package/lib/typescript/src/icons/components/IconAnalyticspiechart.d.ts +3 -0
  356. package/lib/typescript/src/icons/components/IconAnalyticspiecharttree.d.ts +3 -0
  357. package/lib/typescript/src/icons/components/IconAnalyticspiecharttwo.d.ts +3 -0
  358. package/lib/typescript/src/icons/components/IconCompoundinterest.d.ts +3 -0
  359. package/lib/typescript/src/icons/components/IconConsumptionaccounted.d.ts +3 -0
  360. package/lib/typescript/src/icons/components/IconConsumptionaverage.d.ts +3 -0
  361. package/lib/typescript/src/icons/components/IconConsumptionhigh.d.ts +3 -0
  362. package/lib/typescript/src/icons/components/IconConsumptionlow.d.ts +3 -0
  363. package/lib/typescript/src/icons/components/IconConsumptionunaccounted.d.ts +3 -0
  364. package/lib/typescript/src/icons/components/IconCsvdoc.d.ts +3 -0
  365. package/lib/typescript/src/icons/components/IconDatabase.d.ts +3 -0
  366. package/lib/typescript/src/icons/components/IconDigitalecosystem.d.ts +3 -0
  367. package/lib/typescript/src/icons/components/IconDigitalselfservice.d.ts +3 -0
  368. package/lib/typescript/src/icons/components/IconDistribution.d.ts +3 -0
  369. package/lib/typescript/src/icons/components/IconDocument.d.ts +3 -0
  370. package/lib/typescript/src/icons/components/IconDocumentdoc.d.ts +3 -0
  371. package/lib/typescript/src/icons/components/IconDocumentjpg.d.ts +3 -0
  372. package/lib/typescript/src/icons/components/IconDocumentodt.d.ts +3 -0
  373. package/lib/typescript/src/icons/components/IconDocumentpdf.d.ts +3 -0
  374. package/lib/typescript/src/icons/components/IconDocumentpng.d.ts +3 -0
  375. package/lib/typescript/src/icons/components/IconDocumentraw.d.ts +3 -0
  376. package/lib/typescript/src/icons/components/IconDocumentrtf.d.ts +3 -0
  377. package/lib/typescript/src/icons/components/IconDocumentsettings.d.ts +3 -0
  378. package/lib/typescript/src/icons/components/IconDocumenttif.d.ts +3 -0
  379. package/lib/typescript/src/icons/components/IconDocumenttxt.d.ts +3 -0
  380. package/lib/typescript/src/icons/components/IconDocumentunknown.d.ts +3 -0
  381. package/lib/typescript/src/icons/components/IconDocumentxls.d.ts +3 -0
  382. package/lib/typescript/src/icons/components/IconDocumentxlsx.d.ts +3 -0
  383. package/lib/typescript/src/icons/components/IconFilerequest.d.ts +3 -0
  384. package/lib/typescript/src/icons/components/IconFilesend.d.ts +3 -0
  385. package/lib/typescript/src/icons/components/IconFileshare.d.ts +3 -0
  386. package/lib/typescript/src/icons/components/IconFindinpage.d.ts +3 -0
  387. package/lib/typescript/src/icons/components/IconFolder.d.ts +3 -0
  388. package/lib/typescript/src/icons/components/IconFolderbookmarks.d.ts +3 -0
  389. package/lib/typescript/src/icons/components/IconFolderfavorites.d.ts +3 -0
  390. package/lib/typescript/src/icons/components/IconFolderlocked.d.ts +3 -0
  391. package/lib/typescript/src/icons/components/IconFoldermovefiles.d.ts +3 -0
  392. package/lib/typescript/src/icons/components/IconFolderpublic.d.ts +3 -0
  393. package/lib/typescript/src/icons/components/IconFolderrated.d.ts +3 -0
  394. package/lib/typescript/src/icons/components/IconFolderrequest.d.ts +3 -0
  395. package/lib/typescript/src/icons/components/IconForm.d.ts +3 -0
  396. package/lib/typescript/src/icons/components/IconFormadd.d.ts +3 -0
  397. package/lib/typescript/src/icons/components/IconForms.d.ts +3 -0
  398. package/lib/typescript/src/icons/components/IconGraphincreasing.d.ts +3 -0
  399. package/lib/typescript/src/icons/components/IconGraphlow.d.ts +3 -0
  400. package/lib/typescript/src/icons/components/IconGraphtable.d.ts +3 -0
  401. package/lib/typescript/src/icons/components/IconHealthreport.d.ts +3 -0
  402. package/lib/typescript/src/icons/components/IconHubmode.d.ts +3 -0
  403. package/lib/typescript/src/icons/components/IconInfrastructure.d.ts +3 -0
  404. package/lib/typescript/src/icons/components/IconInterestlow.d.ts +3 -0
  405. package/lib/typescript/src/icons/components/IconLte.d.ts +3 -0
  406. package/lib/typescript/src/icons/components/IconNetworkfuture.d.ts +3 -0
  407. package/lib/typescript/src/icons/components/IconPagesettings.d.ts +3 -0
  408. package/lib/typescript/src/icons/components/IconPptxdoc.d.ts +3 -0
  409. package/lib/typescript/src/icons/components/IconPreferrednumber.d.ts +3 -0
  410. package/lib/typescript/src/icons/components/IconPremiumnumber.d.ts +3 -0
  411. package/lib/typescript/src/icons/components/IconProjection.d.ts +3 -0
  412. package/lib/typescript/src/icons/components/IconRequest.d.ts +3 -0
  413. package/lib/typescript/src/icons/components/IconRoutestraffic.d.ts +3 -0
  414. package/lib/typescript/src/icons/components/IconTechnology.d.ts +3 -0
  415. package/lib/typescript/src/icons/components/IconVolte.d.ts +3 -0
  416. package/lib/typescript/src/icons/components/IconVonr.d.ts +3 -0
  417. package/lib/typescript/src/icons/components/IconVowifi.d.ts +3 -0
  418. package/lib/typescript/src/icons/components/IconVpndata.d.ts +3 -0
  419. package/lib/typescript/src/icons/components/index.d.ts +73 -0
  420. package/lib/typescript/src/icons/registry.d.ts +1 -1
  421. package/lib/typescript/src/utils/GlassFill/GlassFill.d.ts +11 -4
  422. package/lib/typescript/src/utils/index.d.ts +2 -0
  423. package/lib/typescript/src/utils/react-utils.d.ts +40 -1
  424. package/lib/typescript/src/utils/shadow.d.ts +72 -0
  425. package/package.json +2 -2
  426. package/src/components/ActionFooter/ActionFooter.tsx +8 -26
  427. package/src/components/ActionTile/ActionTile.tsx +10 -10
  428. package/src/components/AmountInput/AmountInput.tsx +3 -3
  429. package/src/components/AreaLineChart/AreaLineChart.tsx +2 -2
  430. package/src/components/Attached/Attached.tsx +1 -1
  431. package/src/components/Avatar/Avatar.tsx +10 -10
  432. package/src/components/AvatarGroup/AvatarGroup.tsx +53 -27
  433. package/src/components/Badge/Badge.tsx +12 -13
  434. package/src/components/BenefitCard/BenefitCard.tsx +120 -27
  435. package/src/components/BottomNav/BottomNav.tsx +2 -2
  436. package/src/components/BottomNavItem/BottomNavItem.tsx +3 -3
  437. package/src/components/Button/Button.tsx +30 -20
  438. package/src/components/Card/Card.tsx +20 -20
  439. package/src/components/CardAdvisory/CardAdvisory.tsx +6 -6
  440. package/src/components/CardCTA/CardCTA.tsx +21 -21
  441. package/src/components/CardFeedback/CardFeedback.tsx +18 -18
  442. package/src/components/CardFinancialCondition/CardFinancialCondition.tsx +7 -10
  443. package/src/components/CardInsight/CardInsight.tsx +1 -3
  444. package/src/components/Carousel/Carousel.tsx +29 -12
  445. package/src/components/CarouselCardAccounts/CarouselCardAccounts.tsx +113 -0
  446. package/src/components/Checkbox/Checkbox.tsx +2 -8
  447. package/src/components/ChipGroup/ChipGroup.tsx +1 -1
  448. package/src/components/ChipSelect/ChipSelect.tsx +11 -11
  449. package/src/components/CircularProgressBar/CircularProgressBar.tsx +5 -5
  450. package/src/components/CircularProgressBarDoted/CircularProgressBarDoted.tsx +8 -8
  451. package/src/components/CircularRating/CircularRating.tsx +3 -3
  452. package/src/components/CompareTable/CompareTable.tsx +16 -16
  453. package/src/components/DebitCard/DebitCard.tsx +22 -22
  454. package/src/components/Disclaimer/Disclaimer.tsx +5 -5
  455. package/src/components/DonutChart/DonutChart.tsx +11 -45
  456. package/src/components/Drawer/Drawer.tsx +80 -71
  457. package/src/components/Dropdown/Dropdown.tsx +23 -28
  458. package/src/components/DropdownInput/DropdownInput.tsx +10 -17
  459. package/src/components/EmptyState/EmptyState.tsx +14 -14
  460. package/src/components/FilterBar/FilterBar.tsx +2 -2
  461. package/src/components/Form/Form.tsx +3 -3
  462. package/src/components/FormField/FormField.tsx +6 -11
  463. package/src/components/FullscreenModal/FullscreenModal.tsx +24 -24
  464. package/src/components/Gauge/Gauge.tsx +8 -8
  465. package/src/components/HoldingsCard/HoldingsCard.tsx +10 -10
  466. package/src/components/Icon/Icon.tsx +6 -6
  467. package/src/components/IconCapsule/IconCapsule.tsx +7 -7
  468. package/src/components/InputSearch/InputSearch.tsx +9 -9
  469. package/src/components/InstitutionBadge/InstitutionBadge.tsx +3 -6
  470. package/src/components/ListGroup/ListGroup.tsx +8 -8
  471. package/src/components/ListItem/ListItem.tsx +10 -10
  472. package/src/components/LottieIntroBlock/LottieIntroBlock.tsx +13 -16
  473. package/src/components/LottiePlayer/LottiePlayer.tsx +2 -2
  474. package/src/components/LottiePlayer/LottiePlayer.web.tsx +2 -2
  475. package/src/components/MediaCard/MediaCard.tsx +21 -21
  476. package/src/components/MessageField/MessageField.tsx +8 -16
  477. package/src/components/MoneyValue/MoneyValue.tsx +7 -7
  478. package/src/components/NavArrow/NavArrow.tsx +8 -8
  479. package/src/components/NoteInput/NoteInput.tsx +12 -12
  480. package/src/components/Nudge/Nudge.tsx +20 -20
  481. package/src/components/OTP/OTP.tsx +16 -16
  482. package/src/components/PageHero/PageHero.tsx +16 -16
  483. package/src/components/PaymentFeedback/PaymentFeedback.tsx +27 -27
  484. package/src/components/Popup/Popup.tsx +1 -1
  485. package/src/components/ProductMerchandisingCard/ProductMerchandisingCard.tsx +76 -47
  486. package/src/components/ProgressBadge/ProgressBadge.tsx +5 -5
  487. package/src/components/Radio/Radio.tsx +8 -9
  488. package/src/components/RechargeCard/RechargeCard.tsx +31 -31
  489. package/src/components/SavingsGoalSummary/SavingsGoalSummary.tsx +105 -13
  490. package/src/components/ScrollArea/ScrollArea.tsx +200 -0
  491. package/src/components/Section/Section.tsx +26 -26
  492. package/src/components/StatusHero/StatusHero.tsx +14 -14
  493. package/src/components/Stepper/Step.tsx +16 -18
  494. package/src/components/Stepper/StepLabel.tsx +16 -27
  495. package/src/components/Stepper/Stepper.tsx +3 -4
  496. package/src/components/SuggestiveSearch/SuggestiveSearch.tsx +10 -20
  497. package/src/components/SupportText/SupportText.tsx +6 -6
  498. package/src/components/SupportText/SupportTextIcon.tsx +2 -2
  499. package/src/components/Text/Text.tsx +23 -5
  500. package/src/components/TextInput/TextInput.tsx +14 -14
  501. package/src/components/TextSegment/TextSegment.tsx +22 -4
  502. package/src/components/ThreadHero/ThreadHero.tsx +17 -17
  503. package/src/components/Title/Title.tsx +44 -18
  504. package/src/components/Toast/Toast.tsx +15 -15
  505. package/src/components/Toggle/Toggle.tsx +5 -10
  506. package/src/components/Tooltip/Tooltip.tsx +12 -12
  507. package/src/components/TransactionBubble/TransactionBubble.tsx +15 -15
  508. package/src/components/TransactionDetails/TransactionDetails.tsx +10 -10
  509. package/src/components/TransactionStatus/TransactionStatus.tsx +9 -9
  510. package/src/components/UpiHandle/UpiHandle.tsx +15 -15
  511. package/src/components/index.ts +2 -0
  512. package/src/design-tokens/Coin Variables-variables-full.json +1 -1
  513. package/src/design-tokens/figma-modes.generated.ts +50 -42
  514. package/src/icons/components/Icon4g.tsx +11 -0
  515. package/src/icons/components/Icon4gltedata.tsx +11 -0
  516. package/src/icons/components/Icon5g.tsx +11 -0
  517. package/src/icons/components/Icon5gdoubleplus.tsx +11 -0
  518. package/src/icons/components/Icon5gplus.tsx +11 -0
  519. package/src/icons/components/IconAdblocker.tsx +11 -0
  520. package/src/icons/components/IconAdblockplus.tsx +11 -0
  521. package/src/icons/components/IconAnalytics.tsx +11 -0
  522. package/src/icons/components/IconAnalyticsdata.tsx +11 -0
  523. package/src/icons/components/IconAnalyticspiechart.tsx +11 -0
  524. package/src/icons/components/IconAnalyticspiecharttree.tsx +11 -0
  525. package/src/icons/components/IconAnalyticspiecharttwo.tsx +11 -0
  526. package/src/icons/components/IconCompoundinterest.tsx +11 -0
  527. package/src/icons/components/IconConsumptionaccounted.tsx +11 -0
  528. package/src/icons/components/IconConsumptionaverage.tsx +11 -0
  529. package/src/icons/components/IconConsumptionhigh.tsx +11 -0
  530. package/src/icons/components/IconConsumptionlow.tsx +11 -0
  531. package/src/icons/components/IconConsumptionunaccounted.tsx +11 -0
  532. package/src/icons/components/IconCsvdoc.tsx +11 -0
  533. package/src/icons/components/IconDatabase.tsx +11 -0
  534. package/src/icons/components/IconDigitalecosystem.tsx +11 -0
  535. package/src/icons/components/IconDigitalselfservice.tsx +11 -0
  536. package/src/icons/components/IconDistribution.tsx +11 -0
  537. package/src/icons/components/IconDocument.tsx +11 -0
  538. package/src/icons/components/IconDocumentdoc.tsx +11 -0
  539. package/src/icons/components/IconDocumentjpg.tsx +11 -0
  540. package/src/icons/components/IconDocumentodt.tsx +11 -0
  541. package/src/icons/components/IconDocumentpdf.tsx +11 -0
  542. package/src/icons/components/IconDocumentpng.tsx +11 -0
  543. package/src/icons/components/IconDocumentraw.tsx +11 -0
  544. package/src/icons/components/IconDocumentrtf.tsx +11 -0
  545. package/src/icons/components/IconDocumentsettings.tsx +11 -0
  546. package/src/icons/components/IconDocumenttif.tsx +11 -0
  547. package/src/icons/components/IconDocumenttxt.tsx +11 -0
  548. package/src/icons/components/IconDocumentunknown.tsx +11 -0
  549. package/src/icons/components/IconDocumentxls.tsx +11 -0
  550. package/src/icons/components/IconDocumentxlsx.tsx +11 -0
  551. package/src/icons/components/IconFilerequest.tsx +11 -0
  552. package/src/icons/components/IconFilesend.tsx +11 -0
  553. package/src/icons/components/IconFileshare.tsx +11 -0
  554. package/src/icons/components/IconFindinpage.tsx +11 -0
  555. package/src/icons/components/IconFolder.tsx +11 -0
  556. package/src/icons/components/IconFolderbookmarks.tsx +11 -0
  557. package/src/icons/components/IconFolderfavorites.tsx +11 -0
  558. package/src/icons/components/IconFolderlocked.tsx +11 -0
  559. package/src/icons/components/IconFoldermovefiles.tsx +11 -0
  560. package/src/icons/components/IconFolderpublic.tsx +11 -0
  561. package/src/icons/components/IconFolderrated.tsx +11 -0
  562. package/src/icons/components/IconFolderrequest.tsx +11 -0
  563. package/src/icons/components/IconForm.tsx +11 -0
  564. package/src/icons/components/IconFormadd.tsx +11 -0
  565. package/src/icons/components/IconForms.tsx +11 -0
  566. package/src/icons/components/IconGraphincreasing.tsx +11 -0
  567. package/src/icons/components/IconGraphlow.tsx +11 -0
  568. package/src/icons/components/IconGraphtable.tsx +11 -0
  569. package/src/icons/components/IconHealthreport.tsx +11 -0
  570. package/src/icons/components/IconHubmode.tsx +11 -0
  571. package/src/icons/components/IconInfrastructure.tsx +11 -0
  572. package/src/icons/components/IconInterestlow.tsx +11 -0
  573. package/src/icons/components/IconLte.tsx +11 -0
  574. package/src/icons/components/IconNetworkfuture.tsx +11 -0
  575. package/src/icons/components/IconPagesettings.tsx +11 -0
  576. package/src/icons/components/IconPptxdoc.tsx +11 -0
  577. package/src/icons/components/IconPreferrednumber.tsx +11 -0
  578. package/src/icons/components/IconPremiumnumber.tsx +11 -0
  579. package/src/icons/components/IconProjection.tsx +11 -0
  580. package/src/icons/components/IconRequest.tsx +11 -0
  581. package/src/icons/components/IconRoutestraffic.tsx +11 -0
  582. package/src/icons/components/IconTechnology.tsx +11 -0
  583. package/src/icons/components/IconVolte.tsx +11 -0
  584. package/src/icons/components/IconVonr.tsx +11 -0
  585. package/src/icons/components/IconVowifi.tsx +11 -0
  586. package/src/icons/components/IconVpndata.tsx +11 -0
  587. package/src/icons/components/index.ts +73 -0
  588. package/src/icons/registry.ts +293 -1
  589. package/src/utils/GlassFill/GlassFill.tsx +59 -56
  590. package/src/utils/index.ts +2 -0
  591. package/src/utils/react-utils.ts +72 -1
  592. package/src/utils/shadow.ts +219 -0
@@ -37,9 +37,9 @@ const AmountInput = forwardRef<View, AmountInputProps>(function AmountInput({
37
37
  const modes = { ...globalModes, ...propModes }
38
38
 
39
39
  // Resolve tokens
40
- const gap = Number(getVariableByName('amountInput/gap', modes)) || 16
41
- const paddingHorizontal = Number(getVariableByName('amountInput/padding/horizontal', modes)) || 0
42
- const paddingVertical = Number(getVariableByName('amountInput/padding/vertical', modes)) || 0
40
+ const gap = Number(getVariableByName('amountInput/gap', modes))
41
+ const paddingHorizontal = Number(getVariableByName('amountInput/padding/horizontal', modes))
42
+ const paddingVertical = Number(getVariableByName('amountInput/padding/vertical', modes))
43
43
 
44
44
  const containerStyle: ViewStyle = {
45
45
  flexDirection: 'column',
@@ -1035,7 +1035,7 @@ function ChartTooltip({
1035
1035
  const bg = (getVariableByName('tooltip/background', modes) as string | null) ?? '#0f0d0a'
1036
1036
  const paddingH = toNumber(getVariableByName('tooltip/padding/horizontal', modes), 12)
1037
1037
  const paddingV = toNumber(getVariableByName('tooltip/padding/vertical', modes), 8)
1038
- const radius = toNumber(getVariableByName('radius', modes), 8)
1038
+ const radius = 8
1039
1039
  const labelColor = (getVariableByName('tooltip/label/color', modes) as string | null) ?? '#ffffff'
1040
1040
 
1041
1041
  if (items.length === 0) return null
@@ -1111,7 +1111,7 @@ function ChartLegend() {
1111
1111
  /** Resolve `axisItem/*` typography tokens into a memoized text style. */
1112
1112
  function useAxisTypography(modes: Modes) {
1113
1113
  return useMemo(() => {
1114
- const color = (getVariableByName('axisItem/color', modes) as string | null) ?? '#000000'
1114
+ const color = (getVariableByName('axisItem/fg', modes) as string | null) ?? '#000000'
1115
1115
  const fontFamily =
1116
1116
  (getVariableByName('axisItem/fontFamily', modes) as string | null) ?? 'JioType Var'
1117
1117
  const fontSize = toNumber(getVariableByName('axisItem/fontSize', modes), 12)
@@ -189,7 +189,7 @@ function Attached({
189
189
  // anchor centering intact).
190
190
  const slotBorderStyle = useMemo<ViewStyle | null>(() => {
191
191
  const borderColor = getVariableByName('attached/slot/border', modes)
192
- const borderWidth = parseFloat(getVariableByName('attached/slot/borderWidth', modes) || '0')
192
+ const borderWidth = parseFloat(getVariableByName('attached/slot/borderWidth', modes))
193
193
  if (!borderColor || !(borderWidth > 0)) return null
194
194
 
195
195
  // Match the inner clip radius so the ring stays concentric. The outer edge
@@ -65,18 +65,18 @@ interface AvatarTokens {
65
65
  }
66
66
 
67
67
  function resolveAvatarTokens(modes: Modes, isMonogram: boolean): AvatarTokens {
68
- const size = (getVariableByName('avatar/size', modes) || 29) as number
69
- const radiusRaw = (getVariableByName('avatar/radius', modes) || 9999) as number
70
- const backgroundColor = getVariableByName('avatar/background', modes) || '#dbcfff'
71
- const borderColor = getVariableByName('avatar/border/color', modes) || 'rgba(255,255,255,0)'
72
- const borderSize = (getVariableByName('avatar/border/size', modes) || 1) as number
73
- const labelColor = getVariableByName('avatar/label/color', modes) || '#5c00b5'
74
- const labelFontSize = (getVariableByName('avatar/label/fontSize', modes) || 12) as number
75
- const labelLineHeight = (getVariableByName('avatar/label/lineHeight', modes) || 14) as number
76
- const labelFontWeightRaw = getVariableByName('avatar/label/fontWeight', modes) || 500
68
+ const size = (getVariableByName('avatar/size', modes)) as number
69
+ const radiusRaw = (getVariableByName('avatar/radius', modes)) as number
70
+ const backgroundColor = getVariableByName('avatar/background', modes)
71
+ const borderColor = getVariableByName('avatar/border/color', modes)
72
+ const borderSize = (getVariableByName('avatar/border/size', modes)) as number
73
+ const labelColor = getVariableByName('avatar/label/color', modes)
74
+ const labelFontSize = (getVariableByName('avatar/label/fontSize', modes)) as number
75
+ const labelLineHeight = (getVariableByName('avatar/label/lineHeight', modes)) as number
76
+ const labelFontWeightRaw = getVariableByName('avatar/label/fontWeight', modes)
77
77
  const labelFontWeight =
78
78
  typeof labelFontWeightRaw === 'number' ? labelFontWeightRaw.toString() : labelFontWeightRaw
79
- const labelFontFamily = (getVariableByName('avatar/label/fontFamily', modes) || 'Inter') as string
79
+ const labelFontFamily = (getVariableByName('avatar/label/fontFamily', modes)) as string
80
80
 
81
81
  // 9999 is the design-token sentinel for "perfect circle"
82
82
  const borderRadius = radiusRaw === 9999 ? size / 2 : radiusRaw
@@ -1,7 +1,6 @@
1
- import React from 'react';
1
+ import React, { useId } from 'react';
2
2
  import { View, Platform, type ViewStyle } from 'react-native';
3
- import MaskedView from '@react-native-masked-view/masked-view';
4
- import Svg, { Path } from 'react-native-svg';
3
+ import Svg, { Defs, Mask, Path, ForeignObject } from 'react-native-svg';
5
4
  import { getVariableByName } from '../../design-tokens/figma-variables-resolver';
6
5
  import { EMPTY_MODES, flattenChildren } from '../../utils/react-utils';
7
6
  import type { Modes } from '../../design-tokens'
@@ -13,18 +12,23 @@ type AvatarGroupProps = {
13
12
  } & React.ComponentProps<typeof View>;
14
13
 
15
14
  function AvatarGroup({ modes = EMPTY_MODES, children, style, ...rest }: AvatarGroupProps) {
16
- const gap = getVariableByName('avatarGroup/gap', modes) || 0;
15
+ // Stable, collision-free base for the per-avatar SVG mask ids so multiple
16
+ // groups on one screen (and multiple avatars in a group) never clash.
17
+ const rawId = useId();
18
+ const maskBaseId = `avatargroup-mask-${rawId.replace(/[^a-zA-Z0-9_-]/g, '')}`;
17
19
 
20
+ const gap = getVariableByName('avatarGroup/gap', modes);
18
21
 
19
- const avatarSize = getVariableByName('avatar/size', modes) || 29;
20
- const avatarRadius = getVariableByName('avatar/radius', modes) || 9999;
21
- const borderSize = getVariableByName('avatar/border/size', modes) || 1;
22
- const borderColor = getVariableByName('avatar/border/color', modes) || 'rgba(255,255,255,0)';
23
22
 
24
- const paddingLeft = getVariableByName('avatarGroup/padding/left', modes) || 0;
25
- const paddingRight = getVariableByName('avatarGroup/padding/right', modes) || 0;
26
- const paddingTop = getVariableByName('avatarGroup/padding/top', modes) || 0;
27
- const paddingBottom = getVariableByName('avatarGroup/padding/bottom', modes) || 0;
23
+ const avatarSize = getVariableByName('avatar/size', modes);
24
+ const avatarRadius = getVariableByName('avatar/radius', modes);
25
+ const borderSize = getVariableByName('avatar/border/size', modes);
26
+ const borderColor = getVariableByName('avatar/border/color', modes);
27
+
28
+ const paddingLeft = getVariableByName('avatarGroup/padding/left', modes);
29
+ const paddingRight = getVariableByName('avatarGroup/padding/right', modes);
30
+ const paddingTop = getVariableByName('avatarGroup/padding/top', modes);
31
+ const paddingBottom = getVariableByName('avatarGroup/padding/bottom', modes);
28
32
 
29
33
  const validChildren = flattenChildren(children);
30
34
  const totalChildren = validChildren.length;
@@ -43,7 +47,11 @@ function AvatarGroup({ modes = EMPTY_MODES, children, style, ...rest }: AvatarGr
43
47
  const holeRadius = effectiveRadius + borderSizeInt;
44
48
  const holeCenter = { x: nextAvatarX + r, y: r };
45
49
 
46
- // Native Mask Path
50
+ // Native mask path: the full avatar square MINUS a circular hole where the
51
+ // next (overlapping) avatar sits. Drawn as a single `evenodd` path so the
52
+ // hole is cut out of the square. Filled WHITE because react-native-svg's
53
+ // `<Mask>` is a *luminance* mask (white = visible, black/absent = hidden) —
54
+ // the inverse of the old `@react-native-masked-view` alpha convention.
47
55
  const rectPath = `M 0 0 h ${avatarSizeInt} v ${avatarSizeInt} h -${avatarSizeInt} z`;
48
56
  const circlePath = `M ${holeCenter.x},${holeCenter.y} m -${holeRadius},0 a ${holeRadius},${holeRadius} 0 1,0 ${holeRadius * 2},0 a ${holeRadius},${holeRadius} 0 1,0 -${holeRadius * 2},0`;
49
57
  const maskPath = `${rectPath} ${circlePath}`;
@@ -101,23 +109,41 @@ function AvatarGroup({ modes = EMPTY_MODES, children, style, ...rest }: AvatarGr
101
109
  );
102
110
  }
103
111
 
104
- // Native MaskedView
112
+ // Native: mask the avatar with react-native-svg instead of the
113
+ // unmaintained `@react-native-masked-view/masked-view`, whose
114
+ // legacy `requireNativeComponent('RNCMaskedView')` resolves to a
115
+ // plain object (crashing "Element type is invalid") under the New
116
+ // Architecture interop. react-native-svg ships a Fabric/codegen
117
+ // `<Mask>` + `<ForeignObject>` that resolves on both architectures;
118
+ // the avatar is hosted inside the `<ForeignObject>` and revealed
119
+ // through the luminance mask.
120
+ const maskId = `${maskBaseId}-${index}`;
105
121
  return (
106
122
  <View key={index} style={wrapperStyle}>
107
- <MaskedView
108
- style={{ flex: 1, height: '100%' }}
109
- maskElement={
110
- <Svg height="100%" width="100%" viewBox={`0 0 ${avatarSizeInt} ${avatarSizeInt}`}>
111
- <Path
112
- d={maskPath}
113
- fill="black"
114
- fillRule="evenodd"
115
- />
116
- </Svg>
117
- }
123
+ <Svg
124
+ height="100%"
125
+ width="100%"
126
+ viewBox={`0 0 ${avatarSizeInt} ${avatarSizeInt}`}
118
127
  >
119
- {clonedChild}
120
- </MaskedView>
128
+ <Defs>
129
+ <Mask
130
+ id={maskId}
131
+ maskUnits="userSpaceOnUse"
132
+ maskContentUnits="userSpaceOnUse"
133
+ >
134
+ <Path d={maskPath} fill="white" fillRule="evenodd" />
135
+ </Mask>
136
+ </Defs>
137
+ <ForeignObject
138
+ x="0"
139
+ y="0"
140
+ width={avatarSizeInt}
141
+ height={avatarSizeInt}
142
+ mask={`url(#${maskId})`}
143
+ >
144
+ {clonedChild}
145
+ </ForeignObject>
146
+ </Svg>
121
147
  </View>
122
148
  );
123
149
  })}
@@ -84,34 +84,33 @@ function Badge({
84
84
  // swaps the solid fill for a translucent overlay + white label, matching the
85
85
  // Figma `badge/glass/*` tokens.
86
86
  const backgroundColor =
87
- (getVariableByName('badge/color/background', modes) as string) || '#d8effe'
87
+ (getVariableByName('badge/color/background', modes) as string)
88
88
  const glassBackground =
89
- (getVariableByName('badge/glass/color/background', modes) as string) || '#ffffff26'
89
+ (getVariableByName('badge/glass/color/background', modes) as string)
90
90
  const glassLabelColor =
91
- (getVariableByName('badge/glass/color/label', modes) as string) || '#ffffff'
91
+ (getVariableByName('badge/glass/color/label', modes) as string)
92
92
  const labelColor = isGlass
93
93
  ? glassLabelColor
94
- : (getVariableByName('badge/color/label', modes) as string) || '#000000'
94
+ : (getVariableByName('badge/color/label', modes) as string)
95
95
  const fontSize =
96
- Number(getVariableByName('badge/label/fontSize', modes) as unknown) || 12
96
+ Number(getVariableByName('badge/label/fontSize', modes) as unknown)
97
97
  const fontFamily =
98
- (getVariableByName('badge/fontFamily', modes) as string) || undefined
98
+ (getVariableByName('badge/fontFamily', modes) as string)
99
99
  const fontWeight =
100
- (getVariableByName('badge/label/fontWeight', modes) as string) || '600'
100
+ (getVariableByName('badge/label/fontWeight', modes) as string)
101
101
  const paddingHorizontal =
102
- Number(getVariableByName('badge/padding/horizontal', modes) as unknown) || 6
102
+ Number(getVariableByName('badge/padding/horizontal', modes) as unknown)
103
103
  const paddingVertical =
104
- Number(getVariableByName('badge/padding/vertical', modes) as unknown) || 4
104
+ Number(getVariableByName('badge/padding/vertical', modes) as unknown)
105
105
  const borderRadius =
106
- Number(getVariableByName('badge/radius', modes) as unknown) || 4
106
+ Number(getVariableByName('badge/radius', modes) as unknown)
107
107
  const lineHeight =
108
- Number(getVariableByName('badge/label/lineHeight', modes) as unknown) ||
109
- Math.round(fontSize * 1.2)
108
+ Number(getVariableByName('badge/label/lineHeight', modes) as unknown)
110
109
  // Figma `blur/minimal` (px radius) -> GlassFill's 0–100 intensity scale, the
111
110
  // same 1:1 mapping the merchandising card footer uses.
112
111
  const blurIntensity = Math.max(
113
112
  0,
114
- Math.min(100, Math.round(Number(getVariableByName('blur/minimal', modes) as unknown) || 29)),
113
+ Math.min(100, Math.round(Number(getVariableByName('blur/minimal', modes) as unknown))),
115
114
  )
116
115
 
117
116
  // Skeleton short-circuit. Size derived from the same tokens the loaded
@@ -15,6 +15,9 @@ import Text from '../Text/Text'
15
15
  import ListItem from '../ListItem/ListItem'
16
16
  import Divider from '../Divider/Divider'
17
17
  import Button from '../Button/Button'
18
+ import Nudge from '../Nudge/Nudge'
19
+ import Avatar from '../Avatar/Avatar'
20
+ import TextSegment from '../TextSegment/TextSegment'
18
21
  import type { Modes } from '../../design-tokens'
19
22
 
20
23
  /**
@@ -42,17 +45,46 @@ export interface BenefitCardProps {
42
45
  /** Header section title (e.g. `"You will earn"`). */
43
46
  headerTitle?: string
44
47
  /**
45
- * Highlighted item shown directly under the header title (icon + title +
46
- * optional trailing value). Rendered above the divider.
48
+ * @deprecated The header is now a multi-row list wrap. A single item still
49
+ * works and is rendered as a one-row list (lowest precedence, after
50
+ * `header` and `headerItems`). Prefer `headerItems` (declarative) or
51
+ * `header` (slot).
47
52
  */
48
53
  headerItem?: BenefitCardItem
54
+ /**
55
+ * Declarative header list-wrap rows shown under the header title and above
56
+ * the divider (icon + title + optional trailing value). Replaces the
57
+ * legacy single {@link BenefitCardProps.headerItem}. Ignored when the
58
+ * `header` slot is provided.
59
+ */
60
+ headerItems?: BenefitCardItem[]
61
+ /**
62
+ * Real slot for the header "list wrap" (the rows under the header title).
63
+ * Highest precedence — when provided, these children render instead of
64
+ * `headerItems` / `headerItem`; `modes` (plus the `List Item Style:
65
+ * Minimal` style) cascade into every child automatically.
66
+ */
67
+ header?: React.ReactNode
49
68
  /**
50
69
  * Toggles the whole header section (title + item + divider). Mirrors the
51
70
  * Figma `showHeader` property. Defaults to `true`.
52
71
  */
53
72
  showHeader?: boolean
54
- /** Body section title (e.g. `"Upgrade to JioFinance+ and earn more"`). */
73
+ /**
74
+ * @deprecated In the Figma redesign the plain body title was replaced by a
75
+ * slot-based upsell `Nudge` ({@link BenefitCardProps.bodyHeader}). Still
76
+ * honored for backward compatibility: when set, it renders as a plain text
77
+ * title in place of the default nudge. Prefer `bodyHeader`.
78
+ */
55
79
  bodyTitle?: string
80
+ /**
81
+ * Real slot rendered between the header divider and the body list — in the
82
+ * Figma reference this is an upsell `Nudge` (avatar + highlighted
83
+ * "JioFinance+" message). Defaults to that nudge. Pass `null`/`false` to
84
+ * hide it, `bodyTitle` for the legacy plain-text title, or any `ReactNode`
85
+ * for full control; `modes` cascade into the slot.
86
+ */
87
+ bodyHeader?: React.ReactNode
56
88
  /**
57
89
  * Body benefit rows. Ignored when `children` is provided (the slot wins).
58
90
  */
@@ -109,8 +141,11 @@ export interface BenefitCardProps {
109
141
  function BenefitCard({
110
142
  headerTitle = 'You will earn',
111
143
  headerItem,
144
+ headerItems,
145
+ header,
112
146
  showHeader = true,
113
- bodyTitle = 'Upgrade to JioFinance+ and earn more',
147
+ bodyTitle,
148
+ bodyHeader,
114
149
  items,
115
150
  children,
116
151
  buttonLabel = 'Upgrade',
@@ -125,14 +160,28 @@ function BenefitCard({
125
160
  }: BenefitCardProps) {
126
161
  const tokens = useMemo(() => resolveTokens(modes), [modes])
127
162
 
128
- // Sub-component modes. Consumer-supplied `modes` always win via spread order.
129
- const listItemModes = useMemo<Modes>(() => ({ 'List Item Style': 'Minimal', ...modes }), [modes])
163
+ // Component-level modes. `List Item Style: Minimal` and `Nudge padding: None`
164
+ // are BenefitCard's own defaults: they live on the card and cascade down into
165
+ // every child (the list-wrap rows and the upsell nudge) rather than being
166
+ // threaded onto each individual item. Consumer `modes` always win.
167
+ const cascadeModes = useMemo<Modes>(
168
+ () => ({ 'List Item Style': 'Minimal', 'Nudge padding': 'None', ...modes }),
169
+ [modes]
170
+ )
171
+ // Sub-element modes layer their own specifics on top of the consumer modes.
130
172
  const iconModes = useMemo<Modes>(() => ({ AppearanceBrand: 'Secondary', ...modes }), [modes])
131
173
  const trailingTextModes = useMemo<Modes>(
132
174
  () => ({ 'Text Sizes': 'Small', Weight: 'Regular', ...modes }),
133
175
  [modes]
134
176
  )
135
177
  const ctaModes = useMemo<Modes>(() => ({ 'Button / Size': 'S', ...modes }), [modes])
178
+ // The upsell nudge keeps a white/transparent background (`AppearanceBrand:
179
+ // Neutral` → `nudge/background: #ffffff`); its `Nudge padding: None` cascades
180
+ // in from `cascadeModes` so it sits flush with the card.
181
+ const nudgeModes = useMemo<Modes>(
182
+ () => ({ AppearanceBrand: 'Neutral', ...cascadeModes }),
183
+ [cascadeModes]
184
+ )
136
185
 
137
186
  const renderItem = (item: BenefitCardItem, key: React.Key) => {
138
187
  const leading =
@@ -157,25 +206,57 @@ function BenefitCard({
157
206
  leading={leading}
158
207
  trailing={trailing}
159
208
  onPress={item.onPress}
160
- modes={listItemModes}
161
209
  />
162
210
  )
163
211
  }
164
212
 
165
- const headerNode =
166
- showHeader && (headerTitle != null || headerItem != null) ? (
167
- <View style={styles.section}>
168
- <View style={styles.cardHeader}>
169
- {headerTitle != null ? <RNText style={tokens.title}>{headerTitle}</RNText> : null}
170
- {headerItem != null ? renderItem(headerItem, 'header-item') : null}
171
- </View>
172
- <Divider modes={modes} />
213
+ // Header "list wrap" — slot-based. Precedence: `header` slot > `headerItems`
214
+ // array > legacy single `headerItem` > Figma default rows. The component-level
215
+ // `cascadeModes` are pushed into the whole group at once, so individual rows
216
+ // never carry their own list-item modes.
217
+ const headerListSource = header
218
+ ? header
219
+ : (headerItems ?? (headerItem ? [headerItem] : DEFAULT_HEADER_ITEMS)).map((item, index) =>
220
+ renderItem(item, `header-${index}`)
221
+ )
222
+ const headerListNodes = cloneChildrenWithModes(headerListSource, cascadeModes)
223
+
224
+ const headerNode = showHeader ? (
225
+ <View style={styles.section}>
226
+ <View style={styles.cardHeader}>
227
+ {headerTitle != null ? <RNText style={tokens.title}>{headerTitle}</RNText> : null}
228
+ <View style={tokens.listWrap}>{headerListNodes}</View>
173
229
  </View>
174
- ) : null
230
+ <Divider modes={modes} />
231
+ </View>
232
+ ) : null
233
+
234
+ // Body "header" slot (between the divider and the body list). Precedence:
235
+ // explicit `bodyHeader` slot > legacy `bodyTitle` text > Figma upsell nudge.
236
+ const bodyHeaderNode =
237
+ bodyHeader === null || bodyHeader === false
238
+ ? null
239
+ : bodyHeader !== undefined
240
+ ? renderSlot(bodyHeader, cascadeModes)
241
+ : bodyTitle != null
242
+ ? <RNText style={tokens.title}>{bodyTitle}</RNText>
243
+ : (
244
+ <Nudge type="inline-compact" modes={{ ...nudgeModes, ...cascadeModes }} startSlot={DEFAULT_UPSELL_AVATAR}>
245
+ <TextSegment
246
+ modes={cascadeModes}
247
+ segments={[
248
+ { text: 'Upgrade to ' },
249
+ { text: 'JioFinance+', modes: { 'Text Appearance': 'Primary' } },
250
+ { text: ' and earn more' },
251
+ ]}
252
+ />
253
+ </Nudge>
254
+ )
175
255
 
176
- const bodyList = children
177
- ? cloneChildrenWithModes(children, listItemModes)
256
+ const bodyListSource = children
257
+ ? children
178
258
  : (items ?? DEFAULT_ITEMS).map((item, index) => renderItem(item, index))
259
+ const bodyList = cloneChildrenWithModes(bodyListSource, cascadeModes)
179
260
 
180
261
  const ctaNode = button ?? (
181
262
  <Button label={buttonLabel} modes={ctaModes} onPress={onButtonPress} />
@@ -189,10 +270,8 @@ function BenefitCard({
189
270
  const content = (
190
271
  <>
191
272
  {headerNode}
192
- <View style={tokens.body}>
193
- {bodyTitle != null ? <RNText style={tokens.title}>{bodyTitle}</RNText> : null}
194
- <View style={tokens.listWrap}>{bodyList}</View>
195
- </View>
273
+ {bodyHeaderNode}
274
+ <View style={tokens.listWrap}>{bodyList}</View>
196
275
  {showButton ? ctaNode : null}
197
276
  </>
198
277
  )
@@ -227,7 +306,6 @@ const CARD_HEADER_GAP = 4
227
306
 
228
307
  interface ResolvedTokens {
229
308
  container: ViewStyle
230
- body: ViewStyle
231
309
  listWrap: ViewStyle
232
310
  title: TextStyle
233
311
  }
@@ -267,10 +345,6 @@ function resolveTokens(modes: Modes): ResolvedTokens {
267
345
  flexDirection: 'column',
268
346
  alignItems: 'flex-start',
269
347
  },
270
- body: {
271
- alignSelf: 'stretch',
272
- gap,
273
- },
274
348
  listWrap: {
275
349
  alignSelf: 'stretch',
276
350
  gap,
@@ -287,11 +361,30 @@ function resolveTokens(modes: Modes): ResolvedTokens {
287
361
  }
288
362
  }
289
363
 
364
+ // Cascades `modes` into a slot node and unwraps a single child so the slot can
365
+ // be rendered inline without an extra fragment.
366
+ function renderSlot(node: React.ReactNode, modes: Modes): React.ReactNode {
367
+ const processed = cloneChildrenWithModes(node, modes)
368
+ return processed.length === 1 ? processed[0] : processed
369
+ }
370
+
371
+ // Figma reference rows for the header list wrap (two highlighted "JioPoints"
372
+ // rows). Used only when no `header` slot / `headerItems` / legacy `headerItem`
373
+ // is supplied.
374
+ const DEFAULT_HEADER_ITEMS: BenefitCardItem[] = [
375
+ { icon: 'ic_jewellery_diamond', title: 'JioPoints', trailingText: 'Up to 2000 pts' },
376
+ { icon: 'ic_jewellery_diamond', title: 'JioPoints', trailingText: 'Up to 2000 pts' },
377
+ ]
378
+
290
379
  const DEFAULT_ITEMS: BenefitCardItem[] = [
291
380
  { icon: 'ic_card', title: 'Up to ₹5000 cashback' },
292
381
  { icon: 'ic_card', title: '25% extra JioPoints' },
293
382
  ]
294
383
 
384
+ // Start-slot avatar for the default upsell nudge. `modes` cascade in from the
385
+ // nudge (XS keeps it compact next to the inline message).
386
+ const DEFAULT_UPSELL_AVATAR = <Avatar style="Image" modes={{ 'Avatar Size': 'XS' }} />
387
+
295
388
  const styles = StyleSheet.create({
296
389
  section: {
297
390
  alignSelf: 'stretch',
@@ -53,8 +53,8 @@ function BottomNav({
53
53
  const modes = { ...globalModes, ...propModes }
54
54
 
55
55
  // Resolve container styling tokens
56
- const backgroundColor = getVariableByName('bottomNav/background', modes) || '#ffffff'
57
- const borderColor = getVariableByName('bottomNav/border/color', modes) || '#cccfd1'
56
+ const backgroundColor = getVariableByName('bottomNav/background', modes)
57
+ const borderColor = getVariableByName('bottomNav/border/color', modes)
58
58
  const borderWidth = getVariableByName('bottomNav/border/width', modes) ?? 1
59
59
  const paddingTop = getVariableByName('bottomNav/padding/top', modes) ?? 10
60
60
  const paddingBottom = getVariableByName('bottomNav/padding/bottom', modes) ?? 23
@@ -60,17 +60,17 @@ function resolveBottomNavItemTokens(
60
60
  const gap = (getVariableByName('bottomNavItem/gap', modes) ?? 6) as number
61
61
 
62
62
  const fontFamily =
63
- (getVariableByName('bottomNavItem/fontFamily', modes) || 'JioType_Var:Medium') as string
63
+ (getVariableByName('bottomNavItem/fontFamily', modes)) as string
64
64
  const fontWeightRaw = getVariableByName('bottomNavItem/fontWeight', modes) ?? 500
65
65
  const fontWeight =
66
66
  typeof fontWeightRaw === 'number' ? fontWeightRaw.toString() : fontWeightRaw
67
67
  const fontSize = (getVariableByName('bottomNavItem/fontSize', modes) ?? 11) as number
68
68
  const lineHeight = (getVariableByName('bottomNavItem/lineHeight', modes) ?? 14) as number
69
69
 
70
- const labelColor = (getVariableByName('bottomNavItem/label/color', modes) || '#0d0d0f') as string
70
+ const labelColor = (getVariableByName('bottomNavItem/label/color', modes)) as string
71
71
 
72
72
  const resolvedIconColor =
73
- iconColorOverride || (getVariableByName('bottomNavItem/icon/color', modes) || '#ad8545') as string
73
+ iconColorOverride || (getVariableByName('bottomNavItem/icon/color', modes)) as string
74
74
  const resolvedIconSize =
75
75
  iconSizeOverride ?? (getVariableByName('bottomNavItem/icon/size', modes) ?? 24) as number
76
76
 
@@ -12,7 +12,7 @@ import {
12
12
  } from 'react-native'
13
13
  import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
14
14
  import { usePressableWebSupport, type SafePressableProps, type WebAccessibilityProps } from '../../utils/web-platform-utils'
15
- import { EMPTY_MODES, resolveTruncation } from '../../utils/react-utils'
15
+ import { EMPTY_MODES } from '../../utils/react-utils'
16
16
  import Icon from '../../icons/Icon'
17
17
  import Skeleton from '../../skeleton/Skeleton'
18
18
  import { useSkeleton } from '../../skeleton/SkeletonGroup'
@@ -95,6 +95,15 @@ const containerLayoutStyle = {
95
95
  justifyContent: 'center' as const,
96
96
  }
97
97
 
98
+ // Keeps the label on a single line. `flexShrink: 0` stops a tight flex parent
99
+ // from squeezing the text; on web `whiteSpace: 'nowrap'` is what actually
100
+ // prevents the line break (a bare `numberOfLines` line-clamp still allows the
101
+ // text to wrap inside a width-constrained pill in react-native-web).
102
+ const NO_WRAP_LABEL_STYLE: TextStyle = {
103
+ flexShrink: 0,
104
+ ...(IS_WEB ? { whiteSpace: 'nowrap' as const } : {}),
105
+ }
106
+
98
107
  // ---------------------------------------------------------------------------
99
108
  // Token resolution
100
109
  // ---------------------------------------------------------------------------
@@ -120,28 +129,28 @@ interface ButtonTokens {
120
129
  }
121
130
 
122
131
  function resolveButtonTokens(modes: Modes, disabled: boolean): ButtonTokens {
123
- const backgroundColor = getVariableByName('button/background', modes) || '#cfa159'
124
- const borderColor = getVariableByName('button/border/color', modes) || 'rgba(255,255,255,0)'
132
+ const backgroundColor = getVariableByName('button/background', modes)
133
+ const borderColor = getVariableByName('button/border/color', modes)
125
134
  const borderWidth = getVariableByName('button/border/size', modes)
126
- const radius = getVariableByName('button/radius', modes) || 9999
127
- const paddingHorizontal = getVariableByName('button/padding/horizontal', modes) || 20
128
- const paddingVertical = getVariableByName('button/padding/vertical', modes) || 12
129
- const gap = getVariableByName('button/gap', modes) || 8
135
+ const radius = getVariableByName('button/radius', modes)
136
+ const paddingHorizontal = getVariableByName('button/padding/horizontal', modes)
137
+ const paddingVertical = getVariableByName('button/padding/vertical', modes)
138
+ const gap = getVariableByName('button/gap', modes)
130
139
 
131
- const fontFamily = getVariableByName('button/fontFamily', modes) || 'System'
132
- const fontWeightValue = getVariableByName('button/fontWeight', modes) || 700
140
+ const fontFamily = getVariableByName('button/fontFamily', modes)
141
+ const fontWeightValue = getVariableByName('button/fontWeight', modes)
133
142
  const fontWeight = typeof fontWeightValue === 'number' ? fontWeightValue.toString() : fontWeightValue
134
- const lineHeight = getVariableByName('button/lineHeight', modes) || 19
135
- const fontSize = getVariableByName('button/fontSize', modes) || 16
136
- const textColor = getVariableByName('button/foreground', modes) || '#0f0d0a'
143
+ const lineHeight = getVariableByName('button/lineHeight', modes)
144
+ const fontSize = getVariableByName('button/fontSize', modes)
145
+ const textColor = getVariableByName('button/foreground', modes)
137
146
  const iconSize = (getVariableByName('button/icon/size', modes) ?? 18) as number
138
147
 
139
148
  // Pressed tokens are always resolved so the Pressable `style` callback can
140
149
  // apply the pressed visual without scheduling a React render.
141
150
  const pressedModes = { ...modes, 'Button / State': 'Pressed' }
142
- const pressedBg = getVariableByName('button/background', pressedModes) || backgroundColor
143
- const pressedBorderColor = getVariableByName('button/border/color', pressedModes) || borderColor
144
- const pressedTextColor = (getVariableByName('button/foreground', pressedModes) || textColor) as string
151
+ const pressedBg = getVariableByName('button/background', pressedModes)
152
+ const pressedBorderColor = getVariableByName('button/border/color', pressedModes)
153
+ const pressedTextColor = (getVariableByName('button/foreground', pressedModes)) as string
145
154
 
146
155
  // Hover tokens are only meaningful on web. Skipping them on native saves
147
156
  // ~3 token lookups + an object spread per render on every Button.
@@ -149,9 +158,9 @@ function resolveButtonTokens(modes: Modes, disabled: boolean): ButtonTokens {
149
158
  let hoverTextColor: string | null = null
150
159
  if (IS_WEB) {
151
160
  const hoverModes = { ...modes, 'Button / State': 'Hover' }
152
- const hoverBg = getVariableByName('button/background', hoverModes) || backgroundColor
153
- const hoverBorderColor = getVariableByName('button/border/color', hoverModes) || borderColor
154
- hoverTextColor = (getVariableByName('button/foreground', hoverModes) || textColor) as string
161
+ const hoverBg = getVariableByName('button/background', hoverModes)
162
+ const hoverBorderColor = getVariableByName('button/border/color', hoverModes)
163
+ hoverTextColor = (getVariableByName('button/foreground', hoverModes)) as string
155
164
  hoverContainer = { backgroundColor: hoverBg as string, borderColor: hoverBorderColor as string }
156
165
  }
157
166
 
@@ -300,8 +309,9 @@ function ButtonImpl({
300
309
  } else {
301
310
  content = (
302
311
  <Text
303
- style={activeLabelStyle}
304
- {...resolveTruncation(disableTruncation, 1)}
312
+ style={[activeLabelStyle, disableTruncation ? null : NO_WRAP_LABEL_STYLE]}
313
+ numberOfLines={disableTruncation ? undefined : 1}
314
+ ellipsizeMode={disableTruncation ? undefined : 'tail'}
305
315
  >
306
316
  {label}
307
317
  </Text>