jfs-components 0.0.99 → 0.1.2

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 (335) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/lib/commonjs/components/AreaLineChart/AreaLineChart.js +1 -1
  3. package/lib/commonjs/components/Balance/Balance.js +17 -12
  4. package/lib/commonjs/components/Card/Card.js +2 -1
  5. package/lib/commonjs/components/CardFeedback/CardFeedback.js +2 -1
  6. package/lib/commonjs/components/Checkbox/Checkbox.js +2 -1
  7. package/lib/commonjs/components/Drawer/Drawer.js +13 -4
  8. package/lib/commonjs/components/Dropdown/Dropdown.js +37 -18
  9. package/lib/commonjs/components/DropdownInput/DropdownInput.js +1 -1
  10. package/lib/commonjs/components/FullscreenModal/FullscreenModal.js +65 -4
  11. package/lib/commonjs/components/Image/Image.js +11 -5
  12. package/lib/commonjs/components/LottiePlayer/loadNativeLottieView.js +8 -13
  13. package/lib/commonjs/components/Overlay/Overlay.js +92 -0
  14. package/lib/commonjs/components/PlanComparisonCard/PlanComparisonCard.js +2 -1
  15. package/lib/commonjs/components/TestimonialsCard/TestimonialsCard.js +121 -0
  16. package/lib/commonjs/components/TextInput/TextInput.js +2 -1
  17. package/lib/commonjs/components/docs/modeControls.js +116 -0
  18. package/lib/commonjs/components/index.js +14 -0
  19. package/lib/commonjs/design-tokens/JFSThemeProvider.js +1 -1
  20. package/lib/commonjs/design-tokens/figma-modes.generated.js +391 -0
  21. package/lib/commonjs/design-tokens/index.js +11 -0
  22. package/lib/commonjs/icons/registry.js +1 -1
  23. package/lib/module/components/Accordion/Accordion.js +1 -2
  24. package/lib/module/components/AreaLineChart/AreaLineChart.js +1 -1
  25. package/lib/module/components/Balance/Balance.js +18 -13
  26. package/lib/module/components/Card/Card.js +1 -2
  27. package/lib/module/components/CardFeedback/CardFeedback.js +1 -2
  28. package/lib/module/components/Checkbox/Checkbox.js +1 -2
  29. package/lib/module/components/Drawer/Drawer.js +12 -4
  30. package/lib/module/components/Dropdown/Dropdown.js +37 -18
  31. package/lib/module/components/DropdownInput/DropdownInput.js +1 -1
  32. package/lib/module/components/FullscreenModal/FullscreenModal.js +67 -7
  33. package/lib/module/components/Image/Image.js +11 -5
  34. package/lib/module/components/InstitutionBadge/InstitutionBadge.js +1 -2
  35. package/lib/module/components/LottiePlayer/loadNativeLottieView.js +8 -13
  36. package/lib/module/components/MoneyValue/MoneyValue.js +1 -2
  37. package/lib/module/components/OTP/OTP.js +1 -2
  38. package/lib/module/components/Overlay/Overlay.js +87 -0
  39. package/lib/module/components/PlanComparisonCard/PlanComparisonCard.js +1 -2
  40. package/lib/module/components/PoweredByLabel/PoweredByLabel.js +1 -2
  41. package/lib/module/components/RechargeCard/RechargeCard.js +1 -2
  42. package/lib/module/components/Section/Section.js +1 -2
  43. package/lib/module/components/TestimonialsCard/TestimonialsCard.js +116 -0
  44. package/lib/module/components/TextInput/TextInput.js +1 -2
  45. package/lib/module/components/UpiHandle/UpiHandle.js +1 -2
  46. package/lib/module/components/docs/modeControls.js +111 -0
  47. package/lib/module/components/index.js +2 -0
  48. package/lib/module/design-tokens/JFSThemeProvider.js +1 -1
  49. package/lib/module/design-tokens/figma-modes.generated.js +387 -0
  50. package/lib/module/design-tokens/index.js +2 -1
  51. package/lib/module/icons/registry.js +1 -1
  52. package/lib/module/utils/react-utils.js +0 -1
  53. package/lib/typescript/scripts/extract-component-tokens.d.ts +1 -1
  54. package/lib/typescript/scripts/generate-mode-types.d.ts +2 -0
  55. package/lib/typescript/scripts/retype-modes.d.cts +2 -0
  56. package/lib/typescript/src/components/Accordion/Accordion.d.ts +2 -1
  57. package/lib/typescript/src/components/AccordionCheckbox/AccordionCheckbox.d.ts +2 -1
  58. package/lib/typescript/src/components/AccountCard/AccountCard.d.ts +2 -1
  59. package/lib/typescript/src/components/ActionFooter/ActionFooter.d.ts +2 -1
  60. package/lib/typescript/src/components/ActionTile/ActionTile.d.ts +2 -1
  61. package/lib/typescript/src/components/AllocationComparisonChart/AllocationComparisonChart.d.ts +2 -1
  62. package/lib/typescript/src/components/AmountInput/AmountInput.d.ts +2 -1
  63. package/lib/typescript/src/components/AppBar/AppBar.d.ts +2 -1
  64. package/lib/typescript/src/components/AreaLineChart/AreaLineChart.d.ts +3 -2
  65. package/lib/typescript/src/components/Attached/Attached.d.ts +2 -1
  66. package/lib/typescript/src/components/Avatar/Avatar.d.ts +2 -1
  67. package/lib/typescript/src/components/AvatarGroup/AvatarGroup.d.ts +2 -1
  68. package/lib/typescript/src/components/Badge/Badge.d.ts +2 -1
  69. package/lib/typescript/src/components/Balance/Balance.d.ts +2 -1
  70. package/lib/typescript/src/components/BottomNav/BottomNav.d.ts +2 -1
  71. package/lib/typescript/src/components/BottomNavItem/BottomNavItem.d.ts +2 -1
  72. package/lib/typescript/src/components/BrandChip/BrandChip.d.ts +2 -1
  73. package/lib/typescript/src/components/BubbleChart/BubbleChart.d.ts +2 -1
  74. package/lib/typescript/src/components/Button/Button.d.ts +2 -1
  75. package/lib/typescript/src/components/ButtonGroup/ButtonGroup.d.ts +2 -1
  76. package/lib/typescript/src/components/Card/Card.d.ts +3 -2
  77. package/lib/typescript/src/components/CardAdvisory/CardAdvisory.d.ts +2 -1
  78. package/lib/typescript/src/components/CardBankAccount/CardBankAccount.d.ts +2 -1
  79. package/lib/typescript/src/components/CardCTA/CardCTA.d.ts +2 -1
  80. package/lib/typescript/src/components/CardFeedback/CardFeedback.d.ts +7 -6
  81. package/lib/typescript/src/components/CardFinancialCondition/CardFinancialCondition.d.ts +2 -1
  82. package/lib/typescript/src/components/CardInsight/CardInsight.d.ts +2 -1
  83. package/lib/typescript/src/components/CardProviderInfo/CardProviderInfo.d.ts +2 -1
  84. package/lib/typescript/src/components/Carousel/Carousel.d.ts +4 -3
  85. package/lib/typescript/src/components/Checkbox/Checkbox.d.ts +2 -1
  86. package/lib/typescript/src/components/CheckboxGroup/CheckboxGroup.d.ts +2 -1
  87. package/lib/typescript/src/components/CheckboxItem/CheckboxItem.d.ts +2 -1
  88. package/lib/typescript/src/components/ChipGroup/ChipGroup.d.ts +2 -1
  89. package/lib/typescript/src/components/ChipSelect/ChipSelect.d.ts +2 -1
  90. package/lib/typescript/src/components/CircularProgressBar/CircularProgressBar.d.ts +2 -1
  91. package/lib/typescript/src/components/CircularProgressBarDoted/CircularProgressBarDoted.d.ts +2 -1
  92. package/lib/typescript/src/components/CircularRating/CircularRating.d.ts +2 -1
  93. package/lib/typescript/src/components/ClusterBubble/ClusterBubble.d.ts +2 -1
  94. package/lib/typescript/src/components/CoverageBarComparison/CoverageBarComparison.d.ts +3 -2
  95. package/lib/typescript/src/components/CoverageRing/CoverageRing.d.ts +2 -1
  96. package/lib/typescript/src/components/DebitCard/DebitCard.d.ts +2 -1
  97. package/lib/typescript/src/components/Disclaimer/Disclaimer.d.ts +2 -1
  98. package/lib/typescript/src/components/Divider/Divider.d.ts +2 -1
  99. package/lib/typescript/src/components/DonutChart/DonutChart.d.ts +4 -3
  100. package/lib/typescript/src/components/DonutChartSummary/DonutChartSummary.d.ts +3 -2
  101. package/lib/typescript/src/components/Drawer/Drawer.d.ts +15 -1
  102. package/lib/typescript/src/components/Dropdown/Dropdown.d.ts +3 -2
  103. package/lib/typescript/src/components/DropdownInput/DropdownInput.d.ts +2 -1
  104. package/lib/typescript/src/components/EmptyState/EmptyState.d.ts +2 -1
  105. package/lib/typescript/src/components/ExpandableCheckbox/ExpandableCheckbox.d.ts +2 -1
  106. package/lib/typescript/src/components/FilterBar/FilterBar.d.ts +3 -2
  107. package/lib/typescript/src/components/Form/Form.d.ts +2 -1
  108. package/lib/typescript/src/components/FormField/FormField.d.ts +2 -1
  109. package/lib/typescript/src/components/FullscreenModal/FullscreenModal.d.ts +9 -2
  110. package/lib/typescript/src/components/Gauge/Gauge.d.ts +2 -1
  111. package/lib/typescript/src/components/HStack/HStack.d.ts +2 -1
  112. package/lib/typescript/src/components/HoldingsCard/HoldingsCard.d.ts +2 -1
  113. package/lib/typescript/src/components/Icon/Icon.d.ts +2 -1
  114. package/lib/typescript/src/components/IconButton/IconButton.d.ts +2 -1
  115. package/lib/typescript/src/components/IconCapsule/IconCapsule.d.ts +2 -1
  116. package/lib/typescript/src/components/Image/Image.d.ts +17 -1
  117. package/lib/typescript/src/components/InputSearch/InputSearch.d.ts +2 -1
  118. package/lib/typescript/src/components/InstitutionBadge/InstitutionBadge.d.ts +2 -1
  119. package/lib/typescript/src/components/LazyList/LazyList.d.ts +2 -1
  120. package/lib/typescript/src/components/LinearMeter/LinearMeter.d.ts +3 -2
  121. package/lib/typescript/src/components/LinearProgress/LinearProgress.d.ts +2 -1
  122. package/lib/typescript/src/components/ListGroup/ListGroup.d.ts +2 -1
  123. package/lib/typescript/src/components/ListItem/ListItem.d.ts +2 -1
  124. package/lib/typescript/src/components/LottieIntroBlock/LottieIntroBlock.d.ts +2 -1
  125. package/lib/typescript/src/components/LottiePlayer/LottiePlayer.d.ts +2 -1
  126. package/lib/typescript/src/components/LottiePlayer/LottiePlayer.web.d.ts +2 -1
  127. package/lib/typescript/src/components/MediaCard/MediaCard.d.ts +6 -5
  128. package/lib/typescript/src/components/MerchantProfile/MerchantProfile.d.ts +2 -1
  129. package/lib/typescript/src/components/MessageField/MessageField.d.ts +2 -1
  130. package/lib/typescript/src/components/MetricLegendItem/MetricLegendItem.d.ts +2 -1
  131. package/lib/typescript/src/components/MoneyValue/MoneyValue.d.ts +2 -1
  132. package/lib/typescript/src/components/MonthlyStatusGrid/MonthlyStatusGrid.d.ts +4 -3
  133. package/lib/typescript/src/components/NavArrow/NavArrow.d.ts +2 -1
  134. package/lib/typescript/src/components/NoteInput/NoteInput.d.ts +2 -1
  135. package/lib/typescript/src/components/Nudge/Nudge.d.ts +2 -1
  136. package/lib/typescript/src/components/Numpad/Numpad.d.ts +2 -1
  137. package/lib/typescript/src/components/OTP/OTP.d.ts +3 -2
  138. package/lib/typescript/src/components/Overlay/Overlay.d.ts +52 -0
  139. package/lib/typescript/src/components/PageHero/PageHero.d.ts +2 -1
  140. package/lib/typescript/src/components/PaymentFeedback/PaymentFeedback.d.ts +2 -1
  141. package/lib/typescript/src/components/PlanComparisonCard/PlanComparisonCard.d.ts +2 -1
  142. package/lib/typescript/src/components/Popup/Popup.d.ts +2 -1
  143. package/lib/typescript/src/components/PortfolioHero/PortfolioHero.d.ts +2 -1
  144. package/lib/typescript/src/components/PoweredByLabel/PoweredByLabel.d.ts +2 -1
  145. package/lib/typescript/src/components/ProductLabel/ProductLabel.d.ts +2 -1
  146. package/lib/typescript/src/components/ProductOverview/ProductOverview.d.ts +2 -1
  147. package/lib/typescript/src/components/ProgressBadge/ProgressBadge.d.ts +2 -1
  148. package/lib/typescript/src/components/Radio/Radio.d.ts +2 -1
  149. package/lib/typescript/src/components/RangeTrack/RangeTrack.d.ts +3 -2
  150. package/lib/typescript/src/components/RechargeCard/RechargeCard.d.ts +2 -1
  151. package/lib/typescript/src/components/SavingsGoalSummary/SavingsGoalSummary.d.ts +2 -1
  152. package/lib/typescript/src/components/Screen/Screen.d.ts +2 -1
  153. package/lib/typescript/src/components/Section/Section.d.ts +3 -2
  154. package/lib/typescript/src/components/SegmentedControl/SegmentedControl.d.ts +2 -1
  155. package/lib/typescript/src/components/SegmentedTrack/SegmentedTrack.d.ts +4 -3
  156. package/lib/typescript/src/components/Slot/Slot.d.ts +2 -1
  157. package/lib/typescript/src/components/Spinner/Spinner.d.ts +2 -1
  158. package/lib/typescript/src/components/StatGroup/StatGroup.d.ts +2 -1
  159. package/lib/typescript/src/components/StatItem/StatItem.d.ts +2 -1
  160. package/lib/typescript/src/components/StatusHero/StatusHero.d.ts +2 -1
  161. package/lib/typescript/src/components/Stepper/Step.d.ts +2 -1
  162. package/lib/typescript/src/components/Stepper/StepLabel.d.ts +2 -1
  163. package/lib/typescript/src/components/Stepper/Stepper.d.ts +2 -1
  164. package/lib/typescript/src/components/StrengthIndicator/StrengthIndicator.d.ts +2 -1
  165. package/lib/typescript/src/components/SuggestiveSearch/SuggestiveSearch.d.ts +2 -1
  166. package/lib/typescript/src/components/SummaryTile/SummaryTile.d.ts +2 -1
  167. package/lib/typescript/src/components/SupportText/SupportText.d.ts +2 -1
  168. package/lib/typescript/src/components/SupportText/SupportTextIcon.d.ts +2 -1
  169. package/lib/typescript/src/components/SwappableAmount/SwappableAmount.d.ts +2 -1
  170. package/lib/typescript/src/components/Tabs/TabItem.d.ts +2 -1
  171. package/lib/typescript/src/components/Tabs/Tabs.d.ts +2 -1
  172. package/lib/typescript/src/components/TestimonialsCard/TestimonialsCard.d.ts +52 -0
  173. package/lib/typescript/src/components/Text/Text.d.ts +2 -1
  174. package/lib/typescript/src/components/TextInput/TextInput.d.ts +3 -2
  175. package/lib/typescript/src/components/ThreadHero/ThreadHero.d.ts +2 -1
  176. package/lib/typescript/src/components/Title/Title.d.ts +2 -1
  177. package/lib/typescript/src/components/Toast/Toast.d.ts +2 -1
  178. package/lib/typescript/src/components/Toast/ToastProvider.d.ts +2 -1
  179. package/lib/typescript/src/components/Toast/useToast.d.ts +3 -2
  180. package/lib/typescript/src/components/Toggle/Toggle.d.ts +2 -1
  181. package/lib/typescript/src/components/Tooltip/Tooltip.d.ts +2 -1
  182. package/lib/typescript/src/components/TransactionBubble/TransactionBubble.d.ts +2 -1
  183. package/lib/typescript/src/components/TransactionDetails/TransactionDetails.d.ts +3 -2
  184. package/lib/typescript/src/components/TransactionStatus/TransactionStatus.d.ts +2 -1
  185. package/lib/typescript/src/components/UpiHandle/UpiHandle.d.ts +2 -1
  186. package/lib/typescript/src/components/VStack/VStack.d.ts +2 -1
  187. package/lib/typescript/src/components/docs/modeControls.d.ts +28 -0
  188. package/lib/typescript/src/components/index.d.ts +2 -0
  189. package/lib/typescript/src/design-tokens/JFSThemeProvider.d.ts +4 -3
  190. package/lib/typescript/src/design-tokens/figma-modes.generated.d.ts +264 -0
  191. package/lib/typescript/src/design-tokens/index.d.ts +1 -0
  192. package/lib/typescript/src/icons/registry.d.ts +1 -1
  193. package/lib/typescript/src/skeleton/Skeleton.d.ts +2 -1
  194. package/lib/typescript/src/utils/react-utils.d.ts +2 -1
  195. package/package.json +3 -2
  196. package/src/components/Accordion/Accordion.tsx +2 -1
  197. package/src/components/AccordionCheckbox/AccordionCheckbox.tsx +2 -1
  198. package/src/components/AccountCard/AccountCard.tsx +2 -1
  199. package/src/components/ActionFooter/ActionFooter.tsx +2 -1
  200. package/src/components/ActionTile/ActionTile.tsx +2 -1
  201. package/src/components/AllocationComparisonChart/AllocationComparisonChart.tsx +2 -1
  202. package/src/components/AmountInput/AmountInput.tsx +2 -1
  203. package/src/components/AppBar/AppBar.tsx +2 -1
  204. package/src/components/AreaLineChart/AreaLineChart.tsx +8 -7
  205. package/src/components/Attached/Attached.tsx +2 -1
  206. package/src/components/Avatar/Avatar.tsx +3 -2
  207. package/src/components/AvatarGroup/AvatarGroup.tsx +2 -1
  208. package/src/components/Badge/Badge.tsx +2 -1
  209. package/src/components/Balance/Balance.tsx +18 -12
  210. package/src/components/BottomNav/BottomNav.tsx +2 -1
  211. package/src/components/BottomNavItem/BottomNavItem.tsx +3 -2
  212. package/src/components/BrandChip/BrandChip.tsx +3 -2
  213. package/src/components/BubbleChart/BubbleChart.tsx +2 -1
  214. package/src/components/Button/Button.tsx +3 -2
  215. package/src/components/ButtonGroup/ButtonGroup.tsx +2 -1
  216. package/src/components/Card/Card.tsx +4 -3
  217. package/src/components/CardAdvisory/CardAdvisory.tsx +3 -2
  218. package/src/components/CardBankAccount/CardBankAccount.tsx +2 -1
  219. package/src/components/CardCTA/CardCTA.tsx +3 -2
  220. package/src/components/CardFeedback/CardFeedback.tsx +11 -10
  221. package/src/components/CardFinancialCondition/CardFinancialCondition.tsx +3 -2
  222. package/src/components/CardInsight/CardInsight.tsx +2 -1
  223. package/src/components/CardProviderInfo/CardProviderInfo.tsx +2 -1
  224. package/src/components/Carousel/Carousel.tsx +5 -4
  225. package/src/components/Checkbox/Checkbox.tsx +2 -1
  226. package/src/components/CheckboxGroup/CheckboxGroup.tsx +2 -1
  227. package/src/components/CheckboxItem/CheckboxItem.tsx +2 -1
  228. package/src/components/ChipGroup/ChipGroup.tsx +2 -1
  229. package/src/components/ChipSelect/ChipSelect.tsx +2 -1
  230. package/src/components/CircularProgressBar/CircularProgressBar.tsx +2 -1
  231. package/src/components/CircularProgressBarDoted/CircularProgressBarDoted.tsx +2 -1
  232. package/src/components/CircularRating/CircularRating.tsx +3 -2
  233. package/src/components/ClusterBubble/ClusterBubble.tsx +2 -1
  234. package/src/components/CoverageBarComparison/CoverageBarComparison.tsx +3 -2
  235. package/src/components/CoverageRing/CoverageRing.tsx +2 -1
  236. package/src/components/DebitCard/DebitCard.tsx +2 -1
  237. package/src/components/Disclaimer/Disclaimer.tsx +2 -1
  238. package/src/components/Divider/Divider.tsx +2 -1
  239. package/src/components/DonutChart/DonutChart.tsx +6 -5
  240. package/src/components/DonutChartSummary/DonutChartSummary.tsx +3 -2
  241. package/src/components/Drawer/Drawer.tsx +21 -1
  242. package/src/components/Dropdown/Dropdown.tsx +42 -21
  243. package/src/components/DropdownInput/DropdownInput.tsx +5 -4
  244. package/src/components/EmptyState/EmptyState.tsx +2 -1
  245. package/src/components/ExpandableCheckbox/ExpandableCheckbox.tsx +2 -1
  246. package/src/components/FilterBar/FilterBar.tsx +3 -2
  247. package/src/components/Form/Form.tsx +2 -1
  248. package/src/components/FormField/FormField.tsx +3 -2
  249. package/src/components/FullscreenModal/FullscreenModal.tsx +77 -12
  250. package/src/components/Gauge/Gauge.tsx +2 -1
  251. package/src/components/HStack/HStack.tsx +2 -1
  252. package/src/components/HoldingsCard/HoldingsCard.tsx +2 -1
  253. package/src/components/Icon/Icon.tsx +3 -2
  254. package/src/components/IconButton/IconButton.tsx +3 -2
  255. package/src/components/IconCapsule/IconCapsule.tsx +3 -2
  256. package/src/components/Image/Image.tsx +29 -5
  257. package/src/components/InputSearch/InputSearch.tsx +3 -2
  258. package/src/components/InstitutionBadge/InstitutionBadge.tsx +3 -2
  259. package/src/components/LazyList/LazyList.tsx +2 -1
  260. package/src/components/LinearMeter/LinearMeter.tsx +3 -2
  261. package/src/components/LinearProgress/LinearProgress.tsx +2 -1
  262. package/src/components/ListGroup/ListGroup.tsx +2 -1
  263. package/src/components/ListItem/ListItem.tsx +3 -2
  264. package/src/components/LottieIntroBlock/LottieIntroBlock.tsx +2 -1
  265. package/src/components/LottiePlayer/LottiePlayer.tsx +3 -2
  266. package/src/components/LottiePlayer/LottiePlayer.web.tsx +3 -2
  267. package/src/components/LottiePlayer/loadNativeLottieView.tsx +9 -13
  268. package/src/components/MediaCard/MediaCard.tsx +7 -6
  269. package/src/components/MerchantProfile/MerchantProfile.tsx +2 -1
  270. package/src/components/MessageField/MessageField.tsx +3 -2
  271. package/src/components/MetricLegendItem/MetricLegendItem.tsx +2 -1
  272. package/src/components/MoneyValue/MoneyValue.tsx +2 -1
  273. package/src/components/MonthlyStatusGrid/MonthlyStatusGrid.tsx +5 -4
  274. package/src/components/NavArrow/NavArrow.tsx +3 -2
  275. package/src/components/NoteInput/NoteInput.tsx +2 -1
  276. package/src/components/Nudge/Nudge.tsx +3 -2
  277. package/src/components/Numpad/Numpad.tsx +2 -1
  278. package/src/components/OTP/OTP.tsx +3 -2
  279. package/src/components/Overlay/Overlay.tsx +114 -0
  280. package/src/components/PageHero/PageHero.tsx +2 -1
  281. package/src/components/PaymentFeedback/PaymentFeedback.tsx +2 -1
  282. package/src/components/PlanComparisonCard/PlanComparisonCard.tsx +2 -1
  283. package/src/components/Popup/Popup.tsx +2 -1
  284. package/src/components/PortfolioHero/PortfolioHero.tsx +2 -1
  285. package/src/components/PoweredByLabel/PoweredByLabel.tsx +2 -1
  286. package/src/components/ProductLabel/ProductLabel.tsx +2 -1
  287. package/src/components/ProductOverview/ProductOverview.tsx +2 -1
  288. package/src/components/ProgressBadge/ProgressBadge.tsx +2 -1
  289. package/src/components/Radio/Radio.tsx +2 -1
  290. package/src/components/RangeTrack/RangeTrack.tsx +3 -2
  291. package/src/components/RechargeCard/RechargeCard.tsx +2 -1
  292. package/src/components/SavingsGoalSummary/SavingsGoalSummary.tsx +2 -1
  293. package/src/components/Screen/Screen.tsx +2 -1
  294. package/src/components/Section/Section.tsx +6 -5
  295. package/src/components/SegmentedControl/SegmentedControl.tsx +3 -2
  296. package/src/components/SegmentedTrack/SegmentedTrack.tsx +5 -4
  297. package/src/components/Slot/Slot.tsx +2 -1
  298. package/src/components/Spinner/Spinner.tsx +2 -1
  299. package/src/components/StatGroup/StatGroup.tsx +3 -2
  300. package/src/components/StatItem/StatItem.tsx +2 -1
  301. package/src/components/StatusHero/StatusHero.tsx +2 -1
  302. package/src/components/Stepper/Step.tsx +2 -1
  303. package/src/components/Stepper/StepLabel.tsx +2 -1
  304. package/src/components/Stepper/Stepper.tsx +2 -1
  305. package/src/components/StrengthIndicator/StrengthIndicator.tsx +2 -1
  306. package/src/components/SuggestiveSearch/SuggestiveSearch.tsx +4 -3
  307. package/src/components/SummaryTile/SummaryTile.tsx +2 -1
  308. package/src/components/SupportText/SupportText.tsx +2 -1
  309. package/src/components/SupportText/SupportTextIcon.tsx +2 -1
  310. package/src/components/SwappableAmount/SwappableAmount.tsx +2 -1
  311. package/src/components/Tabs/TabItem.tsx +2 -1
  312. package/src/components/Tabs/Tabs.tsx +2 -1
  313. package/src/components/TestimonialsCard/TestimonialsCard.tsx +163 -0
  314. package/src/components/Text/Text.tsx +2 -1
  315. package/src/components/TextInput/TextInput.tsx +3 -2
  316. package/src/components/ThreadHero/ThreadHero.tsx +2 -1
  317. package/src/components/Title/Title.tsx +2 -1
  318. package/src/components/Toast/Toast.tsx +2 -1
  319. package/src/components/Toast/ToastProvider.tsx +2 -1
  320. package/src/components/Toast/useToast.ts +3 -2
  321. package/src/components/Toggle/Toggle.tsx +2 -1
  322. package/src/components/Tooltip/Tooltip.tsx +3 -2
  323. package/src/components/TransactionBubble/TransactionBubble.tsx +2 -1
  324. package/src/components/TransactionDetails/TransactionDetails.tsx +3 -2
  325. package/src/components/TransactionStatus/TransactionStatus.tsx +3 -2
  326. package/src/components/UpiHandle/UpiHandle.tsx +3 -2
  327. package/src/components/VStack/VStack.tsx +2 -1
  328. package/src/components/docs/modeControls.tsx +122 -0
  329. package/src/components/index.ts +2 -0
  330. package/src/design-tokens/JFSThemeProvider.tsx +4 -3
  331. package/src/design-tokens/figma-modes.generated.ts +396 -0
  332. package/src/design-tokens/index.ts +1 -0
  333. package/src/icons/registry.ts +1 -1
  334. package/src/skeleton/Skeleton.tsx +2 -1
  335. package/src/utils/react-utils.ts +3 -2
