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
@@ -1,7 +1,6 @@
1
1
  import React, { useId } from 'react'
2
2
  import { View, StyleSheet, Platform, UIManager, type ViewStyle, type StyleProp } from 'react-native'
3
3
  import { BlurView } from '@react-native-community/blur'
4
- import MaskedView from '@react-native-masked-view/masked-view'
5
4
  import Svg, { Defs, LinearGradient, Stop, Rect } from 'react-native-svg'
6
5
 
7
6
  export type GlassTint = 'dark' | 'light'
@@ -31,10 +30,17 @@ export interface GlassFillProps {
31
30
  /**
32
31
  * Render a *progressive* (variable) blur instead of a uniform one: fully
33
32
  * clear at the top, easing into a soft blur toward the bottom. Implemented
34
- * by stacking two `MaskedView` + `BlurView` layers (a faint base + a
35
- * slightly stronger accent near the bottom), each revealed via an eased
36
- * multi-stop SVG gradient mask so the blur swells smoothly rather than
37
- * along a hard seam. Works on iOS and Android with no extra native module.
33
+ * mask-free by stacking several bottom-anchored `BlurView` "bands": each
34
+ * band is clipped to start a little lower than the last, and because a
35
+ * `BlurView` blurs whatever is rendered behind it, the bands COMPOUND toward
36
+ * the bottom (a lower band re-blurs the already-blurred output above it) so
37
+ * the effective radius swells smoothly downward. This deliberately avoids
38
+ * masking a native view — the old implementation wrapped each `BlurView` in
39
+ * `@react-native-masked-view/masked-view`, a legacy Paper component that
40
+ * resolves to a plain object (crashing "Element type is invalid") under the
41
+ * New Architecture interop. Works on iOS and Android with no extra native
42
+ * module. When the native blur isn't linked at all, falls back to a pure
43
+ * `react-native-svg` gradient scrim (see below).
38
44
  */
39
45
  progressive?: boolean
40
46
  /**
@@ -70,14 +76,13 @@ const DEFAULT_FALLBACK_LIGHT = '#ffffff66'
70
76
  const NATIVE_BLUR_NAME = Platform.OS === 'android' ? 'AndroidBlurView' : 'BlurView'
71
77
 
72
78
  /**
73
- * Alpha stop on a layer's vertical reveal mask. `offset` is the vertical
74
- * position (0 = top of the surface, 1 = bottom); `opacity` is the mask alpha
75
- * there (0 = layer hidden / fully clear, 1 = layer fully applied).
79
+ * Alpha stop on the no-native-blur fallback gradient. `offset` is the vertical
80
+ * position (0 = top of the surface, 1 = bottom); `opacity` is the tint alpha
81
+ * there (0 = fully clear, 1 = full fallback color).
76
82
  *
77
- * Using several stops (rather than a single linear 0 → 1 ramp) lets each layer
78
- * EASE in, so the blur swells smoothly toward the bottom instead of appearing
79
- * along a hard horizontal seam. That soft S-curve is what gives the surface its
80
- * "glass" feel rather than a flat translucent panel.
83
+ * Using several stops (rather than a single linear 0 → 1 ramp) eases the tint
84
+ * in, so it swells smoothly toward the bottom instead of along a hard seam —
85
+ * the soft S-curve that gives the surface its "glass" feel.
81
86
  */
82
87
  interface MaskStop {
83
88
  offset: number
@@ -85,25 +90,24 @@ interface MaskStop {
85
90
  }
86
91
 
87
92
  /**
88
- * A single layer of the progressive ramp.
89
- * - `stops` describe how this layer is revealed from top to bottom.
90
- * - `amount` is this layer's share (0–1) of the max `blurAmount`.
93
+ * A single bottom-anchored band of the progressive blur stack.
94
+ * - `start` is where the band begins, as a fraction from the top (0 = covers
95
+ * the whole surface, 0.8 = only the bottom 20%). Each band runs from `start`
96
+ * to the bottom.
97
+ * - `amount` is the band's own blur strength as a share (0–1) of the peak.
91
98
  *
92
- * We stack just TWO layers on both platforms: a faint base blur that covers
93
- * most of the footer and a slightly stronger accent concentrated near the
94
- * bottom. Keeping the overlap shallow avoids compounding the dark tint of
95
- * multiple `BlurView`s (which is what made the earlier 3-layer ramp read as a
96
- * heavy block), while still giving a genuine variable-radius result — the blur
97
- * radius grows toward the bottom where the two layers overlap.
99
+ * Because each `BlurView` re-blurs everything rendered behind it, the bands
100
+ * COMPOUND where they overlap (toward the bottom), so the effective radius grows
101
+ * downward without any masking. The top region is covered only by the first,
102
+ * faint band; the bottom is covered by all of them.
98
103
  */
99
- interface ProgressiveLayer {
100
- stops: MaskStop[]
104
+ interface ProgressiveBand {
105
+ start: number
101
106
  amount: number
102
107
  }
103
108
 
104
- // Base reveal: a faint trace of blur begins near the very top and grows
105
- // steadily downward, so the upper half still carries visible glass rather than
106
- // snapping clear. Also reused for the no-native-blur fallback scrim.
109
+ // Eased tint ramp for the no-native-blur fallback scrim. A faint trace begins
110
+ // near the very top and grows steadily downward.
107
111
  const BASE_MASK_STOPS: MaskStop[] = [
108
112
  { offset: 0.0, opacity: 0 },
109
113
  { offset: 0.08, opacity: 0.12 },
@@ -112,18 +116,16 @@ const BASE_MASK_STOPS: MaskStop[] = [
112
116
  { offset: 1.0, opacity: 1 },
113
117
  ]
114
118
 
115
- const PROGRESSIVE_LAYERS: ProgressiveLayer[] = [
116
- { amount: 0.65, stops: BASE_MASK_STOPS },
117
- // Accent: the strongest blur, gathering over the lower portion for depth.
118
- {
119
- amount: 1.0,
120
- stops: [
121
- { offset: 0.0, opacity: 0 },
122
- { offset: 0.3, opacity: 0.15 },
123
- { offset: 0.65, opacity: 0.65 },
124
- { offset: 1.0, opacity: 1 },
125
- ],
126
- },
119
+ // Bottom-anchored blur bands (top → bottom). The first band is faint and covers
120
+ // the whole surface so the top reads as barely-there glass; each subsequent band
121
+ // starts lower and adds strength, compounding toward the bottom for a smooth
122
+ // variable-radius result. Quadrature of these shares lands the bottom at ~peak.
123
+ const PROGRESSIVE_BANDS: ProgressiveBand[] = [
124
+ { start: 0.0, amount: 0.18 },
125
+ { start: 0.3, amount: 0.28 },
126
+ { start: 0.52, amount: 0.38 },
127
+ { start: 0.7, amount: 0.5 },
128
+ { start: 0.84, amount: 0.6 },
127
129
  ]
128
130
 
129
131
  /**
@@ -159,18 +161,18 @@ const NATIVE_BLUR_SUPPORTED: boolean = (() => {
159
161
  })()
160
162
 
161
163
  /**
162
- * Vertical alpha-gradient mask drawn with `react-native-svg`. `MaskedView`
163
- * reveals its child in proportion to this mask's alpha, so feeding it an eased
164
- * multi-stop gradient makes the layer's blur swell in smoothly from top to
165
- * bottom instead of along a hard seam.
164
+ * Vertical color-gradient scrim drawn with `react-native-svg` — used as the
165
+ * no-native-blur fallback. Paints `color` at the eased per-stop alpha so the
166
+ * tint swells smoothly from clear (top) to full (bottom), exactly mirroring the
167
+ * old `MaskedView`-over-solid-color fallback but with no native-view masking.
166
168
  */
167
- function GradientMask({ id, stops }: { id: string; stops: MaskStop[] }) {
169
+ function GradientScrim({ id, color, stops }: { id: string; color: string; stops: MaskStop[] }) {
168
170
  return (
169
171
  <Svg width="100%" height="100%">
170
172
  <Defs>
171
173
  <LinearGradient id={id} x1="0" y1="0" x2="0" y2="1">
172
174
  {stops.map((s, i) => (
173
- <Stop key={i} offset={s.offset} stopColor="#000000" stopOpacity={s.opacity} />
175
+ <Stop key={i} offset={s.offset} stopColor={color} stopOpacity={s.opacity} />
174
176
  ))}
175
177
  </LinearGradient>
176
178
  </Defs>
@@ -230,25 +232,26 @@ function GlassFill({
230
232
  if (!NATIVE_BLUR_SUPPORTED) {
231
233
  return (
232
234
  <View style={[StyleSheet.absoluteFill, style]} pointerEvents="none">
233
- <MaskedView
234
- style={StyleSheet.absoluteFill}
235
- maskElement={<GradientMask id={`${maskId}-fb`} stops={BASE_MASK_STOPS} />}
236
- >
237
- <View style={[StyleSheet.absoluteFill, { backgroundColor: fallbackColor }]} />
238
- </MaskedView>
235
+ <GradientScrim id={`${maskId}-fb`} color={fallbackColor} stops={BASE_MASK_STOPS} />
239
236
  </View>
240
237
  )
241
238
  }
242
239
 
243
240
  return (
244
241
  <View style={[StyleSheet.absoluteFill, style]} pointerEvents="none">
245
- {PROGRESSIVE_LAYERS.map((layer, i) => {
246
- const amount = Math.max(1, Math.round(peakBlur * layer.amount))
242
+ {PROGRESSIVE_BANDS.map((band, i) => {
243
+ const amount = Math.max(1, Math.round(peakBlur * band.amount))
247
244
  return (
248
- <MaskedView
245
+ // Each band is clipped to start at `band.start` and run to
246
+ // the bottom; its `BlurView` blurs the content (and any
247
+ // lower bands) behind it, so the radius compounds downward.
248
+ <View
249
249
  key={i}
250
- style={StyleSheet.absoluteFill}
251
- maskElement={<GradientMask id={`${maskId}-${i}`} stops={layer.stops} />}
250
+ style={[
251
+ StyleSheet.absoluteFill,
252
+ { top: `${band.start * 100}%`, overflow: 'hidden' },
253
+ ]}
254
+ pointerEvents="none"
252
255
  >
253
256
  <BlurView
254
257
  style={StyleSheet.absoluteFill}
@@ -256,7 +259,7 @@ function GlassFill({
256
259
  blurAmount={amount}
257
260
  reducedTransparencyFallbackColor={fallbackColor}
258
261
  />
259
- </MaskedView>
262
+ </View>
260
263
  )
261
264
  })}
262
265
  </View>
@@ -2,3 +2,5 @@ export { cloneChildrenWithModes, flattenChildren } from './react-utils'
2
2
  export { default as MediaSource } from './MediaSource'
3
3
  export type { UnifiedSource, MediaSourceProps } from './MediaSource'
4
4
  export { formatIndianNumber } from './number-utils'
5
+ export { boxShadow, supportsNativeBoxShadow, parseBoxShadow, parseSingleShadow } from './shadow'
6
+ export type { BoxShadowOptions, ParsedShadow } from './shadow'
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import type { StyleProp, ViewStyle } from 'react-native';
2
+ import { Platform, type StyleProp, type ViewStyle, type TextStyle } from 'react-native';
3
3
  import type { Modes } from '../design-tokens'
4
4
 
5
5
  /**
@@ -172,6 +172,77 @@ export function resolveTruncation(
172
172
  return { numberOfLines, ellipsizeMode };
173
173
  }
174
174
 
175
+ export type TextLayoutResult = {
176
+ numberOfLines?: number | undefined;
177
+ ellipsizeMode?: EllipsizeMode | undefined;
178
+ /**
179
+ * Style fragment that MUST be merged onto the target `<Text>` (after the
180
+ * component's own style and any consumer `style` override) so the escape
181
+ * hatches can win. `undefined` when neither flag is set.
182
+ */
183
+ style?: TextStyle | undefined;
184
+ };
185
+
186
+ /**
187
+ * Resolves the `<Text>` props + style for the two truncation escape hatches.
188
+ * This supersedes {@link resolveTruncation} for components that want the
189
+ * "brutal" overflow behaviour rather than just dropping the line clamp.
190
+ *
191
+ * - `disableTruncation`: never truncate. Drops `numberOfLines`/`ellipsizeMode`
192
+ * AND sets `flexShrink: 0`, so a tight flex parent can no longer squeeze the
193
+ * text into an ellipsis — instead the text keeps its intrinsic size and
194
+ * overflows, even if that means blowing past (and visually breaking) the
195
+ * parent layout. The text still wraps onto multiple lines.
196
+ * - `singleLine`: force everything onto one line with no wrapping. Implies
197
+ * `disableTruncation` (the ellipsis is never shown). On web this adds
198
+ * `whiteSpace: 'nowrap'` so the single line overflows horizontally instead of
199
+ * wrapping. The text is never shrunk.
200
+ *
201
+ * Note (native): React Native's `<Text>` has no `white-space: nowrap`
202
+ * equivalent, so on iOS/Android `singleLine` cannot force a hard non-wrapping
203
+ * overflow — it behaves like `disableTruncation` (no ellipsis, no shrink). The
204
+ * hard single-line overflow is honoured on web (Storybook / react-native-web).
205
+ *
206
+ * When neither flag is set, the supplied `numberOfLines`/`ellipsizeMode` pass
207
+ * through unchanged and no extra style is returned.
208
+ */
209
+ export function resolveTextLayout({
210
+ disableTruncation,
211
+ singleLine,
212
+ numberOfLines,
213
+ ellipsizeMode,
214
+ }: {
215
+ disableTruncation?: boolean | undefined;
216
+ singleLine?: boolean | undefined;
217
+ numberOfLines?: number | undefined;
218
+ ellipsizeMode?: EllipsizeMode | undefined;
219
+ }): TextLayoutResult {
220
+ if (singleLine) {
221
+ return {
222
+ numberOfLines: undefined,
223
+ ellipsizeMode: undefined,
224
+ style: {
225
+ flexShrink: 0,
226
+ flexGrow: 0,
227
+ ...(Platform.OS === 'web'
228
+ ? { whiteSpace: 'nowrap' as const, overflow: 'visible' as const }
229
+ : {}),
230
+ },
231
+ }
232
+ }
233
+ if (disableTruncation) {
234
+ return {
235
+ numberOfLines: undefined,
236
+ ellipsizeMode: undefined,
237
+ style: {
238
+ flexShrink: 0,
239
+ ...(Platform.OS === 'web' ? { overflow: 'visible' as const } : {}),
240
+ },
241
+ }
242
+ }
243
+ return { numberOfLines, ellipsizeMode }
244
+ }
245
+
175
246
  /**
176
247
  * Flattens React children, extracting them from Fragments.
177
248
  * Useful for Group components that need to process individual items (e.g., for layout or styling)
@@ -0,0 +1,219 @@
1
+ import { Platform } from 'react-native'
2
+ import type { ViewStyle } from 'react-native'
3
+
4
+ /**
5
+ * Cross-platform drop-shadow helper with a backward-compatibility layer.
6
+ *
7
+ * Why this exists
8
+ * ----------------
9
+ * The spec-compliant `boxShadow` style prop only landed in React Native 0.76
10
+ * (and only on the New Architecture / Fabric). Older apps that consume this
11
+ * library are still on pre-0.76 React Native where `boxShadow` is silently
12
+ * ignored on native, so their shadows simply disappear.
13
+ *
14
+ * Rather than hand-rolling a `Platform.select` block in every component, route
15
+ * ALL drop shadows through this single helper. When `boxShadow` is natively
16
+ * supported it is used verbatim (web + RN 0.76+ Fabric). When it is NOT
17
+ * supported, the CSS-style shadow string is parsed and translated into the
18
+ * legacy native shadow API:
19
+ * - iOS: `shadowColor`, `shadowOffset`, `shadowOpacity`, `shadowRadius`
20
+ * - Android: `elevation`
21
+ *
22
+ * @example
23
+ * ```tsx
24
+ * const style = boxShadow('0px 2px 4px 0px rgba(0,0,0,0.18)')
25
+ * <View style={[base, style]} />
26
+ * ```
27
+ */
28
+
29
+ export interface ParsedShadow {
30
+ offsetX: number
31
+ offsetY: number
32
+ blur: number
33
+ spread: number
34
+ color: string
35
+ inset: boolean
36
+ }
37
+
38
+ export interface BoxShadowOptions {
39
+ /**
40
+ * Explicit Android `elevation` for the legacy fallback. When omitted it is
41
+ * derived from the most prominent shadow's blur radius. Android elevation
42
+ * cannot reproduce colored/ring shadows, so provide this when the default
43
+ * heuristic doesn't match the design.
44
+ */
45
+ elevation?: number
46
+ }
47
+
48
+ // `boxShadow` is intentionally absent from the @types/react-native surface in
49
+ // this repo (pinned to 0.73), so we widen ViewStyle locally for the cases
50
+ // where we DO emit the native/web boxShadow string.
51
+ type ShadowViewStyle = ViewStyle & { boxShadow?: string }
52
+
53
+ /**
54
+ * Whether the spec-compliant `boxShadow` style prop is honored at runtime.
55
+ * - Web (react-native-web) always supports it.
56
+ * - Native supports it from RN 0.76+ AND only on the New Architecture (Fabric).
57
+ */
58
+ export function supportsNativeBoxShadow(): boolean {
59
+ if (Platform.OS === 'web') {
60
+ return true
61
+ }
62
+
63
+ const version = (Platform.constants as { reactNativeVersion?: { major: number; minor: number } } | undefined)
64
+ ?.reactNativeVersion
65
+
66
+ const isVersionSupported = version
67
+ ? version.major > 0 || (version.major === 0 && version.minor >= 76)
68
+ : false
69
+
70
+ // Even on 0.76+, boxShadow is a New Architecture feature. Fabric exposes a
71
+ // global UI manager; its presence is the most reliable runtime signal.
72
+ const isFabric =
73
+ typeof globalThis !== 'undefined' &&
74
+ (globalThis as { nativeFabricUIManager?: unknown }).nativeFabricUIManager != null
75
+
76
+ return isVersionSupported && isFabric
77
+ }
78
+
79
+ /**
80
+ * Splits a (potentially multi-) box-shadow string on top-level commas, i.e.
81
+ * commas that are NOT inside a color function such as `rgba(12, 13, 16, 0.12)`.
82
+ */
83
+ function splitShadows(value: string): string[] {
84
+ const out: string[] = []
85
+ let depth = 0
86
+ let current = ''
87
+
88
+ for (const ch of value) {
89
+ if (ch === '(') depth++
90
+ else if (ch === ')') depth--
91
+
92
+ if (ch === ',' && depth === 0) {
93
+ if (current.trim()) out.push(current.trim())
94
+ current = ''
95
+ } else {
96
+ current += ch
97
+ }
98
+ }
99
+
100
+ if (current.trim()) out.push(current.trim())
101
+ return out
102
+ }
103
+
104
+ /**
105
+ * Parses a single CSS box-shadow layer into its primitive parts.
106
+ * Supports: `[inset] offsetX offsetY [blur] [spread] color` in any sensible
107
+ * ordering of the keyword/color, with `rgb()/rgba()/hsl()/hsla()`, hex, or
108
+ * named colors.
109
+ */
110
+ export function parseSingleShadow(input: string): ParsedShadow {
111
+ let s = input.trim()
112
+
113
+ let inset = false
114
+ if (/(^|\s)inset(\s|$)/i.test(s)) {
115
+ inset = true
116
+ s = s.replace(/(^|\s)inset(\s|$)/i, ' ').trim()
117
+ }
118
+
119
+ let color = 'rgba(0,0,0,1)'
120
+ const fnColor = s.match(/(?:rgba?|hsla?)\([^)]*\)/i)
121
+ if (fnColor) {
122
+ color = fnColor[0]
123
+ s = s.replace(fnColor[0], ' ').trim()
124
+ } else {
125
+ const hex = s.match(/#[0-9a-fA-F]{3,8}\b/)
126
+ if (hex) {
127
+ color = hex[0]
128
+ s = s.replace(hex[0], ' ').trim()
129
+ } else {
130
+ // Fall back to a trailing named color token (e.g. "red", "black").
131
+ const tokens = s.split(/\s+/).filter(Boolean)
132
+ const last = tokens[tokens.length - 1]
133
+ if (last && Number.isNaN(parseFloat(last))) {
134
+ color = last
135
+ tokens.pop()
136
+ s = tokens.join(' ')
137
+ }
138
+ }
139
+ }
140
+
141
+ const nums = s.split(/\s+/).filter(Boolean).map((t) => parseFloat(t) || 0)
142
+ const [offsetX = 0, offsetY = 0, blur = 0, spread = 0] = nums
143
+
144
+ return { offsetX, offsetY, blur, spread, color, inset }
145
+ }
146
+
147
+ /**
148
+ * Parses a full box-shadow string (one or more comma-separated layers).
149
+ */
150
+ export function parseBoxShadow(value: string): ParsedShadow[] {
151
+ return splitShadows(value).map(parseSingleShadow)
152
+ }
153
+
154
+ /**
155
+ * Picks the visually dominant shadow layer (largest blur, then largest spread).
156
+ * iOS' legacy shadow API can only render a single shadow per view.
157
+ */
158
+ function pickPrimary(shadows: ParsedShadow[]): ParsedShadow | undefined {
159
+ if (shadows.length === 0) return undefined
160
+ return shadows.reduce((best, s) => {
161
+ if (s.blur > best.blur) return s
162
+ if (s.blur === best.blur && s.spread > best.spread) return s
163
+ return best
164
+ })
165
+ }
166
+
167
+ /**
168
+ * Translates the parsed shadow into the legacy native shadow style used by
169
+ * pre-0.76 React Native.
170
+ */
171
+ function legacyShadowStyle(value: string, options?: BoxShadowOptions): ViewStyle {
172
+ const shadows = parseBoxShadow(value)
173
+ const primary = pickPrimary(shadows)
174
+
175
+ if (!primary) {
176
+ return {}
177
+ }
178
+
179
+ if (Platform.OS === 'android') {
180
+ const elevation = options?.elevation ?? Math.max(0, Math.round(primary.blur / 2))
181
+ if (elevation <= 0) {
182
+ return {}
183
+ }
184
+ return { elevation }
185
+ }
186
+
187
+ // iOS: shadowOpacity defaults to 0 (invisible), so it MUST be set. We keep
188
+ // the full color (its own alpha is respected) and use opacity 1 as the
189
+ // multiplier so rgba() alpha is honored end-to-end.
190
+ return {
191
+ shadowColor: primary.color,
192
+ shadowOffset: { width: primary.offsetX, height: primary.offsetY },
193
+ shadowOpacity: 1,
194
+ shadowRadius: primary.blur,
195
+ }
196
+ }
197
+
198
+ /**
199
+ * Returns a style object that renders the given CSS-style box-shadow on every
200
+ * platform. Uses the native `boxShadow` prop when supported, otherwise falls
201
+ * back to the legacy `shadow*` (iOS) / `elevation` (Android) API.
202
+ *
203
+ * @param value A CSS box-shadow string, e.g. `'0px 2px 4px 0px rgba(0,0,0,0.2)'`.
204
+ * Multiple comma-separated layers are supported; on the legacy
205
+ * fallback iOS uses the most prominent layer and Android uses a
206
+ * single elevation.
207
+ * @param options Optional overrides (e.g. explicit Android `elevation`).
208
+ */
209
+ export function boxShadow(value: string, options?: BoxShadowOptions): ViewStyle {
210
+ if (!value) {
211
+ return {}
212
+ }
213
+
214
+ if (supportsNativeBoxShadow()) {
215
+ return { boxShadow: value } as ShadowViewStyle
216
+ }
217
+
218
+ return legacyShadowStyle(value, options)
219
+ }