jfs-components 0.1.0 → 0.1.8

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 (392) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/lib/commonjs/components/AmountInput/AmountInput.js +8 -5
  3. package/lib/commonjs/components/AreaLineChart/AreaLineChart.js +1 -1
  4. package/lib/commonjs/components/Balance/Balance.js +17 -12
  5. package/lib/commonjs/components/BenefitCard/BenefitCard.js +231 -0
  6. package/lib/commonjs/components/Card/Card.js +2 -1
  7. package/lib/commonjs/components/CardFeedback/CardFeedback.js +2 -1
  8. package/lib/commonjs/components/CcCard/CcCard.js +470 -0
  9. package/lib/commonjs/components/Checkbox/Checkbox.js +6 -4
  10. package/lib/commonjs/components/CheckboxItem/CheckboxItem.js +4 -3
  11. package/lib/commonjs/components/CompareTable/CompareTable.js +372 -0
  12. package/lib/commonjs/components/ComparisonBar/ComparisonBar.js +266 -0
  13. package/lib/commonjs/components/Drawer/Drawer.js +13 -4
  14. package/lib/commonjs/components/DropdownInput/DropdownInput.js +36 -4
  15. package/lib/commonjs/components/FormField/FormField.js +4 -3
  16. package/lib/commonjs/components/FullscreenModal/FullscreenModal.js +62 -2
  17. package/lib/commonjs/components/Image/Image.js +11 -5
  18. package/lib/commonjs/components/InputSearch/InputSearch.js +6 -4
  19. package/lib/commonjs/components/LottiePlayer/loadNativeLottieView.js +8 -13
  20. package/lib/commonjs/components/NoteInput/NoteInput.js +6 -5
  21. package/lib/commonjs/components/Overlay/Overlay.js +92 -0
  22. package/lib/commonjs/components/PdpCcCard/PdpCcCard.js +273 -0
  23. package/lib/commonjs/components/PlanComparisonCard/PlanComparisonCard.js +2 -1
  24. package/lib/commonjs/components/ProductMerchandisingCard/GlassFill.js +263 -0
  25. package/lib/commonjs/components/ProductMerchandisingCard/GlassFill.web.js +116 -0
  26. package/lib/commonjs/components/ProductMerchandisingCard/ProductMerchandisingCard.js +353 -0
  27. package/lib/commonjs/components/ProjectionMarker/ProjectionMarker.js +161 -0
  28. package/lib/commonjs/components/Radio/Radio.js +5 -5
  29. package/lib/commonjs/components/Slider/Slider.js +473 -0
  30. package/lib/commonjs/components/TextInput/TextInput.js +15 -9
  31. package/lib/commonjs/components/TextSegment/TextSegment.js +118 -0
  32. package/lib/commonjs/components/docs/modeControls.js +116 -0
  33. package/lib/commonjs/components/index.js +70 -0
  34. package/lib/commonjs/design-tokens/Coin Variables-variables-full.json +1 -1
  35. package/lib/commonjs/design-tokens/JFSThemeProvider.js +1 -1
  36. package/lib/commonjs/design-tokens/figma-modes.generated.js +420 -0
  37. package/lib/commonjs/design-tokens/index.js +11 -0
  38. package/lib/commonjs/icons/registry.js +1 -1
  39. package/lib/commonjs/utils/react-utils.js +22 -0
  40. package/lib/module/components/Accordion/Accordion.js +1 -2
  41. package/lib/module/components/AmountInput/AmountInput.js +6 -4
  42. package/lib/module/components/AreaLineChart/AreaLineChart.js +1 -1
  43. package/lib/module/components/Balance/Balance.js +18 -13
  44. package/lib/module/components/BenefitCard/BenefitCard.js +225 -0
  45. package/lib/module/components/Card/Card.js +1 -2
  46. package/lib/module/components/CardFeedback/CardFeedback.js +1 -2
  47. package/lib/module/components/CcCard/CcCard.js +464 -0
  48. package/lib/module/components/Checkbox/Checkbox.js +6 -6
  49. package/lib/module/components/CheckboxItem/CheckboxItem.js +5 -4
  50. package/lib/module/components/CompareTable/CompareTable.js +367 -0
  51. package/lib/module/components/ComparisonBar/ComparisonBar.js +260 -0
  52. package/lib/module/components/Drawer/Drawer.js +12 -4
  53. package/lib/module/components/DropdownInput/DropdownInput.js +37 -5
  54. package/lib/module/components/FormField/FormField.js +5 -4
  55. package/lib/module/components/FullscreenModal/FullscreenModal.js +64 -5
  56. package/lib/module/components/Image/Image.js +11 -5
  57. package/lib/module/components/InputSearch/InputSearch.js +6 -4
  58. package/lib/module/components/InstitutionBadge/InstitutionBadge.js +1 -2
  59. package/lib/module/components/LottiePlayer/loadNativeLottieView.js +8 -13
  60. package/lib/module/components/MoneyValue/MoneyValue.js +1 -2
  61. package/lib/module/components/NoteInput/NoteInput.js +7 -6
  62. package/lib/module/components/OTP/OTP.js +1 -2
  63. package/lib/module/components/Overlay/Overlay.js +87 -0
  64. package/lib/module/components/PdpCcCard/PdpCcCard.js +267 -0
  65. package/lib/module/components/PlanComparisonCard/PlanComparisonCard.js +1 -2
  66. package/lib/module/components/PoweredByLabel/PoweredByLabel.js +1 -2
  67. package/lib/module/components/ProductMerchandisingCard/GlassFill.js +257 -0
  68. package/lib/module/components/ProductMerchandisingCard/GlassFill.web.js +111 -0
  69. package/lib/module/components/ProductMerchandisingCard/ProductMerchandisingCard.js +347 -0
  70. package/lib/module/components/ProjectionMarker/ProjectionMarker.js +156 -0
  71. package/lib/module/components/Radio/Radio.js +5 -4
  72. package/lib/module/components/RechargeCard/RechargeCard.js +1 -2
  73. package/lib/module/components/Section/Section.js +1 -2
  74. package/lib/module/components/Slider/Slider.js +468 -0
  75. package/lib/module/components/TextInput/TextInput.js +16 -12
  76. package/lib/module/components/TextSegment/TextSegment.js +113 -0
  77. package/lib/module/components/UpiHandle/UpiHandle.js +1 -2
  78. package/lib/module/components/docs/modeControls.js +111 -0
  79. package/lib/module/components/index.js +10 -0
  80. package/lib/module/design-tokens/Coin Variables-variables-full.json +1 -1
  81. package/lib/module/design-tokens/JFSThemeProvider.js +1 -1
  82. package/lib/module/design-tokens/figma-modes.generated.js +416 -0
  83. package/lib/module/design-tokens/index.js +2 -1
  84. package/lib/module/icons/registry.js +1 -1
  85. package/lib/module/utils/react-utils.js +21 -1
  86. package/lib/typescript/src/components/Accordion/Accordion.d.ts +2 -1
  87. package/lib/typescript/src/components/AccordionCheckbox/AccordionCheckbox.d.ts +2 -1
  88. package/lib/typescript/src/components/AccountCard/AccountCard.d.ts +2 -1
  89. package/lib/typescript/src/components/ActionFooter/ActionFooter.d.ts +2 -1
  90. package/lib/typescript/src/components/ActionTile/ActionTile.d.ts +2 -1
  91. package/lib/typescript/src/components/AllocationComparisonChart/AllocationComparisonChart.d.ts +2 -1
  92. package/lib/typescript/src/components/AmountInput/AmountInput.d.ts +5 -3
  93. package/lib/typescript/src/components/AppBar/AppBar.d.ts +2 -1
  94. package/lib/typescript/src/components/AreaLineChart/AreaLineChart.d.ts +3 -2
  95. package/lib/typescript/src/components/Attached/Attached.d.ts +2 -1
  96. package/lib/typescript/src/components/Avatar/Avatar.d.ts +2 -1
  97. package/lib/typescript/src/components/AvatarGroup/AvatarGroup.d.ts +2 -1
  98. package/lib/typescript/src/components/Badge/Badge.d.ts +2 -1
  99. package/lib/typescript/src/components/Balance/Balance.d.ts +2 -1
  100. package/lib/typescript/src/components/BenefitCard/BenefitCard.d.ts +93 -0
  101. package/lib/typescript/src/components/BottomNav/BottomNav.d.ts +2 -1
  102. package/lib/typescript/src/components/BottomNavItem/BottomNavItem.d.ts +2 -1
  103. package/lib/typescript/src/components/BrandChip/BrandChip.d.ts +2 -1
  104. package/lib/typescript/src/components/BubbleChart/BubbleChart.d.ts +2 -1
  105. package/lib/typescript/src/components/Button/Button.d.ts +2 -1
  106. package/lib/typescript/src/components/ButtonGroup/ButtonGroup.d.ts +2 -1
  107. package/lib/typescript/src/components/Card/Card.d.ts +3 -2
  108. package/lib/typescript/src/components/CardAdvisory/CardAdvisory.d.ts +2 -1
  109. package/lib/typescript/src/components/CardBankAccount/CardBankAccount.d.ts +2 -1
  110. package/lib/typescript/src/components/CardCTA/CardCTA.d.ts +2 -1
  111. package/lib/typescript/src/components/CardFeedback/CardFeedback.d.ts +7 -6
  112. package/lib/typescript/src/components/CardFinancialCondition/CardFinancialCondition.d.ts +2 -1
  113. package/lib/typescript/src/components/CardInsight/CardInsight.d.ts +2 -1
  114. package/lib/typescript/src/components/CardProviderInfo/CardProviderInfo.d.ts +2 -1
  115. package/lib/typescript/src/components/Carousel/Carousel.d.ts +4 -3
  116. package/lib/typescript/src/components/CcCard/CcCard.d.ts +137 -0
  117. package/lib/typescript/src/components/Checkbox/Checkbox.d.ts +5 -3
  118. package/lib/typescript/src/components/CheckboxGroup/CheckboxGroup.d.ts +2 -1
  119. package/lib/typescript/src/components/CheckboxItem/CheckboxItem.d.ts +4 -3
  120. package/lib/typescript/src/components/ChipGroup/ChipGroup.d.ts +2 -1
  121. package/lib/typescript/src/components/ChipSelect/ChipSelect.d.ts +2 -1
  122. package/lib/typescript/src/components/CircularProgressBar/CircularProgressBar.d.ts +2 -1
  123. package/lib/typescript/src/components/CircularProgressBarDoted/CircularProgressBarDoted.d.ts +2 -1
  124. package/lib/typescript/src/components/CircularRating/CircularRating.d.ts +2 -1
  125. package/lib/typescript/src/components/ClusterBubble/ClusterBubble.d.ts +2 -1
  126. package/lib/typescript/src/components/CompareTable/CompareTable.d.ts +88 -0
  127. package/lib/typescript/src/components/ComparisonBar/ComparisonBar.d.ts +118 -0
  128. package/lib/typescript/src/components/CoverageBarComparison/CoverageBarComparison.d.ts +3 -2
  129. package/lib/typescript/src/components/CoverageRing/CoverageRing.d.ts +2 -1
  130. package/lib/typescript/src/components/DebitCard/DebitCard.d.ts +2 -1
  131. package/lib/typescript/src/components/Disclaimer/Disclaimer.d.ts +2 -1
  132. package/lib/typescript/src/components/Divider/Divider.d.ts +2 -1
  133. package/lib/typescript/src/components/DonutChart/DonutChart.d.ts +4 -3
  134. package/lib/typescript/src/components/DonutChartSummary/DonutChartSummary.d.ts +3 -2
  135. package/lib/typescript/src/components/Drawer/Drawer.d.ts +15 -1
  136. package/lib/typescript/src/components/Dropdown/Dropdown.d.ts +3 -2
  137. package/lib/typescript/src/components/DropdownInput/DropdownInput.d.ts +22 -2
  138. package/lib/typescript/src/components/EmptyState/EmptyState.d.ts +2 -1
  139. package/lib/typescript/src/components/ExpandableCheckbox/ExpandableCheckbox.d.ts +2 -1
  140. package/lib/typescript/src/components/FilterBar/FilterBar.d.ts +3 -2
  141. package/lib/typescript/src/components/Form/Form.d.ts +2 -1
  142. package/lib/typescript/src/components/FormField/FormField.d.ts +4 -3
  143. package/lib/typescript/src/components/FullscreenModal/FullscreenModal.d.ts +2 -1
  144. package/lib/typescript/src/components/Gauge/Gauge.d.ts +2 -1
  145. package/lib/typescript/src/components/HStack/HStack.d.ts +2 -1
  146. package/lib/typescript/src/components/HoldingsCard/HoldingsCard.d.ts +2 -1
  147. package/lib/typescript/src/components/Icon/Icon.d.ts +2 -1
  148. package/lib/typescript/src/components/IconButton/IconButton.d.ts +2 -1
  149. package/lib/typescript/src/components/IconCapsule/IconCapsule.d.ts +2 -1
  150. package/lib/typescript/src/components/Image/Image.d.ts +17 -1
  151. package/lib/typescript/src/components/InputSearch/InputSearch.d.ts +25 -3
  152. package/lib/typescript/src/components/InstitutionBadge/InstitutionBadge.d.ts +2 -1
  153. package/lib/typescript/src/components/LazyList/LazyList.d.ts +2 -1
  154. package/lib/typescript/src/components/LinearMeter/LinearMeter.d.ts +3 -2
  155. package/lib/typescript/src/components/LinearProgress/LinearProgress.d.ts +2 -1
  156. package/lib/typescript/src/components/ListGroup/ListGroup.d.ts +2 -1
  157. package/lib/typescript/src/components/ListItem/ListItem.d.ts +2 -1
  158. package/lib/typescript/src/components/LottieIntroBlock/LottieIntroBlock.d.ts +2 -1
  159. package/lib/typescript/src/components/LottiePlayer/LottiePlayer.d.ts +2 -1
  160. package/lib/typescript/src/components/LottiePlayer/LottiePlayer.web.d.ts +2 -1
  161. package/lib/typescript/src/components/MediaCard/MediaCard.d.ts +6 -5
  162. package/lib/typescript/src/components/MerchantProfile/MerchantProfile.d.ts +2 -1
  163. package/lib/typescript/src/components/MessageField/MessageField.d.ts +2 -1
  164. package/lib/typescript/src/components/MetricLegendItem/MetricLegendItem.d.ts +2 -1
  165. package/lib/typescript/src/components/MoneyValue/MoneyValue.d.ts +2 -1
  166. package/lib/typescript/src/components/MonthlyStatusGrid/MonthlyStatusGrid.d.ts +4 -3
  167. package/lib/typescript/src/components/NavArrow/NavArrow.d.ts +2 -1
  168. package/lib/typescript/src/components/NoteInput/NoteInput.d.ts +21 -3
  169. package/lib/typescript/src/components/Nudge/Nudge.d.ts +2 -1
  170. package/lib/typescript/src/components/Numpad/Numpad.d.ts +2 -1
  171. package/lib/typescript/src/components/OTP/OTP.d.ts +3 -2
  172. package/lib/typescript/src/components/Overlay/Overlay.d.ts +52 -0
  173. package/lib/typescript/src/components/PageHero/PageHero.d.ts +2 -1
  174. package/lib/typescript/src/components/PaymentFeedback/PaymentFeedback.d.ts +2 -1
  175. package/lib/typescript/src/components/PdpCcCard/PdpCcCard.d.ts +84 -0
  176. package/lib/typescript/src/components/PlanComparisonCard/PlanComparisonCard.d.ts +2 -1
  177. package/lib/typescript/src/components/Popup/Popup.d.ts +2 -1
  178. package/lib/typescript/src/components/PortfolioHero/PortfolioHero.d.ts +2 -1
  179. package/lib/typescript/src/components/PoweredByLabel/PoweredByLabel.d.ts +2 -1
  180. package/lib/typescript/src/components/ProductLabel/ProductLabel.d.ts +2 -1
  181. package/lib/typescript/src/components/ProductMerchandisingCard/GlassFill.d.ts +56 -0
  182. package/lib/typescript/src/components/ProductMerchandisingCard/GlassFill.web.d.ts +27 -0
  183. package/lib/typescript/src/components/ProductMerchandisingCard/ProductMerchandisingCard.d.ts +81 -0
  184. package/lib/typescript/src/components/ProductOverview/ProductOverview.d.ts +2 -1
  185. package/lib/typescript/src/components/ProgressBadge/ProgressBadge.d.ts +2 -1
  186. package/lib/typescript/src/components/ProjectionMarker/ProjectionMarker.d.ts +82 -0
  187. package/lib/typescript/src/components/Radio/Radio.d.ts +5 -3
  188. package/lib/typescript/src/components/RadioButton/RadioButton.d.ts +2 -2
  189. package/lib/typescript/src/components/RangeTrack/RangeTrack.d.ts +3 -2
  190. package/lib/typescript/src/components/RechargeCard/RechargeCard.d.ts +2 -1
  191. package/lib/typescript/src/components/SavingsGoalSummary/SavingsGoalSummary.d.ts +2 -1
  192. package/lib/typescript/src/components/Screen/Screen.d.ts +2 -1
  193. package/lib/typescript/src/components/Section/Section.d.ts +3 -2
  194. package/lib/typescript/src/components/SegmentedControl/SegmentedControl.d.ts +2 -1
  195. package/lib/typescript/src/components/SegmentedTrack/SegmentedTrack.d.ts +4 -3
  196. package/lib/typescript/src/components/Slider/Slider.d.ts +99 -0
  197. package/lib/typescript/src/components/Slot/Slot.d.ts +2 -1
  198. package/lib/typescript/src/components/Spinner/Spinner.d.ts +2 -1
  199. package/lib/typescript/src/components/StatGroup/StatGroup.d.ts +2 -1
  200. package/lib/typescript/src/components/StatItem/StatItem.d.ts +2 -1
  201. package/lib/typescript/src/components/StatusHero/StatusHero.d.ts +2 -1
  202. package/lib/typescript/src/components/Stepper/Step.d.ts +2 -1
  203. package/lib/typescript/src/components/Stepper/StepLabel.d.ts +2 -1
  204. package/lib/typescript/src/components/Stepper/Stepper.d.ts +2 -1
  205. package/lib/typescript/src/components/StrengthIndicator/StrengthIndicator.d.ts +2 -1
  206. package/lib/typescript/src/components/SuggestiveSearch/SuggestiveSearch.d.ts +2 -1
  207. package/lib/typescript/src/components/SummaryTile/SummaryTile.d.ts +2 -1
  208. package/lib/typescript/src/components/SupportText/SupportText.d.ts +2 -1
  209. package/lib/typescript/src/components/SupportText/SupportTextIcon.d.ts +2 -1
  210. package/lib/typescript/src/components/SwappableAmount/SwappableAmount.d.ts +2 -1
  211. package/lib/typescript/src/components/Tabs/TabItem.d.ts +2 -1
  212. package/lib/typescript/src/components/Tabs/Tabs.d.ts +2 -1
  213. package/lib/typescript/src/components/TestimonialsCard/TestimonialsCard.d.ts +2 -1
  214. package/lib/typescript/src/components/Text/Text.d.ts +2 -1
  215. package/lib/typescript/src/components/TextInput/TextInput.d.ts +12 -31
  216. package/lib/typescript/src/components/TextSegment/TextSegment.d.ts +100 -0
  217. package/lib/typescript/src/components/ThreadHero/ThreadHero.d.ts +2 -1
  218. package/lib/typescript/src/components/Title/Title.d.ts +2 -1
  219. package/lib/typescript/src/components/Toast/Toast.d.ts +2 -1
  220. package/lib/typescript/src/components/Toast/ToastProvider.d.ts +2 -1
  221. package/lib/typescript/src/components/Toast/useToast.d.ts +3 -2
  222. package/lib/typescript/src/components/Toggle/Toggle.d.ts +2 -1
  223. package/lib/typescript/src/components/Tooltip/Tooltip.d.ts +2 -1
  224. package/lib/typescript/src/components/TransactionBubble/TransactionBubble.d.ts +2 -1
  225. package/lib/typescript/src/components/TransactionDetails/TransactionDetails.d.ts +3 -2
  226. package/lib/typescript/src/components/TransactionStatus/TransactionStatus.d.ts +2 -1
  227. package/lib/typescript/src/components/UpiHandle/UpiHandle.d.ts +2 -1
  228. package/lib/typescript/src/components/VStack/VStack.d.ts +2 -1
  229. package/lib/typescript/src/components/docs/modeControls.d.ts +28 -0
  230. package/lib/typescript/src/components/index.d.ts +11 -1
  231. package/lib/typescript/src/design-tokens/JFSThemeProvider.d.ts +4 -3
  232. package/lib/typescript/src/design-tokens/figma-modes.generated.d.ts +284 -0
  233. package/lib/typescript/src/design-tokens/index.d.ts +1 -0
  234. package/lib/typescript/src/icons/registry.d.ts +1 -1
  235. package/lib/typescript/src/skeleton/Skeleton.d.ts +2 -1
  236. package/lib/typescript/src/utils/react-utils.d.ts +12 -1
  237. package/package.json +4 -2
  238. package/src/components/Accordion/Accordion.tsx +2 -1
  239. package/src/components/AccordionCheckbox/AccordionCheckbox.tsx +2 -1
  240. package/src/components/AccountCard/AccountCard.tsx +2 -1
  241. package/src/components/ActionFooter/ActionFooter.tsx +2 -1
  242. package/src/components/ActionTile/ActionTile.tsx +2 -1
  243. package/src/components/AllocationComparisonChart/AllocationComparisonChart.tsx +2 -1
  244. package/src/components/AmountInput/AmountInput.tsx +9 -6
  245. package/src/components/AppBar/AppBar.tsx +2 -1
  246. package/src/components/AreaLineChart/AreaLineChart.tsx +8 -7
  247. package/src/components/Attached/Attached.tsx +2 -1
  248. package/src/components/Avatar/Avatar.tsx +3 -2
  249. package/src/components/AvatarGroup/AvatarGroup.tsx +2 -1
  250. package/src/components/Badge/Badge.tsx +2 -1
  251. package/src/components/Balance/Balance.tsx +18 -12
  252. package/src/components/BenefitCard/BenefitCard.tsx +309 -0
  253. package/src/components/BottomNav/BottomNav.tsx +2 -1
  254. package/src/components/BottomNavItem/BottomNavItem.tsx +3 -2
  255. package/src/components/BrandChip/BrandChip.tsx +3 -2
  256. package/src/components/BubbleChart/BubbleChart.tsx +2 -1
  257. package/src/components/Button/Button.tsx +3 -2
  258. package/src/components/ButtonGroup/ButtonGroup.tsx +2 -1
  259. package/src/components/Card/Card.tsx +4 -3
  260. package/src/components/CardAdvisory/CardAdvisory.tsx +3 -2
  261. package/src/components/CardBankAccount/CardBankAccount.tsx +2 -1
  262. package/src/components/CardCTA/CardCTA.tsx +3 -2
  263. package/src/components/CardFeedback/CardFeedback.tsx +11 -10
  264. package/src/components/CardFinancialCondition/CardFinancialCondition.tsx +3 -2
  265. package/src/components/CardInsight/CardInsight.tsx +2 -1
  266. package/src/components/CardProviderInfo/CardProviderInfo.tsx +2 -1
  267. package/src/components/Carousel/Carousel.tsx +5 -4
  268. package/src/components/CcCard/CcCard.tsx +598 -0
  269. package/src/components/Checkbox/Checkbox.tsx +7 -5
  270. package/src/components/CheckboxGroup/CheckboxGroup.tsx +2 -1
  271. package/src/components/CheckboxItem/CheckboxItem.tsx +7 -5
  272. package/src/components/ChipGroup/ChipGroup.tsx +2 -1
  273. package/src/components/ChipSelect/ChipSelect.tsx +2 -1
  274. package/src/components/CircularProgressBar/CircularProgressBar.tsx +2 -1
  275. package/src/components/CircularProgressBarDoted/CircularProgressBarDoted.tsx +2 -1
  276. package/src/components/CircularRating/CircularRating.tsx +3 -2
  277. package/src/components/ClusterBubble/ClusterBubble.tsx +2 -1
  278. package/src/components/CompareTable/CompareTable.tsx +477 -0
  279. package/src/components/ComparisonBar/ComparisonBar.tsx +356 -0
  280. package/src/components/CoverageBarComparison/CoverageBarComparison.tsx +3 -2
  281. package/src/components/CoverageRing/CoverageRing.tsx +2 -1
  282. package/src/components/DebitCard/DebitCard.tsx +2 -1
  283. package/src/components/Disclaimer/Disclaimer.tsx +2 -1
  284. package/src/components/Divider/Divider.tsx +2 -1
  285. package/src/components/DonutChart/DonutChart.tsx +6 -5
  286. package/src/components/DonutChartSummary/DonutChartSummary.tsx +3 -2
  287. package/src/components/Drawer/Drawer.tsx +21 -1
  288. package/src/components/Dropdown/Dropdown.tsx +4 -3
  289. package/src/components/DropdownInput/DropdownInput.tsx +60 -7
  290. package/src/components/EmptyState/EmptyState.tsx +2 -1
  291. package/src/components/ExpandableCheckbox/ExpandableCheckbox.tsx +2 -1
  292. package/src/components/FilterBar/FilterBar.tsx +3 -2
  293. package/src/components/Form/Form.tsx +2 -1
  294. package/src/components/FormField/FormField.tsx +8 -6
  295. package/src/components/FullscreenModal/FullscreenModal.tsx +68 -10
  296. package/src/components/Gauge/Gauge.tsx +2 -1
  297. package/src/components/HStack/HStack.tsx +2 -1
  298. package/src/components/HoldingsCard/HoldingsCard.tsx +2 -1
  299. package/src/components/Icon/Icon.tsx +3 -2
  300. package/src/components/IconButton/IconButton.tsx +3 -2
  301. package/src/components/IconCapsule/IconCapsule.tsx +3 -2
  302. package/src/components/Image/Image.tsx +29 -5
  303. package/src/components/InputSearch/InputSearch.tsx +11 -7
  304. package/src/components/InstitutionBadge/InstitutionBadge.tsx +3 -2
  305. package/src/components/LazyList/LazyList.tsx +2 -1
  306. package/src/components/LinearMeter/LinearMeter.tsx +3 -2
  307. package/src/components/LinearProgress/LinearProgress.tsx +2 -1
  308. package/src/components/ListGroup/ListGroup.tsx +2 -1
  309. package/src/components/ListItem/ListItem.tsx +3 -2
  310. package/src/components/LottieIntroBlock/LottieIntroBlock.tsx +2 -1
  311. package/src/components/LottiePlayer/LottiePlayer.tsx +3 -2
  312. package/src/components/LottiePlayer/LottiePlayer.web.tsx +3 -2
  313. package/src/components/LottiePlayer/loadNativeLottieView.tsx +9 -13
  314. package/src/components/MediaCard/MediaCard.tsx +7 -6
  315. package/src/components/MerchantProfile/MerchantProfile.tsx +2 -1
  316. package/src/components/MessageField/MessageField.tsx +3 -2
  317. package/src/components/MetricLegendItem/MetricLegendItem.tsx +2 -1
  318. package/src/components/MoneyValue/MoneyValue.tsx +2 -1
  319. package/src/components/MonthlyStatusGrid/MonthlyStatusGrid.tsx +5 -4
  320. package/src/components/NavArrow/NavArrow.tsx +3 -2
  321. package/src/components/NoteInput/NoteInput.tsx +10 -7
  322. package/src/components/Nudge/Nudge.tsx +3 -2
  323. package/src/components/Numpad/Numpad.tsx +2 -1
  324. package/src/components/OTP/OTP.tsx +3 -2
  325. package/src/components/Overlay/Overlay.tsx +114 -0
  326. package/src/components/PageHero/PageHero.tsx +2 -1
  327. package/src/components/PaymentFeedback/PaymentFeedback.tsx +2 -1
  328. package/src/components/PdpCcCard/PdpCcCard.tsx +356 -0
  329. package/src/components/PlanComparisonCard/PlanComparisonCard.tsx +2 -1
  330. package/src/components/Popup/Popup.tsx +2 -1
  331. package/src/components/PortfolioHero/PortfolioHero.tsx +2 -1
  332. package/src/components/PoweredByLabel/PoweredByLabel.tsx +2 -1
  333. package/src/components/ProductLabel/ProductLabel.tsx +2 -1
  334. package/src/components/ProductMerchandisingCard/GlassFill.tsx +276 -0
  335. package/src/components/ProductMerchandisingCard/GlassFill.web.tsx +127 -0
  336. package/src/components/ProductMerchandisingCard/ProductMerchandisingCard.tsx +423 -0
  337. package/src/components/ProductOverview/ProductOverview.tsx +2 -1
  338. package/src/components/ProgressBadge/ProgressBadge.tsx +2 -1
  339. package/src/components/ProjectionMarker/ProjectionMarker.tsx +277 -0
  340. package/src/components/Radio/Radio.tsx +7 -5
  341. package/src/components/RangeTrack/RangeTrack.tsx +3 -2
  342. package/src/components/RechargeCard/RechargeCard.tsx +2 -1
  343. package/src/components/SavingsGoalSummary/SavingsGoalSummary.tsx +2 -1
  344. package/src/components/Screen/Screen.tsx +2 -1
  345. package/src/components/Section/Section.tsx +6 -5
  346. package/src/components/SegmentedControl/SegmentedControl.tsx +3 -2
  347. package/src/components/SegmentedTrack/SegmentedTrack.tsx +5 -4
  348. package/src/components/Slider/Slider.tsx +628 -0
  349. package/src/components/Slot/Slot.tsx +2 -1
  350. package/src/components/Spinner/Spinner.tsx +2 -1
  351. package/src/components/StatGroup/StatGroup.tsx +3 -2
  352. package/src/components/StatItem/StatItem.tsx +2 -1
  353. package/src/components/StatusHero/StatusHero.tsx +2 -1
  354. package/src/components/Stepper/Step.tsx +2 -1
  355. package/src/components/Stepper/StepLabel.tsx +2 -1
  356. package/src/components/Stepper/Stepper.tsx +2 -1
  357. package/src/components/StrengthIndicator/StrengthIndicator.tsx +2 -1
  358. package/src/components/SuggestiveSearch/SuggestiveSearch.tsx +4 -3
  359. package/src/components/SummaryTile/SummaryTile.tsx +2 -1
  360. package/src/components/SupportText/SupportText.tsx +2 -1
  361. package/src/components/SupportText/SupportTextIcon.tsx +2 -1
  362. package/src/components/SwappableAmount/SwappableAmount.tsx +2 -1
  363. package/src/components/Tabs/TabItem.tsx +2 -1
  364. package/src/components/Tabs/Tabs.tsx +2 -1
  365. package/src/components/TestimonialsCard/TestimonialsCard.tsx +2 -1
  366. package/src/components/Text/Text.tsx +2 -1
  367. package/src/components/TextInput/TextInput.tsx +18 -13
  368. package/src/components/TextSegment/TextSegment.tsx +166 -0
  369. package/src/components/ThreadHero/ThreadHero.tsx +2 -1
  370. package/src/components/Title/Title.tsx +2 -1
  371. package/src/components/Toast/Toast.tsx +2 -1
  372. package/src/components/Toast/ToastProvider.tsx +2 -1
  373. package/src/components/Toast/useToast.ts +3 -2
  374. package/src/components/Toggle/Toggle.tsx +2 -1
  375. package/src/components/Tooltip/Tooltip.tsx +3 -2
  376. package/src/components/TransactionBubble/TransactionBubble.tsx +2 -1
  377. package/src/components/TransactionDetails/TransactionDetails.tsx +3 -2
  378. package/src/components/TransactionStatus/TransactionStatus.tsx +3 -2
  379. package/src/components/UpiHandle/UpiHandle.tsx +3 -2
  380. package/src/components/VStack/VStack.tsx +2 -1
  381. package/src/components/docs/modeControls.tsx +122 -0
  382. package/src/components/index.ts +11 -1
  383. package/src/design-tokens/Coin Variables-variables-full.json +1 -1
  384. package/src/design-tokens/JFSThemeProvider.tsx +4 -3
  385. package/src/design-tokens/figma-modes.generated.ts +425 -0
  386. package/src/design-tokens/index.ts +1 -0
  387. package/src/icons/registry.ts +1 -1
  388. package/src/skeleton/Skeleton.tsx +2 -1
  389. package/src/utils/react-utils.ts +26 -2
  390. package/lib/typescript/scripts/extract-component-tokens.d.ts +0 -9
  391. package/lib/typescript/scripts/generate-component-docs.d.ts +0 -9
  392. package/lib/typescript/scripts/generate-icon-registry.d.ts +0 -3
