jfs-components 0.1.0 → 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 (331) hide show
  1. package/CHANGELOG.md +8 -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/DropdownInput/DropdownInput.js +1 -1
  9. package/lib/commonjs/components/FullscreenModal/FullscreenModal.js +62 -2
  10. package/lib/commonjs/components/Image/Image.js +11 -5
  11. package/lib/commonjs/components/LottiePlayer/loadNativeLottieView.js +8 -13
  12. package/lib/commonjs/components/Overlay/Overlay.js +92 -0
  13. package/lib/commonjs/components/PlanComparisonCard/PlanComparisonCard.js +2 -1
  14. package/lib/commonjs/components/TextInput/TextInput.js +2 -1
  15. package/lib/commonjs/components/docs/modeControls.js +116 -0
  16. package/lib/commonjs/components/index.js +7 -0
  17. package/lib/commonjs/design-tokens/JFSThemeProvider.js +1 -1
  18. package/lib/commonjs/design-tokens/figma-modes.generated.js +391 -0
  19. package/lib/commonjs/design-tokens/index.js +11 -0
  20. package/lib/commonjs/icons/registry.js +1 -1
  21. package/lib/module/components/Accordion/Accordion.js +1 -2
  22. package/lib/module/components/AreaLineChart/AreaLineChart.js +1 -1
  23. package/lib/module/components/Balance/Balance.js +18 -13
  24. package/lib/module/components/Card/Card.js +1 -2
  25. package/lib/module/components/CardFeedback/CardFeedback.js +1 -2
  26. package/lib/module/components/Checkbox/Checkbox.js +1 -2
  27. package/lib/module/components/Drawer/Drawer.js +12 -4
  28. package/lib/module/components/DropdownInput/DropdownInput.js +1 -1
  29. package/lib/module/components/FullscreenModal/FullscreenModal.js +64 -5
  30. package/lib/module/components/Image/Image.js +11 -5
  31. package/lib/module/components/InstitutionBadge/InstitutionBadge.js +1 -2
  32. package/lib/module/components/LottiePlayer/loadNativeLottieView.js +8 -13
  33. package/lib/module/components/MoneyValue/MoneyValue.js +1 -2
  34. package/lib/module/components/OTP/OTP.js +1 -2
  35. package/lib/module/components/Overlay/Overlay.js +87 -0
  36. package/lib/module/components/PlanComparisonCard/PlanComparisonCard.js +1 -2
  37. package/lib/module/components/PoweredByLabel/PoweredByLabel.js +1 -2
  38. package/lib/module/components/RechargeCard/RechargeCard.js +1 -2
  39. package/lib/module/components/Section/Section.js +1 -2
  40. package/lib/module/components/TextInput/TextInput.js +1 -2
  41. package/lib/module/components/UpiHandle/UpiHandle.js +1 -2
  42. package/lib/module/components/docs/modeControls.js +111 -0
  43. package/lib/module/components/index.js +1 -0
  44. package/lib/module/design-tokens/JFSThemeProvider.js +1 -1
  45. package/lib/module/design-tokens/figma-modes.generated.js +387 -0
  46. package/lib/module/design-tokens/index.js +2 -1
  47. package/lib/module/icons/registry.js +1 -1
  48. package/lib/module/utils/react-utils.js +0 -1
  49. package/lib/typescript/scripts/extract-component-tokens.d.ts +1 -1
  50. package/lib/typescript/scripts/generate-mode-types.d.ts +2 -0
  51. package/lib/typescript/scripts/retype-modes.d.cts +2 -0
  52. package/lib/typescript/src/components/Accordion/Accordion.d.ts +2 -1
  53. package/lib/typescript/src/components/AccordionCheckbox/AccordionCheckbox.d.ts +2 -1
  54. package/lib/typescript/src/components/AccountCard/AccountCard.d.ts +2 -1
  55. package/lib/typescript/src/components/ActionFooter/ActionFooter.d.ts +2 -1
  56. package/lib/typescript/src/components/ActionTile/ActionTile.d.ts +2 -1
  57. package/lib/typescript/src/components/AllocationComparisonChart/AllocationComparisonChart.d.ts +2 -1
  58. package/lib/typescript/src/components/AmountInput/AmountInput.d.ts +2 -1
  59. package/lib/typescript/src/components/AppBar/AppBar.d.ts +2 -1
  60. package/lib/typescript/src/components/AreaLineChart/AreaLineChart.d.ts +3 -2
  61. package/lib/typescript/src/components/Attached/Attached.d.ts +2 -1
  62. package/lib/typescript/src/components/Avatar/Avatar.d.ts +2 -1
  63. package/lib/typescript/src/components/AvatarGroup/AvatarGroup.d.ts +2 -1
  64. package/lib/typescript/src/components/Badge/Badge.d.ts +2 -1
  65. package/lib/typescript/src/components/Balance/Balance.d.ts +2 -1
  66. package/lib/typescript/src/components/BottomNav/BottomNav.d.ts +2 -1
  67. package/lib/typescript/src/components/BottomNavItem/BottomNavItem.d.ts +2 -1
  68. package/lib/typescript/src/components/BrandChip/BrandChip.d.ts +2 -1
  69. package/lib/typescript/src/components/BubbleChart/BubbleChart.d.ts +2 -1
  70. package/lib/typescript/src/components/Button/Button.d.ts +2 -1
  71. package/lib/typescript/src/components/ButtonGroup/ButtonGroup.d.ts +2 -1
  72. package/lib/typescript/src/components/Card/Card.d.ts +3 -2
  73. package/lib/typescript/src/components/CardAdvisory/CardAdvisory.d.ts +2 -1
  74. package/lib/typescript/src/components/CardBankAccount/CardBankAccount.d.ts +2 -1
  75. package/lib/typescript/src/components/CardCTA/CardCTA.d.ts +2 -1
  76. package/lib/typescript/src/components/CardFeedback/CardFeedback.d.ts +7 -6
  77. package/lib/typescript/src/components/CardFinancialCondition/CardFinancialCondition.d.ts +2 -1
  78. package/lib/typescript/src/components/CardInsight/CardInsight.d.ts +2 -1
  79. package/lib/typescript/src/components/CardProviderInfo/CardProviderInfo.d.ts +2 -1
  80. package/lib/typescript/src/components/Carousel/Carousel.d.ts +4 -3
  81. package/lib/typescript/src/components/Checkbox/Checkbox.d.ts +2 -1
  82. package/lib/typescript/src/components/CheckboxGroup/CheckboxGroup.d.ts +2 -1
  83. package/lib/typescript/src/components/CheckboxItem/CheckboxItem.d.ts +2 -1
  84. package/lib/typescript/src/components/ChipGroup/ChipGroup.d.ts +2 -1
  85. package/lib/typescript/src/components/ChipSelect/ChipSelect.d.ts +2 -1
  86. package/lib/typescript/src/components/CircularProgressBar/CircularProgressBar.d.ts +2 -1
  87. package/lib/typescript/src/components/CircularProgressBarDoted/CircularProgressBarDoted.d.ts +2 -1
  88. package/lib/typescript/src/components/CircularRating/CircularRating.d.ts +2 -1
  89. package/lib/typescript/src/components/ClusterBubble/ClusterBubble.d.ts +2 -1
  90. package/lib/typescript/src/components/CoverageBarComparison/CoverageBarComparison.d.ts +3 -2
  91. package/lib/typescript/src/components/CoverageRing/CoverageRing.d.ts +2 -1
  92. package/lib/typescript/src/components/DebitCard/DebitCard.d.ts +2 -1
  93. package/lib/typescript/src/components/Disclaimer/Disclaimer.d.ts +2 -1
  94. package/lib/typescript/src/components/Divider/Divider.d.ts +2 -1
  95. package/lib/typescript/src/components/DonutChart/DonutChart.d.ts +4 -3
  96. package/lib/typescript/src/components/DonutChartSummary/DonutChartSummary.d.ts +3 -2
  97. package/lib/typescript/src/components/Drawer/Drawer.d.ts +15 -1
  98. package/lib/typescript/src/components/Dropdown/Dropdown.d.ts +3 -2
  99. package/lib/typescript/src/components/DropdownInput/DropdownInput.d.ts +2 -1
  100. package/lib/typescript/src/components/EmptyState/EmptyState.d.ts +2 -1
  101. package/lib/typescript/src/components/ExpandableCheckbox/ExpandableCheckbox.d.ts +2 -1
  102. package/lib/typescript/src/components/FilterBar/FilterBar.d.ts +3 -2
  103. package/lib/typescript/src/components/Form/Form.d.ts +2 -1
  104. package/lib/typescript/src/components/FormField/FormField.d.ts +2 -1
  105. package/lib/typescript/src/components/FullscreenModal/FullscreenModal.d.ts +2 -1
  106. package/lib/typescript/src/components/Gauge/Gauge.d.ts +2 -1
  107. package/lib/typescript/src/components/HStack/HStack.d.ts +2 -1
  108. package/lib/typescript/src/components/HoldingsCard/HoldingsCard.d.ts +2 -1
  109. package/lib/typescript/src/components/Icon/Icon.d.ts +2 -1
  110. package/lib/typescript/src/components/IconButton/IconButton.d.ts +2 -1
  111. package/lib/typescript/src/components/IconCapsule/IconCapsule.d.ts +2 -1
  112. package/lib/typescript/src/components/Image/Image.d.ts +17 -1
  113. package/lib/typescript/src/components/InputSearch/InputSearch.d.ts +2 -1
  114. package/lib/typescript/src/components/InstitutionBadge/InstitutionBadge.d.ts +2 -1
  115. package/lib/typescript/src/components/LazyList/LazyList.d.ts +2 -1
  116. package/lib/typescript/src/components/LinearMeter/LinearMeter.d.ts +3 -2
  117. package/lib/typescript/src/components/LinearProgress/LinearProgress.d.ts +2 -1
  118. package/lib/typescript/src/components/ListGroup/ListGroup.d.ts +2 -1
  119. package/lib/typescript/src/components/ListItem/ListItem.d.ts +2 -1
  120. package/lib/typescript/src/components/LottieIntroBlock/LottieIntroBlock.d.ts +2 -1
  121. package/lib/typescript/src/components/LottiePlayer/LottiePlayer.d.ts +2 -1
  122. package/lib/typescript/src/components/LottiePlayer/LottiePlayer.web.d.ts +2 -1
  123. package/lib/typescript/src/components/MediaCard/MediaCard.d.ts +6 -5
  124. package/lib/typescript/src/components/MerchantProfile/MerchantProfile.d.ts +2 -1
  125. package/lib/typescript/src/components/MessageField/MessageField.d.ts +2 -1
  126. package/lib/typescript/src/components/MetricLegendItem/MetricLegendItem.d.ts +2 -1
  127. package/lib/typescript/src/components/MoneyValue/MoneyValue.d.ts +2 -1
  128. package/lib/typescript/src/components/MonthlyStatusGrid/MonthlyStatusGrid.d.ts +4 -3
  129. package/lib/typescript/src/components/NavArrow/NavArrow.d.ts +2 -1
  130. package/lib/typescript/src/components/NoteInput/NoteInput.d.ts +2 -1
  131. package/lib/typescript/src/components/Nudge/Nudge.d.ts +2 -1
  132. package/lib/typescript/src/components/Numpad/Numpad.d.ts +2 -1
  133. package/lib/typescript/src/components/OTP/OTP.d.ts +3 -2
  134. package/lib/typescript/src/components/Overlay/Overlay.d.ts +52 -0
  135. package/lib/typescript/src/components/PageHero/PageHero.d.ts +2 -1
  136. package/lib/typescript/src/components/PaymentFeedback/PaymentFeedback.d.ts +2 -1
  137. package/lib/typescript/src/components/PlanComparisonCard/PlanComparisonCard.d.ts +2 -1
  138. package/lib/typescript/src/components/Popup/Popup.d.ts +2 -1
  139. package/lib/typescript/src/components/PortfolioHero/PortfolioHero.d.ts +2 -1
  140. package/lib/typescript/src/components/PoweredByLabel/PoweredByLabel.d.ts +2 -1
  141. package/lib/typescript/src/components/ProductLabel/ProductLabel.d.ts +2 -1
  142. package/lib/typescript/src/components/ProductOverview/ProductOverview.d.ts +2 -1
  143. package/lib/typescript/src/components/ProgressBadge/ProgressBadge.d.ts +2 -1
  144. package/lib/typescript/src/components/Radio/Radio.d.ts +2 -1
  145. package/lib/typescript/src/components/RangeTrack/RangeTrack.d.ts +3 -2
  146. package/lib/typescript/src/components/RechargeCard/RechargeCard.d.ts +2 -1
  147. package/lib/typescript/src/components/SavingsGoalSummary/SavingsGoalSummary.d.ts +2 -1
  148. package/lib/typescript/src/components/Screen/Screen.d.ts +2 -1
  149. package/lib/typescript/src/components/Section/Section.d.ts +3 -2
  150. package/lib/typescript/src/components/SegmentedControl/SegmentedControl.d.ts +2 -1
  151. package/lib/typescript/src/components/SegmentedTrack/SegmentedTrack.d.ts +4 -3
  152. package/lib/typescript/src/components/Slot/Slot.d.ts +2 -1
  153. package/lib/typescript/src/components/Spinner/Spinner.d.ts +2 -1
  154. package/lib/typescript/src/components/StatGroup/StatGroup.d.ts +2 -1
  155. package/lib/typescript/src/components/StatItem/StatItem.d.ts +2 -1
  156. package/lib/typescript/src/components/StatusHero/StatusHero.d.ts +2 -1
  157. package/lib/typescript/src/components/Stepper/Step.d.ts +2 -1
  158. package/lib/typescript/src/components/Stepper/StepLabel.d.ts +2 -1
  159. package/lib/typescript/src/components/Stepper/Stepper.d.ts +2 -1
  160. package/lib/typescript/src/components/StrengthIndicator/StrengthIndicator.d.ts +2 -1
  161. package/lib/typescript/src/components/SuggestiveSearch/SuggestiveSearch.d.ts +2 -1
  162. package/lib/typescript/src/components/SummaryTile/SummaryTile.d.ts +2 -1
  163. package/lib/typescript/src/components/SupportText/SupportText.d.ts +2 -1
  164. package/lib/typescript/src/components/SupportText/SupportTextIcon.d.ts +2 -1
  165. package/lib/typescript/src/components/SwappableAmount/SwappableAmount.d.ts +2 -1
  166. package/lib/typescript/src/components/Tabs/TabItem.d.ts +2 -1
  167. package/lib/typescript/src/components/Tabs/Tabs.d.ts +2 -1
  168. package/lib/typescript/src/components/TestimonialsCard/TestimonialsCard.d.ts +2 -1
  169. package/lib/typescript/src/components/Text/Text.d.ts +2 -1
  170. package/lib/typescript/src/components/TextInput/TextInput.d.ts +3 -2
  171. package/lib/typescript/src/components/ThreadHero/ThreadHero.d.ts +2 -1
  172. package/lib/typescript/src/components/Title/Title.d.ts +2 -1
  173. package/lib/typescript/src/components/Toast/Toast.d.ts +2 -1
  174. package/lib/typescript/src/components/Toast/ToastProvider.d.ts +2 -1
  175. package/lib/typescript/src/components/Toast/useToast.d.ts +3 -2
  176. package/lib/typescript/src/components/Toggle/Toggle.d.ts +2 -1
  177. package/lib/typescript/src/components/Tooltip/Tooltip.d.ts +2 -1
  178. package/lib/typescript/src/components/TransactionBubble/TransactionBubble.d.ts +2 -1
  179. package/lib/typescript/src/components/TransactionDetails/TransactionDetails.d.ts +3 -2
  180. package/lib/typescript/src/components/TransactionStatus/TransactionStatus.d.ts +2 -1
  181. package/lib/typescript/src/components/UpiHandle/UpiHandle.d.ts +2 -1
  182. package/lib/typescript/src/components/VStack/VStack.d.ts +2 -1
  183. package/lib/typescript/src/components/docs/modeControls.d.ts +28 -0
  184. package/lib/typescript/src/components/index.d.ts +1 -0
  185. package/lib/typescript/src/design-tokens/JFSThemeProvider.d.ts +4 -3
  186. package/lib/typescript/src/design-tokens/figma-modes.generated.d.ts +264 -0
  187. package/lib/typescript/src/design-tokens/index.d.ts +1 -0
  188. package/lib/typescript/src/icons/registry.d.ts +1 -1
  189. package/lib/typescript/src/skeleton/Skeleton.d.ts +2 -1
  190. package/lib/typescript/src/utils/react-utils.d.ts +2 -1
  191. package/package.json +3 -2
  192. package/src/components/Accordion/Accordion.tsx +2 -1
  193. package/src/components/AccordionCheckbox/AccordionCheckbox.tsx +2 -1
  194. package/src/components/AccountCard/AccountCard.tsx +2 -1
  195. package/src/components/ActionFooter/ActionFooter.tsx +2 -1
  196. package/src/components/ActionTile/ActionTile.tsx +2 -1
  197. package/src/components/AllocationComparisonChart/AllocationComparisonChart.tsx +2 -1
  198. package/src/components/AmountInput/AmountInput.tsx +2 -1
  199. package/src/components/AppBar/AppBar.tsx +2 -1
  200. package/src/components/AreaLineChart/AreaLineChart.tsx +8 -7
  201. package/src/components/Attached/Attached.tsx +2 -1
  202. package/src/components/Avatar/Avatar.tsx +3 -2
  203. package/src/components/AvatarGroup/AvatarGroup.tsx +2 -1
  204. package/src/components/Badge/Badge.tsx +2 -1
  205. package/src/components/Balance/Balance.tsx +18 -12
  206. package/src/components/BottomNav/BottomNav.tsx +2 -1
  207. package/src/components/BottomNavItem/BottomNavItem.tsx +3 -2
  208. package/src/components/BrandChip/BrandChip.tsx +3 -2
  209. package/src/components/BubbleChart/BubbleChart.tsx +2 -1
  210. package/src/components/Button/Button.tsx +3 -2
  211. package/src/components/ButtonGroup/ButtonGroup.tsx +2 -1
  212. package/src/components/Card/Card.tsx +4 -3
  213. package/src/components/CardAdvisory/CardAdvisory.tsx +3 -2
  214. package/src/components/CardBankAccount/CardBankAccount.tsx +2 -1
  215. package/src/components/CardCTA/CardCTA.tsx +3 -2
  216. package/src/components/CardFeedback/CardFeedback.tsx +11 -10
  217. package/src/components/CardFinancialCondition/CardFinancialCondition.tsx +3 -2
  218. package/src/components/CardInsight/CardInsight.tsx +2 -1
  219. package/src/components/CardProviderInfo/CardProviderInfo.tsx +2 -1
  220. package/src/components/Carousel/Carousel.tsx +5 -4
  221. package/src/components/Checkbox/Checkbox.tsx +2 -1
  222. package/src/components/CheckboxGroup/CheckboxGroup.tsx +2 -1
  223. package/src/components/CheckboxItem/CheckboxItem.tsx +2 -1
  224. package/src/components/ChipGroup/ChipGroup.tsx +2 -1
  225. package/src/components/ChipSelect/ChipSelect.tsx +2 -1
  226. package/src/components/CircularProgressBar/CircularProgressBar.tsx +2 -1
  227. package/src/components/CircularProgressBarDoted/CircularProgressBarDoted.tsx +2 -1
  228. package/src/components/CircularRating/CircularRating.tsx +3 -2
  229. package/src/components/ClusterBubble/ClusterBubble.tsx +2 -1
  230. package/src/components/CoverageBarComparison/CoverageBarComparison.tsx +3 -2
  231. package/src/components/CoverageRing/CoverageRing.tsx +2 -1
  232. package/src/components/DebitCard/DebitCard.tsx +2 -1
  233. package/src/components/Disclaimer/Disclaimer.tsx +2 -1
  234. package/src/components/Divider/Divider.tsx +2 -1
  235. package/src/components/DonutChart/DonutChart.tsx +6 -5
  236. package/src/components/DonutChartSummary/DonutChartSummary.tsx +3 -2
  237. package/src/components/Drawer/Drawer.tsx +21 -1
  238. package/src/components/Dropdown/Dropdown.tsx +4 -3
  239. package/src/components/DropdownInput/DropdownInput.tsx +5 -4
  240. package/src/components/EmptyState/EmptyState.tsx +2 -1
  241. package/src/components/ExpandableCheckbox/ExpandableCheckbox.tsx +2 -1
  242. package/src/components/FilterBar/FilterBar.tsx +3 -2
  243. package/src/components/Form/Form.tsx +2 -1
  244. package/src/components/FormField/FormField.tsx +3 -2
  245. package/src/components/FullscreenModal/FullscreenModal.tsx +68 -10
  246. package/src/components/Gauge/Gauge.tsx +2 -1
  247. package/src/components/HStack/HStack.tsx +2 -1
  248. package/src/components/HoldingsCard/HoldingsCard.tsx +2 -1
  249. package/src/components/Icon/Icon.tsx +3 -2
  250. package/src/components/IconButton/IconButton.tsx +3 -2
  251. package/src/components/IconCapsule/IconCapsule.tsx +3 -2
  252. package/src/components/Image/Image.tsx +29 -5
  253. package/src/components/InputSearch/InputSearch.tsx +3 -2
  254. package/src/components/InstitutionBadge/InstitutionBadge.tsx +3 -2
  255. package/src/components/LazyList/LazyList.tsx +2 -1
  256. package/src/components/LinearMeter/LinearMeter.tsx +3 -2
  257. package/src/components/LinearProgress/LinearProgress.tsx +2 -1
  258. package/src/components/ListGroup/ListGroup.tsx +2 -1
  259. package/src/components/ListItem/ListItem.tsx +3 -2
  260. package/src/components/LottieIntroBlock/LottieIntroBlock.tsx +2 -1
  261. package/src/components/LottiePlayer/LottiePlayer.tsx +3 -2
  262. package/src/components/LottiePlayer/LottiePlayer.web.tsx +3 -2
  263. package/src/components/LottiePlayer/loadNativeLottieView.tsx +9 -13
  264. package/src/components/MediaCard/MediaCard.tsx +7 -6
  265. package/src/components/MerchantProfile/MerchantProfile.tsx +2 -1
  266. package/src/components/MessageField/MessageField.tsx +3 -2
  267. package/src/components/MetricLegendItem/MetricLegendItem.tsx +2 -1
  268. package/src/components/MoneyValue/MoneyValue.tsx +2 -1
  269. package/src/components/MonthlyStatusGrid/MonthlyStatusGrid.tsx +5 -4
  270. package/src/components/NavArrow/NavArrow.tsx +3 -2
  271. package/src/components/NoteInput/NoteInput.tsx +2 -1
  272. package/src/components/Nudge/Nudge.tsx +3 -2
  273. package/src/components/Numpad/Numpad.tsx +2 -1
  274. package/src/components/OTP/OTP.tsx +3 -2
  275. package/src/components/Overlay/Overlay.tsx +114 -0
  276. package/src/components/PageHero/PageHero.tsx +2 -1
  277. package/src/components/PaymentFeedback/PaymentFeedback.tsx +2 -1
  278. package/src/components/PlanComparisonCard/PlanComparisonCard.tsx +2 -1
  279. package/src/components/Popup/Popup.tsx +2 -1
  280. package/src/components/PortfolioHero/PortfolioHero.tsx +2 -1
  281. package/src/components/PoweredByLabel/PoweredByLabel.tsx +2 -1
  282. package/src/components/ProductLabel/ProductLabel.tsx +2 -1
  283. package/src/components/ProductOverview/ProductOverview.tsx +2 -1
  284. package/src/components/ProgressBadge/ProgressBadge.tsx +2 -1
  285. package/src/components/Radio/Radio.tsx +2 -1
  286. package/src/components/RangeTrack/RangeTrack.tsx +3 -2
  287. package/src/components/RechargeCard/RechargeCard.tsx +2 -1
  288. package/src/components/SavingsGoalSummary/SavingsGoalSummary.tsx +2 -1
  289. package/src/components/Screen/Screen.tsx +2 -1
  290. package/src/components/Section/Section.tsx +6 -5
  291. package/src/components/SegmentedControl/SegmentedControl.tsx +3 -2
  292. package/src/components/SegmentedTrack/SegmentedTrack.tsx +5 -4
  293. package/src/components/Slot/Slot.tsx +2 -1
  294. package/src/components/Spinner/Spinner.tsx +2 -1
  295. package/src/components/StatGroup/StatGroup.tsx +3 -2
  296. package/src/components/StatItem/StatItem.tsx +2 -1
  297. package/src/components/StatusHero/StatusHero.tsx +2 -1
  298. package/src/components/Stepper/Step.tsx +2 -1
  299. package/src/components/Stepper/StepLabel.tsx +2 -1
  300. package/src/components/Stepper/Stepper.tsx +2 -1
  301. package/src/components/StrengthIndicator/StrengthIndicator.tsx +2 -1
  302. package/src/components/SuggestiveSearch/SuggestiveSearch.tsx +4 -3
  303. package/src/components/SummaryTile/SummaryTile.tsx +2 -1
  304. package/src/components/SupportText/SupportText.tsx +2 -1
  305. package/src/components/SupportText/SupportTextIcon.tsx +2 -1
  306. package/src/components/SwappableAmount/SwappableAmount.tsx +2 -1
  307. package/src/components/Tabs/TabItem.tsx +2 -1
  308. package/src/components/Tabs/Tabs.tsx +2 -1
  309. package/src/components/TestimonialsCard/TestimonialsCard.tsx +2 -1
  310. package/src/components/Text/Text.tsx +2 -1
  311. package/src/components/TextInput/TextInput.tsx +3 -2
  312. package/src/components/ThreadHero/ThreadHero.tsx +2 -1
  313. package/src/components/Title/Title.tsx +2 -1
  314. package/src/components/Toast/Toast.tsx +2 -1
  315. package/src/components/Toast/ToastProvider.tsx +2 -1
  316. package/src/components/Toast/useToast.ts +3 -2
  317. package/src/components/Toggle/Toggle.tsx +2 -1
  318. package/src/components/Tooltip/Tooltip.tsx +3 -2
  319. package/src/components/TransactionBubble/TransactionBubble.tsx +2 -1
  320. package/src/components/TransactionDetails/TransactionDetails.tsx +3 -2
  321. package/src/components/TransactionStatus/TransactionStatus.tsx +3 -2
  322. package/src/components/UpiHandle/UpiHandle.tsx +3 -2
  323. package/src/components/VStack/VStack.tsx +2 -1
  324. package/src/components/docs/modeControls.tsx +122 -0
  325. package/src/components/index.ts +1 -0
  326. package/src/design-tokens/JFSThemeProvider.tsx +4 -3
  327. package/src/design-tokens/figma-modes.generated.ts +396 -0
  328. package/src/design-tokens/index.ts +1 -0
  329. package/src/icons/registry.ts +1 -1
  330. package/src/skeleton/Skeleton.tsx +2 -1
  331. package/src/utils/react-utils.ts +3 -2
