jfs-components 0.1.0 → 0.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (392) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/lib/commonjs/components/AmountInput/AmountInput.js +8 -5
  3. package/lib/commonjs/components/AreaLineChart/AreaLineChart.js +1 -1
  4. package/lib/commonjs/components/Balance/Balance.js +17 -12
  5. package/lib/commonjs/components/BenefitCard/BenefitCard.js +231 -0
  6. package/lib/commonjs/components/Card/Card.js +2 -1
  7. package/lib/commonjs/components/CardFeedback/CardFeedback.js +2 -1
  8. package/lib/commonjs/components/CcCard/CcCard.js +470 -0
  9. package/lib/commonjs/components/Checkbox/Checkbox.js +6 -4
  10. package/lib/commonjs/components/CheckboxItem/CheckboxItem.js +4 -3
  11. package/lib/commonjs/components/CompareTable/CompareTable.js +372 -0
  12. package/lib/commonjs/components/ComparisonBar/ComparisonBar.js +266 -0
  13. package/lib/commonjs/components/Drawer/Drawer.js +13 -4
  14. package/lib/commonjs/components/DropdownInput/DropdownInput.js +36 -4
  15. package/lib/commonjs/components/FormField/FormField.js +4 -3
  16. package/lib/commonjs/components/FullscreenModal/FullscreenModal.js +62 -2
  17. package/lib/commonjs/components/Image/Image.js +11 -5
  18. package/lib/commonjs/components/InputSearch/InputSearch.js +6 -4
  19. package/lib/commonjs/components/LottiePlayer/loadNativeLottieView.js +8 -13
  20. package/lib/commonjs/components/NoteInput/NoteInput.js +6 -5
  21. package/lib/commonjs/components/Overlay/Overlay.js +92 -0
  22. package/lib/commonjs/components/PdpCcCard/PdpCcCard.js +273 -0
  23. package/lib/commonjs/components/PlanComparisonCard/PlanComparisonCard.js +2 -1
  24. package/lib/commonjs/components/ProductMerchandisingCard/GlassFill.js +263 -0
  25. package/lib/commonjs/components/ProductMerchandisingCard/GlassFill.web.js +116 -0
  26. package/lib/commonjs/components/ProductMerchandisingCard/ProductMerchandisingCard.js +353 -0
  27. package/lib/commonjs/components/ProjectionMarker/ProjectionMarker.js +161 -0
  28. package/lib/commonjs/components/Radio/Radio.js +5 -5
  29. package/lib/commonjs/components/Slider/Slider.js +473 -0
  30. package/lib/commonjs/components/TextInput/TextInput.js +15 -9
  31. package/lib/commonjs/components/TextSegment/TextSegment.js +118 -0
  32. package/lib/commonjs/components/docs/modeControls.js +116 -0
  33. package/lib/commonjs/components/index.js +70 -0
  34. package/lib/commonjs/design-tokens/Coin Variables-variables-full.json +1 -1
  35. package/lib/commonjs/design-tokens/JFSThemeProvider.js +1 -1
  36. package/lib/commonjs/design-tokens/figma-modes.generated.js +420 -0
  37. package/lib/commonjs/design-tokens/index.js +11 -0
  38. package/lib/commonjs/icons/registry.js +1 -1
  39. package/lib/commonjs/utils/react-utils.js +22 -0
  40. package/lib/module/components/Accordion/Accordion.js +1 -2
  41. package/lib/module/components/AmountInput/AmountInput.js +6 -4
  42. package/lib/module/components/AreaLineChart/AreaLineChart.js +1 -1
  43. package/lib/module/components/Balance/Balance.js +18 -13
  44. package/lib/module/components/BenefitCard/BenefitCard.js +225 -0
  45. package/lib/module/components/Card/Card.js +1 -2
  46. package/lib/module/components/CardFeedback/CardFeedback.js +1 -2
  47. package/lib/module/components/CcCard/CcCard.js +464 -0
  48. package/lib/module/components/Checkbox/Checkbox.js +6 -6
  49. package/lib/module/components/CheckboxItem/CheckboxItem.js +5 -4
  50. package/lib/module/components/CompareTable/CompareTable.js +367 -0
  51. package/lib/module/components/ComparisonBar/ComparisonBar.js +260 -0
  52. package/lib/module/components/Drawer/Drawer.js +12 -4
  53. package/lib/module/components/DropdownInput/DropdownInput.js +37 -5
  54. package/lib/module/components/FormField/FormField.js +5 -4
  55. package/lib/module/components/FullscreenModal/FullscreenModal.js +64 -5
  56. package/lib/module/components/Image/Image.js +11 -5
  57. package/lib/module/components/InputSearch/InputSearch.js +6 -4
  58. package/lib/module/components/InstitutionBadge/InstitutionBadge.js +1 -2
  59. package/lib/module/components/LottiePlayer/loadNativeLottieView.js +8 -13
  60. package/lib/module/components/MoneyValue/MoneyValue.js +1 -2
  61. package/lib/module/components/NoteInput/NoteInput.js +7 -6
  62. package/lib/module/components/OTP/OTP.js +1 -2
  63. package/lib/module/components/Overlay/Overlay.js +87 -0
  64. package/lib/module/components/PdpCcCard/PdpCcCard.js +267 -0
  65. package/lib/module/components/PlanComparisonCard/PlanComparisonCard.js +1 -2
  66. package/lib/module/components/PoweredByLabel/PoweredByLabel.js +1 -2
  67. package/lib/module/components/ProductMerchandisingCard/GlassFill.js +257 -0
  68. package/lib/module/components/ProductMerchandisingCard/GlassFill.web.js +111 -0
  69. package/lib/module/components/ProductMerchandisingCard/ProductMerchandisingCard.js +347 -0
  70. package/lib/module/components/ProjectionMarker/ProjectionMarker.js +156 -0
  71. package/lib/module/components/Radio/Radio.js +5 -4
  72. package/lib/module/components/RechargeCard/RechargeCard.js +1 -2
  73. package/lib/module/components/Section/Section.js +1 -2
  74. package/lib/module/components/Slider/Slider.js +468 -0
  75. package/lib/module/components/TextInput/TextInput.js +16 -12
  76. package/lib/module/components/TextSegment/TextSegment.js +113 -0
  77. package/lib/module/components/UpiHandle/UpiHandle.js +1 -2
  78. package/lib/module/components/docs/modeControls.js +111 -0
  79. package/lib/module/components/index.js +10 -0
  80. package/lib/module/design-tokens/Coin Variables-variables-full.json +1 -1
  81. package/lib/module/design-tokens/JFSThemeProvider.js +1 -1
  82. package/lib/module/design-tokens/figma-modes.generated.js +416 -0
  83. package/lib/module/design-tokens/index.js +2 -1
  84. package/lib/module/icons/registry.js +1 -1
  85. package/lib/module/utils/react-utils.js +21 -1
  86. package/lib/typescript/src/components/Accordion/Accordion.d.ts +2 -1
  87. package/lib/typescript/src/components/AccordionCheckbox/AccordionCheckbox.d.ts +2 -1
  88. package/lib/typescript/src/components/AccountCard/AccountCard.d.ts +2 -1
  89. package/lib/typescript/src/components/ActionFooter/ActionFooter.d.ts +2 -1
  90. package/lib/typescript/src/components/ActionTile/ActionTile.d.ts +2 -1
  91. package/lib/typescript/src/components/AllocationComparisonChart/AllocationComparisonChart.d.ts +2 -1
  92. package/lib/typescript/src/components/AmountInput/AmountInput.d.ts +5 -3
  93. package/lib/typescript/src/components/AppBar/AppBar.d.ts +2 -1
  94. package/lib/typescript/src/components/AreaLineChart/AreaLineChart.d.ts +3 -2
  95. package/lib/typescript/src/components/Attached/Attached.d.ts +2 -1
  96. package/lib/typescript/src/components/Avatar/Avatar.d.ts +2 -1
  97. package/lib/typescript/src/components/AvatarGroup/AvatarGroup.d.ts +2 -1
  98. package/lib/typescript/src/components/Badge/Badge.d.ts +2 -1
  99. package/lib/typescript/src/components/Balance/Balance.d.ts +2 -1
  100. package/lib/typescript/src/components/BenefitCard/BenefitCard.d.ts +93 -0
  101. package/lib/typescript/src/components/BottomNav/BottomNav.d.ts +2 -1
  102. package/lib/typescript/src/components/BottomNavItem/BottomNavItem.d.ts +2 -1
  103. package/lib/typescript/src/components/BrandChip/BrandChip.d.ts +2 -1
  104. package/lib/typescript/src/components/BubbleChart/BubbleChart.d.ts +2 -1
  105. package/lib/typescript/src/components/Button/Button.d.ts +2 -1
  106. package/lib/typescript/src/components/ButtonGroup/ButtonGroup.d.ts +2 -1
  107. package/lib/typescript/src/components/Card/Card.d.ts +3 -2
  108. package/lib/typescript/src/components/CardAdvisory/CardAdvisory.d.ts +2 -1
  109. package/lib/typescript/src/components/CardBankAccount/CardBankAccount.d.ts +2 -1
  110. package/lib/typescript/src/components/CardCTA/CardCTA.d.ts +2 -1
  111. package/lib/typescript/src/components/CardFeedback/CardFeedback.d.ts +7 -6
  112. package/lib/typescript/src/components/CardFinancialCondition/CardFinancialCondition.d.ts +2 -1
  113. package/lib/typescript/src/components/CardInsight/CardInsight.d.ts +2 -1
  114. package/lib/typescript/src/components/CardProviderInfo/CardProviderInfo.d.ts +2 -1
  115. package/lib/typescript/src/components/Carousel/Carousel.d.ts +4 -3
  116. package/lib/typescript/src/components/CcCard/CcCard.d.ts +137 -0
  117. package/lib/typescript/src/components/Checkbox/Checkbox.d.ts +5 -3
  118. package/lib/typescript/src/components/CheckboxGroup/CheckboxGroup.d.ts +2 -1
  119. package/lib/typescript/src/components/CheckboxItem/CheckboxItem.d.ts +4 -3
  120. package/lib/typescript/src/components/ChipGroup/ChipGroup.d.ts +2 -1
  121. package/lib/typescript/src/components/ChipSelect/ChipSelect.d.ts +2 -1
  122. package/lib/typescript/src/components/CircularProgressBar/CircularProgressBar.d.ts +2 -1
  123. package/lib/typescript/src/components/CircularProgressBarDoted/CircularProgressBarDoted.d.ts +2 -1
  124. package/lib/typescript/src/components/CircularRating/CircularRating.d.ts +2 -1
  125. package/lib/typescript/src/components/ClusterBubble/ClusterBubble.d.ts +2 -1
  126. package/lib/typescript/src/components/CompareTable/CompareTable.d.ts +88 -0
  127. package/lib/typescript/src/components/ComparisonBar/ComparisonBar.d.ts +118 -0
  128. package/lib/typescript/src/components/CoverageBarComparison/CoverageBarComparison.d.ts +3 -2
  129. package/lib/typescript/src/components/CoverageRing/CoverageRing.d.ts +2 -1
  130. package/lib/typescript/src/components/DebitCard/DebitCard.d.ts +2 -1
  131. package/lib/typescript/src/components/Disclaimer/Disclaimer.d.ts +2 -1
  132. package/lib/typescript/src/components/Divider/Divider.d.ts +2 -1
  133. package/lib/typescript/src/components/DonutChart/DonutChart.d.ts +4 -3
  134. package/lib/typescript/src/components/DonutChartSummary/DonutChartSummary.d.ts +3 -2
  135. package/lib/typescript/src/components/Drawer/Drawer.d.ts +15 -1
  136. package/lib/typescript/src/components/Dropdown/Dropdown.d.ts +3 -2
  137. package/lib/typescript/src/components/DropdownInput/DropdownInput.d.ts +22 -2
  138. package/lib/typescript/src/components/EmptyState/EmptyState.d.ts +2 -1
  139. package/lib/typescript/src/components/ExpandableCheckbox/ExpandableCheckbox.d.ts +2 -1
  140. package/lib/typescript/src/components/FilterBar/FilterBar.d.ts +3 -2
  141. package/lib/typescript/src/components/Form/Form.d.ts +2 -1
  142. package/lib/typescript/src/components/FormField/FormField.d.ts +4 -3
  143. package/lib/typescript/src/components/FullscreenModal/FullscreenModal.d.ts +2 -1
  144. package/lib/typescript/src/components/Gauge/Gauge.d.ts +2 -1
  145. package/lib/typescript/src/components/HStack/HStack.d.ts +2 -1
  146. package/lib/typescript/src/components/HoldingsCard/HoldingsCard.d.ts +2 -1
  147. package/lib/typescript/src/components/Icon/Icon.d.ts +2 -1
  148. package/lib/typescript/src/components/IconButton/IconButton.d.ts +2 -1
  149. package/lib/typescript/src/components/IconCapsule/IconCapsule.d.ts +2 -1
  150. package/lib/typescript/src/components/Image/Image.d.ts +17 -1
  151. package/lib/typescript/src/components/InputSearch/InputSearch.d.ts +25 -3
  152. package/lib/typescript/src/components/InstitutionBadge/InstitutionBadge.d.ts +2 -1
  153. package/lib/typescript/src/components/LazyList/LazyList.d.ts +2 -1
  154. package/lib/typescript/src/components/LinearMeter/LinearMeter.d.ts +3 -2
  155. package/lib/typescript/src/components/LinearProgress/LinearProgress.d.ts +2 -1
  156. package/lib/typescript/src/components/ListGroup/ListGroup.d.ts +2 -1
  157. package/lib/typescript/src/components/ListItem/ListItem.d.ts +2 -1
  158. package/lib/typescript/src/components/LottieIntroBlock/LottieIntroBlock.d.ts +2 -1
  159. package/lib/typescript/src/components/LottiePlayer/LottiePlayer.d.ts +2 -1
  160. package/lib/typescript/src/components/LottiePlayer/LottiePlayer.web.d.ts +2 -1
  161. package/lib/typescript/src/components/MediaCard/MediaCard.d.ts +6 -5
  162. package/lib/typescript/src/components/MerchantProfile/MerchantProfile.d.ts +2 -1
  163. package/lib/typescript/src/components/MessageField/MessageField.d.ts +2 -1
  164. package/lib/typescript/src/components/MetricLegendItem/MetricLegendItem.d.ts +2 -1
  165. package/lib/typescript/src/components/MoneyValue/MoneyValue.d.ts +2 -1
  166. package/lib/typescript/src/components/MonthlyStatusGrid/MonthlyStatusGrid.d.ts +4 -3
  167. package/lib/typescript/src/components/NavArrow/NavArrow.d.ts +2 -1
  168. package/lib/typescript/src/components/NoteInput/NoteInput.d.ts +21 -3
  169. package/lib/typescript/src/components/Nudge/Nudge.d.ts +2 -1
  170. package/lib/typescript/src/components/Numpad/Numpad.d.ts +2 -1
  171. package/lib/typescript/src/components/OTP/OTP.d.ts +3 -2
  172. package/lib/typescript/src/components/Overlay/Overlay.d.ts +52 -0
  173. package/lib/typescript/src/components/PageHero/PageHero.d.ts +2 -1
  174. package/lib/typescript/src/components/PaymentFeedback/PaymentFeedback.d.ts +2 -1
  175. package/lib/typescript/src/components/PdpCcCard/PdpCcCard.d.ts +84 -0
  176. package/lib/typescript/src/components/PlanComparisonCard/PlanComparisonCard.d.ts +2 -1
  177. package/lib/typescript/src/components/Popup/Popup.d.ts +2 -1
  178. package/lib/typescript/src/components/PortfolioHero/PortfolioHero.d.ts +2 -1
  179. package/lib/typescript/src/components/PoweredByLabel/PoweredByLabel.d.ts +2 -1
  180. package/lib/typescript/src/components/ProductLabel/ProductLabel.d.ts +2 -1
  181. package/lib/typescript/src/components/ProductMerchandisingCard/GlassFill.d.ts +56 -0
  182. package/lib/typescript/src/components/ProductMerchandisingCard/GlassFill.web.d.ts +27 -0
  183. package/lib/typescript/src/components/ProductMerchandisingCard/ProductMerchandisingCard.d.ts +81 -0
  184. package/lib/typescript/src/components/ProductOverview/ProductOverview.d.ts +2 -1
  185. package/lib/typescript/src/components/ProgressBadge/ProgressBadge.d.ts +2 -1
  186. package/lib/typescript/src/components/ProjectionMarker/ProjectionMarker.d.ts +82 -0
  187. package/lib/typescript/src/components/Radio/Radio.d.ts +5 -3
  188. package/lib/typescript/src/components/RadioButton/RadioButton.d.ts +2 -2
  189. package/lib/typescript/src/components/RangeTrack/RangeTrack.d.ts +3 -2
  190. package/lib/typescript/src/components/RechargeCard/RechargeCard.d.ts +2 -1
  191. package/lib/typescript/src/components/SavingsGoalSummary/SavingsGoalSummary.d.ts +2 -1
  192. package/lib/typescript/src/components/Screen/Screen.d.ts +2 -1
  193. package/lib/typescript/src/components/Section/Section.d.ts +3 -2
  194. package/lib/typescript/src/components/SegmentedControl/SegmentedControl.d.ts +2 -1
  195. package/lib/typescript/src/components/SegmentedTrack/SegmentedTrack.d.ts +4 -3
  196. package/lib/typescript/src/components/Slider/Slider.d.ts +99 -0
  197. package/lib/typescript/src/components/Slot/Slot.d.ts +2 -1
  198. package/lib/typescript/src/components/Spinner/Spinner.d.ts +2 -1
  199. package/lib/typescript/src/components/StatGroup/StatGroup.d.ts +2 -1
  200. package/lib/typescript/src/components/StatItem/StatItem.d.ts +2 -1
  201. package/lib/typescript/src/components/StatusHero/StatusHero.d.ts +2 -1
  202. package/lib/typescript/src/components/Stepper/Step.d.ts +2 -1
  203. package/lib/typescript/src/components/Stepper/StepLabel.d.ts +2 -1
  204. package/lib/typescript/src/components/Stepper/Stepper.d.ts +2 -1
  205. package/lib/typescript/src/components/StrengthIndicator/StrengthIndicator.d.ts +2 -1
  206. package/lib/typescript/src/components/SuggestiveSearch/SuggestiveSearch.d.ts +2 -1
  207. package/lib/typescript/src/components/SummaryTile/SummaryTile.d.ts +2 -1
  208. package/lib/typescript/src/components/SupportText/SupportText.d.ts +2 -1
  209. package/lib/typescript/src/components/SupportText/SupportTextIcon.d.ts +2 -1
  210. package/lib/typescript/src/components/SwappableAmount/SwappableAmount.d.ts +2 -1
  211. package/lib/typescript/src/components/Tabs/TabItem.d.ts +2 -1
  212. package/lib/typescript/src/components/Tabs/Tabs.d.ts +2 -1
  213. package/lib/typescript/src/components/TestimonialsCard/TestimonialsCard.d.ts +2 -1
  214. package/lib/typescript/src/components/Text/Text.d.ts +2 -1
  215. package/lib/typescript/src/components/TextInput/TextInput.d.ts +12 -31
  216. package/lib/typescript/src/components/TextSegment/TextSegment.d.ts +100 -0
  217. package/lib/typescript/src/components/ThreadHero/ThreadHero.d.ts +2 -1
  218. package/lib/typescript/src/components/Title/Title.d.ts +2 -1
  219. package/lib/typescript/src/components/Toast/Toast.d.ts +2 -1
  220. package/lib/typescript/src/components/Toast/ToastProvider.d.ts +2 -1
  221. package/lib/typescript/src/components/Toast/useToast.d.ts +3 -2
  222. package/lib/typescript/src/components/Toggle/Toggle.d.ts +2 -1
  223. package/lib/typescript/src/components/Tooltip/Tooltip.d.ts +2 -1
  224. package/lib/typescript/src/components/TransactionBubble/TransactionBubble.d.ts +2 -1
  225. package/lib/typescript/src/components/TransactionDetails/TransactionDetails.d.ts +3 -2
  226. package/lib/typescript/src/components/TransactionStatus/TransactionStatus.d.ts +2 -1
  227. package/lib/typescript/src/components/UpiHandle/UpiHandle.d.ts +2 -1
  228. package/lib/typescript/src/components/VStack/VStack.d.ts +2 -1
  229. package/lib/typescript/src/components/docs/modeControls.d.ts +28 -0
  230. package/lib/typescript/src/components/index.d.ts +11 -1
  231. package/lib/typescript/src/design-tokens/JFSThemeProvider.d.ts +4 -3
  232. package/lib/typescript/src/design-tokens/figma-modes.generated.d.ts +284 -0
  233. package/lib/typescript/src/design-tokens/index.d.ts +1 -0
  234. package/lib/typescript/src/icons/registry.d.ts +1 -1
  235. package/lib/typescript/src/skeleton/Skeleton.d.ts +2 -1
  236. package/lib/typescript/src/utils/react-utils.d.ts +12 -1
  237. package/package.json +4 -2
  238. package/src/components/Accordion/Accordion.tsx +2 -1
  239. package/src/components/AccordionCheckbox/AccordionCheckbox.tsx +2 -1
  240. package/src/components/AccountCard/AccountCard.tsx +2 -1
  241. package/src/components/ActionFooter/ActionFooter.tsx +2 -1
  242. package/src/components/ActionTile/ActionTile.tsx +2 -1
  243. package/src/components/AllocationComparisonChart/AllocationComparisonChart.tsx +2 -1
  244. package/src/components/AmountInput/AmountInput.tsx +9 -6
  245. package/src/components/AppBar/AppBar.tsx +2 -1
  246. package/src/components/AreaLineChart/AreaLineChart.tsx +8 -7
  247. package/src/components/Attached/Attached.tsx +2 -1
  248. package/src/components/Avatar/Avatar.tsx +3 -2
  249. package/src/components/AvatarGroup/AvatarGroup.tsx +2 -1
  250. package/src/components/Badge/Badge.tsx +2 -1
  251. package/src/components/Balance/Balance.tsx +18 -12
  252. package/src/components/BenefitCard/BenefitCard.tsx +309 -0
  253. package/src/components/BottomNav/BottomNav.tsx +2 -1
  254. package/src/components/BottomNavItem/BottomNavItem.tsx +3 -2
  255. package/src/components/BrandChip/BrandChip.tsx +3 -2
  256. package/src/components/BubbleChart/BubbleChart.tsx +2 -1
  257. package/src/components/Button/Button.tsx +3 -2
  258. package/src/components/ButtonGroup/ButtonGroup.tsx +2 -1
  259. package/src/components/Card/Card.tsx +4 -3
  260. package/src/components/CardAdvisory/CardAdvisory.tsx +3 -2
  261. package/src/components/CardBankAccount/CardBankAccount.tsx +2 -1
  262. package/src/components/CardCTA/CardCTA.tsx +3 -2
  263. package/src/components/CardFeedback/CardFeedback.tsx +11 -10
  264. package/src/components/CardFinancialCondition/CardFinancialCondition.tsx +3 -2
  265. package/src/components/CardInsight/CardInsight.tsx +2 -1
  266. package/src/components/CardProviderInfo/CardProviderInfo.tsx +2 -1
  267. package/src/components/Carousel/Carousel.tsx +5 -4
  268. package/src/components/CcCard/CcCard.tsx +598 -0
  269. package/src/components/Checkbox/Checkbox.tsx +7 -5
  270. package/src/components/CheckboxGroup/CheckboxGroup.tsx +2 -1
  271. package/src/components/CheckboxItem/CheckboxItem.tsx +7 -5
  272. package/src/components/ChipGroup/ChipGroup.tsx +2 -1
  273. package/src/components/ChipSelect/ChipSelect.tsx +2 -1
  274. package/src/components/CircularProgressBar/CircularProgressBar.tsx +2 -1
  275. package/src/components/CircularProgressBarDoted/CircularProgressBarDoted.tsx +2 -1
  276. package/src/components/CircularRating/CircularRating.tsx +3 -2
  277. package/src/components/ClusterBubble/ClusterBubble.tsx +2 -1
  278. package/src/components/CompareTable/CompareTable.tsx +477 -0
  279. package/src/components/ComparisonBar/ComparisonBar.tsx +356 -0
  280. package/src/components/CoverageBarComparison/CoverageBarComparison.tsx +3 -2
  281. package/src/components/CoverageRing/CoverageRing.tsx +2 -1
  282. package/src/components/DebitCard/DebitCard.tsx +2 -1
  283. package/src/components/Disclaimer/Disclaimer.tsx +2 -1
  284. package/src/components/Divider/Divider.tsx +2 -1
  285. package/src/components/DonutChart/DonutChart.tsx +6 -5
  286. package/src/components/DonutChartSummary/DonutChartSummary.tsx +3 -2
  287. package/src/components/Drawer/Drawer.tsx +21 -1
  288. package/src/components/Dropdown/Dropdown.tsx +4 -3
  289. package/src/components/DropdownInput/DropdownInput.tsx +60 -7
  290. package/src/components/EmptyState/EmptyState.tsx +2 -1
  291. package/src/components/ExpandableCheckbox/ExpandableCheckbox.tsx +2 -1
  292. package/src/components/FilterBar/FilterBar.tsx +3 -2
  293. package/src/components/Form/Form.tsx +2 -1
  294. package/src/components/FormField/FormField.tsx +8 -6
  295. package/src/components/FullscreenModal/FullscreenModal.tsx +68 -10
  296. package/src/components/Gauge/Gauge.tsx +2 -1
  297. package/src/components/HStack/HStack.tsx +2 -1
  298. package/src/components/HoldingsCard/HoldingsCard.tsx +2 -1
  299. package/src/components/Icon/Icon.tsx +3 -2
  300. package/src/components/IconButton/IconButton.tsx +3 -2
  301. package/src/components/IconCapsule/IconCapsule.tsx +3 -2
  302. package/src/components/Image/Image.tsx +29 -5
  303. package/src/components/InputSearch/InputSearch.tsx +11 -7
  304. package/src/components/InstitutionBadge/InstitutionBadge.tsx +3 -2
  305. package/src/components/LazyList/LazyList.tsx +2 -1
  306. package/src/components/LinearMeter/LinearMeter.tsx +3 -2
  307. package/src/components/LinearProgress/LinearProgress.tsx +2 -1
  308. package/src/components/ListGroup/ListGroup.tsx +2 -1
  309. package/src/components/ListItem/ListItem.tsx +3 -2
  310. package/src/components/LottieIntroBlock/LottieIntroBlock.tsx +2 -1
  311. package/src/components/LottiePlayer/LottiePlayer.tsx +3 -2
  312. package/src/components/LottiePlayer/LottiePlayer.web.tsx +3 -2
  313. package/src/components/LottiePlayer/loadNativeLottieView.tsx +9 -13
  314. package/src/components/MediaCard/MediaCard.tsx +7 -6
  315. package/src/components/MerchantProfile/MerchantProfile.tsx +2 -1
  316. package/src/components/MessageField/MessageField.tsx +3 -2
  317. package/src/components/MetricLegendItem/MetricLegendItem.tsx +2 -1
  318. package/src/components/MoneyValue/MoneyValue.tsx +2 -1
  319. package/src/components/MonthlyStatusGrid/MonthlyStatusGrid.tsx +5 -4
  320. package/src/components/NavArrow/NavArrow.tsx +3 -2
  321. package/src/components/NoteInput/NoteInput.tsx +10 -7
  322. package/src/components/Nudge/Nudge.tsx +3 -2
  323. package/src/components/Numpad/Numpad.tsx +2 -1
  324. package/src/components/OTP/OTP.tsx +3 -2
  325. package/src/components/Overlay/Overlay.tsx +114 -0
  326. package/src/components/PageHero/PageHero.tsx +2 -1
  327. package/src/components/PaymentFeedback/PaymentFeedback.tsx +2 -1
  328. package/src/components/PdpCcCard/PdpCcCard.tsx +356 -0
  329. package/src/components/PlanComparisonCard/PlanComparisonCard.tsx +2 -1
  330. package/src/components/Popup/Popup.tsx +2 -1
  331. package/src/components/PortfolioHero/PortfolioHero.tsx +2 -1
  332. package/src/components/PoweredByLabel/PoweredByLabel.tsx +2 -1
  333. package/src/components/ProductLabel/ProductLabel.tsx +2 -1
  334. package/src/components/ProductMerchandisingCard/GlassFill.tsx +276 -0
  335. package/src/components/ProductMerchandisingCard/GlassFill.web.tsx +127 -0
  336. package/src/components/ProductMerchandisingCard/ProductMerchandisingCard.tsx +423 -0
  337. package/src/components/ProductOverview/ProductOverview.tsx +2 -1
  338. package/src/components/ProgressBadge/ProgressBadge.tsx +2 -1
  339. package/src/components/ProjectionMarker/ProjectionMarker.tsx +277 -0
  340. package/src/components/Radio/Radio.tsx +7 -5
  341. package/src/components/RangeTrack/RangeTrack.tsx +3 -2
  342. package/src/components/RechargeCard/RechargeCard.tsx +2 -1
  343. package/src/components/SavingsGoalSummary/SavingsGoalSummary.tsx +2 -1
  344. package/src/components/Screen/Screen.tsx +2 -1
  345. package/src/components/Section/Section.tsx +6 -5
  346. package/src/components/SegmentedControl/SegmentedControl.tsx +3 -2
  347. package/src/components/SegmentedTrack/SegmentedTrack.tsx +5 -4
  348. package/src/components/Slider/Slider.tsx +628 -0
  349. package/src/components/Slot/Slot.tsx +2 -1
  350. package/src/components/Spinner/Spinner.tsx +2 -1
  351. package/src/components/StatGroup/StatGroup.tsx +3 -2
  352. package/src/components/StatItem/StatItem.tsx +2 -1
  353. package/src/components/StatusHero/StatusHero.tsx +2 -1
  354. package/src/components/Stepper/Step.tsx +2 -1
  355. package/src/components/Stepper/StepLabel.tsx +2 -1
  356. package/src/components/Stepper/Stepper.tsx +2 -1
  357. package/src/components/StrengthIndicator/StrengthIndicator.tsx +2 -1
  358. package/src/components/SuggestiveSearch/SuggestiveSearch.tsx +4 -3
  359. package/src/components/SummaryTile/SummaryTile.tsx +2 -1
  360. package/src/components/SupportText/SupportText.tsx +2 -1
  361. package/src/components/SupportText/SupportTextIcon.tsx +2 -1
  362. package/src/components/SwappableAmount/SwappableAmount.tsx +2 -1
  363. package/src/components/Tabs/TabItem.tsx +2 -1
  364. package/src/components/Tabs/Tabs.tsx +2 -1
  365. package/src/components/TestimonialsCard/TestimonialsCard.tsx +2 -1
  366. package/src/components/Text/Text.tsx +2 -1
  367. package/src/components/TextInput/TextInput.tsx +18 -13
  368. package/src/components/TextSegment/TextSegment.tsx +166 -0
  369. package/src/components/ThreadHero/ThreadHero.tsx +2 -1
  370. package/src/components/Title/Title.tsx +2 -1
  371. package/src/components/Toast/Toast.tsx +2 -1
  372. package/src/components/Toast/ToastProvider.tsx +2 -1
  373. package/src/components/Toast/useToast.ts +3 -2
  374. package/src/components/Toggle/Toggle.tsx +2 -1
  375. package/src/components/Tooltip/Tooltip.tsx +3 -2
  376. package/src/components/TransactionBubble/TransactionBubble.tsx +2 -1
  377. package/src/components/TransactionDetails/TransactionDetails.tsx +3 -2
  378. package/src/components/TransactionStatus/TransactionStatus.tsx +3 -2
  379. package/src/components/UpiHandle/UpiHandle.tsx +3 -2
  380. package/src/components/VStack/VStack.tsx +2 -1
  381. package/src/components/docs/modeControls.tsx +122 -0
  382. package/src/components/index.ts +11 -1
  383. package/src/design-tokens/Coin Variables-variables-full.json +1 -1
  384. package/src/design-tokens/JFSThemeProvider.tsx +4 -3
  385. package/src/design-tokens/figma-modes.generated.ts +425 -0
  386. package/src/design-tokens/index.ts +1 -0
  387. package/src/icons/registry.ts +1 -1
  388. package/src/skeleton/Skeleton.tsx +2 -1
  389. package/src/utils/react-utils.ts +26 -2
  390. package/lib/typescript/scripts/extract-component-tokens.d.ts +0 -9
  391. package/lib/typescript/scripts/generate-component-docs.d.ts +0 -9
  392. package/lib/typescript/scripts/generate-icon-registry.d.ts +0 -3