@@ -4,8 +4,9 @@ import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
4
4
  import Image from '../Image/Image'
5
5
  import GlassFill, { type GlassTint } from './GlassFill'
6
6
  import { EMPTY_MODES } from '../../utils/react-utils'
7
+ import type { Modes } from '../../design-tokens'
7
8
 
8
- const MediaCardContext = createContext<{ modes?: Record<string, any> }>({})
9
+ const MediaCardContext = createContext<{ modes?: Modes }>({})
9
10
 
10
11
  export interface MediaCardProps {
11
12
  /**
@@ -34,7 +35,7 @@ export interface MediaCardProps {
34
35
  /**
35
36
  * Modes object for token resolution.
36
37
  */
37
- modes?: Record<string, any>
38
+ modes?: Modes
38
39
  /**
39
40
  * Style overrides for the card container.
40
41
  */
@@ -137,7 +138,7 @@ export function Header({ children, style }: { children?: React.ReactNode; style?
137
138
  * Title component.
138
139
  * Tokens: cardMedia/title/*
139
140
  */
140
- export function Title({ children, style, modes: propModes }: { children?: React.ReactNode; style?: StyleProp<TextStyle>; modes?: Record<string, any> }) {
141
+ export function Title({ children, style, modes: propModes }: { children?: React.ReactNode; style?: StyleProp<TextStyle>; modes?: Modes }) {
141
142
  const context = useContext(MediaCardContext)
142
143
  const modes = propModes || context.modes || {}
143
144
 
@@ -181,7 +182,7 @@ export function Title({ children, style, modes: propModes }: { children?: React.
181
182
  *
182
183
  * Tokens still drive the tint color, blur intensity and inner spacing.
183
184
  */
184
- export function Footer({ children, style, modes: propModes }: { children?: React.ReactNode; style?: StyleProp<ViewStyle>; modes?: Record<string, any> }) {
185
+ export function Footer({ children, style, modes: propModes }: { children?: React.ReactNode; style?: StyleProp<ViewStyle>; modes?: Modes }) {
185
186
  const context = useContext(MediaCardContext)
186
187
  const modes = propModes || context.modes || {}
187
188
 
@@ -245,7 +246,7 @@ export function Footer({ children, style, modes: propModes }: { children?: React
245
246
  * Footer Title
246
247
  * Tokens: cardMedia/footer/title/*
247
248
  */
248
- export function FooterTitle({ children, style, modes: propModes }: { children?: React.ReactNode; style?: StyleProp<TextStyle>; modes?: Record<string, any> }) {
249
+ export function FooterTitle({ children, style, modes: propModes }: { children?: React.ReactNode; style?: StyleProp<TextStyle>; modes?: Modes }) {
249
250
  const context = useContext(MediaCardContext)
250
251
  const modes = propModes || context.modes || {}
251
252
 
@@ -266,7 +267,7 @@ export function FooterTitle({ children, style, modes: propModes }: { children?:
266
267
  * Footer Subtitle
267
268
  * Tokens: cardMedia/footer/subtitle/*
268
269
  */
269
- export function FooterSubtitle({ children, style, modes: propModes }: { children?: React.ReactNode; style?: StyleProp<TextStyle>; modes?: Record<string, any> }) {
270
+ export function FooterSubtitle({ children, style, modes: propModes }: { children?: React.ReactNode; style?: StyleProp<TextStyle>; modes?: Modes }) {
270
271
  const context = useContext(MediaCardContext)
271
272
  const modes = propModes || context.modes || {}
272
273
 
@@ -9,6 +9,7 @@ import {
9
9
  import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
10
10
  import { EMPTY_MODES } from '../../utils/react-utils'
11
11
  import Avatar, { type AvatarProps } from '../Avatar/Avatar'
12
+ import type { Modes } from '../../design-tokens'
12
13
 
13
14
  export type MerchantProfileProps = {
14
15
  /**
@@ -23,7 +24,7 @@ export type MerchantProfileProps = {
23
24
  * Mode configuration passed to the token resolver.
24
25
  * Also passed to the Avatar child component for consistent theming.
25
26
  */
26
- modes?: Record<string, any>
27
+ modes?: Modes
27
28
  /**
28
29
  * Optional style overrides for the container
29
30
  */
@@ -12,6 +12,7 @@ import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
12
12
  import { useTokens } from '../../design-tokens/JFSThemeProvider'
13
13
  import { EMPTY_MODES } from '../../utils/react-utils'
14
14
  import { useFormContext } from '../Form/Form'
15
+ import type { Modes } from '../../design-tokens'
15
16
 
16
17
  // ---------------------------------------------------------------------------
17
18
  // Types
@@ -82,7 +83,7 @@ export type MessageFieldProps = {
82
83
  /** Auto-focus the textarea on mount. */
83
84
  autoFocus?: boolean
84
85
  /** Modes for design token resolution (e.g. `{ 'Color Mode': 'Light' }`). */
85
- modes?: Record<string, any>
86
+ modes?: Modes
86
87
  /** Style overrides for the outermost wrapper. */
87
88
  style?: StyleProp<ViewStyle>
88
89
  /** Style overrides for the textarea container (border/padding/etc). */
@@ -129,7 +130,7 @@ function firstError(error: string | string[] | undefined): string | undefined {
129
130
  return error
130
131
  }
131
132
 
132
- function useMessageFieldTokens(modes: Record<string, any>) {
133
+ function useMessageFieldTokens(modes: Modes) {
133
134
  return useMemo(() => {
134
135
  const wrapperGap = toNumber(getVariableByName('messageField/gap', modes), 8)
135
136
 
@@ -8,6 +8,7 @@ import {
8
8
  } from 'react-native'
9
9
  import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
10
10
  import { EMPTY_MODES } from '../../utils/react-utils'
11
+ import type { Modes } from '../../design-tokens'
11
12
 
12
13
  export type MetricLegendItemProps = {
13
14
  /** The label text on the left (after the indicator). */
@@ -29,7 +30,7 @@ export type MetricLegendItemProps = {
29
30
  */
30
31
  indicatorShape?: 'dot' | 'line'
31
32
  /** Design token modes for theming (e.g. `{ 'Color Mode': 'Light' }`). */
32
- modes?: Record<string, any>
33
+ modes?: Modes
33
34
  /** Override container styles. */
34
35
  style?: StyleProp<ViewStyle>
35
36
  /** Override the indicator (dot) styles. */
@@ -10,6 +10,7 @@ import {
10
10
  } from 'react-native'
11
11
  import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
12
12
  import { EMPTY_MODES } from '../../utils/react-utils'
13
+ import type { Modes } from '../../design-tokens'
13
14
 
14
15
  // Map of common ISO 4217 currency codes to display symbols
15
16
  const CURRENCY_SYMBOLS = {
@@ -58,7 +59,7 @@ export type MoneyValueProps = {
58
59
  /** When true, a blinking vertical cursor is shown at the end of the value text. */
59
60
  focused?: boolean
60
61
  /** Modes configuration mapped to Figma tokens. */
61
- modes?: Record<string, any>
62
+ modes?: Modes
62
63
  style?: StyleProp<ViewStyle>
63
64
  valueStyle?: StyleProp<TextStyle>
64
65
  currencyStyle?: StyleProp<TextStyle>
@@ -10,6 +10,7 @@ import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
10
10
  import { useTokens } from '../../design-tokens/JFSThemeProvider'
11
11
  import { EMPTY_MODES } from '../../utils/react-utils'
12
12
  import MetricLegendItem from '../MetricLegendItem/MetricLegendItem'
13
+ import type { Modes } from '../../design-tokens'
13
14
 
14
15
  /**
15
16
  * The three semantic states a calendar glyph can be in. Maps 1:1 to the
@@ -37,7 +38,7 @@ export type MonthlyStatusGridMonth = {
37
38
  * Per-month design token mode overrides. Merged on top of the parent
38
39
  * `modes` and the per-month `Calendar Glyph State` derived from `status`.
39
40
  */
40
- modes?: Record<string, any>
41
+ modes?: Modes
41
42
  /** Per-month accessibility label. */
42
43
  accessibilityLabel?: string
43
44
  }
@@ -67,7 +68,7 @@ export type MonthlyStatusGridProps = {
67
68
  */
68
69
  legendStatuses?: MonthlyStatus[]
69
70
  /** Design token modes (e.g. `{ 'Color Mode': 'Light' }`). */
70
- modes?: Record<string, any>
71
+ modes?: Modes
71
72
  /** Container style override. */
72
73
  style?: StyleProp<ViewStyle>
73
74
  /** Style applied to the months section (the rows wrapper). */
@@ -162,7 +163,7 @@ export type CalendarGlyphProps = {
162
163
  */
163
164
  status?: MonthlyStatus
164
165
  /** Design token mode overrides. */
165
- modes?: Record<string, any>
166
+ modes?: Modes
166
167
  /** Container style override. */
167
168
  style?: StyleProp<ViewStyle>
168
169
  /** Label text style override. */
@@ -268,7 +269,7 @@ function CalendarGlyph({
268
269
  */
269
270
  function resolveStatusColors(
270
271
  status: MonthlyStatus,
271
- modes: Record<string, any>
272
+ modes: Modes
272
273
  ): { bg: string; fg: string; statusModes: Record<string, any> } {
273
274
  const statusModes = { ...modes, 'Calendar Glyph State': status }
274
275
  const bg =
@@ -14,6 +14,7 @@ import {
14
14
  type SafePressableProps,
15
15
  } from '../../utils/web-platform-utils'
16
16
  import { EMPTY_MODES } from '../../utils/react-utils'
17
+ import type { Modes } from '../../design-tokens'
17
18
 
18
19
  type NavArrowDirection = 'Back' | 'Forward' | 'Down'
19
20
 
@@ -33,7 +34,7 @@ type NavArrowProps = SafePressableProps & {
33
34
  /** Direction of the arrow: 'Back' (left chevron), 'Forward' (right chevron), or 'Down' */
34
35
  direction?: NavArrowDirection
35
36
  /** Modes used to resolve design tokens */
36
- modes?: Record<string, any>
37
+ modes?: Modes
37
38
  /** Optional additional container style */
38
39
  style?: StyleProp<ViewStyle>
39
40
  /** Accessibility label for the arrow */
@@ -55,7 +56,7 @@ interface NavArrowTokens {
55
56
  backgroundColor: string
56
57
  }
57
58
 
58
- function resolveNavArrowTokens(modes: Record<string, any>): NavArrowTokens {
59
+ function resolveNavArrowTokens(modes: Modes): NavArrowTokens {
59
60
  const iconColor =
60
61
  (getVariableByName('navArrow/icon/color', modes) as string) || '#24262b'
61
62
 
@@ -12,6 +12,7 @@ import {
12
12
  } from 'react-native'
13
13
  import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
14
14
  import { EMPTY_MODES } from '../../utils/react-utils'
15
+ import type { Modes } from '../../design-tokens'
15
16
 
16
17
  export type NoteInputProps = {
17
18
  /** The value of the text input */
@@ -21,7 +22,7 @@ export type NoteInputProps = {
21
22
  /** Callback when text changes */
22
23
  onChangeText?: (text: string) => void
23
24
  /** Design token modes (e.g., {'InputState': 'Idle', 'Color Mode': 'Light'}) */
24
- modes?: Record<string, any>
25
+ modes?: Modes
25
26
  /** Custom container style */
26
27
  style?: StyleProp<ViewStyle>
27
28
  /** Custom text input style */
@@ -5,6 +5,7 @@ import { useTokens } from '../../design-tokens/JFSThemeProvider'
5
5
  import { cloneChildrenWithModes, EMPTY_MODES } from '../../utils/react-utils'
6
6
  import Button from '../Button/Button'
7
7
  import Icon from '../../icons/Icon'
8
+ import type { Modes } from '../../design-tokens'
8
9
 
9
10
  export type NudgeType = 'stacked-prominent' | 'stacked-detailed' | 'inline-compact'
10
11
 
@@ -31,7 +32,7 @@ export type NudgeProps = {
31
32
  /** Content slot — overrides default content, or provides detailed list content */
32
33
  children?: React.ReactNode;
33
34
  /** Mode configuration for design token resolution */
34
- modes?: Record<string, any>;
35
+ modes?: Modes;
35
36
  /** Optional container style overrides */
36
37
  style?: StyleProp<ViewStyle>;
37
38
  };
@@ -61,7 +62,7 @@ function toFontWeight(value: unknown, fallback: TextStyle['fontWeight']): TextSt
61
62
  return fallback
62
63
  }
63
64
 
64
- function resolveNudgeTokens(modes: Record<string, any>): NudgeTokens {
65
+ function resolveNudgeTokens(modes: Modes): NudgeTokens {
65
66
  const background = getVariableByName('nudge/background', modes) || '#f5f5f5'
66
67
  const radius = getVariableByName('nudge/radius', modes) || 12
67
68
  const paddingH = getVariableByName('nudge/padding/horizontal', modes) || 12
@@ -10,6 +10,7 @@ import {
10
10
  import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
11
11
  import { EMPTY_MODES } from '../../utils/react-utils'
12
12
  import Icon from '../../icons/Icon'
13
+ import type { Modes } from '../../design-tokens'
13
14
 
14
15
  export type NumpadKeyValue =
15
16
  | '0'
@@ -27,7 +28,7 @@ export type NumpadKeyValue =
27
28
 
28
29
  export interface NumpadProps {
29
30
  /** Design token modes for theming (e.g., {"Color Mode": "Light"}) */
30
- modes?: Record<string, any>
31
+ modes?: Modes
31
32
  /** Callback fired when any key is pressed */
32
33
  onKeyPress?: (key: NumpadKeyValue) => void
33
34
  /** Whether to show the decimal point key (default: true) */
@@ -14,6 +14,7 @@ import { useTokens } from '../../design-tokens/JFSThemeProvider'
14
14
  import SupportText, { type SupportTextProps } from '../SupportText/SupportText'
15
15
  import Button from '../Button/Button'
16
16
  import { cloneChildrenWithModes, EMPTY_MODES } from '../../utils/react-utils'
17
+ import type { Modes } from '../../design-tokens'
17
18
 
18
19
  // Default mode overrides for the resend Button. Per design: a small,
19
20
  // low-emphasis, neutral-appearance button. Consumers can override any of
@@ -223,7 +224,7 @@ export type OTPResendConfig = {
223
224
  }
224
225
 
225
226
  export type OTPResendProps = OTPResendConfig & {
226
- modes?: Record<string, any>
227
+ modes?: Modes
227
228
  style?: StyleProp<ViewStyle>
228
229
  }
229
230
 
@@ -338,7 +339,7 @@ export type OTPProps = {
338
339
  /** Auto-focus the input on mount. */
339
340
  autoFocus?: boolean
340
341
  /** Design token modes for Figma token resolution. */
341
- modes?: Record<string, any>
342
+ modes?: Modes
342
343
  /** Container style override. */
343
344
  style?: StyleProp<ViewStyle>
344
345
  /** Optional SupportText rendered below the slots. Pass a string for the label or a ReactNode for full control. */
@@ -0,0 +1,114 @@
1
+ import React, { useMemo } from 'react'
2
+ import {
3
+ Pressable,
4
+ StyleSheet,
5
+ View,
6
+ type StyleProp,
7
+ type ViewProps,
8
+ type ViewStyle,
9
+ } from 'react-native'
10
+ import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
11
+ import { useTokens } from '../../design-tokens/JFSThemeProvider'
12
+ import { cloneChildrenWithModes, EMPTY_MODES } from '../../utils/react-utils'
13
+ import type { Modes } from '../../design-tokens'
14
+
15
+ export type OverlayProps = Omit<ViewProps, 'children' | 'style'> & {
16
+ /**
17
+ * Content rendered on top of the scrim. `modes` are cascaded to every child
18
+ * via {@link cloneChildrenWithModes}. When omitted the overlay renders as a
19
+ * bare backdrop.
20
+ */
21
+ children?: React.ReactNode
22
+ /**
23
+ * How `children` are positioned within the overlay.
24
+ * - `center` (default): centers content both axes
25
+ * - `top` / `bottom`: pins content to the top/bottom edge
26
+ * - `stretch`: stretches content to fill the overlay
27
+ */
28
+ contentPlacement?: 'center' | 'top' | 'bottom' | 'stretch'
29
+ /**
30
+ * Called when the scrim (the area outside `children`) is pressed. Typically
31
+ * used to dismiss the overlaid surface. When omitted the backdrop is inert.
32
+ */
33
+ onPress?: () => void
34
+ /**
35
+ * When `true` (default) the overlay covers its parent via `StyleSheet.absoluteFill`.
36
+ * Set to `false` to lay it out in normal flow (driven by `style`).
37
+ */
38
+ fill?: boolean
39
+ /**
40
+ * Mode configuration passed to the token resolver and cascaded to children.
41
+ */
42
+ modes?: Modes
43
+ style?: StyleProp<ViewStyle>
44
+ }
45
+
46
+ const PLACEMENT_STYLE: Record<NonNullable<OverlayProps['contentPlacement']>, ViewStyle> = {
47
+ center: { justifyContent: 'center', alignItems: 'center' },
48
+ top: { justifyContent: 'flex-start', alignItems: 'stretch' },
49
+ bottom: { justifyContent: 'flex-end', alignItems: 'stretch' },
50
+ stretch: { justifyContent: 'center', alignItems: 'stretch' },
51
+ }
52
+
53
+ /**
54
+ * Overlay — a token-driven scrim that dims content behind an overlaid surface.
55
+ *
56
+ * Renders a semi-transparent backdrop using the `overlay/background` design
57
+ * token and optionally hosts content (e.g. a modal, sheet or dialog) on top.
58
+ * Pair it with a `Modal` for true full-screen overlays, or drop it inside any
59
+ * relatively-positioned container to dim just that region.
60
+ *
61
+ * @example
62
+ * ```tsx
63
+ * <Overlay modes={modes} onPress={close}>
64
+ * <Card>Dialog content</Card>
65
+ * </Overlay>
66
+ * ```
67
+ */
68
+ function Overlay({
69
+ children,
70
+ contentPlacement = 'center',
71
+ onPress,
72
+ fill = true,
73
+ modes: propModes = EMPTY_MODES,
74
+ style,
75
+ ...rest
76
+ }: OverlayProps) {
77
+ const { modes: globalModes } = useTokens()
78
+ const modes = useMemo(() => ({ ...globalModes, ...propModes }), [globalModes, propModes])
79
+
80
+ const { containerStyle, processedChildren } = useMemo(() => {
81
+ const backgroundColor = (getVariableByName('overlay/background', modes) ??
82
+ 'rgba(0, 0, 0, 0.7)') as string
83
+
84
+ const container: ViewStyle = {
85
+ backgroundColor,
86
+ overflow: 'hidden',
87
+ ...PLACEMENT_STYLE[contentPlacement],
88
+ }
89
+
90
+ const processed = children ? cloneChildrenWithModes(children, modes) : null
91
+
92
+ return { containerStyle: container, processedChildren: processed }
93
+ }, [children, modes, contentPlacement])
94
+
95
+ return (
96
+ <View
97
+ style={[fill && StyleSheet.absoluteFill, containerStyle, style]}
98
+ accessibilityViewIsModal
99
+ {...rest}
100
+ >
101
+ {onPress ? (
102
+ <Pressable
103
+ style={StyleSheet.absoluteFill}
104
+ onPress={onPress}
105
+ accessibilityRole="button"
106
+ accessibilityLabel="Dismiss overlay"
107
+ />
108
+ ) : null}
109
+ {processedChildren}
110
+ </View>
111
+ )
112
+ }
113
+
114
+ export default React.memo(Overlay)
@@ -10,6 +10,7 @@ import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
10
10
  import { useTokens } from '../../design-tokens/JFSThemeProvider'
11
11
  import Button from '../Button/Button'
12
12
  import { EMPTY_MODES, cloneChildrenWithModes } from '../../utils/react-utils'
13
+ import type { Modes } from '../../design-tokens'
13
14
 
14
15
  export type PageHeroProps = {
15
16
  /** Small eyebrow text shown above the headline. */
@@ -50,7 +51,7 @@ export type PageHeroProps = {
50
51
  */
51
52
  media?: React.ReactNode
52
53
  /** Mode configuration for design-token theming. */
53
- modes?: Record<string, any>
54
+ modes?: Modes
54
55
  /** Style overrides applied to the outer container. */
55
56
  style?: StyleProp<ViewStyle>
56
57
  testID?: string
@@ -4,6 +4,7 @@ import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
4
4
  import { useTokens } from '../../design-tokens/JFSThemeProvider'
5
5
  import IconCapsule from '../IconCapsule/IconCapsule'
6
6
  import { EMPTY_MODES, cloneChildrenWithModes } from '../../utils/react-utils'
7
+ import type { Modes } from '../../design-tokens'
7
8
 
8
9
  export type PaymentFeedbackProps = {
9
10
  /** Large heading text, typically a monetary value (e.g. "₹50,000") */
@@ -25,7 +26,7 @@ export type PaymentFeedbackProps = {
25
26
  * IconCapsule's color — pass `AppearanceSystem: 'positive' | 'warning' |
26
27
  * 'negative'` to render a green/orange/red capsule (defaults to `positive`).
27
28
  */
28
- modes?: Record<string, any>
29
+ modes?: Modes
29
30
  style?: ViewStyle
30
31
  }
31
32
 
@@ -11,6 +11,7 @@ import {
11
11
  import { getVariableByName } from '../../design-tokens/figma-variables-resolver';
12
12
  import { EMPTY_MODES, cloneChildrenWithModes } from '../../utils/react-utils';
13
13
  import Icon from '../../icons/Icon';
14
+ import type { Modes } from '../../design-tokens'
14
15
 
15
16
  /** Figma grid: label column 1.8fr, each plan column 1fr. */
16
17
  const LABEL_COLUMN_FR = 1.8;
@@ -73,7 +74,7 @@ export type PlanComparisonCardProps = {
73
74
  /** Feature rows compared across the plan columns. */
74
75
  rows?: PlanComparisonRow[];
75
76
  /** Design token modes for theming (e.g. `{ "Color Mode": "Light" }`). */
76
- modes?: Record<string, any>;
77
+ modes?: Modes;
77
78
  /** Override the outer container style. */
78
79
  style?: StyleProp<ViewStyle>;
79
80
  };
@@ -13,6 +13,7 @@ import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
13
13
  import { useTokens } from '../../design-tokens/JFSThemeProvider'
14
14
  import VStack from '../VStack/VStack'
15
15
  import { EMPTY_MODES } from '../../utils/react-utils'
16
+ import type { Modes } from '../../design-tokens'
16
17
 
17
18
  export type PopupRef = {
18
19
  open: () => void
@@ -31,7 +32,7 @@ export type PopupProps = {
31
32
  /** Slot content displayed inside the popup. */
32
33
  children?: React.ReactNode
33
34
  /** Mode configuration for design token resolution. */
34
- modes?: Record<string, any>
35
+ modes?: Modes
35
36
  /** Whether pressing the backdrop closes the popup. */
36
37
  closeOnBackdropPress?: boolean
37
38
  /** Backdrop overlay color. */
@@ -10,6 +10,7 @@ import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
10
10
  import { cloneChildrenWithModes } from '../../utils/react-utils'
11
11
  import Avatar from '../Avatar/Avatar'
12
12
  import MoneyValue from '../MoneyValue/MoneyValue'
13
+ import type { Modes } from '../../design-tokens'
13
14
 
14
15
  export type PortfolioHeroProps = {
15
16
  /** Product label text displayed next to the avatar. */
@@ -21,7 +22,7 @@ export type PortfolioHeroProps = {
21
22
  /** Currency symbol or ISO code. */
22
23
  currency?: string
23
24
  /** Modes configuration mapped to Figma tokens. */
24
- modes?: Record<string, any>
25
+ modes?: Modes
25
26
  /** Slot content rendered below the money value (e.g. Badge, subtitle). */
26
27
  children?: React.ReactNode
27
28
  /** Container style override. */
@@ -11,6 +11,7 @@ import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
11
11
  import { useTokens } from '../../design-tokens/JFSThemeProvider'
12
12
  import { EMPTY_MODES, cloneChildrenWithModes } from '../../utils/react-utils'
13
13
  import MediaSource, { type UnifiedSource } from '../../utils/MediaSource'
14
+ import type { Modes } from '../../design-tokens'
14
15
 
15
16
  // Default bundled FINVU brand logo, matching the Figma reference so the
16
17
  // component renders correctly out of the box without any image prop.
@@ -52,7 +53,7 @@ export type PoweredByLabelProps = {
52
53
  /**
53
54
  * Design token modes for theming (e.g. `{ 'Color Mode': 'Dark' }`).
54
55
  */
55
- modes?: Record<string, any>
56
+ modes?: Modes
56
57
  /** Container style override. */
57
58
  style?: StyleProp<ViewStyle>
58
59
  /** Label text style override. */
@@ -3,6 +3,7 @@ import { View, Text, type ViewStyle, type TextStyle, type ImageSourcePropType }
3
3
  import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
4
4
  import Avatar from '../Avatar/Avatar'
5
5
  import { EMPTY_MODES } from '../../utils/react-utils'
6
+ import type { Modes } from '../../design-tokens'
6
7
 
7
8
  export type ProductLabelProps = {
8
9
  /** The product name label text. */
@@ -10,7 +11,7 @@ export type ProductLabelProps = {
10
11
  /** Image source for the product avatar. */
11
12
  imageSource?: ImageSourcePropType | string
12
13
  /** Modes configuration for design token resolution. */
13
- modes?: Record<string, any>
14
+ modes?: Modes
14
15
  /** Container style override. */
15
16
  style?: ViewStyle
16
17
  }
@@ -11,6 +11,7 @@ import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
11
11
  import { EMPTY_MODES, cloneChildrenWithModes } from '../../utils/react-utils'
12
12
  import Image from '../Image/Image'
13
13
  import ProductLabel from '../ProductLabel/ProductLabel'
14
+ import type { Modes } from '../../design-tokens'
14
15
 
15
16
  export type ProductOverviewStat = {
16
17
  /** The large prominent value shown on top, e.g. "995", "3%". */
@@ -38,7 +39,7 @@ export type ProductOverviewProps = {
38
39
  */
39
40
  stats?: ProductOverviewStat[]
40
41
  /** Design token modes for theming (e.g. `{ 'Color Mode': 'Light' }`). */
41
- modes?: Record<string, any>
42
+ modes?: Modes
42
43
  /** Container style override. */
43
44
  style?: StyleProp<ViewStyle>
44
45
  /**
@@ -9,6 +9,7 @@ import {
9
9
  import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
10
10
  import Icon from '../../icons/Icon'
11
11
  import { EMPTY_MODES, cloneChildrenWithModes } from '../../utils/react-utils'
12
+ import type { Modes } from '../../design-tokens'
12
13
 
13
14
  export type ProgressBadgeProps = {
14
15
  /** The text displayed in the badge (e.g. "Live price...") */
@@ -18,7 +19,7 @@ export type ProgressBadgeProps = {
18
19
  /** The progress value between 0 and 100 */
19
20
  value?: number
20
21
  /** Modes object passed to `getVariableByName` for design token resolution */
21
- modes?: Record<string, any>
22
+ modes?: Modes
22
23
  /** Optional container style overrides */
23
24
  style?: StyleProp<ViewStyle>
24
25
  /** Optional text style overrides */
@@ -10,6 +10,7 @@ import {
10
10
  } from 'react-native'
11
11
  import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
12
12
  import { EMPTY_MODES } from '../../utils/react-utils'
13
+ import type { Modes } from '../../design-tokens'
13
14
 
14
15
  // ---------------------------------------------------------------------------
15
16
  // Props
@@ -31,7 +32,7 @@ export interface RadioProps {
31
32
  /**
32
33
  * Modes object for design-token resolution.
33
34
  */
34
- modes?: Record<string, any>
35
+ modes?: Modes
35
36
  /**
36
37
  * Custom style for the radio container.
37
38
  */
@@ -9,6 +9,7 @@ import SegmentedTrack, {
9
9
  } from '../SegmentedTrack/SegmentedTrack'
10
10
  import Tabs from '../Tabs/Tabs'
11
11
  import TabItem from '../Tabs/TabItem'
12
+ import type { Modes } from '../../design-tokens'
12
13
 
13
14
  /**
14
15
  * One row of data inside a `RangeTrack` tab.
@@ -48,7 +49,7 @@ export type RangeTrackItem = {
48
49
  * `modes` and the per-index `Emphasis / DataViz` defaults
49
50
  * (`High`, `Medium`, `Low`, then cycles).
50
51
  */
51
- modes?: Record<string, any>
52
+ modes?: Modes
52
53
  /** Accessibility label for the segment + legend row pairing. */
53
54
  accessibilityLabel?: string
54
55
  }
@@ -119,7 +120,7 @@ export type RangeTrackProps = {
119
120
  */
120
121
  scrollableTabs?: boolean
121
122
  /** Design token modes for theming (e.g. `{ 'Color Mode': 'Light' }`). */
122
- modes?: Record<string, any>
123
+ modes?: Modes
123
124
  /** Override the outer container styles. */
124
125
  style?: StyleProp<ViewStyle>
125
126
  /** Override the tab row styles. */
@@ -5,6 +5,7 @@ import AvatarGroup from '../AvatarGroup/AvatarGroup';
5
5
  import { getVariableByName } from '../../design-tokens/figma-variables-resolver';
6
6
  import { EMPTY_MODES } from '../../utils/react-utils';
7
7
  import MoneyValue from '../MoneyValue/MoneyValue';
8
+ import type { Modes } from '../../design-tokens'
8
9
 
9
10
  // Defaults applied to the inner ButtonGroup so the card matches Figma out of
10
11
  // the box. They are spread *before* the caller's `modes` so any consumer can
@@ -62,7 +63,7 @@ export type RechargeCardProps = {
62
63
  /**
63
64
  * Mode configuration for design tokens.
64
65
  */
65
- modes?: Record<string, any>;
66
+ modes?: Modes;
66
67
  style?: ViewStyle;
67
68
  };
68
69
 
@@ -11,6 +11,7 @@ import { formatIndianNumber } from '../../utils/number-utils'
11
11
  import Title from '../Title/Title'
12
12
  import LinearProgress from '../LinearProgress/LinearProgress'
13
13
  import MetricLegendItem from '../MetricLegendItem/MetricLegendItem'
14
+ import type { Modes } from '../../design-tokens'
14
15
 
15
16
  /**
16
17
  * A single row in the savings-goal legend (current vs. target).
@@ -72,7 +73,7 @@ export type SavingsGoalSummaryProps = {
72
73
  * which renders the thicker progress bar from the Figma reference. Caller
73
74
  * modes are merged on top and can override every default key.
74
75
  */
75
- modes?: Record<string, any>
76
+ modes?: Modes
76
77
  /** Override container styles. */
77
78
  style?: StyleProp<ViewStyle>
78
79
  /**