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,423 @@
1
+ import React, { useId, useMemo } from 'react'
2
+ import {
3
+ View,
4
+ Text,
5
+ Pressable,
6
+ StyleSheet,
7
+ type ViewStyle,
8
+ type TextStyle,
9
+ type StyleProp,
10
+ type ImageSourcePropType,
11
+ } from 'react-native'
12
+ import Svg, { Defs, LinearGradient, Stop, Rect } from 'react-native-svg'
13
+ import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
14
+ import { EMPTY_MODES } from '../../utils/react-utils'
15
+ import Avatar from '../Avatar/Avatar'
16
+ import Badge from '../Badge/Badge'
17
+ import Button from '../Button/Button'
18
+ import Image from '../Image/Image'
19
+ import GlassFill from './GlassFill'
20
+ import type { Modes } from '../../design-tokens'
21
+
22
+ export interface ProductMerchandisingCardProps {
23
+ /**
24
+ * Background media for the card. Accepts a URL string or any RN
25
+ * `ImageSourcePropType` (same shape as `Avatar`, `MediaCard`, etc.). The
26
+ * image is rendered full-bleed behind the header and glass footer.
27
+ */
28
+ imageSource?: ImageSourcePropType | string
29
+ /** Footer title (bold, white). */
30
+ title?: string
31
+ /** Footer subtitle (muted). */
32
+ subtitle?: string
33
+ /**
34
+ * Header badge label (top-right). The badge is hidden when this is
35
+ * `undefined` and no `badge` override is provided.
36
+ */
37
+ badgeLabel?: string
38
+ /**
39
+ * Full override for the header badge. Takes precedence over `badgeLabel`.
40
+ */
41
+ badge?: React.ReactNode
42
+ /** Show the header avatar (top-left). Defaults to `true`. */
43
+ showAvatar?: boolean
44
+ /** Avatar image source. */
45
+ avatarSource?: ImageSourcePropType | string
46
+ /** Avatar monogram fallback when no image is supplied. */
47
+ avatarMonogram?: string
48
+ /** Full override for the header avatar. Takes precedence over avatar props. */
49
+ avatar?: React.ReactNode
50
+ /**
51
+ * Footer "special badge" label (small frosted pill above the title). The
52
+ * badge is hidden when this is `undefined` and no `specialBadge` override
53
+ * is provided.
54
+ */
55
+ specialBadgeLabel?: string
56
+ /** Optional leading node (icon/image) rendered inside the special badge. */
57
+ specialBadgeIcon?: React.ReactNode
58
+ /** Full override for the special badge. Takes precedence over the props above. */
59
+ specialBadge?: React.ReactNode
60
+ /** CTA button label. Defaults to `"CTA"`. */
61
+ ctaLabel?: string
62
+ /** CTA button press handler. */
63
+ onCtaPress?: () => void
64
+ /** Full override for the CTA. Takes precedence over `ctaLabel`/`onCtaPress`. */
65
+ cta?: React.ReactNode
66
+ /** Press handler for the whole card. When set, the card becomes pressable. */
67
+ onPress?: () => void
68
+ /** Card height in px. Defaults to `223` (Figma spec). */
69
+ height?: number
70
+ /** Modes object for design-token resolution. Cascaded to all children. */
71
+ modes?: Modes
72
+ /** Style overrides for the card container. */
73
+ style?: StyleProp<ViewStyle>
74
+ /** Accessibility label for the card. */
75
+ accessibilityLabel?: string
76
+ }
77
+
78
+ /**
79
+ * ProductMerchandisingCard — a full-bleed image card (Figma node 5277:317)
80
+ * with a top header (avatar + badge) and a bottom **glass footer** that
81
+ * combines a real native background blur with a transparent→black gradient
82
+ * scrim for legible text over any image.
83
+ *
84
+ * Glass footer implementation (works on iOS, Android and Web):
85
+ * - **iOS / Android:** `<GlassFill>` wraps `@react-native-community/blur`'s
86
+ * `BlurView` — iOS gets a real `UIVisualEffectView` (live OS blur),
87
+ * Android gets the community `RealtimeBlurView` with a tinted scrim
88
+ * fallback. The native-only module is isolated in `GlassFill.tsx`.
89
+ * - **Web:** the platform-extension `GlassFill.web.tsx` renders a translucent
90
+ * `View` with `backdrop-filter: blur()` — Metro picks the right file so the
91
+ * web bundle never imports the native blur module.
92
+ * - The gradient scrim is drawn with `react-native-svg` (one renderer for all
93
+ * platforms) so the fade is identical everywhere.
94
+ *
95
+ * The blur strength is driven by the Figma `blur/minimal` token, mapped to the
96
+ * `GlassFill` 0–100 intensity scale the same way `MediaCard` does.
97
+ */
98
+ function ProductMerchandisingCard({
99
+ imageSource,
100
+ title = 'Title',
101
+ subtitle = 'Subtitle',
102
+ badgeLabel,
103
+ badge,
104
+ showAvatar = true,
105
+ avatarSource,
106
+ avatarMonogram,
107
+ avatar,
108
+ specialBadgeLabel,
109
+ specialBadgeIcon,
110
+ specialBadge,
111
+ ctaLabel = 'CTA',
112
+ onCtaPress,
113
+ cta,
114
+ onPress,
115
+ height = 223,
116
+ modes = EMPTY_MODES,
117
+ style,
118
+ accessibilityLabel,
119
+ }: ProductMerchandisingCardProps) {
120
+ // Unique gradient id so multiple cards on one (web) document never collide.
121
+ const rawId = useId()
122
+ const scrimId = `pmc-footer-scrim-${rawId.replace(/[^a-zA-Z0-9_-]/g, '')}`
123
+
124
+ const tokens = useMemo(() => resolveTokens(modes), [modes])
125
+
126
+ const containerStyle: ViewStyle = {
127
+ height,
128
+ borderRadius: tokens.radius,
129
+ overflow: 'hidden',
130
+ position: 'relative',
131
+ flexDirection: 'column',
132
+ justifyContent: 'space-between',
133
+ }
134
+
135
+ // Header avatar defaults to the design's 36px (Avatar Size = M). A
136
+ // consumer-supplied `modes['Avatar Size']` still wins via spread order.
137
+ const avatarModes = useMemo<Modes>(() => ({ 'Avatar Size': 'M', ...modes }), [modes])
138
+
139
+ // The Figma node renders the header badge with the brand "Secondary"
140
+ // appearance at "Medium" emphasis (lilac fill + dark label). These are set
141
+ // as defaults so the card matches the design out of the box; a
142
+ // consumer-supplied `modes` value still wins via spread order.
143
+ const badgeModes = useMemo<Modes>(
144
+ () => ({ AppearanceBrand: 'Secondary', Emphasis: 'Medium', ...modes }),
145
+ [modes]
146
+ )
147
+
148
+ const headerBadge =
149
+ badge ?? (badgeLabel != null ? <Badge label={badgeLabel} modes={badgeModes} /> : null)
150
+
151
+ const headerAvatar = showAvatar
152
+ ? avatar ?? (
153
+ <Avatar
154
+ style={avatarSource ? 'Image' : avatarMonogram ? 'Monogram' : 'Image'}
155
+ imageSource={avatarSource}
156
+ monogram={avatarMonogram}
157
+ modes={avatarModes}
158
+ />
159
+ )
160
+ : null
161
+
162
+ const footerSpecialBadge =
163
+ specialBadge ??
164
+ (specialBadgeLabel != null ? (
165
+ <View style={styles.specialBadge}>
166
+ <GlassFill
167
+ tint="light"
168
+ intensity={SPECIAL_BADGE_INTENSITY}
169
+ overlayColor={SPECIAL_BADGE_BG}
170
+ style={styles.specialBadgeFill}
171
+ />
172
+ {specialBadgeIcon != null ? (
173
+ <View style={styles.specialBadgeIcon}>{specialBadgeIcon}</View>
174
+ ) : null}
175
+ <Text style={tokens.specialBadgeText} numberOfLines={1}>
176
+ {specialBadgeLabel}
177
+ </Text>
178
+ </View>
179
+ ) : null)
180
+
181
+ // The Figma CTA uses the brand "Secondary" appearance (purple fill, white
182
+ // label) at the small size. Defaults match the design; consumer `modes`
183
+ // win via spread order.
184
+ const ctaModes = useMemo<Modes>(
185
+ () => ({ 'Button / Size': 'S', AppearanceBrand: 'Secondary', ...modes }),
186
+ [modes]
187
+ )
188
+
189
+ const footerCta =
190
+ cta ?? <Button label={ctaLabel} modes={ctaModes} onPress={onCtaPress} />
191
+
192
+ const content = (
193
+ <>
194
+ {imageSource != null ? (
195
+ <Image
196
+ imageSource={imageSource}
197
+ style={StyleSheet.absoluteFillObject as any}
198
+ width="100%"
199
+ height={height}
200
+ resizeMode="cover"
201
+ accessibilityElementsHidden
202
+ importantForAccessibility="no"
203
+ />
204
+ ) : null}
205
+
206
+ <View style={tokens.header} pointerEvents="box-none">
207
+ <View style={styles.avatarContainer}>{headerAvatar}</View>
208
+ {headerBadge}
209
+ </View>
210
+
211
+ <View style={tokens.footer} pointerEvents="box-none">
212
+ {/* Progressive background blur: clear at the top, ramping to a
213
+ soft blur at the bottom (native MaskedView+BlurView / web
214
+ backdrop-filter + mask-image). */}
215
+ <GlassFill tint="dark" intensity={tokens.blurIntensity} progressive />
216
+ {/* Transparent -> black gradient scrim, identical on all platforms. */}
217
+ <View style={[StyleSheet.absoluteFill, styles.scrim]} pointerEvents="none">
218
+ <Svg width="100%" height="100%">
219
+ <Defs>
220
+ <LinearGradient id={scrimId} x1="0" y1="0" x2="0" y2="1">
221
+ <Stop offset="0.018" stopColor="#000000" stopOpacity={0} />
222
+ <Stop offset="0.974" stopColor="#000000" stopOpacity={1} />
223
+ </LinearGradient>
224
+ </Defs>
225
+ <Rect x="0" y="0" width="100%" height="100%" fill={`url(#${scrimId})`} />
226
+ </Svg>
227
+ </View>
228
+
229
+ {footerSpecialBadge}
230
+
231
+ <View style={styles.footerRow}>
232
+ <View style={tokens.textWrap}>
233
+ <Text style={tokens.title} numberOfLines={1}>
234
+ {title}
235
+ </Text>
236
+ {subtitle != null ? (
237
+ <Text style={tokens.subtitle} numberOfLines={1}>
238
+ {subtitle}
239
+ </Text>
240
+ ) : null}
241
+ </View>
242
+ {footerCta}
243
+ </View>
244
+ </View>
245
+ </>
246
+ )
247
+
248
+ if (onPress) {
249
+ return (
250
+ <Pressable
251
+ style={({ pressed }) => [containerStyle, pressed ? styles.pressed : null, style]}
252
+ accessibilityRole="button"
253
+ accessibilityLabel={accessibilityLabel ?? title}
254
+ onPress={onPress}
255
+ >
256
+ {content}
257
+ </Pressable>
258
+ )
259
+ }
260
+
261
+ return (
262
+ <View
263
+ style={[containerStyle, style]}
264
+ accessibilityLabel={accessibilityLabel}
265
+ >
266
+ {content}
267
+ </View>
268
+ )
269
+ }
270
+
271
+ // ---------------------------------------------------------------------------
272
+ // Tokens / static styles
273
+ // ---------------------------------------------------------------------------
274
+
275
+ // Figma footer backdrop-blur token (`blur/minimal`). The footer uses a
276
+ // *progressive* blur, so this maps the token to the intensity at the BOTTOM of
277
+ // the ramp (the strongest point); the upper part fades to fully clear. Kept
278
+ // intentionally small to match the design's subtle "minimal" blur.
279
+ const BLUR_INTENSITY_FACTOR = 1.0
280
+
281
+ // Special badge ("frosted" pill) — values are literals in the Figma node
282
+ // (no dedicated tokens): bg rgba(255,245,229,0.15), 5px backdrop blur.
283
+ const SPECIAL_BADGE_BG = 'rgba(255,245,229,0.15)'
284
+ const SPECIAL_BADGE_INTENSITY = 17 // ~5px CSS blur / ~2 native blurAmount
285
+
286
+ interface ResolvedTokens {
287
+ radius: number
288
+ blurIntensity: number
289
+ header: ViewStyle
290
+ footer: ViewStyle
291
+ textWrap: ViewStyle
292
+ title: TextStyle
293
+ subtitle: TextStyle
294
+ specialBadgeText: TextStyle
295
+ }
296
+
297
+ function asNum(raw: unknown, fallback: number): number {
298
+ const n = typeof raw === 'number' ? raw : parseFloat(raw as string)
299
+ return Number.isFinite(n) ? n : fallback
300
+ }
301
+
302
+ function asStr(raw: unknown, fallback: string): string {
303
+ return raw != null ? String(raw) : fallback
304
+ }
305
+
306
+ function resolveTokens(modes: Modes): ResolvedTokens {
307
+ // NOTE: token names are passed as string literals DIRECTLY to
308
+ // getVariableByName so the `extract-component-tokens` script can statically
309
+ // collect them for the generated docs. Do not refactor these into a helper
310
+ // that receives the name as a variable.
311
+ const radius = asNum(getVariableByName('productMerchandisingcard/radius', modes), 12)
312
+ const headerPadH = asNum(getVariableByName('productMerchandisingcard/header/padding/horizontal', modes), 12)
313
+ const headerPadV = asNum(getVariableByName('productMerchandisingcard/header/padding/vertical', modes), 12)
314
+ const footerGap = asNum(getVariableByName('productMerchandisingcard/footer/gap', modes), 8)
315
+ const footerPadH = asNum(getVariableByName('productMerchandisingcard/footer/padding/horizontal', modes), 16)
316
+ const footerPadV = asNum(getVariableByName('productMerchandisingcard/footer/padding/vertical', modes), 16)
317
+ const textGap = asNum(getVariableByName('productMerchandisingcard/footer/text/gap', modes), 2)
318
+ const blurRadius = asNum(getVariableByName('blur/minimal', modes), 29)
319
+
320
+ const titleColor = asStr(getVariableByName('productMerchandisingcard/footer/title/font/color', modes), '#ffffff')
321
+ const titleSize = asNum(getVariableByName('productMerchandisingcard/footer/title/fontsize', modes), 14)
322
+ const titleFamily = asStr(getVariableByName('productMerchandisingcard/footer/title/fontfamily', modes), 'JioType Var')
323
+ const titleWeight = asStr(getVariableByName('productMerchandisingcard/footer/title/fontweight', modes), '700')
324
+
325
+ const subtitleColor = asStr(getVariableByName('productMerchandisingcard/footer/subtitle/font/color', modes), '#c5bcb5')
326
+ const subtitleSize = asNum(getVariableByName('productMerchandisingcard/footer/subtitle/fontsize', modes), 12)
327
+ const subtitleFamily = asStr(getVariableByName('productMerchandisingcard/footer/subtitle/fontfamily', modes), 'JioType Var')
328
+ const subtitleWeight = asStr(getVariableByName('productMerchandisingcard/footer/subtitle/fontweight', modes), '400')
329
+
330
+ const sbSize = asNum(getVariableByName('productMerchandisingcard/specialbadge/text/fontsize', modes), 12)
331
+ const sbFamily = asStr(getVariableByName('productMerchandisingcard/specialbadge/text/fontfamily', modes), 'JioType Var')
332
+ const sbWeight = asStr(getVariableByName('productMerchandisingcard/specialbadge/text/fontweight', modes), '500')
333
+
334
+ return {
335
+ radius,
336
+ blurIntensity: Math.max(0, Math.min(100, Math.round(blurRadius * BLUR_INTENSITY_FACTOR))),
337
+ header: {
338
+ flexDirection: 'row',
339
+ alignItems: 'flex-start',
340
+ justifyContent: 'space-between',
341
+ paddingHorizontal: headerPadH,
342
+ paddingVertical: headerPadV,
343
+ zIndex: 1,
344
+ },
345
+ footer: {
346
+ paddingHorizontal: footerPadH,
347
+ paddingVertical: footerPadV,
348
+ gap: footerGap,
349
+ overflow: 'hidden',
350
+ zIndex: 2,
351
+ },
352
+ textWrap: {
353
+ flex: 1,
354
+ gap: textGap,
355
+ justifyContent: 'center',
356
+ },
357
+ title: {
358
+ color: titleColor,
359
+ fontSize: titleSize,
360
+ fontFamily: titleFamily,
361
+ fontWeight: titleWeight as TextStyle['fontWeight'],
362
+ lineHeight: Math.round(titleSize * 1.2),
363
+ includeFontPadding: false as any,
364
+ },
365
+ subtitle: {
366
+ color: subtitleColor,
367
+ fontSize: subtitleSize,
368
+ fontFamily: subtitleFamily,
369
+ fontWeight: subtitleWeight as TextStyle['fontWeight'],
370
+ lineHeight: Math.round(subtitleSize * 1.2),
371
+ includeFontPadding: false as any,
372
+ },
373
+ specialBadgeText: {
374
+ color: '#ffffff',
375
+ fontSize: sbSize,
376
+ fontFamily: sbFamily,
377
+ fontWeight: sbWeight as TextStyle['fontWeight'],
378
+ lineHeight: Math.round(sbSize * 1.2),
379
+ includeFontPadding: false as any,
380
+ },
381
+ }
382
+ }
383
+
384
+ const styles = StyleSheet.create({
385
+ avatarContainer: {
386
+ flexShrink: 1,
387
+ justifyContent: 'center',
388
+ },
389
+ footerRow: {
390
+ flexDirection: 'row',
391
+ alignItems: 'center',
392
+ justifyContent: 'space-between',
393
+ gap: 8,
394
+ },
395
+ scrim: {
396
+ // The footer node sits at 90% opacity in Figma; applying it to the
397
+ // scrim (not the content) keeps the title/CTA crisp while preserving
398
+ // the intended fade strength.
399
+ opacity: 0.9,
400
+ },
401
+ specialBadge: {
402
+ flexDirection: 'row',
403
+ alignItems: 'center',
404
+ gap: 4,
405
+ paddingHorizontal: 6,
406
+ paddingVertical: 2,
407
+ borderRadius: 4,
408
+ overflow: 'hidden',
409
+ alignSelf: 'flex-start',
410
+ },
411
+ specialBadgeFill: {
412
+ borderRadius: 4,
413
+ },
414
+ specialBadgeIcon: {
415
+ justifyContent: 'center',
416
+ alignItems: 'center',
417
+ },
418
+ pressed: {
419
+ opacity: 0.92,
420
+ },
421
+ })
422
+
423
+ export default ProductMerchandisingCard
@@ -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 */