@@ -0,0 +1,277 @@
1
+ import React from 'react'
2
+ import {
3
+ View,
4
+ Text,
5
+ type StyleProp,
6
+ type ViewStyle,
7
+ type TextStyle,
8
+ } from 'react-native'
9
+ import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
10
+ import { EMPTY_MODES, cloneChildrenWithModes } from '../../utils/react-utils'
11
+ import type { Modes } from '../../design-tokens'
12
+ import Divider from '../Divider/Divider'
13
+
14
+ /**
15
+ * A value rendered at either end of the marker. A `string`/`number` is rendered
16
+ * with the built-in title typography; any other `ReactNode` (e.g. a
17
+ * `MoneyValue`) is rendered as-is so consumers can fully control presentation.
18
+ */
19
+ type ProjectionMarkerEndValue = React.ReactNode
20
+
21
+ export type ProjectionMarkerProps = {
22
+ /**
23
+ * Value shown on the leading (left) end of the marker — typically the
24
+ * invested/starting amount. Accepts a string for the default styling or any
25
+ * `ReactNode` (e.g. `MoneyValue`) for custom rendering.
26
+ */
27
+ startValue?: ProjectionMarkerEndValue
28
+ /**
29
+ * Value shown on the trailing (right) end of the marker — typically the
30
+ * projected/ending amount.
31
+ */
32
+ endValue?: ProjectionMarkerEndValue
33
+ /**
34
+ * Primary line inside the center badge — typically the duration
35
+ * (e.g. `"1Y 10M"`).
36
+ */
37
+ duration?: React.ReactNode
38
+ /**
39
+ * Secondary line inside the center badge — typically the rate
40
+ * (e.g. `"@ 8.25 %"`).
41
+ */
42
+ rate?: React.ReactNode
43
+ /**
44
+ * Whether to render the connector lines between the end values and the
45
+ * center badge. Defaults to `true`.
46
+ */
47
+ showConnectors?: boolean
48
+ /** Design token modes for theming. */
49
+ modes?: Modes
50
+ /** Override the root container styles. */
51
+ style?: StyleProp<ViewStyle>
52
+ /** Override the leading value text styles (only applies to string values). */
53
+ startValueStyle?: StyleProp<TextStyle>
54
+ /** Override the trailing value text styles (only applies to string values). */
55
+ endValueStyle?: StyleProp<TextStyle>
56
+ /** Override the center badge container styles. */
57
+ badgeStyle?: StyleProp<ViewStyle>
58
+ /** Override the duration text styles. */
59
+ durationStyle?: StyleProp<TextStyle>
60
+ /** Override the rate text styles. */
61
+ rateStyle?: StyleProp<TextStyle>
62
+ /** Accessibility label for the whole marker. */
63
+ accessibilityLabel?: string
64
+ }
65
+
66
+ const isTextValue = (value: React.ReactNode): value is string | number =>
67
+ typeof value === 'string' || typeof value === 'number'
68
+
69
+ /**
70
+ * ProjectionMarker renders a start value and an end value connected to a
71
+ * centered badge that summarizes the projection (e.g. a tenure and interest
72
+ * rate). It mirrors the Figma `projectionMarker` component and is commonly used
73
+ * inside "Potential returns" style cards.
74
+ *
75
+ * @example
76
+ * ```tsx
77
+ * <ProjectionMarker
78
+ * startValue="₹1,00,000"
79
+ * endValue="₹1,25,101"
80
+ * duration="1Y 10M"
81
+ * rate="@ 8.25 %"
82
+ * />
83
+ * ```
84
+ *
85
+ * @example Custom end values via MoneyValue
86
+ * ```tsx
87
+ * <ProjectionMarker
88
+ * startValue={<MoneyValue value="1,00,000" />}
89
+ * endValue={<MoneyValue value="1,25,101" />}
90
+ * duration="1Y 10M"
91
+ * rate="@ 8.25 %"
92
+ * />
93
+ * ```
94
+ */
95
+ function ProjectionMarker({
96
+ startValue = '₹1,00,000',
97
+ endValue = '₹1,25,101',
98
+ duration = '1Y 10M',
99
+ rate = '@ 8.25 %',
100
+ showConnectors = true,
101
+ modes = EMPTY_MODES,
102
+ style,
103
+ startValueStyle,
104
+ endValueStyle,
105
+ badgeStyle,
106
+ durationStyle,
107
+ rateStyle,
108
+ accessibilityLabel,
109
+ }: ProjectionMarkerProps) {
110
+ const titleColor =
111
+ (getVariableByName('projectionMarker/title/color', modes) as string | null) ?? '#000000'
112
+ const titleFontFamily =
113
+ (getVariableByName('projectionMarker/title/fontfamily', modes) as string | null) ??
114
+ 'JioType Var'
115
+ const titleFontSize =
116
+ (getVariableByName('projectionMarker/title/fontsize', modes) as number | null) ?? 14
117
+ const titleFontWeight = String(
118
+ getVariableByName('projectionMarker/title/fontweight', modes) ?? 600
119
+ ) as TextStyle['fontWeight']
120
+
121
+ const durationColor =
122
+ (getVariableByName('projectionMarker/duration/color', modes) as string | null) ?? '#000000'
123
+ const durationFontFamily =
124
+ (getVariableByName('projectionMarker/duration/fontfamily', modes) as string | null) ??
125
+ 'JioType Var'
126
+ const durationFontSize =
127
+ (getVariableByName('projectionMarker/duration/fontsize', modes) as number | null) ?? 12
128
+ const durationFontWeight = String(
129
+ getVariableByName('projectionMarker/duration/fontweight', modes) ?? 500
130
+ ) as TextStyle['fontWeight']
131
+
132
+ const rateColor =
133
+ (getVariableByName('projectionMarker/rate/color', modes) as string | null) ?? '#6b6b6b'
134
+ const rateFontFamily =
135
+ (getVariableByName('metricdata/rate/fontfamily', modes) as string | null) ?? 'JioType Var'
136
+ const rateFontSize =
137
+ (getVariableByName('metricdata/rate/fontsize', modes) as number | null) ?? 11
138
+ const rateFontWeight = String(
139
+ getVariableByName('metricdata/rate/fontweight', modes) ?? 400
140
+ ) as TextStyle['fontWeight']
141
+
142
+ const badgeBg =
143
+ (getVariableByName('projectionMarker/durationWrap/bg/color', modes) as string | null) ??
144
+ '#f5f5f5'
145
+ const badgeBorderColor =
146
+ (getVariableByName('projectionMarker/durationWrap/border/color', modes) as string | null) ??
147
+ '#ebebed'
148
+ const badgeBorderWidth =
149
+ (getVariableByName('metricdata/durationWrap/stroke', modes) as number | null) ?? 1
150
+ const badgeRadius =
151
+ (getVariableByName('metricdata/durationWrap/radius', modes) as number | null) ?? 8
152
+ const badgePaddingHorizontal =
153
+ (getVariableByName('metricdata/durationWrap/padding/horizontal', modes) as number | null) ?? 16
154
+ const badgePaddingVertical =
155
+ (getVariableByName('metricdata/durationWrap/padding/vertical', modes) as number | null) ?? 8
156
+
157
+ const titleTextStyle: TextStyle = {
158
+ color: titleColor,
159
+ fontFamily: titleFontFamily,
160
+ fontSize: titleFontSize,
161
+ fontWeight: titleFontWeight,
162
+ lineHeight: titleFontSize * 1.3,
163
+ }
164
+
165
+ const renderEndValue = (
166
+ value: React.ReactNode,
167
+ overrideStyle: StyleProp<TextStyle>
168
+ ): React.ReactNode => {
169
+ if (value === null || value === undefined) return null
170
+ if (isTextValue(value)) {
171
+ return (
172
+ <Text style={[titleTextStyle, overrideStyle]} numberOfLines={1}>
173
+ {value}
174
+ </Text>
175
+ )
176
+ }
177
+ return cloneChildrenWithModes(value, modes)
178
+ }
179
+
180
+ return (
181
+ <View
182
+ style={[styles.container, style]}
183
+ accessibilityRole="summary"
184
+ accessibilityLabel={accessibilityLabel}
185
+ >
186
+ {renderEndValue(startValue, startValueStyle)}
187
+
188
+ {showConnectors && (
189
+ <Divider direction="horizontal" modes={modes} style={styles.connector} />
190
+ )}
191
+
192
+ <View
193
+ style={[
194
+ styles.badge,
195
+ {
196
+ backgroundColor: badgeBg,
197
+ borderColor: badgeBorderColor,
198
+ borderWidth: badgeBorderWidth,
199
+ borderRadius: badgeRadius,
200
+ paddingHorizontal: badgePaddingHorizontal,
201
+ paddingVertical: badgePaddingVertical,
202
+ },
203
+ badgeStyle,
204
+ ]}
205
+ >
206
+ {duration !== null && duration !== undefined
207
+ ? isTextValue(duration)
208
+ ? (
209
+ <Text
210
+ style={[
211
+ {
212
+ color: durationColor,
213
+ fontFamily: durationFontFamily,
214
+ fontSize: durationFontSize,
215
+ fontWeight: durationFontWeight,
216
+ lineHeight: durationFontSize * 1.2,
217
+ textAlign: 'center',
218
+ },
219
+ durationStyle,
220
+ ]}
221
+ >
222
+ {duration}
223
+ </Text>
224
+ )
225
+ : cloneChildrenWithModes(duration, modes)
226
+ : null}
227
+ {rate !== null && rate !== undefined
228
+ ? isTextValue(rate)
229
+ ? (
230
+ <Text
231
+ style={[
232
+ {
233
+ color: rateColor,
234
+ fontFamily: rateFontFamily,
235
+ fontSize: rateFontSize,
236
+ fontWeight: rateFontWeight,
237
+ lineHeight: rateFontSize * 1.3,
238
+ textAlign: 'center',
239
+ },
240
+ rateStyle,
241
+ ]}
242
+ >
243
+ {rate}
244
+ </Text>
245
+ )
246
+ : cloneChildrenWithModes(rate, modes)
247
+ : null}
248
+ </View>
249
+
250
+ {showConnectors && (
251
+ <Divider direction="horizontal" modes={modes} style={styles.connector} />
252
+ )}
253
+
254
+ {renderEndValue(endValue, endValueStyle)}
255
+ </View>
256
+ )
257
+ }
258
+
259
+ const styles = {
260
+ container: {
261
+ flexDirection: 'row',
262
+ alignItems: 'center',
263
+ width: '100%',
264
+ } as ViewStyle,
265
+ connector: {
266
+ flex: 1,
267
+ alignSelf: 'center',
268
+ marginHorizontal: 16,
269
+ } as ViewStyle,
270
+ badge: {
271
+ flexDirection: 'column',
272
+ alignItems: 'center',
273
+ justifyContent: 'center',
274
+ } as ViewStyle,
275
+ }
276
+
277
+ export default ProjectionMarker
@@ -1,4 +1,4 @@
1
- import React, { useMemo, useState } from 'react'
1
+ import React, { forwardRef, useState } from 'react'
2
2
  import {
3
3
  Pressable,
4
4
  View,
@@ -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
  */
@@ -46,14 +47,14 @@ export interface RadioProps {
46
47
  // Radio
47
48
  // ---------------------------------------------------------------------------
48
49
 
49
- export function Radio({
50
+ export const Radio = forwardRef<View, RadioProps>(function Radio({
50
51
  selected = false,
51
52
  disabled = false,
52
53
  onPress,
53
54
  modes = EMPTY_MODES,
54
55
  style,
55
56
  testID,
56
- }: RadioProps) {
57
+ }: RadioProps, ref: React.Ref<View>) {
57
58
  // ---- Refs & State ----
58
59
  const [hovered, setHovered] = useState(false)
59
60
  const [focused, setFocused] = useState(false)
@@ -205,6 +206,7 @@ export function Radio({
205
206
 
206
207
  return (
207
208
  <Pressable
209
+ ref={ref}
208
210
  testID={testID}
209
211
  disabled={disabled}
210
212
  onPress={onPress}
@@ -222,6 +224,6 @@ export function Radio({
222
224
  <View style={selectorStyle} />
223
225
  </Pressable>
224
226
  )
225
- }
227
+ })
226
228
 
227
229
  export default Radio
@@ -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) {