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
@@ -2,6 +2,7 @@ import React, { isValidElement, cloneElement, type ReactNode } 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 ThreadHeroProps = {
7
8
  /** Title text, e.g. "Subhash Rajan" */
@@ -13,7 +14,7 @@ export type ThreadHeroProps = {
13
14
  /** Slot for Avatar component */
14
15
  renderAvatar?: ReactNode
15
16
  /** Modes for design token resolution */
16
- modes?: Record<string, any>
17
+ modes?: Modes
17
18
  /** Optional container style */
18
19
  style?: ViewStyle
19
20
  }
@@ -3,6 +3,7 @@ import { View, Text, type StyleProp, type ViewStyle, type TextStyle } from 'reac
3
3
  import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
4
4
  import { useTokens } from '../../design-tokens/JFSThemeProvider'
5
5
  import { EMPTY_MODES } from '../../utils/react-utils'
6
+ import type { Modes } from '../../design-tokens'
6
7
 
7
8
  export type TitleProps = {
8
9
  title?: string;
@@ -10,7 +11,7 @@ export type TitleProps = {
10
11
  subtitle?: string;
11
12
  /** Horizontal alignment of the title text. */
12
13
  textAlign?: 'Left' | 'Center';
13
- modes?: Record<string, any>;
14
+ modes?: Modes;
14
15
  style?: StyleProp<ViewStyle>;
15
16
  textStyle?: StyleProp<TextStyle>;
16
17
  /** Optional style overrides for the subtitle text. */
@@ -4,13 +4,14 @@ import Animated, { FadeIn, FadeOut, SlideInDown, SlideInUp } from 'react-native-
4
4
  import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
5
5
  import { closeToast, type ToastPlacement } from './useToast'
6
6
  import { EMPTY_MODES } from '../../utils/react-utils'
7
+ import type { Modes } from '../../design-tokens'
7
8
 
8
9
  export interface ToastProps {
9
10
  id: string
10
11
  title: string
11
12
  timeout?: number | undefined
12
13
  onClose?: (() => void) | undefined
13
- modes?: Record<string, any> | undefined
14
+ modes?: Modes | undefined
14
15
  placement?: ToastPlacement | undefined
15
16
  style?: StyleProp<ViewStyle> | undefined
16
17
  }
@@ -3,12 +3,13 @@ import { StyleSheet, View } from 'react-native'
3
3
  import { useSafeAreaInsets } from 'react-native-safe-area-context'
4
4
  import { useToast, type ToastPlacement } from './useToast'
5
5
  import Toast from './Toast'
6
+ import type { Modes } from '../../design-tokens'
6
7
 
7
8
  export interface ToastProviderProps {
8
9
  children: React.ReactNode
9
10
  maxVisibleToasts?: number
10
11
  placement?: ToastPlacement
11
- modes?: Record<string, any>
12
+ modes?: Modes
12
13
  }
13
14
 
14
15
  function ToastProvider({
@@ -1,4 +1,5 @@
1
1
  import { useCallback, useSyncExternalStore } from 'react'
2
+ import type { Modes } from '../../design-tokens'
2
3
 
3
4
  export type ToastPlacement = 'top' | 'bottom'
4
5
 
@@ -6,7 +7,7 @@ export interface ToastOptions {
6
7
  title: string
7
8
  timeout?: number
8
9
  onClose?: () => void
9
- modes?: Record<string, any>
10
+ modes?: Modes
10
11
  }
11
12
 
12
13
  export interface ToastEntry {
@@ -14,7 +15,7 @@ export interface ToastEntry {
14
15
  title: string
15
16
  timeout: number
16
17
  onClose?: (() => void) | undefined
17
- modes?: Record<string, any> | undefined
18
+ modes?: Modes | undefined
18
19
  }
19
20
 
20
21
  type Listener = () => void
@@ -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 interface ToggleProps {
13
14
  /** Whether the toggle is on (controlled) */
@@ -19,7 +20,7 @@ export interface ToggleProps {
19
20
  /** Whether the toggle is disabled */
20
21
  disabled?: boolean
21
22
  /** Design token modes for theming */
22
- modes?: Record<string, any>
23
+ modes?: Modes
23
24
  /** Override container styles */
24
25
  style?: StyleProp<ViewStyle>
25
26
  /** Accessibility label for screen readers */
@@ -22,6 +22,7 @@ import Svg, { Path } from 'react-native-svg'
22
22
  import { useSafeAreaInsets } from 'react-native-safe-area-context'
23
23
  import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
24
24
  import { EMPTY_MODES } from '../../utils/react-utils'
25
+ import type { Modes } from '../../design-tokens'
25
26
 
26
27
  // --- Types ---
27
28
 
@@ -49,7 +50,7 @@ type TooltipContextValue = {
49
50
  setTriggerRect: (rect: Rect | null) => void
50
51
  contentSize: Size | null
51
52
  setContentSize: (size: Size) => void
52
- modes: Record<string, any>
53
+ modes: Modes
53
54
  placement: Placement
54
55
  }
55
56
 
@@ -81,7 +82,7 @@ function useTooltipContext() {
81
82
 
82
83
  export type TooltipProps = {
83
84
  children: ReactNode
84
- modes?: Record<string, any>
85
+ modes?: Modes
85
86
  /** Initial visibility state (controlled) */
86
87
  open?: boolean
87
88
  /** Callback when visibility changes */
@@ -6,6 +6,7 @@ import TransactionStatus from '../TransactionStatus/TransactionStatus'
6
6
  import NavArrow from '../NavArrow/NavArrow'
7
7
  import { EMPTY_MODES, cloneChildrenWithModes } from '../../utils/react-utils'
8
8
  import { usePressableWebSupport, type WebAccessibilityProps } from '../../utils/web-platform-utils'
9
+ import type { Modes } from '../../design-tokens'
9
10
 
10
11
  export type TransactionBubbleProps = {
11
12
  description?: string
@@ -16,7 +17,7 @@ export type TransactionBubbleProps = {
16
17
  /** Slot for the status area. When provided, replaces the default TransactionStatus + NavArrow. */
17
18
  statusSlot?: React.ReactNode
18
19
  children?: React.ReactNode
19
- modes?: Record<string, any>
20
+ modes?: Modes
20
21
  onPress?: () => void
21
22
  style?: ViewStyle
22
23
  accessibilityLabel?: string
@@ -3,6 +3,7 @@ import { View, Text, type StyleProp, type ViewStyle, type TextStyle } from 'reac
3
3
  import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
4
4
 
5
5
  import { EMPTY_MODES, cloneChildrenWithModes } from '../../utils/react-utils'
6
+ import type { Modes } from '../../design-tokens'
6
7
 
7
8
  // ===== Item Subcomponent =====
8
9
 
@@ -12,7 +13,7 @@ export type TransactionDetailsItemProps = {
12
13
  /** The value text displayed below the label (e.g., "101674916166") */
13
14
  value?: string
14
15
  /** Modes object passed to `getVariableByName` for design token resolution */
15
- modes?: Record<string, any>
16
+ modes?: Modes
16
17
  /** Optional container style overrides */
17
18
  style?: StyleProp<ViewStyle>
18
19
  /** Optional label text style overrides */
@@ -126,7 +127,7 @@ export type TransactionDetailsProps = {
126
127
  /** Slot for TransactionDetails.Item children */
127
128
  children?: React.ReactNode
128
129
  /** Modes object passed to `getVariableByName` for design token resolution */
129
- modes?: Record<string, any>
130
+ modes?: Modes
130
131
  /** Optional container style overrides */
131
132
  style?: StyleProp<ViewStyle>
132
133
  /** Accessibility label for screen readers */
@@ -3,10 +3,11 @@ import { View, Text, type ViewStyle, type TextStyle } from 'react-native'
3
3
  import { Svg, Path } from 'react-native-svg'
4
4
  import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
5
5
  import { EMPTY_MODES } from '../../utils/react-utils'
6
+ import type { Modes } from '../../design-tokens'
6
7
 
7
8
  // --- Internal Icon Component ---
8
9
  type StatusIconProps = {
9
- modes?: Record<string, any>
10
+ modes?: Modes
10
11
  width?: number
11
12
  height?: number
12
13
  color?: string
@@ -44,7 +45,7 @@ export type TransactionStatusProps = {
44
45
  /** Date text, e.g. "20 Mar 2025" */
45
46
  date?: string
46
47
  /** Modes for design token resolution */
47
- modes?: Record<string, any>
48
+ modes?: Modes
48
49
  /** Optional container style */
49
50
  style?: ViewStyle
50
51
  }
@@ -16,6 +16,7 @@ import { useTokens } from '../../design-tokens/JFSThemeProvider'
16
16
  import { EMPTY_MODES } from '../../utils/react-utils'
17
17
  import MediaSource, { type UnifiedSource } from '../../utils/MediaSource'
18
18
  import Icon from '../../icons/Icon'
19
+ import type { Modes } from '../../design-tokens'
19
20
 
20
21
  // Default static asset from the component folder.
21
22
  // Consumers can override the image via the `source` prop if needed.
@@ -30,7 +31,7 @@ const focusOverlayStyle: ViewStyle = { borderWidth: 1, borderColor: '#222' }
30
31
 
31
32
  type UpiHandleProps = {
32
33
  label?: string;
33
- modes?: Record<string, any>;
34
+ modes?: Modes;
34
35
  showIcon?: boolean;
35
36
  iconName?: string;
36
37
  /**
@@ -62,7 +63,7 @@ interface UpiHandleTokens {
62
63
  iconPlaceholderStyle: ViewStyle;
63
64
  }
64
65
 
65
- function resolveUpiHandleTokens(modes: Record<string, any>): UpiHandleTokens {
66
+ function resolveUpiHandleTokens(modes: Modes): UpiHandleTokens {
66
67
  const backgroundColor = (getVariableByName('upiHandle/background', modes) || '#f5f5f5') as string
67
68
  const radius = (getVariableByName('upiHandle/radius', modes) || 99999) as number
68
69
  const paddingLeft = (getVariableByName('upiHandle/padding/left', modes) || 4) as number
@@ -3,6 +3,7 @@ import { View, StyleProp, ViewStyle, ViewProps } from 'react-native'
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 interface VStackProps extends ViewProps {
8
9
  /**
@@ -35,7 +36,7 @@ export interface VStackProps extends ViewProps {
35
36
  /**
36
37
  * Modes object to override default variable values.
37
38
  */
38
- modes?: Record<string, any>;
39
+ modes?: Modes;
39
40
  }
40
41
 
41
42
  /**
@@ -0,0 +1,122 @@
1
+ import React from 'react'
2
+ import {
3
+ FIGMA_MODES,
4
+ FIGMA_COMPONENT_MODES,
5
+ } from '../../design-tokens/figma-modes.generated'
6
+
7
+ /**
8
+ * Storybook helpers that turn a component's design-token collections into real,
9
+ * per-collection `select` controls and merge the picked values into the `modes`
10
+ * prop — so authors get the same enum-driven DX in the Storybook Controls panel
11
+ * that the typed `modes` prop gives them in code.
12
+ *
13
+ * Fully backward compatible:
14
+ * - If nothing is picked, `modes` is left exactly as the story provided it.
15
+ * - Any `modes` value the story already sets WINS over a control selection,
16
+ * so existing stories render identically until someone touches a control.
17
+ * - The synthetic control args are stripped before they reach the component,
18
+ * so they never leak in as unknown props.
19
+ */
20
+
21
+ const UNSET = '(default)'
22
+
23
+ type Collections = readonly string[]
24
+
25
+ /**
26
+ * Resolve the list of collections to expose. Accepts a component name (looked up
27
+ * in the generated map), an explicit list, or both (merged + de-duplicated).
28
+ */
29
+ function resolveCollections(
30
+ componentOrCollections: string | Collections,
31
+ extra: Collections = []
32
+ ): string[] {
33
+ const fromName =
34
+ typeof componentOrCollections === 'string'
35
+ ? FIGMA_COMPONENT_MODES[componentOrCollections] || []
36
+ : componentOrCollections
37
+ const merged = new Set<string>([...fromName, ...extra])
38
+ // Only keep collections that actually have more than one mode to choose from.
39
+ return [...merged].filter((name) => {
40
+ const modes = (FIGMA_MODES as Record<string, readonly string[]>)[name]
41
+ return Array.isArray(modes) && modes.length > 1
42
+ })
43
+ }
44
+
45
+ /**
46
+ * Build `argTypes` entries — one `select` per multi-mode collection, grouped
47
+ * under a "Modes" category. Spread the result into your story `meta.argTypes`.
48
+ */
49
+ export function modeArgTypes(
50
+ componentOrCollections: string | Collections,
51
+ extra: Collections = []
52
+ ): Record<string, unknown> {
53
+ const collections = resolveCollections(componentOrCollections, extra)
54
+ const argTypes: Record<string, unknown> = {}
55
+ for (const name of collections) {
56
+ const modes = (FIGMA_MODES as Record<string, readonly string[]>)[name]
57
+ argTypes[name] = {
58
+ name,
59
+ description: `\`${name}\` collection mode`,
60
+ control: { type: 'select' },
61
+ options: [UNSET, ...modes],
62
+ table: { category: 'Modes' },
63
+ }
64
+ }
65
+ return argTypes
66
+ }
67
+
68
+ /**
69
+ * A decorator that merges the picked collection modes into `args.modes` and
70
+ * strips the synthetic control args before they reach the component.
71
+ */
72
+ export function modeDecorator(
73
+ componentOrCollections: string | Collections,
74
+ extra: Collections = []
75
+ ) {
76
+ const collections = resolveCollections(componentOrCollections, extra)
77
+
78
+ return function ModeControlsDecorator(Story: any, context: any) {
79
+ const args = context?.args || {}
80
+ const picked: Record<string, string> = {}
81
+ // Start from the real story args so nothing is dropped. Passing only the
82
+ // synthetic keys here would REPLACE the story args in this Storybook
83
+ // renderer, wiping out real props (e.g. `series`, slot nodes) and leaving
84
+ // the component to render empty/crash.
85
+ const override: Record<string, unknown> = { ...args }
86
+
87
+ for (const name of collections) {
88
+ const value = args[name]
89
+ if (value && value !== UNSET) {
90
+ picked[name] = value
91
+ }
92
+ // Neutralise the synthetic arg so it is never spread onto the component.
93
+ override[name] = undefined
94
+ }
95
+
96
+ // Explicit story-provided modes win over control selections.
97
+ override.modes = { ...picked, ...(args.modes || {}) }
98
+
99
+ return <Story args={override} />
100
+ }
101
+ }
102
+
103
+ /**
104
+ * Convenience: returns `{ argTypes, decorators }` to spread directly into a
105
+ * story `meta`.
106
+ *
107
+ * @example
108
+ * const meta = {
109
+ * title: 'Components/Button',
110
+ * component: Button,
111
+ * ...withModeControls('Button'),
112
+ * }
113
+ */
114
+ export function withModeControls(
115
+ componentOrCollections: string | Collections,
116
+ extra: Collections = []
117
+ ): { argTypes: Record<string, unknown>; decorators: unknown[] } {
118
+ return {
119
+ argTypes: modeArgTypes(componentOrCollections, extra),
120
+ decorators: [modeDecorator(componentOrCollections, extra)],
121
+ }
122
+ }
@@ -63,6 +63,7 @@ export { default as NoteInput, type NoteInputProps } from './NoteInput/NoteInput
63
63
  export { default as Nudge, type NudgeProps } from './Nudge/Nudge';
64
64
  export { default as NavArrow } from './NavArrow/NavArrow';
65
65
  export { default as Numpad, type NumpadProps, type NumpadKeyValue } from './Numpad/Numpad';
66
+ export { default as Overlay, type OverlayProps } from './Overlay/Overlay';
66
67
  export { default as Title, type TitleProps } from './Title/Title';
67
68
  export { default as Screen, type ScreenProps } from './Screen/Screen';
68
69
  export { default as Section } from './Section/Section';
@@ -149,6 +150,7 @@ export { default as StatItem, type StatItemProps, type StatItemLabelPosition } f
149
150
  export { default as StatGroup, type StatGroupProps, type StatGroupItem } from './StatGroup/StatGroup';
150
151
  export { default as StrengthIndicator, type StrengthIndicatorProps, type StrengthIndicatorConfidence, type StrengthIndicatorConfidenceValue } from './StrengthIndicator/StrengthIndicator';
151
152
  export { default as SummaryTile, type SummaryTileProps } from './SummaryTile/SummaryTile';
153
+ export { default as TestimonialsCard, type TestimonialsCardProps } from './TestimonialsCard/TestimonialsCard';
152
154
  export { default as Text, type TextProps } from './Text/Text';
153
155
  export { default as SegmentedControl, type SegmentedControlProps, type SegmentedControlItem } from './SegmentedControl/SegmentedControl';
154
156
  export { default as Toggle, type ToggleProps } from './Toggle/Toggle';
@@ -1,6 +1,7 @@
1
1
 
2
2
  import React, { createContext, useContext, ReactNode, useMemo } from 'react';
3
3
  import { getVariableByName } from './figma-variables-resolver';
4
+ import type { Modes } from './figma-modes.generated'
4
5
 
5
6
  /**
6
7
  * Shape of the TokenContext
@@ -10,7 +11,7 @@ interface TokenContextType {
10
11
  * Current active modes map
11
12
  * @example { 'Color Mode': 'Dark', 'Platform': 'mobile' }
12
13
  */
13
- modes: Record<string, any>;
14
+ modes: Modes;
14
15
  /**
15
16
  * Helper to resolve variable by name using the current context modes.
16
17
  */
@@ -24,7 +25,7 @@ interface JFSThemeProviderProps {
24
25
  * Modes to apply globally.
25
26
  * Can be used to set 'Color Mode', 'Platform', 'Density', etc.
26
27
  */
27
- modes?: Record<string, any>;
28
+ modes?: Modes;
28
29
  children: ReactNode;
29
30
  }
30
31
 
@@ -61,7 +62,7 @@ export const JFSThemeProvider: React.FC<JFSThemeProviderProps> = ({
61
62
  * Hook to access the current design token context.
62
63
  *
63
64
  * returns {
64
- * modes: Record<string, any> - The current active modes
65
+ * modes: Modes - The current active modes
65
66
  * getVariable: (name: string) => any - Function to resolve a token value
66
67
  * }
67
68
  */