@@ -0,0 +1,276 @@
1
+ import React, { useId } from 'react'
2
+ import { View, StyleSheet, Platform, UIManager, type ViewStyle, type StyleProp } from 'react-native'
3
+ import { BlurView } from '@react-native-community/blur'
4
+ import MaskedView from '@react-native-masked-view/masked-view'
5
+ import Svg, { Defs, LinearGradient, Stop, Rect } from 'react-native-svg'
6
+
7
+ export type GlassTint = 'dark' | 'light'
8
+
9
+ export interface GlassFillProps {
10
+ /**
11
+ * Visual tint of the glass surface. Maps to `BlurView`'s `blurType`
12
+ * (`'dark'` | `'light'`) and drives the iOS
13
+ * `reducedTransparencyFallbackColor` so the surface degrades gracefully
14
+ * when "Reduce Transparency" is enabled in system accessibility settings.
15
+ */
16
+ tint?: GlassTint
17
+ /**
18
+ * Blur strength as a 0–100 "intensity" value. Internally mapped to
19
+ * `@react-native-community/blur`'s `blurAmount`. When `progressive` is set,
20
+ * this is the strength at the BOTTOM of the ramp (the strongest point); the
21
+ * ramp is kept intentionally gentle so the surface reads as subtle glass
22
+ * rather than a heavy frosted block.
23
+ */
24
+ intensity?: number
25
+ /**
26
+ * Token-derived color tint laid OVER the live blur. Painted as a
27
+ * translucent overlay so the glass keeps its color signature even when the
28
+ * platform blur quality varies (or realtime blur is unavailable).
29
+ */
30
+ overlayColor?: string
31
+ /**
32
+ * Render a *progressive* (variable) blur instead of a uniform one: fully
33
+ * 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.
38
+ */
39
+ progressive?: boolean
40
+ /** Container style overrides. Defaults to `StyleSheet.absoluteFill`. */
41
+ style?: StyleProp<ViewStyle>
42
+ }
43
+
44
+ const DEFAULT_FALLBACK_DARK = '#1414174a'
45
+ const DEFAULT_FALLBACK_LIGHT = '#ffffff66'
46
+
47
+ // The native view-manager name registered by `@react-native-community/blur`
48
+ // (`AndroidBlurView` on Android, `BlurView` on iOS).
49
+ const NATIVE_BLUR_NAME = Platform.OS === 'android' ? 'AndroidBlurView' : 'BlurView'
50
+
51
+ /**
52
+ * Alpha stop on a layer's vertical reveal mask. `offset` is the vertical
53
+ * position (0 = top of the surface, 1 = bottom); `opacity` is the mask alpha
54
+ * there (0 = layer hidden / fully clear, 1 = layer fully applied).
55
+ *
56
+ * Using several stops (rather than a single linear 0 → 1 ramp) lets each layer
57
+ * EASE in, so the blur swells smoothly toward the bottom instead of appearing
58
+ * along a hard horizontal seam. That soft S-curve is what gives the surface its
59
+ * "glass" feel rather than a flat translucent panel.
60
+ */
61
+ interface MaskStop {
62
+ offset: number
63
+ opacity: number
64
+ }
65
+
66
+ /**
67
+ * A single layer of the progressive ramp.
68
+ * - `stops` describe how this layer is revealed from top to bottom.
69
+ * - `amount` is this layer's share (0–1) of the max `blurAmount`.
70
+ *
71
+ * We stack just TWO layers on both platforms: a faint base blur that covers
72
+ * most of the footer and a slightly stronger accent concentrated near the
73
+ * bottom. Keeping the overlap shallow avoids compounding the dark tint of
74
+ * multiple `BlurView`s (which is what made the earlier 3-layer ramp read as a
75
+ * heavy block), while still giving a genuine variable-radius result — the blur
76
+ * radius grows toward the bottom where the two layers overlap.
77
+ */
78
+ interface ProgressiveLayer {
79
+ stops: MaskStop[]
80
+ amount: number
81
+ }
82
+
83
+ // Base reveal: a faint trace of blur begins near the very top and grows
84
+ // steadily downward, so the upper half still carries visible glass rather than
85
+ // snapping clear. Also reused for the no-native-blur fallback scrim.
86
+ const BASE_MASK_STOPS: MaskStop[] = [
87
+ { offset: 0.0, opacity: 0 },
88
+ { offset: 0.08, opacity: 0.12 },
89
+ { offset: 0.35, opacity: 0.4 },
90
+ { offset: 0.65, opacity: 0.8 },
91
+ { offset: 1.0, opacity: 1 },
92
+ ]
93
+
94
+ const PROGRESSIVE_LAYERS: ProgressiveLayer[] = [
95
+ { amount: 0.65, stops: BASE_MASK_STOPS },
96
+ // Accent: the strongest blur, gathering over the lower portion for depth.
97
+ {
98
+ amount: 1.0,
99
+ stops: [
100
+ { offset: 0.0, opacity: 0 },
101
+ { offset: 0.3, opacity: 0.15 },
102
+ { offset: 0.65, opacity: 0.65 },
103
+ { offset: 1.0, opacity: 1 },
104
+ ],
105
+ },
106
+ ]
107
+
108
+ /**
109
+ * Probe ONCE whether the native blur view is actually present in this binary.
110
+ *
111
+ * `@react-native-community/blur` is a peer dependency so its JS always imports,
112
+ * but on a build where the native module was never linked (e.g. `pod install`
113
+ * wasn't run on iOS) rendering `<BlurView>` shows React Native's red
114
+ * "Unimplemented component <BlurView>" placeholder. Detecting availability up
115
+ * front lets us fall back to a tinted scrim instead of crashing the surface.
116
+ *
117
+ * - New architecture (bridgeless): `getViewManagerConfig` raises a soft error,
118
+ * so we MUST use `hasViewManagerConfig` -> Fabric component registry.
119
+ * - Old architecture (Paper): `getViewManagerConfig` returns null when the
120
+ * view manager isn't registered.
121
+ */
122
+ const NATIVE_BLUR_SUPPORTED: boolean = (() => {
123
+ try {
124
+ const um = UIManager as unknown as {
125
+ hasViewManagerConfig?: (name: string) => boolean
126
+ getViewManagerConfig?: (name: string) => unknown
127
+ }
128
+ if (typeof um.hasViewManagerConfig === 'function') {
129
+ return um.hasViewManagerConfig(NATIVE_BLUR_NAME) === true
130
+ }
131
+ if (typeof um.getViewManagerConfig === 'function') {
132
+ return um.getViewManagerConfig(NATIVE_BLUR_NAME) != null
133
+ }
134
+ } catch {
135
+ // Any probe failure -> treat blur as unavailable and use the fallback.
136
+ }
137
+ return false
138
+ })()
139
+
140
+ /**
141
+ * Vertical alpha-gradient mask drawn with `react-native-svg`. `MaskedView`
142
+ * reveals its child in proportion to this mask's alpha, so feeding it an eased
143
+ * multi-stop gradient makes the layer's blur swell in smoothly from top to
144
+ * bottom instead of along a hard seam.
145
+ */
146
+ function GradientMask({ id, stops }: { id: string; stops: MaskStop[] }) {
147
+ return (
148
+ <Svg width="100%" height="100%">
149
+ <Defs>
150
+ <LinearGradient id={id} x1="0" y1="0" x2="0" y2="1">
151
+ {stops.map((s, i) => (
152
+ <Stop key={i} offset={s.offset} stopColor="#000000" stopOpacity={s.opacity} />
153
+ ))}
154
+ </LinearGradient>
155
+ </Defs>
156
+ <Rect x="0" y="0" width="100%" height="100%" fill={`url(#${id})`} />
157
+ </Svg>
158
+ )
159
+ }
160
+
161
+ /**
162
+ * Glass / frosted surface for native (iOS + Android).
163
+ *
164
+ * Why this lives in its own platform-split file (mirrors `MediaCard/GlassFill`):
165
+ * - `@react-native-community/blur` is a native-only module; importing it on
166
+ * web throws because it references native components not registered there.
167
+ * Metro's platform-extension resolution picks `GlassFill.tsx` for native
168
+ * and `GlassFill.web.tsx` for web, keeping the web bundle native-free.
169
+ * - Centralizes the `intensity` (0–100) -> `blurAmount` (0–32) mapping so the
170
+ * Figma `blur/minimal` token semantics survive across platforms.
171
+ *
172
+ * On iOS (with the pod installed) this is a real `UIVisualEffectView` (true
173
+ * OS-level live blur). On Android it uses the community blur view. When the
174
+ * native module isn't linked in the running binary, the component degrades to
175
+ * a translucent tinted scrim (`reducedTransparencyFallbackColor` / fallback
176
+ * color) instead of rendering the "Unimplemented component" placeholder.
177
+ */
178
+ function GlassFill({
179
+ tint = 'dark',
180
+ intensity = 50,
181
+ overlayColor,
182
+ progressive = false,
183
+ style,
184
+ }: GlassFillProps) {
185
+ const rawId = useId()
186
+ const maskId = `glass-mask-${rawId.replace(/[^a-zA-Z0-9_-]/g, '')}`
187
+
188
+ const blurType: 'light' | 'dark' = tint === 'light' ? 'light' : 'dark'
189
+ const uniformBlurAmount = Math.max(0, Math.min(32, Math.round(intensity * 0.32)))
190
+ const fallbackColor = overlayColor ?? (tint === 'light' ? DEFAULT_FALLBACK_LIGHT : DEFAULT_FALLBACK_DARK)
191
+
192
+ // ----- Progressive (variable) blur -------------------------------------
193
+ if (progressive) {
194
+ // Peak blur radius (at the bottom). Full strength so the frosted glass
195
+ // is clearly engaged where the layers overlap, while the eased masks
196
+ // keep the top of the surface fully clear.
197
+ const peakBlur = Math.max(1, Math.min(32, Math.round(intensity * 0.32)))
198
+
199
+ // Native blur not linked -> tint eases from transparent (top) to a soft
200
+ // fallback color (bottom) so the surface still reads as gentle glass.
201
+ if (!NATIVE_BLUR_SUPPORTED) {
202
+ return (
203
+ <View style={[StyleSheet.absoluteFill, style]} pointerEvents="none">
204
+ <MaskedView
205
+ style={StyleSheet.absoluteFill}
206
+ maskElement={<GradientMask id={`${maskId}-fb`} stops={BASE_MASK_STOPS} />}
207
+ >
208
+ <View style={[StyleSheet.absoluteFill, { backgroundColor: fallbackColor }]} />
209
+ </MaskedView>
210
+ </View>
211
+ )
212
+ }
213
+
214
+ return (
215
+ <View style={[StyleSheet.absoluteFill, style]} pointerEvents="none">
216
+ {PROGRESSIVE_LAYERS.map((layer, i) => {
217
+ const amount = Math.max(1, Math.round(peakBlur * layer.amount))
218
+ return (
219
+ <MaskedView
220
+ key={i}
221
+ style={StyleSheet.absoluteFill}
222
+ maskElement={<GradientMask id={`${maskId}-${i}`} stops={layer.stops} />}
223
+ >
224
+ <BlurView
225
+ style={StyleSheet.absoluteFill}
226
+ blurType={blurType}
227
+ blurAmount={amount}
228
+ reducedTransparencyFallbackColor={fallbackColor}
229
+ />
230
+ </MaskedView>
231
+ )
232
+ })}
233
+ </View>
234
+ )
235
+ }
236
+
237
+ // ----- Uniform blur (default) ------------------------------------------
238
+ // Native blur not linked in this build -> render a translucent tinted scrim
239
+ // so the surface still reads as frosted glass and never shows RN's
240
+ // "Unimplemented component <BlurView>" box.
241
+ if (!NATIVE_BLUR_SUPPORTED) {
242
+ return (
243
+ <View
244
+ style={[StyleSheet.absoluteFill, { backgroundColor: fallbackColor }, style]}
245
+ pointerEvents="none"
246
+ />
247
+ )
248
+ }
249
+
250
+ return (
251
+ <View style={[StyleSheet.absoluteFill, style]} pointerEvents="none">
252
+ <BlurView
253
+ style={StyleSheet.absoluteFill}
254
+ blurType={blurType}
255
+ blurAmount={uniformBlurAmount}
256
+ reducedTransparencyFallbackColor={fallbackColor}
257
+ />
258
+ {overlayColor != null ? (
259
+ <View style={[StyleSheet.absoluteFill, { backgroundColor: overlayColor }]} />
260
+ ) : null}
261
+ {Platform.OS === 'android' ? (
262
+ <View
263
+ style={[
264
+ StyleSheet.absoluteFill,
265
+ {
266
+ backgroundColor: 'rgba(255,255,255,0.03)',
267
+ opacity: 0.6,
268
+ },
269
+ ]}
270
+ />
271
+ ) : null}
272
+ </View>
273
+ )
274
+ }
275
+
276
+ export default GlassFill
@@ -0,0 +1,127 @@
1
+ import React from 'react'
2
+ import { View, StyleSheet, type ViewStyle, type StyleProp } from 'react-native'
3
+
4
+ export type GlassTint = 'dark' | 'light'
5
+
6
+ export interface GlassFillProps {
7
+ tint?: GlassTint
8
+ intensity?: number
9
+ overlayColor?: string
10
+ /**
11
+ * Render a *progressive* (variable) blur: fully clear at the top, easing
12
+ * into a soft blur toward the bottom. On web this mirrors the native
13
+ * technique — two `backdrop-filter` layers, each clipped with an eased
14
+ * multi-stop `mask-image` linear-gradient so the effective blur swells
15
+ * smoothly toward the bottom.
16
+ */
17
+ progressive?: boolean
18
+ style?: StyleProp<ViewStyle>
19
+ }
20
+
21
+ const DEFAULT_FALLBACK_DARK = '#1414174a'
22
+ const DEFAULT_FALLBACK_LIGHT = '#ffffff66'
23
+
24
+ // Mirror of the native ramp (see GlassFill.tsx). Each layer is a `mask-image`
25
+ // gradient whose alpha stops (0 = top, 1 = bottom) ease the blur in; `amount`
26
+ // is the layer's share of the max blur. Two gently-overlapping layers (faint
27
+ // base + bottom accent) keep the surface subtle and glass-like rather than a
28
+ // heavy frosted block.
29
+ interface WebLayer {
30
+ amount: number
31
+ stops: { offset: number; opacity: number }[]
32
+ }
33
+
34
+ const PROGRESSIVE_LAYERS: WebLayer[] = [
35
+ {
36
+ amount: 0.65,
37
+ stops: [
38
+ { offset: 0.0, opacity: 0 },
39
+ { offset: 0.08, opacity: 0.12 },
40
+ { offset: 0.35, opacity: 0.4 },
41
+ { offset: 0.65, opacity: 0.8 },
42
+ { offset: 1.0, opacity: 1 },
43
+ ],
44
+ },
45
+ {
46
+ amount: 1.0,
47
+ stops: [
48
+ { offset: 0.0, opacity: 0 },
49
+ { offset: 0.3, opacity: 0.15 },
50
+ { offset: 0.65, opacity: 0.65 },
51
+ { offset: 1.0, opacity: 1 },
52
+ ],
53
+ },
54
+ ]
55
+
56
+ function toGradient(stops: WebLayer['stops']): string {
57
+ const parts = stops
58
+ .map((s) => `rgba(0,0,0,${s.opacity}) ${Math.round(s.offset * 100)}%`)
59
+ .join(', ')
60
+ return `linear-gradient(to bottom, ${parts})`
61
+ }
62
+
63
+ /**
64
+ * Web counterpart of `GlassFill`.
65
+ *
66
+ * `@react-native-community/blur` ships no web implementation, so on web we
67
+ * render a translucent `View` with `backdrop-filter: blur()`. Native bundles
68
+ * pick up `GlassFill.tsx` instead via Metro's platform resolver; the web
69
+ * bundle picks up this file, so the native-only module is never imported here.
70
+ */
71
+ function GlassFill({
72
+ tint = 'dark',
73
+ intensity = 50,
74
+ overlayColor,
75
+ progressive = false,
76
+ style,
77
+ }: GlassFillProps) {
78
+ // intensity 0-100 -> ~0-32px CSS blur, kept in parity with the native scale.
79
+ const blurPx = Math.max(0, Math.min(32, Math.round(intensity * 0.32)))
80
+ const tintColor = overlayColor ?? (tint === 'light' ? DEFAULT_FALLBACK_LIGHT : DEFAULT_FALLBACK_DARK)
81
+
82
+ if (progressive) {
83
+ // Full peak blur (parity with native) so the frosted glass is clearly
84
+ // engaged at the bottom; the eased masks keep the top fully clear.
85
+ const peakPx = Math.max(1, Math.min(32, Math.round(intensity * 0.32)))
86
+ return (
87
+ <View style={[StyleSheet.absoluteFill, style]} pointerEvents="none">
88
+ {PROGRESSIVE_LAYERS.map((layer, i) => {
89
+ const px = Math.max(1, Math.round(peakPx * layer.amount))
90
+ const gradient = toGradient(layer.stops)
91
+ // web-only CSS (backdrop-filter / mask-image); cast because
92
+ // these keys aren't in RN's ViewStyle.
93
+ const webStyle = {
94
+ backdropFilter: `blur(${px}px)`,
95
+ WebkitBackdropFilter: `blur(${px}px)`,
96
+ maskImage: gradient,
97
+ WebkitMaskImage: gradient,
98
+ } as unknown as ViewStyle
99
+ return (
100
+ <View
101
+ key={i}
102
+ style={[StyleSheet.absoluteFill, webStyle]}
103
+ pointerEvents="none"
104
+ />
105
+ )
106
+ })}
107
+ </View>
108
+ )
109
+ }
110
+
111
+ return (
112
+ <View
113
+ style={[
114
+ StyleSheet.absoluteFill,
115
+ { backgroundColor: tintColor },
116
+ // backdrop-filter is web-only CSS; ignored by RN on native
117
+ // (we never bundle this file there anyway).
118
+ // @ts-ignore web-only style
119
+ { backdropFilter: `blur(${blurPx}px)`, WebkitBackdropFilter: `blur(${blurPx}px)` },
120
+ style,
121
+ ]}
122
+ pointerEvents="none"
123
+ />
124
+ )
125
+ }
126
+
127
+ export default GlassFill