@@ -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
  /**
@@ -8,6 +8,7 @@ import { useTokens } from '../../design-tokens/JFSThemeProvider'
8
8
  * This ensures that all child components in slots receive the modes prop from the parent.
9
9
  */
10
10
  import { cloneChildrenWithModes, EMPTY_MODES } from '../../utils/react-utils'
11
+ import type { Modes } from '../../design-tokens'
11
12
 
12
13
  export interface ScreenProps {
13
14
  /**
@@ -17,7 +18,7 @@ export interface ScreenProps {
17
18
  /**
18
19
  * Modes object to override default variable values.
19
20
  */
20
- modes?: Record<string, any>;
21
+ modes?: Modes;
21
22
  /**
22
23
  * Optional style overrides for the container.
23
24
  */
@@ -15,6 +15,7 @@ import IconCapsule from '../IconCapsule/IconCapsule'
15
15
  import ListItem from '../ListItem/ListItem'
16
16
  import { usePressableWebSupport, type WebAccessibilityProps } from '../../utils/web-platform-utils'
17
17
  import { EMPTY_MODES, cloneChildrenWithModes, flattenChildren } from '../../utils/react-utils'
18
+ import type { Modes } from '../../design-tokens'
18
19
 
19
20
  // Match Button: delay the press visual on iOS so a scroll-cancelled touch
20
21
  // never applies the "pressed" style. See Button.tsx for the rationale.
@@ -356,7 +357,7 @@ type SectionProps = {
356
357
  slot?: React.ReactNode;
357
358
  /** Layout direction of the slot's children. Defaults to 'row' (horizontal). */
358
359
  slotDirection?: 'row' | 'column';
359
- modes?: Record<string, any>;
360
+ modes?: Modes;
360
361
  onPress?: () => void;
361
362
  style?: StyleProp<ViewStyle>;
362
363
  accessibilityLabel?: string;
@@ -400,7 +401,7 @@ interface SectionTokens {
400
401
  slotGap: number;
401
402
  }
402
403
 
403
- function resolveSectionTokens(modes: Record<string, any>): SectionTokens {
404
+ function resolveSectionTokens(modes: Modes): SectionTokens {
404
405
  const backgroundColor = getVariableByName('section/background/color', modes) || '#ffffff'
405
406
  const sectionGap = (getVariableByName('section/gap', modes) || 12) as number
406
407
  const slotGap = (getVariableByName('slot/gap', modes) || 12) as number
@@ -630,7 +631,7 @@ function Section({
630
631
 
631
632
  type SectionSlotProps = {
632
633
  slot: React.ReactNode;
633
- modes: Record<string, any>;
634
+ modes: Modes;
634
635
  direction: 'row' | 'column';
635
636
  rowGap: number;
636
637
  columnGap: number;
@@ -667,7 +668,7 @@ type BentoToggleRenderState = {
667
668
  type SectionBentoProps = {
668
669
  navSlot?: React.ReactNode;
669
670
  upiSlot?: React.ReactNode;
670
- modes?: Record<string, any>;
671
+ modes?: Modes;
671
672
  style?: StyleProp<ViewStyle>;
672
673
  accessibilityLabel?: string;
673
674
  accessibilityHint?: string;
@@ -891,7 +892,7 @@ function SectionBento({
891
892
  type DefaultBentoToggleProps = {
892
893
  expanded: boolean;
893
894
  onPress: () => void;
894
- modes: Record<string, any>;
895
+ modes: Modes;
895
896
  moreLabel: string;
896
897
  lessLabel: string;
897
898
  moreIcon: string;
@@ -9,6 +9,7 @@ import {
9
9
  } from 'react-native'
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
  export type SegmentedControlItem = {
14
15
  key: React.Key
@@ -25,7 +26,7 @@ export type SegmentedControlProps = {
25
26
  /** Callback fired when the selected segment changes */
26
27
  onSelectionChange?: (key: React.Key) => void
27
28
  /** Design token modes for theming */
28
- modes?: Record<string, any>
29
+ modes?: Modes
29
30
  /** Override container styles */
30
31
  style?: StyleProp<ViewStyle>
31
32
  }
@@ -39,7 +40,7 @@ function SegmentedControlSegment({
39
40
  label: string
40
41
  active: boolean
41
42
  onPress: () => void
42
- modes: Record<string, any>
43
+ modes: Modes
43
44
  }) {
44
45
  const resolvedModes = {
45
46
  ...modes,
@@ -7,6 +7,7 @@ import {
7
7
  import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
8
8
  import { useTokens } from '../../design-tokens/JFSThemeProvider'
9
9
  import { EMPTY_MODES, flattenChildren } from '../../utils/react-utils'
10
+ import type { Modes } from '../../design-tokens'
10
11
 
11
12
  /**
12
13
  * Per-segment data definition for the data-driven `segments` prop.
@@ -39,7 +40,7 @@ export type SegmentedTrackSegmentData = {
39
40
  * Per-segment design token mode overrides. Merged on top of the parent
40
41
  * `modes` and the per-index Emphasis defaults.
41
42
  */
42
- modes?: Record<string, any>
43
+ modes?: Modes
43
44
  /** Override individual segment styles. */
44
45
  style?: StyleProp<ViewStyle>
45
46
  /** Per-segment accessibility label. */
@@ -60,7 +61,7 @@ export type SegmentedTrackProps = {
60
61
  */
61
62
  children?: React.ReactNode
62
63
  /** Design token modes for theming (e.g. `{ 'Color Mode': 'Light' }`). */
63
- modes?: Record<string, any>
64
+ modes?: Modes
64
65
  /** Override the container styles. */
65
66
  style?: StyleProp<ViewStyle>
66
67
  /** Style applied to every segment (data-driven mode only). */
@@ -83,7 +84,7 @@ type SegmentedTrackSegmentProps = {
83
84
  * Design token modes for the segment. Merged with parent `modes` and the
84
85
  * per-index Emphasis defaults injected by the parent `SegmentedTrack`.
85
86
  */
86
- modes?: Record<string, any> | undefined
87
+ modes?: Modes | undefined
87
88
  /** Override the segment styles. */
88
89
  style?: StyleProp<ViewStyle> | undefined
89
90
  /** Per-segment accessibility label. */
@@ -216,7 +217,7 @@ function renderSegments({
216
217
  }: {
217
218
  segments: SegmentedTrackSegmentData[] | undefined
218
219
  children: React.ReactNode | undefined
219
- modes: Record<string, any>
220
+ modes: Modes
220
221
  segmentStyle: StyleProp<ViewStyle> | undefined
221
222
  }): React.ReactNode[] {
222
223
  if (children !== undefined && children !== null) {
@@ -3,6 +3,7 @@ import { View, type StyleProp, type ViewProps, type ViewStyle } from 'react-nati
3
3
  import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
4
4
  import { useTokens } from '../../design-tokens/JFSThemeProvider'
5
5
  import { cloneChildrenWithModes, EMPTY_MODES } from '../../utils/react-utils'
6
+ import type { Modes } from '../../design-tokens'
6
7
 
7
8
  export type SlotLayoutDirection = 'vertical' | 'horizontal'
8
9
 
@@ -30,7 +31,7 @@ export type SlotProps = ViewProps & {
30
31
  /**
31
32
  * Mode configuration passed to the token resolver and cascaded to children.
32
33
  */
33
- modes?: Record<string, any>
34
+ modes?: Modes
34
35
  style?: StyleProp<ViewStyle>
35
36
  }
36
37
 
@@ -14,6 +14,7 @@ import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
14
14
  import { useTokens } from '../../design-tokens/JFSThemeProvider'
15
15
  import { EMPTY_MODES } from '../../utils/react-utils'
16
16
  import { useReducedMotion } from '../../skeleton/useReducedMotion'
17
+ import type { Modes } from '../../design-tokens'
17
18
 
18
19
  /**
19
20
  * Per-segment colours, resolved from the Figma `spiner/*` tokens. Consumers can
@@ -52,7 +53,7 @@ export type SpinnerProps = SpinnerBaseProps & {
52
53
  /** When false, renders a static resting spinner (also honoured for reduced motion). Defaults to true. */
53
54
  animating?: boolean
54
55
  /** Design token modes forwarded to token lookups. */
55
- modes?: Record<string, any>
56
+ modes?: Modes
56
57
  /** Container style override. */
57
58
  style?: StyleProp<ViewStyle>
58
59
  /** Accessibility label announced to assistive tech. Defaults to "Loading". */
@@ -8,6 +8,7 @@ import {
8
8
  } from '../../utils/react-utils'
9
9
  import StatItem from '../StatItem/StatItem'
10
10
  import Divider from '../Divider/Divider'
11
+ import type { Modes } from '../../design-tokens'
11
12
 
12
13
  export type StatGroupItem = {
13
14
  /** Stable key for the item. Falls back to the label / index. */
@@ -34,7 +35,7 @@ export type StatGroupProps = {
34
35
  */
35
36
  children?: React.ReactNode
36
37
  /** Design token modes for theming (e.g. `{ 'Color Mode': 'Light' }`). */
37
- modes?: Record<string, any>
38
+ modes?: Modes
38
39
  /** Override container styles. */
39
40
  style?: StyleProp<ViewStyle>
40
41
  }
@@ -123,7 +124,7 @@ function renderSlotChildren({
123
124
  }: {
124
125
  items?: StatGroupItem[]
125
126
  children?: React.ReactNode
126
- modes: Record<string, any>
127
+ modes: Modes
127
128
  }): React.ReactNode[] {
128
129
  let nodes: React.ReactNode[]
129
130
 
@@ -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 StatItemLabelPosition = 'Top' | 'Bottom'
13
14
 
@@ -25,7 +26,7 @@ export type StatItemProps = {
25
26
  */
26
27
  labelPosition?: StatItemLabelPosition
27
28
  /** Design token modes for theming (e.g. `{ 'Color Mode': 'Light' }`). */
28
- modes?: Record<string, any>
29
+ modes?: Modes
29
30
  /** Override container styles. */
30
31
  style?: StyleProp<ViewStyle>
31
32
  /** Override the label text styles. */
@@ -5,6 +5,7 @@ import { useTokens } from '../../design-tokens/JFSThemeProvider'
5
5
  import IconCapsule from '../IconCapsule/IconCapsule'
6
6
  import MoneyValue from '../MoneyValue/MoneyValue'
7
7
  import { EMPTY_MODES } from '../../utils/react-utils'
8
+ import type { Modes } from '../../design-tokens'
8
9
 
9
10
  export type StatusHeroProps = {
10
11
  /**
@@ -26,7 +27,7 @@ export type StatusHeroProps = {
26
27
  /** Currency symbol or ISO code for the default MoneyValue */
27
28
  currency?: string
28
29
  /** Mode configuration for design tokens */
29
- modes?: Record<string, any>
30
+ modes?: Modes
30
31
  style?: ViewStyle
31
32
  }
32
33
 
@@ -4,12 +4,13 @@ import Svg, { Path } from 'react-native-svg'
4
4
  import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
5
5
  import { StepLabel } from './StepLabel'
6
6
  import { EMPTY_MODES, cloneChildrenWithModes } from '../../utils/react-utils'
7
+ import type { Modes } from '../../design-tokens'
7
8
 
8
9
  export type StepStatus = 'number' | 'complete' | 'error' | 'warning'
9
10
 
10
11
  export type StepProps = {
11
12
  children?: React.ReactNode
12
- modes?: Record<string, any>
13
+ modes?: Modes
13
14
  style?: ViewStyle
14
15
  // Injected by Stepper, or provided manually
15
16
  index?: number
@@ -2,6 +2,7 @@ import React from 'react'
2
2
  import { View, Text, type ViewStyle, type TextStyle } 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
  export type StepLabelProps = {
7
8
  title?: string
@@ -9,7 +10,7 @@ export type StepLabelProps = {
9
10
  metaText?: string
10
11
  subtitle?: boolean
11
12
  meta?: boolean
12
- modes?: Record<string, any>
13
+ modes?: Modes
13
14
  style?: ViewStyle
14
15
  }
15
16