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
@@ -10,12 +10,13 @@ import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
10
10
  import { EMPTY_MODES } from '../../utils/react-utils'
11
11
  import Skeleton from '../../skeleton/Skeleton'
12
12
  import { useSkeleton } from '../../skeleton/SkeletonGroup'
13
+ import type { Modes } from '../../design-tokens'
13
14
 
14
15
  type BadgeProps = {
15
16
  /** Visible label text shown inside the badge */
16
17
  label?: string
17
18
  /** Modes used to resolve design tokens (e.g. Appearance, Size) */
18
- modes?: Record<string, any>
19
+ modes?: Modes
19
20
  /** Optional press handler to make the badge interactive */
20
21
  onPress?: () => void
21
22
  accessibilityLabel?: string
@@ -2,7 +2,16 @@ import React from 'react'
2
2
  import { View, Text, type StyleProp, type ViewStyle, type TextStyle } from 'react-native'
3
3
  import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
4
4
  import MoneyValue from '../MoneyValue/MoneyValue'
5
- import { EMPTY_MODES } from '../../utils/react-utils'
5
+ import { EMPTY_MODES, cloneChildrenWithModes } from '../../utils/react-utils'
6
+ import type { Modes } from '../../design-tokens'
7
+
8
+ // The Balance design renders its money value at the 36 px / 900-weight scale.
9
+ // The `moneyValue/*` tokens alias into the `Context3` collection, where the
10
+ // `Balance & Cards` mode supplies those larger values. Applied *before* the
11
+ // caller's `modes` so any consumer can still override individual keys.
12
+ const DEFAULT_MONEY_VALUE_MODES: Record<string, string> = {
13
+ Context3: 'Balance & Cards',
14
+ }
6
15
 
7
16
  export type BalanceProps = {
8
17
  /**
@@ -23,7 +32,7 @@ export type BalanceProps = {
23
32
  /**
24
33
  * Mode configuration for design tokens.
25
34
  */
26
- modes?: Record<string, any>;
35
+ modes?: Modes;
27
36
  /**
28
37
  * Optional style overrides for the container.
29
38
  */
@@ -58,7 +67,7 @@ function Balance({
58
67
  // Title styles
59
68
  const titleColor = getVariableByName('balance/title/foreground', modes) ?? '#0c0d10'
60
69
  const titleFontSize = getVariableByName('balance/title/fontSize', modes) ?? 14
61
- const titleFontFamily = getVariableByName('balance/title/fontFamily', modes) ?? 'System'
70
+ const titleFontFamily = getVariableByName('balance/title/fontFamily', modes) ?? 'JioType Var'
62
71
  const titleLineHeight = getVariableByName('balance/title/lineHeight', modes) ?? 18
63
72
  const titleFontWeightValue = getVariableByName('balance/title/fontWeight', modes) ?? 500
64
73
  const titleFontWeight = typeof titleFontWeightValue === 'number'
@@ -79,13 +88,10 @@ function Balance({
79
88
  fontWeight: titleFontWeight as any,
80
89
  }
81
90
 
82
- // Handle slot children or default content
83
- const content = React.Children.map(children, (child) => {
84
- if (React.isValidElement(child)) {
85
- return React.cloneElement(child, { modes } as any)
86
- }
87
- return child
88
- })
91
+ // The money value renders at the Balance & Cards scale. Merge the default
92
+ // context mode first so the caller's `modes` can still override it, and
93
+ // force that context onto any slotted children so custom money values match.
94
+ const moneyValueModes: Modes = { ...DEFAULT_MONEY_VALUE_MODES, ...modes }
89
95
 
90
96
  return (
91
97
  <View style={[containerStyle, style]} data-node-id="1986:6203">
@@ -93,12 +99,12 @@ function Balance({
93
99
  {title}
94
100
  </Text>
95
101
  {children ? (
96
- content
102
+ cloneChildrenWithModes(children, modes, DEFAULT_MONEY_VALUE_MODES)
97
103
  ) : (
98
104
  <MoneyValue
99
105
  value={amount}
100
106
  currency={currency}
101
- modes={modes}
107
+ modes={moneyValueModes}
102
108
  />
103
109
  )}
104
110
  </View>
@@ -4,6 +4,7 @@ import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
4
4
  import { useTokens } from '../../design-tokens/JFSThemeProvider'
5
5
  import BottomNavItem from '../BottomNavItem/BottomNavItem'
6
6
  import { EMPTY_MODES } from '../../utils/react-utils'
7
+ import type { Modes } from '../../design-tokens'
7
8
 
8
9
  type BottomNavProps = {
9
10
  /**
@@ -20,7 +21,7 @@ type BottomNavProps = {
20
21
  */
21
22
  children?: React.ReactNode;
22
23
 
23
- modes?: Record<string, any>;
24
+ modes?: Modes;
24
25
  style?: StyleProp<ViewStyle>;
25
26
  accessibilityLabel?: string;
26
27
  accessibilityHint?: string;
@@ -15,11 +15,12 @@ import { useTokens } from '../../design-tokens/JFSThemeProvider'
15
15
  import Icon from '../../icons/Icon'
16
16
  import { usePressableWebSupport, type SafePressableProps, type WebAccessibilityProps } from '../../utils/web-platform-utils'
17
17
  import { EMPTY_MODES } from '../../utils/react-utils'
18
+ import type { Modes } from '../../design-tokens'
18
19
 
19
20
  type BottomNavItemProps = SafePressableProps & {
20
21
  iconName?: string;
21
22
  label?: string;
22
- modes?: Record<string, any>;
23
+ modes?: Modes;
23
24
  onPress?: () => void;
24
25
  disabled?: boolean;
25
26
  style?: StyleProp<ViewStyle>;
@@ -51,7 +52,7 @@ interface BottomNavItemTokens {
51
52
  }
52
53
 
53
54
  function resolveBottomNavItemTokens(
54
- modes: Record<string, any>,
55
+ modes: Modes,
55
56
  disabled: boolean,
56
57
  iconColorOverride?: string,
57
58
  iconSizeOverride?: number,
@@ -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, cloneChildrenWithModes } from '../../utils/react-utils'
14
14
  import Avatar from '../Avatar/Avatar'
15
+ import type { Modes } from '../../design-tokens'
15
16
 
16
17
  export type BrandChipProps = {
17
18
  /** Visible label (e.g. `"Axis Bank • 0245"`). */
@@ -30,7 +31,7 @@ export type BrandChipProps = {
30
31
  /** Optional press handler — when provided, the chip becomes a `Pressable`. */
31
32
  onPress?: () => void
32
33
  /** Design token modes for theming (e.g. `{ 'Color Mode': 'Light' }`). */
33
- modes?: Record<string, any>
34
+ modes?: Modes
34
35
  /** Container style override. */
35
36
  style?: StyleProp<ViewStyle>
36
37
  /** Label style override. */
@@ -64,7 +65,7 @@ const toFontWeight = (
64
65
  return fallback
65
66
  }
66
67
 
67
- function resolveBrandChipTokens(modes: Record<string, any>): BrandChipTokens {
68
+ function resolveBrandChipTokens(modes: Modes): BrandChipTokens {
68
69
  const background =
69
70
  (getVariableByName('brandChip/background', modes) as string | null) ??
70
71
  '#ffffff'
@@ -7,6 +7,7 @@ import {
7
7
  type ViewStyle,
8
8
  } from 'react-native'
9
9
  import { EMPTY_MODES } from '../../utils/react-utils'
10
+ import type { Modes } from '../../design-tokens'
10
11
  import ClusterBubble, {
11
12
  type ClusterBubbleLabelDirection,
12
13
  type ClusterBubbleLabelPlacement,
@@ -78,7 +79,7 @@ export type BubbleChartProps = {
78
79
  /** Notified when a bubble is pressed. Makes every bubble pressable. */
79
80
  onBubblePress?: (datum: BubbleDatum, index: number) => void
80
81
  /** Design token modes for theming (e.g. `{ 'Color Mode': 'Light' }`). */
81
- modes?: Record<string, any>
82
+ modes?: Modes
82
83
  /** Container style override. */
83
84
  style?: StyleProp<ViewStyle>
84
85
  /** Accessibility label for the whole chart. */
@@ -16,6 +16,7 @@ import { EMPTY_MODES } from '../../utils/react-utils'
16
16
  import Icon from '../../icons/Icon'
17
17
  import Skeleton from '../../skeleton/Skeleton'
18
18
  import { useSkeleton } from '../../skeleton/SkeletonGroup'
19
+ import type { Modes } from '../../design-tokens'
19
20
 
20
21
  export type ButtonProps = SafePressableProps & {
21
22
  label?: string;
@@ -44,7 +45,7 @@ export type ButtonProps = SafePressableProps & {
44
45
  * Takes precedence over `trailing` if both are provided.
45
46
  */
46
47
  icon?: string;
47
- modes?: Record<string, any>;
48
+ modes?: Modes;
48
49
  onPress?: () => void;
49
50
  disabled?: boolean;
50
51
  style?: StyleProp<ViewStyle>;
@@ -112,7 +113,7 @@ interface ButtonTokens {
112
113
  accessoryOffset: number;
113
114
  }
114
115
 
115
- function resolveButtonTokens(modes: Record<string, any>, disabled: boolean): ButtonTokens {
116
+ function resolveButtonTokens(modes: Modes, disabled: boolean): ButtonTokens {
116
117
  const backgroundColor = getVariableByName('button/background', modes) || '#cfa159'
117
118
  const borderColor = getVariableByName('button/border/color', modes) || 'rgba(255,255,255,0)'
118
119
  const borderWidth = getVariableByName('button/border/size', modes)
@@ -7,6 +7,7 @@ import {
7
7
  import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
8
8
  import { EMPTY_MODES, flattenChildren } from '../../utils/react-utils'
9
9
  import IconButton from '../IconButton/IconButton'
10
+ import type { Modes } from '../../design-tokens'
10
11
 
11
12
  export type ButtonGroupProps = {
12
13
  /**
@@ -18,7 +19,7 @@ export type ButtonGroupProps = {
18
19
  * Mode configuration for design tokens (e.g., {"Button / Size": "M", "Appearance": "high"})
19
20
  * These modes are passed down to all child components.
20
21
  */
21
- modes?: Record<string, any>;
22
+ modes?: Modes;
22
23
  /**
23
24
  * Additional styles for the container
24
25
  */
@@ -2,13 +2,14 @@ import React, { createContext, useContext, isValidElement, cloneElement, useMemo
2
2
  import { View, Text, StyleSheet, type ViewStyle, type TextStyle, type StyleProp } from 'react-native';
3
3
  import { getVariableByName } from '../../design-tokens/figma-variables-resolver';
4
4
  import { EMPTY_MODES } from '../../utils/react-utils';
5
+ import type { Modes } from '../../design-tokens'
5
6
 
6
7
  /**
7
8
  * Context to share 'modes' with child components like Card.Title and Card.SupportText.
8
9
  * This ensures that nested components can resolve their tokens correctly without
9
10
  * needing explicit mode prop passing for every child.
10
11
  */
11
- const CardContext = createContext<{ modes?: Record<string, any> }>({});
12
+ const CardContext = createContext<{ modes?: Modes }>({});
12
13
 
13
14
  export interface CardProps {
14
15
  /**
@@ -28,7 +29,7 @@ export interface CardProps {
28
29
  /**
29
30
  * Modes object for token resolution (e.g. { "Mode": "Dark" }).
30
31
  */
31
- modes?: Record<string, any>;
32
+ modes?: Modes;
32
33
  /**
33
34
  * Aspect ratio for the media slot container.
34
35
  * Default is based on Figma design 154/116 (~1.328).
@@ -151,7 +152,7 @@ export function Card({
151
152
  export interface CardTextProps {
152
153
  children?: React.ReactNode;
153
154
  style?: StyleProp<TextStyle>;
154
- modes?: Record<string, any>;
155
+ modes?: Modes;
155
156
  }
156
157
 
157
158
  /**
@@ -12,6 +12,7 @@ import Icon from '../../icons/Icon'
12
12
  import { EMPTY_MODES, cloneChildrenWithModes } from '../../utils/react-utils'
13
13
  import CircularProgressBar from '../CircularProgressBar/CircularProgressBar'
14
14
  import Nudge from '../Nudge/Nudge'
15
+ import type { Modes } from '../../design-tokens'
15
16
 
16
17
  type CardAdvisoryBaseProps = Omit<React.ComponentProps<typeof View>, 'children' | 'style'>
17
18
 
@@ -41,7 +42,7 @@ export type CardAdvisoryProps = CardAdvisoryBaseProps & {
41
42
  /** Optional slot replacing the bottom nudge. Receives `modes` recursively. */
42
43
  nudgeSlot?: React.ReactNode
43
44
  /** Design token modes forwarded to token lookups and child components. */
44
- modes?: Record<string, any>
45
+ modes?: Modes
45
46
  /** Optional container style override. */
46
47
  style?: StyleProp<ViewStyle>
47
48
  /** Optional main content row style override. */
@@ -94,7 +95,7 @@ const toFontWeight = (value: unknown, fallback: TextStyle['fontWeight']) => {
94
95
  return fallback
95
96
  }
96
97
 
97
- function resolveCardAdvisoryTokens(modes: Record<string, any>): CardAdvisoryTokens {
98
+ function resolveCardAdvisoryTokens(modes: Modes): CardAdvisoryTokens {
98
99
  const width = toNumber(getVariableByName('cardAdvisory/width', modes), 360)
99
100
  const gap = toNumber(getVariableByName('cardAdvisory/gap', modes), 16)
100
101
  const paddingHorizontal = toNumber(getVariableByName('cardAdvisory/padding/horizontal', modes), 0)
@@ -12,6 +12,7 @@ import Badge from '../Badge/Badge'
12
12
  import Button from '../Button/Button'
13
13
  import InstitutionBadge from '../InstitutionBadge/InstitutionBadge'
14
14
  import type { UnifiedSource } from '../../utils/MediaSource'
15
+ import type { Modes } from '../../design-tokens'
15
16
 
16
17
  export type CardBankAccountItem = {
17
18
  /** Left-aligned label text (e.g. "Account type"). */
@@ -74,7 +75,7 @@ export type CardBankAccountProps = {
74
75
  * out of the box. Caller-supplied modes are merged on top and can
75
76
  * override any of the default keys.
76
77
  */
77
- modes?: Record<string, any>
78
+ modes?: Modes
78
79
  /** Container style override. */
79
80
  style?: StyleProp<ViewStyle>
80
81
  /** Accessibility label for the card region. */
@@ -8,12 +8,13 @@ import Button from '../Button/Button'
8
8
  import Badge from '../Badge/Badge'
9
9
  import ButtonGroup from '../ButtonGroup/ButtonGroup'
10
10
  import IconButton from '../IconButton/IconButton'
11
+ import type { Modes } from '../../design-tokens'
11
12
 
12
13
  export type CardCTAType = 'cta' | 'rating'
13
14
 
14
15
  const optionalTokenAvailability = new Map<string, boolean>()
15
16
 
16
- function getOptionalVariableByName<T>(name: string, modes: Record<string, any>, fallback: T): T {
17
+ function getOptionalVariableByName<T>(name: string, modes: Modes, fallback: T): T {
17
18
  let isAvailable = optionalTokenAvailability.get(name)
18
19
 
19
20
  if (isAvailable === undefined) {
@@ -50,7 +51,7 @@ export type CardCTAProps = {
50
51
  /** Callback for the default dislike action */
51
52
  onPressDislike?: () => void;
52
53
  /** Mode configuration for design token resolution */
53
- modes?: Record<string, any>;
54
+ modes?: Modes;
54
55
  /** Slot: replaces the default icon area (right side) */
55
56
  iconSlot?: React.ReactNode;
56
57
  /** Slot: replaces the default Button */
@@ -2,11 +2,12 @@ import React, { createContext, useContext, isValidElement, cloneElement } from '
2
2
  import { View, Text, StyleSheet, type ViewStyle, type TextStyle, type StyleProp, Image } from 'react-native';
3
3
  import { getVariableByName } from '../../design-tokens/figma-variables-resolver';
4
4
  import IconComponent from '../../icons/Icon';
5
+ import type { Modes } from '../../design-tokens'
5
6
 
6
7
  /**
7
8
  * Context to share 'modes' with child components.
8
9
  */
9
- const CardFeedbackContext = createContext<{ modes?: Record<string, any> }>({});
10
+ const CardFeedbackContext = createContext<{ modes?: Modes }>({});
10
11
 
11
12
  export interface CardFeedbackProps {
12
13
  /**
@@ -16,7 +17,7 @@ export interface CardFeedbackProps {
16
17
  /**
17
18
  * Modes object for token resolution.
18
19
  */
19
- modes?: Record<string, any>;
20
+ modes?: Modes;
20
21
  /**
21
22
  * Style overrides for the card container.
22
23
  */
@@ -75,7 +76,7 @@ export function CardFeedback({
75
76
  * Icon Wrapper
76
77
  * Tokens: cardFeedback/icon/size, appearanceFeedback/cardFeedback/icon/color
77
78
  */
78
- export function Icon({ children, style, modes: propModes, icon }: { children?: React.ReactNode; style?: StyleProp<ViewStyle>; modes?: Record<string, any>; icon?: string }) {
79
+ export function Icon({ children, style, modes: propModes, icon }: { children?: React.ReactNode; style?: StyleProp<ViewStyle>; modes?: Modes; icon?: string }) {
79
80
  const context = useContext(CardFeedbackContext);
80
81
  const modes = propModes || context.modes || {};
81
82
 
@@ -94,7 +95,7 @@ export function Icon({ children, style, modes: propModes, icon }: { children?: R
94
95
  // Pass modes to children (e.g., icon components that accept modes)
95
96
  const childrenWithModes = React.Children.map(children, child => {
96
97
  if (isValidElement(child)) {
97
- return cloneElement(child as React.ReactElement<{ modes?: Record<string, any> }>, { modes: { ...(child.props as any).modes, ...modes } });
98
+ return cloneElement(child as React.ReactElement<{ modes?: Modes }>, { modes: { ...(child.props as any).modes, ...modes } });
98
99
  }
99
100
  return child;
100
101
  });
@@ -115,7 +116,7 @@ export function Icon({ children, style, modes: propModes, icon }: { children?: R
115
116
  * Wraps Title, Body, and sometimes Action.
116
117
  * Tokens: cardFeedback/text/gap
117
118
  */
118
- export function Content({ children, style, modes: propModes }: { children?: React.ReactNode; style?: StyleProp<ViewStyle>; modes?: Record<string, any> }) {
119
+ export function Content({ children, style, modes: propModes }: { children?: React.ReactNode; style?: StyleProp<ViewStyle>; modes?: Modes }) {
119
120
  const context = useContext(CardFeedbackContext);
120
121
  const modes = propModes || context.modes || {};
121
122
 
@@ -124,7 +125,7 @@ export function Content({ children, style, modes: propModes }: { children?: Reac
124
125
  // Pass modes to children (Title, Body, etc.)
125
126
  const childrenWithModes = React.Children.map(children, child => {
126
127
  if (isValidElement(child)) {
127
- return cloneElement(child as React.ReactElement<{ modes?: Record<string, any> }>, { modes: { ...(child.props as any).modes, ...modes } });
128
+ return cloneElement(child as React.ReactElement<{ modes?: Modes }>, { modes: { ...(child.props as any).modes, ...modes } });
128
129
  }
129
130
  return child;
130
131
  });
@@ -140,7 +141,7 @@ export function Content({ children, style, modes: propModes }: { children?: Reac
140
141
  * Title Component
141
142
  * Tokens: cardFeedback/title/*
142
143
  */
143
- export function Title({ children, style, modes: propModes }: { children?: React.ReactNode; style?: StyleProp<TextStyle>; modes?: Record<string, any> }) {
144
+ export function Title({ children, style, modes: propModes }: { children?: React.ReactNode; style?: StyleProp<TextStyle>; modes?: Modes }) {
144
145
  const context = useContext(CardFeedbackContext);
145
146
  const modes = propModes || context.modes || {};
146
147
 
@@ -165,7 +166,7 @@ export function Title({ children, style, modes: propModes }: { children?: React.
165
166
  * Body Component
166
167
  * Tokens: cardFeedback/body/*
167
168
  */
168
- export function Body({ children, style, modes: propModes }: { children?: React.ReactNode; style?: StyleProp<TextStyle>; modes?: Record<string, any> }) {
169
+ export function Body({ children, style, modes: propModes }: { children?: React.ReactNode; style?: StyleProp<TextStyle>; modes?: Modes }) {
169
170
  const context = useContext(CardFeedbackContext);
170
171
  const modes = propModes || context.modes || {};
171
172
 
@@ -190,7 +191,7 @@ export function Body({ children, style, modes: propModes }: { children?: React.R
190
191
  * Action Slot Wrapper
191
192
  * Tokens: cardFeedback/actionSlot/gap
192
193
  */
193
- export function Action({ children, style, modes: propModes }: { children?: React.ReactNode; style?: StyleProp<ViewStyle>; modes?: Record<string, any> }) {
194
+ export function Action({ children, style, modes: propModes }: { children?: React.ReactNode; style?: StyleProp<ViewStyle>; modes?: Modes }) {
194
195
  const context = useContext(CardFeedbackContext);
195
196
  const modes = propModes || context.modes || {};
196
197
 
@@ -199,7 +200,7 @@ export function Action({ children, style, modes: propModes }: { children?: React
199
200
  // "Maximise existing component usage" -> Pass modes to children (Buttons)
200
201
  const childrenWithModes = React.Children.map(children, child => {
201
202
  if (isValidElement(child)) {
202
- return cloneElement(child as React.ReactElement<{ modes?: Record<string, any> }>, { modes: { ...(child.props as any).modes, ...modes } });
203
+ return cloneElement(child as React.ReactElement<{ modes?: Modes }>, { modes: { ...(child.props as any).modes, ...modes } });
203
204
  }
204
205
  return child;
205
206
  });
@@ -15,6 +15,7 @@ import CircularProgressBar, {
15
15
  } from '../CircularProgressBar/CircularProgressBar'
16
16
  import Divider from '../Divider/Divider'
17
17
  import Nudge from '../Nudge/Nudge'
18
+ import type { Modes } from '../../design-tokens'
18
19
 
19
20
  type CardFinancialConditionBaseProps = Omit<
20
21
  React.ComponentProps<typeof View>,
@@ -51,7 +52,7 @@ export type CardFinancialConditionProps = CardFinancialConditionBaseProps & {
51
52
  /** Slot replacing the default action button. Receives `modes` recursively. */
52
53
  buttonSlot?: React.ReactNode
53
54
  /** Design token modes forwarded to token lookups and child components. */
54
- modes?: Record<string, any>
55
+ modes?: Modes
55
56
  /** Container style override. */
56
57
  style?: StyleProp<ViewStyle>
57
58
  /** Header row style override. */
@@ -100,7 +101,7 @@ const toFontWeight = (value: unknown, fallback: TextStyle['fontWeight']) => {
100
101
  }
101
102
 
102
103
  function resolveCardFinancialConditionTokens(
103
- modes: Record<string, any>
104
+ modes: Modes
104
105
  ): CardFinancialConditionTokens {
105
106
  const background =
106
107
  (getVariableByName('financialConditionCard/background', modes) as string) ||
@@ -12,6 +12,7 @@ import Badge from '../Badge/Badge'
12
12
  import Divider from '../Divider/Divider'
13
13
  import Nudge from '../Nudge/Nudge'
14
14
  import SavingsGoalSummary from '../SavingsGoalSummary/SavingsGoalSummary'
15
+ import type { Modes } from '../../design-tokens'
15
16
 
16
17
  export type CardInsightProps = {
17
18
  /** Card title rendered in the header (left of the badge). */
@@ -41,7 +42,7 @@ export type CardInsightProps = {
41
42
  */
42
43
  divider?: React.ReactNode | boolean
43
44
  /** Design token modes for theming (e.g. `{ 'Color Mode': 'Light' }`). */
44
- modes?: Record<string, any>
45
+ modes?: Modes
45
46
  /** Override container styles. */
46
47
  style?: StyleProp<ViewStyle>
47
48
  }
@@ -3,6 +3,7 @@ import { View, type ViewStyle, type StyleProp, type ImageSourcePropType } from '
3
3
  import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
4
4
  import ProductLabel from '../ProductLabel/ProductLabel'
5
5
  import { EMPTY_MODES, cloneChildrenWithModes } from '../../utils/react-utils'
6
+ import type { Modes } from '../../design-tokens'
6
7
 
7
8
  export type CardProviderInfoProps = {
8
9
  /** Product name shown in the ProductLabel header. */
@@ -12,7 +13,7 @@ export type CardProviderInfoProps = {
12
13
  /** Slot content — typically StatItem components arranged in a 2-column grid. */
13
14
  children?: React.ReactNode
14
15
  /** Design token modes for theming. */
15
- modes?: Record<string, any>
16
+ modes?: Modes
16
17
  /** Override container styles. */
17
18
  style?: StyleProp<ViewStyle>
18
19
  }
@@ -20,13 +20,14 @@ import {
20
20
  } from 'react-native'
21
21
  import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
22
22
  import { EMPTY_MODES } from '../../utils/react-utils'
23
+ import type { Modes } from '../../design-tokens'
23
24
 
24
25
  // ---------------------------------------------------------------------------
25
26
  // Context
26
27
  // ---------------------------------------------------------------------------
27
28
 
28
29
  interface CarouselContextValue {
29
- modes: Record<string, any>
30
+ modes: Modes
30
31
  activeIndex: number
31
32
  totalItems: number
32
33
  goTo: (index: number) => void
@@ -51,7 +52,7 @@ export interface CarouselProps {
51
52
  /** Content items to display (should be Carousel.Item or any React nodes). */
52
53
  children?: React.ReactNode
53
54
  /** Modes object for design-token resolution. */
54
- modes?: Record<string, any>
55
+ modes?: Modes
55
56
  /** Enable auto-play. Default: false. */
56
57
  autoPlay?: boolean
57
58
  /** Auto-play interval in ms. Default: 4000. */
@@ -342,7 +343,7 @@ export function Carousel({
342
343
 
343
344
  export interface CarouselItemProps {
344
345
  children?: React.ReactNode
345
- modes?: Record<string, any>
346
+ modes?: Modes
346
347
  style?: StyleProp<ViewStyle>
347
348
  }
348
349
 
@@ -359,7 +360,7 @@ export function Item({ children, modes: _modes, style }: CarouselItemProps) {
359
360
  // ---------------------------------------------------------------------------
360
361
 
361
362
  export interface PaginationProps {
362
- modes?: Record<string, any>
363
+ modes?: Modes
363
364
  style?: StyleProp<ViewStyle>
364
365
  }
365
366
 
@@ -9,6 +9,7 @@ import {
9
9
  import Svg, { Path } from 'react-native-svg'
10
10
  import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
11
11
  import { EMPTY_MODES } from '../../utils/react-utils'
12
+ import type { Modes } from '../../design-tokens'
12
13
 
13
14
  /**
14
15
  * Tracks whether the last user interaction was a keyboard event (Tab).
@@ -80,7 +81,7 @@ export interface CheckboxProps {
80
81
  /** Whether the checkbox is disabled */
81
82
  disabled?: boolean
82
83
  /** Design token modes for theming */
83
- modes?: Record<string, any>
84
+ modes?: Modes
84
85
  /** Override container styles */
85
86
  style?: StyleProp<ViewStyle>
86
87
  /** Accessibility label for screen readers */
@@ -3,6 +3,7 @@ import { View, type StyleProp, type ViewStyle } from 'react-native'
3
3
  import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
4
4
  import { EMPTY_MODES, cloneChildrenWithModes } from '../../utils/react-utils'
5
5
  import CheckboxItem from '../CheckboxItem/CheckboxItem'
6
+ import type { Modes } from '../../design-tokens'
6
7
 
7
8
  export type CheckboxGroupProps = {
8
9
  /**
@@ -14,7 +15,7 @@ export type CheckboxGroupProps = {
14
15
  */
15
16
  children?: React.ReactNode
16
17
  /** Design token modes for theming (e.g. `{ 'Color Mode': 'Light' }`). */
17
- modes?: Record<string, any>
18
+ modes?: Modes
18
19
  /** Override container styles. */
19
20
  style?: StyleProp<ViewStyle>
20
21
  /** Accessibility label for the surrounding group. */
@@ -10,6 +10,7 @@ import {
10
10
  import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
11
11
  import { EMPTY_MODES, cloneChildrenWithModes } from '../../utils/react-utils'
12
12
  import Checkbox from '../Checkbox/Checkbox'
13
+ import type { Modes } from '../../design-tokens'
13
14
 
14
15
  export type CheckboxItemProps = {
15
16
  /** Whether the checkbox is checked (controlled). */
@@ -43,7 +44,7 @@ export type CheckboxItemProps = {
43
44
  /** Width of the end slot container in pixels. Defaults to 80 to match the Figma reference. */
44
45
  endSlotWidth?: number
45
46
  /** Design token modes for theming (e.g. `{ 'Color Mode': 'Light' }`). */
46
- modes?: Record<string, any>
47
+ modes?: Modes
47
48
  /** Override container styles. */
48
49
  style?: StyleProp<ViewStyle>
49
50
  /** Override the label text styles. */
@@ -2,6 +2,7 @@ import React from 'react';
2
2
  import { View, type StyleProp, type ViewStyle } from 'react-native';
3
3
  import { getVariableByName } from '../../design-tokens/figma-variables-resolver';
4
4
  import { EMPTY_MODES, flattenChildren } from '../../utils/react-utils';
5
+ import type { Modes } from '../../design-tokens'
5
6
 
6
7
  export type ChipGroupProps = {
7
8
  /**
@@ -13,7 +14,7 @@ export type ChipGroupProps = {
13
14
  * Mode configuration for design tokens.
14
15
  * These modes are passed down to all child components.
15
16
  */
16
- modes?: Record<string, any>;
17
+ modes?: Modes;
17
18
  /**
18
19
  * Additional styles for the container.
19
20
  */
@@ -3,6 +3,7 @@ import { View, Text, TouchableOpacity, type StyleProp, type ViewStyle, type Text
3
3
  import { getVariableByName } from '../../design-tokens/figma-variables-resolver';
4
4
  import { EMPTY_MODES } from '../../utils/react-utils';
5
5
  import Icon from '../../icons/Icon';
6
+ import type { Modes } from '../../design-tokens'
6
7
 
7
8
  export type ChipSelectProps = {
8
9
  /**
@@ -23,7 +24,7 @@ export type ChipSelectProps = {
23
24
  /**
24
25
  * Modes for design token resolution.
25
26
  */
26
- modes?: Record<string, any>;
27
+ modes?: Modes;
27
28
  /**
28
29
  * Optional style overrides.
29
30
  */
@@ -5,6 +5,7 @@ import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
5
5
  import { useTokens } from '../../design-tokens/JFSThemeProvider'
6
6
  import { EMPTY_MODES } from '../../utils/react-utils'
7
7
  import { IconMinus } from '../../icons/components/IconMinus'
8
+ import type { Modes } from '../../design-tokens'
8
9
 
9
10
  type CircularProgressBarBaseProps = Omit<React.ComponentProps<typeof View>, 'children' | 'style'>
10
11
 
@@ -26,7 +27,7 @@ export type CircularProgressBarProps = CircularProgressBarBaseProps & {
26
27
  */
27
28
  supportText?: string
28
29
  /** Design token modes forwarded to token lookups. */
29
- modes?: Record<string, any>
30
+ modes?: Modes
30
31
  /** Container style override. */
31
32
  style?: StyleProp<ViewStyle>
32
33
  /** Track stroke style override. */
@@ -13,6 +13,7 @@ import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
13
13
  import { useTokens } from '../../design-tokens/JFSThemeProvider'
14
14
  import { EMPTY_MODES, cloneChildrenWithModes } from '../../utils/react-utils'
15
15
  import { IconChevronright } from '../../icons/components/IconChevronright'
16
+ import type { Modes } from '../../design-tokens'
16
17
 
17
18
  type CircularProgressBarDotedBaseProps = Omit<React.ComponentProps<typeof View>, 'children' | 'style'>
18
19
 
@@ -32,7 +33,7 @@ export type CircularProgressBarDotedProps = CircularProgressBarDotedBaseProps &
32
33
  /** Called when the tier row is pressed. */
33
34
  onTierPress?: () => void
34
35
  /** Design token modes forwarded to token lookups and slot children. */
35
- modes?: Record<string, any>
36
+ modes?: Modes
36
37
  /** Slot rendered in the center of the dotted ring. Receives `modes` recursively. */
37
38
  children?: React.ReactNode
38
39
  /** Container style override. */