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.
- package/CHANGELOG.md +37 -0
- package/lib/commonjs/components/AmountInput/AmountInput.js +8 -5
- package/lib/commonjs/components/AreaLineChart/AreaLineChart.js +1 -1
- package/lib/commonjs/components/Balance/Balance.js +17 -12
- package/lib/commonjs/components/BenefitCard/BenefitCard.js +231 -0
- package/lib/commonjs/components/Card/Card.js +2 -1
- package/lib/commonjs/components/CardFeedback/CardFeedback.js +2 -1
- package/lib/commonjs/components/CcCard/CcCard.js +470 -0
- package/lib/commonjs/components/Checkbox/Checkbox.js +6 -4
- package/lib/commonjs/components/CheckboxItem/CheckboxItem.js +4 -3
- package/lib/commonjs/components/CompareTable/CompareTable.js +372 -0
- package/lib/commonjs/components/ComparisonBar/ComparisonBar.js +266 -0
- package/lib/commonjs/components/Drawer/Drawer.js +13 -4
- package/lib/commonjs/components/DropdownInput/DropdownInput.js +36 -4
- package/lib/commonjs/components/FormField/FormField.js +4 -3
- package/lib/commonjs/components/FullscreenModal/FullscreenModal.js +62 -2
- package/lib/commonjs/components/Image/Image.js +11 -5
- package/lib/commonjs/components/InputSearch/InputSearch.js +6 -4
- package/lib/commonjs/components/LottiePlayer/loadNativeLottieView.js +8 -13
- package/lib/commonjs/components/NoteInput/NoteInput.js +6 -5
- package/lib/commonjs/components/Overlay/Overlay.js +92 -0
- package/lib/commonjs/components/PdpCcCard/PdpCcCard.js +273 -0
- package/lib/commonjs/components/PlanComparisonCard/PlanComparisonCard.js +2 -1
- package/lib/commonjs/components/ProductMerchandisingCard/GlassFill.js +263 -0
- package/lib/commonjs/components/ProductMerchandisingCard/GlassFill.web.js +116 -0
- package/lib/commonjs/components/ProductMerchandisingCard/ProductMerchandisingCard.js +353 -0
- package/lib/commonjs/components/ProjectionMarker/ProjectionMarker.js +161 -0
- package/lib/commonjs/components/Radio/Radio.js +5 -5
- package/lib/commonjs/components/Slider/Slider.js +473 -0
- package/lib/commonjs/components/TextInput/TextInput.js +15 -9
- package/lib/commonjs/components/TextSegment/TextSegment.js +118 -0
- package/lib/commonjs/components/docs/modeControls.js +116 -0
- package/lib/commonjs/components/index.js +70 -0
- package/lib/commonjs/design-tokens/Coin Variables-variables-full.json +1 -1
- package/lib/commonjs/design-tokens/JFSThemeProvider.js +1 -1
- package/lib/commonjs/design-tokens/figma-modes.generated.js +420 -0
- package/lib/commonjs/design-tokens/index.js +11 -0
- package/lib/commonjs/icons/registry.js +1 -1
- package/lib/commonjs/utils/react-utils.js +22 -0
- package/lib/module/components/Accordion/Accordion.js +1 -2
- package/lib/module/components/AmountInput/AmountInput.js +6 -4
- package/lib/module/components/AreaLineChart/AreaLineChart.js +1 -1
- package/lib/module/components/Balance/Balance.js +18 -13
- package/lib/module/components/BenefitCard/BenefitCard.js +225 -0
- package/lib/module/components/Card/Card.js +1 -2
- package/lib/module/components/CardFeedback/CardFeedback.js +1 -2
- package/lib/module/components/CcCard/CcCard.js +464 -0
- package/lib/module/components/Checkbox/Checkbox.js +6 -6
- package/lib/module/components/CheckboxItem/CheckboxItem.js +5 -4
- package/lib/module/components/CompareTable/CompareTable.js +367 -0
- package/lib/module/components/ComparisonBar/ComparisonBar.js +260 -0
- package/lib/module/components/Drawer/Drawer.js +12 -4
- package/lib/module/components/DropdownInput/DropdownInput.js +37 -5
- package/lib/module/components/FormField/FormField.js +5 -4
- package/lib/module/components/FullscreenModal/FullscreenModal.js +64 -5
- package/lib/module/components/Image/Image.js +11 -5
- package/lib/module/components/InputSearch/InputSearch.js +6 -4
- package/lib/module/components/InstitutionBadge/InstitutionBadge.js +1 -2
- package/lib/module/components/LottiePlayer/loadNativeLottieView.js +8 -13
- package/lib/module/components/MoneyValue/MoneyValue.js +1 -2
- package/lib/module/components/NoteInput/NoteInput.js +7 -6
- package/lib/module/components/OTP/OTP.js +1 -2
- package/lib/module/components/Overlay/Overlay.js +87 -0
- package/lib/module/components/PdpCcCard/PdpCcCard.js +267 -0
- package/lib/module/components/PlanComparisonCard/PlanComparisonCard.js +1 -2
- package/lib/module/components/PoweredByLabel/PoweredByLabel.js +1 -2
- package/lib/module/components/ProductMerchandisingCard/GlassFill.js +257 -0
- package/lib/module/components/ProductMerchandisingCard/GlassFill.web.js +111 -0
- package/lib/module/components/ProductMerchandisingCard/ProductMerchandisingCard.js +347 -0
- package/lib/module/components/ProjectionMarker/ProjectionMarker.js +156 -0
- package/lib/module/components/Radio/Radio.js +5 -4
- package/lib/module/components/RechargeCard/RechargeCard.js +1 -2
- package/lib/module/components/Section/Section.js +1 -2
- package/lib/module/components/Slider/Slider.js +468 -0
- package/lib/module/components/TextInput/TextInput.js +16 -12
- package/lib/module/components/TextSegment/TextSegment.js +113 -0
- package/lib/module/components/UpiHandle/UpiHandle.js +1 -2
- package/lib/module/components/docs/modeControls.js +111 -0
- package/lib/module/components/index.js +10 -0
- package/lib/module/design-tokens/Coin Variables-variables-full.json +1 -1
- package/lib/module/design-tokens/JFSThemeProvider.js +1 -1
- package/lib/module/design-tokens/figma-modes.generated.js +416 -0
- package/lib/module/design-tokens/index.js +2 -1
- package/lib/module/icons/registry.js +1 -1
- package/lib/module/utils/react-utils.js +21 -1
- package/lib/typescript/src/components/Accordion/Accordion.d.ts +2 -1
- package/lib/typescript/src/components/AccordionCheckbox/AccordionCheckbox.d.ts +2 -1
- package/lib/typescript/src/components/AccountCard/AccountCard.d.ts +2 -1
- package/lib/typescript/src/components/ActionFooter/ActionFooter.d.ts +2 -1
- package/lib/typescript/src/components/ActionTile/ActionTile.d.ts +2 -1
- package/lib/typescript/src/components/AllocationComparisonChart/AllocationComparisonChart.d.ts +2 -1
- package/lib/typescript/src/components/AmountInput/AmountInput.d.ts +5 -3
- package/lib/typescript/src/components/AppBar/AppBar.d.ts +2 -1
- package/lib/typescript/src/components/AreaLineChart/AreaLineChart.d.ts +3 -2
- package/lib/typescript/src/components/Attached/Attached.d.ts +2 -1
- package/lib/typescript/src/components/Avatar/Avatar.d.ts +2 -1
- package/lib/typescript/src/components/AvatarGroup/AvatarGroup.d.ts +2 -1
- package/lib/typescript/src/components/Badge/Badge.d.ts +2 -1
- package/lib/typescript/src/components/Balance/Balance.d.ts +2 -1
- package/lib/typescript/src/components/BenefitCard/BenefitCard.d.ts +93 -0
- package/lib/typescript/src/components/BottomNav/BottomNav.d.ts +2 -1
- package/lib/typescript/src/components/BottomNavItem/BottomNavItem.d.ts +2 -1
- package/lib/typescript/src/components/BrandChip/BrandChip.d.ts +2 -1
- package/lib/typescript/src/components/BubbleChart/BubbleChart.d.ts +2 -1
- package/lib/typescript/src/components/Button/Button.d.ts +2 -1
- package/lib/typescript/src/components/ButtonGroup/ButtonGroup.d.ts +2 -1
- package/lib/typescript/src/components/Card/Card.d.ts +3 -2
- package/lib/typescript/src/components/CardAdvisory/CardAdvisory.d.ts +2 -1
- package/lib/typescript/src/components/CardBankAccount/CardBankAccount.d.ts +2 -1
- package/lib/typescript/src/components/CardCTA/CardCTA.d.ts +2 -1
- package/lib/typescript/src/components/CardFeedback/CardFeedback.d.ts +7 -6
- package/lib/typescript/src/components/CardFinancialCondition/CardFinancialCondition.d.ts +2 -1
- package/lib/typescript/src/components/CardInsight/CardInsight.d.ts +2 -1
- package/lib/typescript/src/components/CardProviderInfo/CardProviderInfo.d.ts +2 -1
- package/lib/typescript/src/components/Carousel/Carousel.d.ts +4 -3
- package/lib/typescript/src/components/CcCard/CcCard.d.ts +137 -0
- package/lib/typescript/src/components/Checkbox/Checkbox.d.ts +5 -3
- package/lib/typescript/src/components/CheckboxGroup/CheckboxGroup.d.ts +2 -1
- package/lib/typescript/src/components/CheckboxItem/CheckboxItem.d.ts +4 -3
- package/lib/typescript/src/components/ChipGroup/ChipGroup.d.ts +2 -1
- package/lib/typescript/src/components/ChipSelect/ChipSelect.d.ts +2 -1
- package/lib/typescript/src/components/CircularProgressBar/CircularProgressBar.d.ts +2 -1
- package/lib/typescript/src/components/CircularProgressBarDoted/CircularProgressBarDoted.d.ts +2 -1
- package/lib/typescript/src/components/CircularRating/CircularRating.d.ts +2 -1
- package/lib/typescript/src/components/ClusterBubble/ClusterBubble.d.ts +2 -1
- package/lib/typescript/src/components/CompareTable/CompareTable.d.ts +88 -0
- package/lib/typescript/src/components/ComparisonBar/ComparisonBar.d.ts +118 -0
- package/lib/typescript/src/components/CoverageBarComparison/CoverageBarComparison.d.ts +3 -2
- package/lib/typescript/src/components/CoverageRing/CoverageRing.d.ts +2 -1
- package/lib/typescript/src/components/DebitCard/DebitCard.d.ts +2 -1
- package/lib/typescript/src/components/Disclaimer/Disclaimer.d.ts +2 -1
- package/lib/typescript/src/components/Divider/Divider.d.ts +2 -1
- package/lib/typescript/src/components/DonutChart/DonutChart.d.ts +4 -3
- package/lib/typescript/src/components/DonutChartSummary/DonutChartSummary.d.ts +3 -2
- package/lib/typescript/src/components/Drawer/Drawer.d.ts +15 -1
- package/lib/typescript/src/components/Dropdown/Dropdown.d.ts +3 -2
- package/lib/typescript/src/components/DropdownInput/DropdownInput.d.ts +22 -2
- package/lib/typescript/src/components/EmptyState/EmptyState.d.ts +2 -1
- package/lib/typescript/src/components/ExpandableCheckbox/ExpandableCheckbox.d.ts +2 -1
- package/lib/typescript/src/components/FilterBar/FilterBar.d.ts +3 -2
- package/lib/typescript/src/components/Form/Form.d.ts +2 -1
- package/lib/typescript/src/components/FormField/FormField.d.ts +4 -3
- package/lib/typescript/src/components/FullscreenModal/FullscreenModal.d.ts +2 -1
- package/lib/typescript/src/components/Gauge/Gauge.d.ts +2 -1
- package/lib/typescript/src/components/HStack/HStack.d.ts +2 -1
- package/lib/typescript/src/components/HoldingsCard/HoldingsCard.d.ts +2 -1
- package/lib/typescript/src/components/Icon/Icon.d.ts +2 -1
- package/lib/typescript/src/components/IconButton/IconButton.d.ts +2 -1
- package/lib/typescript/src/components/IconCapsule/IconCapsule.d.ts +2 -1
- package/lib/typescript/src/components/Image/Image.d.ts +17 -1
- package/lib/typescript/src/components/InputSearch/InputSearch.d.ts +25 -3
- package/lib/typescript/src/components/InstitutionBadge/InstitutionBadge.d.ts +2 -1
- package/lib/typescript/src/components/LazyList/LazyList.d.ts +2 -1
- package/lib/typescript/src/components/LinearMeter/LinearMeter.d.ts +3 -2
- package/lib/typescript/src/components/LinearProgress/LinearProgress.d.ts +2 -1
- package/lib/typescript/src/components/ListGroup/ListGroup.d.ts +2 -1
- package/lib/typescript/src/components/ListItem/ListItem.d.ts +2 -1
- package/lib/typescript/src/components/LottieIntroBlock/LottieIntroBlock.d.ts +2 -1
- package/lib/typescript/src/components/LottiePlayer/LottiePlayer.d.ts +2 -1
- package/lib/typescript/src/components/LottiePlayer/LottiePlayer.web.d.ts +2 -1
- package/lib/typescript/src/components/MediaCard/MediaCard.d.ts +6 -5
- package/lib/typescript/src/components/MerchantProfile/MerchantProfile.d.ts +2 -1
- package/lib/typescript/src/components/MessageField/MessageField.d.ts +2 -1
- package/lib/typescript/src/components/MetricLegendItem/MetricLegendItem.d.ts +2 -1
- package/lib/typescript/src/components/MoneyValue/MoneyValue.d.ts +2 -1
- package/lib/typescript/src/components/MonthlyStatusGrid/MonthlyStatusGrid.d.ts +4 -3
- package/lib/typescript/src/components/NavArrow/NavArrow.d.ts +2 -1
- package/lib/typescript/src/components/NoteInput/NoteInput.d.ts +21 -3
- package/lib/typescript/src/components/Nudge/Nudge.d.ts +2 -1
- package/lib/typescript/src/components/Numpad/Numpad.d.ts +2 -1
- package/lib/typescript/src/components/OTP/OTP.d.ts +3 -2
- package/lib/typescript/src/components/Overlay/Overlay.d.ts +52 -0
- package/lib/typescript/src/components/PageHero/PageHero.d.ts +2 -1
- package/lib/typescript/src/components/PaymentFeedback/PaymentFeedback.d.ts +2 -1
- package/lib/typescript/src/components/PdpCcCard/PdpCcCard.d.ts +84 -0
- package/lib/typescript/src/components/PlanComparisonCard/PlanComparisonCard.d.ts +2 -1
- package/lib/typescript/src/components/Popup/Popup.d.ts +2 -1
- package/lib/typescript/src/components/PortfolioHero/PortfolioHero.d.ts +2 -1
- package/lib/typescript/src/components/PoweredByLabel/PoweredByLabel.d.ts +2 -1
- package/lib/typescript/src/components/ProductLabel/ProductLabel.d.ts +2 -1
- package/lib/typescript/src/components/ProductMerchandisingCard/GlassFill.d.ts +56 -0
- package/lib/typescript/src/components/ProductMerchandisingCard/GlassFill.web.d.ts +27 -0
- package/lib/typescript/src/components/ProductMerchandisingCard/ProductMerchandisingCard.d.ts +81 -0
- package/lib/typescript/src/components/ProductOverview/ProductOverview.d.ts +2 -1
- package/lib/typescript/src/components/ProgressBadge/ProgressBadge.d.ts +2 -1
- package/lib/typescript/src/components/ProjectionMarker/ProjectionMarker.d.ts +82 -0
- package/lib/typescript/src/components/Radio/Radio.d.ts +5 -3
- package/lib/typescript/src/components/RadioButton/RadioButton.d.ts +2 -2
- package/lib/typescript/src/components/RangeTrack/RangeTrack.d.ts +3 -2
- package/lib/typescript/src/components/RechargeCard/RechargeCard.d.ts +2 -1
- package/lib/typescript/src/components/SavingsGoalSummary/SavingsGoalSummary.d.ts +2 -1
- package/lib/typescript/src/components/Screen/Screen.d.ts +2 -1
- package/lib/typescript/src/components/Section/Section.d.ts +3 -2
- package/lib/typescript/src/components/SegmentedControl/SegmentedControl.d.ts +2 -1
- package/lib/typescript/src/components/SegmentedTrack/SegmentedTrack.d.ts +4 -3
- package/lib/typescript/src/components/Slider/Slider.d.ts +99 -0
- package/lib/typescript/src/components/Slot/Slot.d.ts +2 -1
- package/lib/typescript/src/components/Spinner/Spinner.d.ts +2 -1
- package/lib/typescript/src/components/StatGroup/StatGroup.d.ts +2 -1
- package/lib/typescript/src/components/StatItem/StatItem.d.ts +2 -1
- package/lib/typescript/src/components/StatusHero/StatusHero.d.ts +2 -1
- package/lib/typescript/src/components/Stepper/Step.d.ts +2 -1
- package/lib/typescript/src/components/Stepper/StepLabel.d.ts +2 -1
- package/lib/typescript/src/components/Stepper/Stepper.d.ts +2 -1
- package/lib/typescript/src/components/StrengthIndicator/StrengthIndicator.d.ts +2 -1
- package/lib/typescript/src/components/SuggestiveSearch/SuggestiveSearch.d.ts +2 -1
- package/lib/typescript/src/components/SummaryTile/SummaryTile.d.ts +2 -1
- package/lib/typescript/src/components/SupportText/SupportText.d.ts +2 -1
- package/lib/typescript/src/components/SupportText/SupportTextIcon.d.ts +2 -1
- package/lib/typescript/src/components/SwappableAmount/SwappableAmount.d.ts +2 -1
- package/lib/typescript/src/components/Tabs/TabItem.d.ts +2 -1
- package/lib/typescript/src/components/Tabs/Tabs.d.ts +2 -1
- package/lib/typescript/src/components/TestimonialsCard/TestimonialsCard.d.ts +2 -1
- package/lib/typescript/src/components/Text/Text.d.ts +2 -1
- package/lib/typescript/src/components/TextInput/TextInput.d.ts +12 -31
- package/lib/typescript/src/components/TextSegment/TextSegment.d.ts +100 -0
- package/lib/typescript/src/components/ThreadHero/ThreadHero.d.ts +2 -1
- package/lib/typescript/src/components/Title/Title.d.ts +2 -1
- package/lib/typescript/src/components/Toast/Toast.d.ts +2 -1
- package/lib/typescript/src/components/Toast/ToastProvider.d.ts +2 -1
- package/lib/typescript/src/components/Toast/useToast.d.ts +3 -2
- package/lib/typescript/src/components/Toggle/Toggle.d.ts +2 -1
- package/lib/typescript/src/components/Tooltip/Tooltip.d.ts +2 -1
- package/lib/typescript/src/components/TransactionBubble/TransactionBubble.d.ts +2 -1
- package/lib/typescript/src/components/TransactionDetails/TransactionDetails.d.ts +3 -2
- package/lib/typescript/src/components/TransactionStatus/TransactionStatus.d.ts +2 -1
- package/lib/typescript/src/components/UpiHandle/UpiHandle.d.ts +2 -1
- package/lib/typescript/src/components/VStack/VStack.d.ts +2 -1
- package/lib/typescript/src/components/docs/modeControls.d.ts +28 -0
- package/lib/typescript/src/components/index.d.ts +11 -1
- package/lib/typescript/src/design-tokens/JFSThemeProvider.d.ts +4 -3
- package/lib/typescript/src/design-tokens/figma-modes.generated.d.ts +284 -0
- package/lib/typescript/src/design-tokens/index.d.ts +1 -0
- package/lib/typescript/src/icons/registry.d.ts +1 -1
- package/lib/typescript/src/skeleton/Skeleton.d.ts +2 -1
- package/lib/typescript/src/utils/react-utils.d.ts +12 -1
- package/package.json +4 -2
- package/src/components/Accordion/Accordion.tsx +2 -1
- package/src/components/AccordionCheckbox/AccordionCheckbox.tsx +2 -1
- package/src/components/AccountCard/AccountCard.tsx +2 -1
- package/src/components/ActionFooter/ActionFooter.tsx +2 -1
- package/src/components/ActionTile/ActionTile.tsx +2 -1
- package/src/components/AllocationComparisonChart/AllocationComparisonChart.tsx +2 -1
- package/src/components/AmountInput/AmountInput.tsx +9 -6
- package/src/components/AppBar/AppBar.tsx +2 -1
- package/src/components/AreaLineChart/AreaLineChart.tsx +8 -7
- package/src/components/Attached/Attached.tsx +2 -1
- package/src/components/Avatar/Avatar.tsx +3 -2
- package/src/components/AvatarGroup/AvatarGroup.tsx +2 -1
- package/src/components/Badge/Badge.tsx +2 -1
- package/src/components/Balance/Balance.tsx +18 -12
- package/src/components/BenefitCard/BenefitCard.tsx +309 -0
- package/src/components/BottomNav/BottomNav.tsx +2 -1
- package/src/components/BottomNavItem/BottomNavItem.tsx +3 -2
- package/src/components/BrandChip/BrandChip.tsx +3 -2
- package/src/components/BubbleChart/BubbleChart.tsx +2 -1
- package/src/components/Button/Button.tsx +3 -2
- package/src/components/ButtonGroup/ButtonGroup.tsx +2 -1
- package/src/components/Card/Card.tsx +4 -3
- package/src/components/CardAdvisory/CardAdvisory.tsx +3 -2
- package/src/components/CardBankAccount/CardBankAccount.tsx +2 -1
- package/src/components/CardCTA/CardCTA.tsx +3 -2
- package/src/components/CardFeedback/CardFeedback.tsx +11 -10
- package/src/components/CardFinancialCondition/CardFinancialCondition.tsx +3 -2
- package/src/components/CardInsight/CardInsight.tsx +2 -1
- package/src/components/CardProviderInfo/CardProviderInfo.tsx +2 -1
- package/src/components/Carousel/Carousel.tsx +5 -4
- package/src/components/CcCard/CcCard.tsx +598 -0
- package/src/components/Checkbox/Checkbox.tsx +7 -5
- package/src/components/CheckboxGroup/CheckboxGroup.tsx +2 -1
- package/src/components/CheckboxItem/CheckboxItem.tsx +7 -5
- package/src/components/ChipGroup/ChipGroup.tsx +2 -1
- package/src/components/ChipSelect/ChipSelect.tsx +2 -1
- package/src/components/CircularProgressBar/CircularProgressBar.tsx +2 -1
- package/src/components/CircularProgressBarDoted/CircularProgressBarDoted.tsx +2 -1
- package/src/components/CircularRating/CircularRating.tsx +3 -2
- package/src/components/ClusterBubble/ClusterBubble.tsx +2 -1
- package/src/components/CompareTable/CompareTable.tsx +477 -0
- package/src/components/ComparisonBar/ComparisonBar.tsx +356 -0
- package/src/components/CoverageBarComparison/CoverageBarComparison.tsx +3 -2
- package/src/components/CoverageRing/CoverageRing.tsx +2 -1
- package/src/components/DebitCard/DebitCard.tsx +2 -1
- package/src/components/Disclaimer/Disclaimer.tsx +2 -1
- package/src/components/Divider/Divider.tsx +2 -1
- package/src/components/DonutChart/DonutChart.tsx +6 -5
- package/src/components/DonutChartSummary/DonutChartSummary.tsx +3 -2
- package/src/components/Drawer/Drawer.tsx +21 -1
- package/src/components/Dropdown/Dropdown.tsx +4 -3
- package/src/components/DropdownInput/DropdownInput.tsx +60 -7
- package/src/components/EmptyState/EmptyState.tsx +2 -1
- package/src/components/ExpandableCheckbox/ExpandableCheckbox.tsx +2 -1
- package/src/components/FilterBar/FilterBar.tsx +3 -2
- package/src/components/Form/Form.tsx +2 -1
- package/src/components/FormField/FormField.tsx +8 -6
- package/src/components/FullscreenModal/FullscreenModal.tsx +68 -10
- package/src/components/Gauge/Gauge.tsx +2 -1
- package/src/components/HStack/HStack.tsx +2 -1
- package/src/components/HoldingsCard/HoldingsCard.tsx +2 -1
- package/src/components/Icon/Icon.tsx +3 -2
- package/src/components/IconButton/IconButton.tsx +3 -2
- package/src/components/IconCapsule/IconCapsule.tsx +3 -2
- package/src/components/Image/Image.tsx +29 -5
- package/src/components/InputSearch/InputSearch.tsx +11 -7
- package/src/components/InstitutionBadge/InstitutionBadge.tsx +3 -2
- package/src/components/LazyList/LazyList.tsx +2 -1
- package/src/components/LinearMeter/LinearMeter.tsx +3 -2
- package/src/components/LinearProgress/LinearProgress.tsx +2 -1
- package/src/components/ListGroup/ListGroup.tsx +2 -1
- package/src/components/ListItem/ListItem.tsx +3 -2
- package/src/components/LottieIntroBlock/LottieIntroBlock.tsx +2 -1
- package/src/components/LottiePlayer/LottiePlayer.tsx +3 -2
- package/src/components/LottiePlayer/LottiePlayer.web.tsx +3 -2
- package/src/components/LottiePlayer/loadNativeLottieView.tsx +9 -13
- package/src/components/MediaCard/MediaCard.tsx +7 -6
- package/src/components/MerchantProfile/MerchantProfile.tsx +2 -1
- package/src/components/MessageField/MessageField.tsx +3 -2
- package/src/components/MetricLegendItem/MetricLegendItem.tsx +2 -1
- package/src/components/MoneyValue/MoneyValue.tsx +2 -1
- package/src/components/MonthlyStatusGrid/MonthlyStatusGrid.tsx +5 -4
- package/src/components/NavArrow/NavArrow.tsx +3 -2
- package/src/components/NoteInput/NoteInput.tsx +10 -7
- package/src/components/Nudge/Nudge.tsx +3 -2
- package/src/components/Numpad/Numpad.tsx +2 -1
- package/src/components/OTP/OTP.tsx +3 -2
- package/src/components/Overlay/Overlay.tsx +114 -0
- package/src/components/PageHero/PageHero.tsx +2 -1
- package/src/components/PaymentFeedback/PaymentFeedback.tsx +2 -1
- package/src/components/PdpCcCard/PdpCcCard.tsx +356 -0
- package/src/components/PlanComparisonCard/PlanComparisonCard.tsx +2 -1
- package/src/components/Popup/Popup.tsx +2 -1
- package/src/components/PortfolioHero/PortfolioHero.tsx +2 -1
- package/src/components/PoweredByLabel/PoweredByLabel.tsx +2 -1
- package/src/components/ProductLabel/ProductLabel.tsx +2 -1
- package/src/components/ProductMerchandisingCard/GlassFill.tsx +276 -0
- package/src/components/ProductMerchandisingCard/GlassFill.web.tsx +127 -0
- package/src/components/ProductMerchandisingCard/ProductMerchandisingCard.tsx +423 -0
- package/src/components/ProductOverview/ProductOverview.tsx +2 -1
- package/src/components/ProgressBadge/ProgressBadge.tsx +2 -1
- package/src/components/ProjectionMarker/ProjectionMarker.tsx +277 -0
- package/src/components/Radio/Radio.tsx +7 -5
- package/src/components/RangeTrack/RangeTrack.tsx +3 -2
- package/src/components/RechargeCard/RechargeCard.tsx +2 -1
- package/src/components/SavingsGoalSummary/SavingsGoalSummary.tsx +2 -1
- package/src/components/Screen/Screen.tsx +2 -1
- package/src/components/Section/Section.tsx +6 -5
- package/src/components/SegmentedControl/SegmentedControl.tsx +3 -2
- package/src/components/SegmentedTrack/SegmentedTrack.tsx +5 -4
- package/src/components/Slider/Slider.tsx +628 -0
- package/src/components/Slot/Slot.tsx +2 -1
- package/src/components/Spinner/Spinner.tsx +2 -1
- package/src/components/StatGroup/StatGroup.tsx +3 -2
- package/src/components/StatItem/StatItem.tsx +2 -1
- package/src/components/StatusHero/StatusHero.tsx +2 -1
- package/src/components/Stepper/Step.tsx +2 -1
- package/src/components/Stepper/StepLabel.tsx +2 -1
- package/src/components/Stepper/Stepper.tsx +2 -1
- package/src/components/StrengthIndicator/StrengthIndicator.tsx +2 -1
- package/src/components/SuggestiveSearch/SuggestiveSearch.tsx +4 -3
- package/src/components/SummaryTile/SummaryTile.tsx +2 -1
- package/src/components/SupportText/SupportText.tsx +2 -1
- package/src/components/SupportText/SupportTextIcon.tsx +2 -1
- package/src/components/SwappableAmount/SwappableAmount.tsx +2 -1
- package/src/components/Tabs/TabItem.tsx +2 -1
- package/src/components/Tabs/Tabs.tsx +2 -1
- package/src/components/TestimonialsCard/TestimonialsCard.tsx +2 -1
- package/src/components/Text/Text.tsx +2 -1
- package/src/components/TextInput/TextInput.tsx +18 -13
- package/src/components/TextSegment/TextSegment.tsx +166 -0
- package/src/components/ThreadHero/ThreadHero.tsx +2 -1
- package/src/components/Title/Title.tsx +2 -1
- package/src/components/Toast/Toast.tsx +2 -1
- package/src/components/Toast/ToastProvider.tsx +2 -1
- package/src/components/Toast/useToast.ts +3 -2
- package/src/components/Toggle/Toggle.tsx +2 -1
- package/src/components/Tooltip/Tooltip.tsx +3 -2
- package/src/components/TransactionBubble/TransactionBubble.tsx +2 -1
- package/src/components/TransactionDetails/TransactionDetails.tsx +3 -2
- package/src/components/TransactionStatus/TransactionStatus.tsx +3 -2
- package/src/components/UpiHandle/UpiHandle.tsx +3 -2
- package/src/components/VStack/VStack.tsx +2 -1
- package/src/components/docs/modeControls.tsx +122 -0
- package/src/components/index.ts +11 -1
- package/src/design-tokens/Coin Variables-variables-full.json +1 -1
- package/src/design-tokens/JFSThemeProvider.tsx +4 -3
- package/src/design-tokens/figma-modes.generated.ts +425 -0
- package/src/design-tokens/index.ts +1 -0
- package/src/icons/registry.ts +1 -1
- package/src/skeleton/Skeleton.tsx +2 -1
- package/src/utils/react-utils.ts +26 -2
- package/lib/typescript/scripts/extract-component-tokens.d.ts +0 -9
- package/lib/typescript/scripts/generate-component-docs.d.ts +0 -9
- package/lib/typescript/scripts/generate-icon-registry.d.ts +0 -3
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
} from 'react-native'
|
|
9
9
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
10
10
|
import { EMPTY_MODES } from '../../utils/react-utils'
|
|
11
|
+
import type { Modes } from '../../design-tokens'
|
|
11
12
|
|
|
12
13
|
export type StatItemLabelPosition = 'Top' | 'Bottom'
|
|
13
14
|
|
|
@@ -25,7 +26,7 @@ export type StatItemProps = {
|
|
|
25
26
|
*/
|
|
26
27
|
labelPosition?: StatItemLabelPosition
|
|
27
28
|
/** Design token modes for theming (e.g. `{ 'Color Mode': 'Light' }`). */
|
|
28
|
-
modes?:
|
|
29
|
+
modes?: Modes
|
|
29
30
|
/** Override container styles. */
|
|
30
31
|
style?: StyleProp<ViewStyle>
|
|
31
32
|
/** Override the label text styles. */
|
|
@@ -5,6 +5,7 @@ import { useTokens } from '../../design-tokens/JFSThemeProvider'
|
|
|
5
5
|
import IconCapsule from '../IconCapsule/IconCapsule'
|
|
6
6
|
import MoneyValue from '../MoneyValue/MoneyValue'
|
|
7
7
|
import { EMPTY_MODES } from '../../utils/react-utils'
|
|
8
|
+
import type { Modes } from '../../design-tokens'
|
|
8
9
|
|
|
9
10
|
export type StatusHeroProps = {
|
|
10
11
|
/**
|
|
@@ -26,7 +27,7 @@ export type StatusHeroProps = {
|
|
|
26
27
|
/** Currency symbol or ISO code for the default MoneyValue */
|
|
27
28
|
currency?: string
|
|
28
29
|
/** Mode configuration for design tokens */
|
|
29
|
-
modes?:
|
|
30
|
+
modes?: Modes
|
|
30
31
|
style?: ViewStyle
|
|
31
32
|
}
|
|
32
33
|
|
|
@@ -4,12 +4,13 @@ import Svg, { Path } from 'react-native-svg'
|
|
|
4
4
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
5
5
|
import { StepLabel } from './StepLabel'
|
|
6
6
|
import { EMPTY_MODES, cloneChildrenWithModes } from '../../utils/react-utils'
|
|
7
|
+
import type { Modes } from '../../design-tokens'
|
|
7
8
|
|
|
8
9
|
export type StepStatus = 'number' | 'complete' | 'error' | 'warning'
|
|
9
10
|
|
|
10
11
|
export type StepProps = {
|
|
11
12
|
children?: React.ReactNode
|
|
12
|
-
modes?:
|
|
13
|
+
modes?: Modes
|
|
13
14
|
style?: ViewStyle
|
|
14
15
|
// Injected by Stepper, or provided manually
|
|
15
16
|
index?: number
|
|
@@ -2,6 +2,7 @@ import React from 'react'
|
|
|
2
2
|
import { View, Text, type ViewStyle, type TextStyle } from 'react-native'
|
|
3
3
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
4
4
|
import { EMPTY_MODES } from '../../utils/react-utils'
|
|
5
|
+
import type { Modes } from '../../design-tokens'
|
|
5
6
|
|
|
6
7
|
export type StepLabelProps = {
|
|
7
8
|
title?: string
|
|
@@ -9,7 +10,7 @@ export type StepLabelProps = {
|
|
|
9
10
|
metaText?: string
|
|
10
11
|
subtitle?: boolean
|
|
11
12
|
meta?: boolean
|
|
12
|
-
modes?:
|
|
13
|
+
modes?: Modes
|
|
13
14
|
style?: ViewStyle
|
|
14
15
|
}
|
|
15
16
|
|
|
@@ -4,6 +4,7 @@ import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
|
4
4
|
import { Step } from './Step'
|
|
5
5
|
import { StepLabel } from './StepLabel'
|
|
6
6
|
import { EMPTY_MODES } from '../../utils/react-utils'
|
|
7
|
+
import type { Modes } from '../../design-tokens'
|
|
7
8
|
|
|
8
9
|
export { Step, StepLabel }
|
|
9
10
|
export type { StepProps, StepStatus } from './Step'
|
|
@@ -11,7 +12,7 @@ export type { StepLabelProps } from './StepLabel'
|
|
|
11
12
|
|
|
12
13
|
export type StepperProps = {
|
|
13
14
|
children?: React.ReactNode
|
|
14
|
-
modes?:
|
|
15
|
+
modes?: Modes
|
|
15
16
|
style?: ViewStyle
|
|
16
17
|
}
|
|
17
18
|
|
|
@@ -2,6 +2,7 @@ import React from 'react'
|
|
|
2
2
|
import { View, type StyleProp, type ViewStyle } from 'react-native'
|
|
3
3
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
4
4
|
import { EMPTY_MODES } from '../../utils/react-utils'
|
|
5
|
+
import type { Modes } from '../../design-tokens'
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
8
|
* Confidence levels supported by the indicator. Mirrors the Figma `Confidence`
|
|
@@ -40,7 +41,7 @@ export type StrengthIndicatorProps = {
|
|
|
40
41
|
*/
|
|
41
42
|
confidence?: StrengthIndicatorConfidenceValue
|
|
42
43
|
/** Design token modes for theming (e.g. `{ 'Color Mode': 'Light' }`). */
|
|
43
|
-
modes?:
|
|
44
|
+
modes?: Modes
|
|
44
45
|
/** Override container styles. */
|
|
45
46
|
style?: StyleProp<ViewStyle>
|
|
46
47
|
} & Omit<React.ComponentProps<typeof View>, 'style'>
|
|
@@ -23,6 +23,7 @@ import { EMPTY_MODES } from '../../utils/react-utils'
|
|
|
23
23
|
import SupportText from '../SupportText/SupportText'
|
|
24
24
|
import type { SupportTextStatus } from '../SupportText/SupportTextIcon'
|
|
25
25
|
import Dropdown, { DropdownItem } from '../Dropdown/Dropdown'
|
|
26
|
+
import type { Modes } from '../../design-tokens'
|
|
26
27
|
|
|
27
28
|
const IS_WEB = Platform.OS === 'web'
|
|
28
29
|
|
|
@@ -134,7 +135,7 @@ export type SuggestiveSearchProps = {
|
|
|
134
135
|
/** Replaces `supportText` when `isInvalid` is true. */
|
|
135
136
|
errorMessage?: string
|
|
136
137
|
/** Modes for design token resolution. */
|
|
137
|
-
modes?:
|
|
138
|
+
modes?: Modes
|
|
138
139
|
/** Style overrides for the outermost wrapper. */
|
|
139
140
|
style?: StyleProp<ViewStyle>
|
|
140
141
|
/** Style overrides for the input row. */
|
|
@@ -180,7 +181,7 @@ const defaultFilter = (query: string, option: SuggestiveSearchOption) =>
|
|
|
180
181
|
// Token resolution
|
|
181
182
|
// ---------------------------------------------------------------------------
|
|
182
183
|
|
|
183
|
-
function useFormFieldTokens(modes:
|
|
184
|
+
function useFormFieldTokens(modes: Modes) {
|
|
184
185
|
return useMemo(() => {
|
|
185
186
|
const labelColor =
|
|
186
187
|
(getVariableByName('formField/label/color', modes) as string) ||
|
|
@@ -261,7 +262,7 @@ function useFormFieldTokens(modes: Record<string, any>) {
|
|
|
261
262
|
}, [modes])
|
|
262
263
|
}
|
|
263
264
|
|
|
264
|
-
function useDropdownItemTextTokens(modes:
|
|
265
|
+
function useDropdownItemTextTokens(modes: Modes) {
|
|
265
266
|
return useMemo(() => {
|
|
266
267
|
const foreground =
|
|
267
268
|
(getVariableByName('dropdownItem/foreground', modes) as string) ||
|
|
@@ -15,6 +15,7 @@ import NavArrow from '../NavArrow/NavArrow'
|
|
|
15
15
|
import StrengthIndicator, {
|
|
16
16
|
type StrengthIndicatorConfidenceValue,
|
|
17
17
|
} from '../StrengthIndicator/StrengthIndicator'
|
|
18
|
+
import type { Modes } from '../../design-tokens'
|
|
18
19
|
|
|
19
20
|
export type SummaryTileProps = {
|
|
20
21
|
/** Bold heading shown at the top-left of the tile. */
|
|
@@ -50,7 +51,7 @@ export type SummaryTileProps = {
|
|
|
50
51
|
*/
|
|
51
52
|
onPress?: () => void
|
|
52
53
|
/** Design token modes for theming (e.g. `{ 'Color Mode': 'Light' }`). */
|
|
53
|
-
modes?:
|
|
54
|
+
modes?: Modes
|
|
54
55
|
/** Override container styles. */
|
|
55
56
|
style?: StyleProp<ViewStyle>
|
|
56
57
|
/** Override the title text styles. */
|
|
@@ -4,6 +4,7 @@ import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
|
4
4
|
import { useTokens } from '../../design-tokens/JFSThemeProvider';
|
|
5
5
|
import SupportTextIcon, { type SupportTextStatus } from './SupportTextIcon';
|
|
6
6
|
import { EMPTY_MODES } from '../../utils/react-utils';
|
|
7
|
+
import type { Modes } from '../../design-tokens'
|
|
7
8
|
|
|
8
9
|
export type SupportTextProps = {
|
|
9
10
|
/**
|
|
@@ -27,7 +28,7 @@ export type SupportTextProps = {
|
|
|
27
28
|
/**
|
|
28
29
|
* Modes object for design token resolution.
|
|
29
30
|
*/
|
|
30
|
-
modes?:
|
|
31
|
+
modes?: Modes;
|
|
31
32
|
|
|
32
33
|
style?: StyleProp<ViewStyle>;
|
|
33
34
|
};
|
|
@@ -3,12 +3,13 @@ import { View, type ViewStyle } from 'react-native';
|
|
|
3
3
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver';
|
|
4
4
|
import Icon from '../../icons/Icon';
|
|
5
5
|
import { EMPTY_MODES } from '../../utils/react-utils';
|
|
6
|
+
import type { Modes } from '../../design-tokens'
|
|
6
7
|
|
|
7
8
|
export type SupportTextStatus = 'Neutral' | 'Warning' | 'Error' | 'Success' | 'Loading';
|
|
8
9
|
|
|
9
10
|
export type SupportTextIconProps = {
|
|
10
11
|
status?: SupportTextStatus;
|
|
11
|
-
modes?:
|
|
12
|
+
modes?: Modes;
|
|
12
13
|
style?: ViewStyle;
|
|
13
14
|
};
|
|
14
15
|
|
|
@@ -3,6 +3,7 @@ import { View, Text, type ViewStyle, type TextStyle } from 'react-native'
|
|
|
3
3
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
4
4
|
import Button from '../Button/Button'
|
|
5
5
|
import { EMPTY_MODES } from '../../utils/react-utils'
|
|
6
|
+
import type { Modes } from '../../design-tokens'
|
|
6
7
|
|
|
7
8
|
export type SwappableAmountProps = {
|
|
8
9
|
/** Large display value (e.g. "49g"). */
|
|
@@ -18,7 +19,7 @@ export type SwappableAmountProps = {
|
|
|
18
19
|
/** Callback when the amount/swap button is pressed. */
|
|
19
20
|
onAmountPress?: () => void
|
|
20
21
|
/** Modes configuration for design token resolution. */
|
|
21
|
-
modes?:
|
|
22
|
+
modes?: Modes
|
|
22
23
|
/** Container style override. */
|
|
23
24
|
style?: ViewStyle
|
|
24
25
|
}
|
|
@@ -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 interface TabItemProps {
|
|
14
15
|
/** Label text to display */
|
|
@@ -18,7 +19,7 @@ export interface TabItemProps {
|
|
|
18
19
|
/** Callback when this tab item is pressed */
|
|
19
20
|
onPress?: () => void
|
|
20
21
|
/** Design token modes for theming */
|
|
21
|
-
modes?:
|
|
22
|
+
modes?: Modes
|
|
22
23
|
/** Override container styles */
|
|
23
24
|
style?: StyleProp<ViewStyle>
|
|
24
25
|
/** Override label text styles */
|
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
9
9
|
import TabItem from './TabItem'
|
|
10
10
|
import { EMPTY_MODES } from '../../utils/react-utils'
|
|
11
|
+
import type { Modes } from '../../design-tokens'
|
|
11
12
|
|
|
12
13
|
export interface TabsProps {
|
|
13
14
|
/**
|
|
@@ -16,7 +17,7 @@ export interface TabsProps {
|
|
|
16
17
|
*/
|
|
17
18
|
children: React.ReactNode
|
|
18
19
|
/** Design token modes for theming */
|
|
19
|
-
modes?:
|
|
20
|
+
modes?: Modes
|
|
20
21
|
/**
|
|
21
22
|
* When true, the tabs row scrolls horizontally (useful for many items).
|
|
22
23
|
* @default false
|
|
@@ -9,6 +9,7 @@ import {
|
|
|
9
9
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
10
10
|
import { EMPTY_MODES } from '../../utils/react-utils'
|
|
11
11
|
import Avatar, { type AvatarProps } from '../Avatar/Avatar'
|
|
12
|
+
import type { Modes } from '../../design-tokens'
|
|
12
13
|
|
|
13
14
|
export type TestimonialsCardProps = {
|
|
14
15
|
/**
|
|
@@ -23,7 +24,7 @@ export type TestimonialsCardProps = {
|
|
|
23
24
|
* Mode configuration passed to the token resolver. Also forwarded to the
|
|
24
25
|
* Avatar child for consistent theming.
|
|
25
26
|
*/
|
|
26
|
-
modes?:
|
|
27
|
+
modes?: Modes
|
|
27
28
|
/**
|
|
28
29
|
* Optional style overrides for the card container.
|
|
29
30
|
*/
|
|
@@ -4,6 +4,7 @@ import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
|
4
4
|
import { EMPTY_MODES } from '../../utils/react-utils'
|
|
5
5
|
import Skeleton from '../../skeleton/Skeleton'
|
|
6
6
|
import { useSkeleton } from '../../skeleton/SkeletonGroup'
|
|
7
|
+
import type { Modes } from '../../design-tokens'
|
|
7
8
|
|
|
8
9
|
export type TextProps = {
|
|
9
10
|
/**
|
|
@@ -20,7 +21,7 @@ export type TextProps = {
|
|
|
20
21
|
/** Horizontal alignment of the text. */
|
|
21
22
|
textAlign?: 'Left' | 'Center'
|
|
22
23
|
/** Modes configuration for design token resolution. */
|
|
23
|
-
modes?:
|
|
24
|
+
modes?: Modes
|
|
24
25
|
/** Style override for the text. */
|
|
25
26
|
style?: StyleProp<TextStyle>
|
|
26
27
|
/** Number of lines to limit the text to. */
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import React, { useRef, useState } from 'react'
|
|
1
|
+
import React, { forwardRef, useRef, useState } from 'react'
|
|
2
2
|
import { Platform, Pressable, View, TextInput as RNTextInput, type StyleProp, type ViewStyle, type TextInputProps as RNTextInputProps, type TextStyle } from 'react-native'
|
|
3
3
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
4
4
|
import Icon from '../../icons/Icon'
|
|
5
|
-
import { EMPTY_MODES, cloneChildrenWithModes } from '../../utils/react-utils'
|
|
5
|
+
import { EMPTY_MODES, cloneChildrenWithModes, mergeRefs } from '../../utils/react-utils'
|
|
6
|
+
import type { Modes } from '../../design-tokens'
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
9
|
* TextInput component that mirrors the Figma "textInput" component.
|
|
@@ -102,7 +103,7 @@ type TextInputProps = {
|
|
|
102
103
|
leadingIconName?: string;
|
|
103
104
|
leading?: React.ReactNode;
|
|
104
105
|
trailing?: React.ReactNode;
|
|
105
|
-
modes?:
|
|
106
|
+
modes?: Modes;
|
|
106
107
|
style?: StyleProp<ViewStyle>;
|
|
107
108
|
inputStyle?: StyleProp<TextStyle>;
|
|
108
109
|
onFocus?: (e: any) => void;
|
|
@@ -111,7 +112,7 @@ type TextInputProps = {
|
|
|
111
112
|
accessibilityHint?: string;
|
|
112
113
|
} & Omit<RNTextInputProps, 'style' | 'onChangeText' | 'onFocus' | 'onBlur' | 'placeholder' | 'value'>;
|
|
113
114
|
|
|
114
|
-
function TextInput({
|
|
115
|
+
const TextInputBase = forwardRef<RNTextInput, TextInputProps>(function TextInput({
|
|
115
116
|
placeholder = '',
|
|
116
117
|
value = '',
|
|
117
118
|
onChangeText,
|
|
@@ -126,7 +127,7 @@ function TextInput({
|
|
|
126
127
|
accessibilityLabel,
|
|
127
128
|
accessibilityHint,
|
|
128
129
|
...rest
|
|
129
|
-
}: TextInputProps) {
|
|
130
|
+
}: TextInputProps, ref: React.Ref<RNTextInput>) {
|
|
130
131
|
// Track focus state to hide placeholder when focused
|
|
131
132
|
const [isFocused, setIsFocused] = useState(false)
|
|
132
133
|
const [isHovered, setIsHovered] = useState(false)
|
|
@@ -250,7 +251,7 @@ function TextInput({
|
|
|
250
251
|
</View>
|
|
251
252
|
)}
|
|
252
253
|
<RNTextInput
|
|
253
|
-
ref={inputRef}
|
|
254
|
+
ref={mergeRefs(inputRef, ref)}
|
|
254
255
|
accessibilityLabel={undefined}
|
|
255
256
|
accessibilityHint={accessibilityHint}
|
|
256
257
|
placeholder={displayPlaceholder}
|
|
@@ -289,7 +290,7 @@ function TextInput({
|
|
|
289
290
|
}
|
|
290
291
|
|
|
291
292
|
return <View style={containerStyleArray}>{inner}</View>
|
|
292
|
-
}
|
|
293
|
+
})
|
|
293
294
|
|
|
294
295
|
/**
|
|
295
296
|
* TextInput.Search component that mirrors the Figma "textInput.search" component.
|
|
@@ -315,7 +316,7 @@ type TextInputSearchProps = {
|
|
|
315
316
|
value?: string;
|
|
316
317
|
onChangeText?: (text: string) => void;
|
|
317
318
|
leading?: React.ReactNode;
|
|
318
|
-
modes?:
|
|
319
|
+
modes?: Modes;
|
|
319
320
|
style?: StyleProp<ViewStyle>;
|
|
320
321
|
inputStyle?: StyleProp<TextStyle>;
|
|
321
322
|
accessibilityLabel?: string;
|
|
@@ -324,7 +325,7 @@ type TextInputSearchProps = {
|
|
|
324
325
|
onBlur?: (e: any) => void;
|
|
325
326
|
} & Omit<RNTextInputProps, 'style' | 'onChangeText' | 'onFocus' | 'onBlur' | 'placeholder' | 'value'>;
|
|
326
327
|
|
|
327
|
-
function TextInputSearch({
|
|
328
|
+
const TextInputSearch = forwardRef<RNTextInput, TextInputSearchProps>(function TextInputSearch({
|
|
328
329
|
placeholder = 'Search',
|
|
329
330
|
value = '',
|
|
330
331
|
onChangeText,
|
|
@@ -337,7 +338,7 @@ function TextInputSearch({
|
|
|
337
338
|
onFocus,
|
|
338
339
|
onBlur,
|
|
339
340
|
...rest
|
|
340
|
-
}: TextInputSearchProps) {
|
|
341
|
+
}: TextInputSearchProps, ref: React.Ref<RNTextInput>) {
|
|
341
342
|
// Resolve icon tokens for default search icon
|
|
342
343
|
const iconColor = getVariableByName('textInput/icon/color', modes) || '#24262b'
|
|
343
344
|
const iconSize = getVariableByName('textInput/icon/size', modes) || 18
|
|
@@ -378,10 +379,14 @@ function TextInputSearch({
|
|
|
378
379
|
textInputProps.accessibilityHint = accessibilityHint
|
|
379
380
|
}
|
|
380
381
|
|
|
381
|
-
return <TextInput {...(textInputProps as TextInputProps)} />
|
|
382
|
-
}
|
|
382
|
+
return <TextInput ref={ref} {...(textInputProps as TextInputProps)} />
|
|
383
|
+
})
|
|
383
384
|
|
|
384
|
-
// Attach Search as a property of TextInput using namespace pattern
|
|
385
|
+
// Attach Search as a property of TextInput using namespace pattern. The base
|
|
386
|
+
// component is created via forwardRef, so we compose the static onto a typed
|
|
387
|
+
// alias to keep `TextInput.Search` strongly typed.
|
|
388
|
+
type TextInputComponent = typeof TextInputBase & { Search: typeof TextInputSearch }
|
|
389
|
+
const TextInput = TextInputBase as TextInputComponent
|
|
385
390
|
TextInput.Search = TextInputSearch
|
|
386
391
|
|
|
387
392
|
export default TextInput
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import React, { useMemo } from 'react'
|
|
2
|
+
import { Text as RNText, type TextStyle, type StyleProp } from 'react-native'
|
|
3
|
+
import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
4
|
+
import { EMPTY_MODES, cloneChildrenWithModes } from '../../utils/react-utils'
|
|
5
|
+
import type { Modes } from '../../design-tokens'
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* A single coloured run inside a {@link TextSegment}. Each run can carry its own
|
|
9
|
+
* `modes`, so individual fragments of the same paragraph can resolve different
|
|
10
|
+
* design tokens (most commonly a different `text/foreground` colour) while still
|
|
11
|
+
* flowing — and wrapping — inline as one continuous line of text.
|
|
12
|
+
*/
|
|
13
|
+
export type TextSegmentRun = {
|
|
14
|
+
/** The text for this run. Include trailing/leading spaces yourself when you want spacing between runs (inline text has no gap concept). */
|
|
15
|
+
text: string
|
|
16
|
+
/**
|
|
17
|
+
* Per-run mode overrides. Merged on top of the parent `TextSegment` modes, so
|
|
18
|
+
* a run only needs to specify what differs (e.g. `{ 'Text Appearance': 'Primary' }`
|
|
19
|
+
* to recolour just that fragment). Everything else is inherited.
|
|
20
|
+
*/
|
|
21
|
+
modes?: Modes
|
|
22
|
+
/** Optional per-run style override applied last, on top of the token-resolved style. */
|
|
23
|
+
style?: StyleProp<TextStyle>
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export type TextSegmentProps = {
|
|
27
|
+
/**
|
|
28
|
+
* Declarative, data-driven way to compose a multi-colour string. Each entry
|
|
29
|
+
* becomes an inline run. This is the simplest API when the segments are known
|
|
30
|
+
* up front:
|
|
31
|
+
*
|
|
32
|
+
* ```tsx
|
|
33
|
+
* <TextSegment segments={[
|
|
34
|
+
* { text: 'Upsell message ' },
|
|
35
|
+
* { text: 'JioFinance+', modes: { 'Text Appearance': 'Primary' } },
|
|
36
|
+
* ]} />
|
|
37
|
+
* ```
|
|
38
|
+
*
|
|
39
|
+
* When both `segments` and `children` are provided, `children` win.
|
|
40
|
+
*/
|
|
41
|
+
segments?: TextSegmentRun[]
|
|
42
|
+
/**
|
|
43
|
+
* Compositional alternative to {@link TextSegmentProps.segments}. Pass library
|
|
44
|
+
* `Text` elements (or plain strings) as children and they are rendered nested
|
|
45
|
+
* inside the same paragraph so they wrap together. The parent `modes` cascade
|
|
46
|
+
* down to every child via `cloneChildrenWithModes`, and each child may still
|
|
47
|
+
* override with its own `modes`:
|
|
48
|
+
*
|
|
49
|
+
* ```tsx
|
|
50
|
+
* <TextSegment>
|
|
51
|
+
* <Text>Upsell message </Text>
|
|
52
|
+
* <Text modes={{ 'Text Appearance': 'Primary' }}>JioFinance+</Text>
|
|
53
|
+
* </TextSegment>
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
56
|
+
children?: React.ReactNode
|
|
57
|
+
/** Horizontal alignment of the whole paragraph. */
|
|
58
|
+
textAlign?: 'Left' | 'Center'
|
|
59
|
+
/** Clamp the paragraph to this many lines (truncates with an ellipsis). Applies to the whole composed line, not per-run. */
|
|
60
|
+
numberOfLines?: number
|
|
61
|
+
/** Mode configuration used for the base style and cascaded to every run/child. */
|
|
62
|
+
modes?: Modes
|
|
63
|
+
/** Style override applied to the outer paragraph (e.g. width constraints to force wrapping). */
|
|
64
|
+
style?: StyleProp<TextStyle>
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const TEXT_ALIGN_MAP: Record<NonNullable<TextSegmentProps['textAlign']>, TextStyle['textAlign']> = {
|
|
68
|
+
Left: 'left',
|
|
69
|
+
Center: 'center',
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Resolves the `text/*` design tokens for a given modes object into an RN
|
|
74
|
+
* `TextStyle`. Shared by the outer paragraph and every inline run so a run that
|
|
75
|
+
* only overrides colour still inherits the family/size/weight/spacing.
|
|
76
|
+
*/
|
|
77
|
+
function resolveTextStyle(modes: Modes): TextStyle {
|
|
78
|
+
return {
|
|
79
|
+
color: (getVariableByName('text/foreground', modes) ?? '#000000') as string,
|
|
80
|
+
fontFamily: (getVariableByName('text/fontFamily', modes) ?? 'JioType') as string,
|
|
81
|
+
fontSize: (getVariableByName('text/fontSize', modes) ?? 14) as number,
|
|
82
|
+
fontWeight: String(getVariableByName('text/fontWeight', modes) ?? '500') as TextStyle['fontWeight'],
|
|
83
|
+
lineHeight: (getVariableByName('text/lineHeight', modes) ?? 20) as number,
|
|
84
|
+
letterSpacing: (getVariableByName('text/letterSpacing', modes) ?? -0.5) as number,
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* TextSegment — composes several differently-styled text runs into a single
|
|
90
|
+
* paragraph that wraps as one continuous line.
|
|
91
|
+
*
|
|
92
|
+
* On the web you would reach for `<span>`s inside a `<p>`; the React Native
|
|
93
|
+
* equivalent is nesting `<Text>` inside a parent `<Text>`. That nesting is the
|
|
94
|
+
* whole trick: sibling `<View>`s would lay out as flex blocks and break onto
|
|
95
|
+
* rigid rows, but nested `<Text>` nodes flow inline and wrap naturally at word
|
|
96
|
+
* boundaries — exactly like a real paragraph — while each nested run keeps its
|
|
97
|
+
* own colour/weight resolved from its own `modes`.
|
|
98
|
+
*
|
|
99
|
+
* Two equivalent ways to author content:
|
|
100
|
+
* - **`segments` prop** — declarative array of `{ text, modes }` runs.
|
|
101
|
+
* - **`children`** — pass library `Text` elements (or strings); the parent
|
|
102
|
+
* `modes` cascade down and each child may override its own.
|
|
103
|
+
*
|
|
104
|
+
* @example Data-driven
|
|
105
|
+
* ```tsx
|
|
106
|
+
* <TextSegment
|
|
107
|
+
* segments={[
|
|
108
|
+
* { text: 'Upsell message ' },
|
|
109
|
+
* { text: 'JioFinance+', modes: { 'Text Appearance': 'Primary' } },
|
|
110
|
+
* ]}
|
|
111
|
+
* />
|
|
112
|
+
* ```
|
|
113
|
+
*
|
|
114
|
+
* @example Compositional
|
|
115
|
+
* ```tsx
|
|
116
|
+
* <TextSegment numberOfLines={2}>
|
|
117
|
+
* <Text>Pay with </Text>
|
|
118
|
+
* <Text modes={{ 'Text Appearance': 'Primary' }}>JioFinance+</Text>
|
|
119
|
+
* <Text> and earn rewards on every transaction.</Text>
|
|
120
|
+
* </TextSegment>
|
|
121
|
+
* ```
|
|
122
|
+
*/
|
|
123
|
+
function TextSegment({
|
|
124
|
+
segments,
|
|
125
|
+
children,
|
|
126
|
+
textAlign = 'Left',
|
|
127
|
+
numberOfLines,
|
|
128
|
+
modes = EMPTY_MODES,
|
|
129
|
+
style,
|
|
130
|
+
}: TextSegmentProps) {
|
|
131
|
+
const baseStyle = useMemo<TextStyle>(
|
|
132
|
+
() => ({ ...resolveTextStyle(modes), textAlign: TEXT_ALIGN_MAP[textAlign] }),
|
|
133
|
+
[modes, textAlign]
|
|
134
|
+
)
|
|
135
|
+
|
|
136
|
+
// children win over `segments` so the compositional API can always override.
|
|
137
|
+
const hasChildren = children !== undefined && children !== null && children !== false
|
|
138
|
+
|
|
139
|
+
const renderedSegments = useMemo(() => {
|
|
140
|
+
if (hasChildren || !segments?.length) return null
|
|
141
|
+
return segments.map((run, index) => {
|
|
142
|
+
// Parent modes first, then the run's own modes override them — mirrors the
|
|
143
|
+
// merge order used by `cloneChildrenWithModes` for the children API.
|
|
144
|
+
const runModes = run.modes ? { ...modes, ...run.modes } : modes
|
|
145
|
+
const runStyle = run.modes ? resolveTextStyle(runModes) : undefined
|
|
146
|
+
return (
|
|
147
|
+
<RNText key={index} style={[runStyle, run.style]}>
|
|
148
|
+
{run.text}
|
|
149
|
+
</RNText>
|
|
150
|
+
)
|
|
151
|
+
})
|
|
152
|
+
}, [segments, hasChildren, modes])
|
|
153
|
+
|
|
154
|
+
// The cascade: every child (and its descendants) receives the parent modes so
|
|
155
|
+
// nested library `Text` runs resolve their tokens against the same baseline,
|
|
156
|
+
// while still honouring any per-child `modes` override.
|
|
157
|
+
const content = hasChildren ? cloneChildrenWithModes(children, modes) : renderedSegments
|
|
158
|
+
|
|
159
|
+
return (
|
|
160
|
+
<RNText style={[baseStyle, style]} numberOfLines={numberOfLines}>
|
|
161
|
+
{content}
|
|
162
|
+
</RNText>
|
|
163
|
+
)
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
export default React.memo(TextSegment)
|
|
@@ -2,6 +2,7 @@ import React, { isValidElement, cloneElement, type ReactNode } from 'react'
|
|
|
2
2
|
import { View, Text, type ViewStyle, type TextStyle } from 'react-native'
|
|
3
3
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
4
4
|
import { EMPTY_MODES } from '../../utils/react-utils'
|
|
5
|
+
import type { Modes } from '../../design-tokens'
|
|
5
6
|
|
|
6
7
|
export type ThreadHeroProps = {
|
|
7
8
|
/** Title text, e.g. "Subhash Rajan" */
|
|
@@ -13,7 +14,7 @@ export type ThreadHeroProps = {
|
|
|
13
14
|
/** Slot for Avatar component */
|
|
14
15
|
renderAvatar?: ReactNode
|
|
15
16
|
/** Modes for design token resolution */
|
|
16
|
-
modes?:
|
|
17
|
+
modes?: Modes
|
|
17
18
|
/** Optional container style */
|
|
18
19
|
style?: ViewStyle
|
|
19
20
|
}
|
|
@@ -3,6 +3,7 @@ import { View, Text, type StyleProp, type ViewStyle, type TextStyle } from 'reac
|
|
|
3
3
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
4
4
|
import { useTokens } from '../../design-tokens/JFSThemeProvider'
|
|
5
5
|
import { EMPTY_MODES } from '../../utils/react-utils'
|
|
6
|
+
import type { Modes } from '../../design-tokens'
|
|
6
7
|
|
|
7
8
|
export type TitleProps = {
|
|
8
9
|
title?: string;
|
|
@@ -10,7 +11,7 @@ export type TitleProps = {
|
|
|
10
11
|
subtitle?: string;
|
|
11
12
|
/** Horizontal alignment of the title text. */
|
|
12
13
|
textAlign?: 'Left' | 'Center';
|
|
13
|
-
modes?:
|
|
14
|
+
modes?: Modes;
|
|
14
15
|
style?: StyleProp<ViewStyle>;
|
|
15
16
|
textStyle?: StyleProp<TextStyle>;
|
|
16
17
|
/** Optional style overrides for the subtitle text. */
|
|
@@ -4,13 +4,14 @@ import Animated, { FadeIn, FadeOut, SlideInDown, SlideInUp } from 'react-native-
|
|
|
4
4
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
5
5
|
import { closeToast, type ToastPlacement } from './useToast'
|
|
6
6
|
import { EMPTY_MODES } from '../../utils/react-utils'
|
|
7
|
+
import type { Modes } from '../../design-tokens'
|
|
7
8
|
|
|
8
9
|
export interface ToastProps {
|
|
9
10
|
id: string
|
|
10
11
|
title: string
|
|
11
12
|
timeout?: number | undefined
|
|
12
13
|
onClose?: (() => void) | undefined
|
|
13
|
-
modes?:
|
|
14
|
+
modes?: Modes | undefined
|
|
14
15
|
placement?: ToastPlacement | undefined
|
|
15
16
|
style?: StyleProp<ViewStyle> | undefined
|
|
16
17
|
}
|
|
@@ -3,12 +3,13 @@ import { StyleSheet, View } from 'react-native'
|
|
|
3
3
|
import { useSafeAreaInsets } from 'react-native-safe-area-context'
|
|
4
4
|
import { useToast, type ToastPlacement } from './useToast'
|
|
5
5
|
import Toast from './Toast'
|
|
6
|
+
import type { Modes } from '../../design-tokens'
|
|
6
7
|
|
|
7
8
|
export interface ToastProviderProps {
|
|
8
9
|
children: React.ReactNode
|
|
9
10
|
maxVisibleToasts?: number
|
|
10
11
|
placement?: ToastPlacement
|
|
11
|
-
modes?:
|
|
12
|
+
modes?: Modes
|
|
12
13
|
}
|
|
13
14
|
|
|
14
15
|
function ToastProvider({
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { useCallback, useSyncExternalStore } from 'react'
|
|
2
|
+
import type { Modes } from '../../design-tokens'
|
|
2
3
|
|
|
3
4
|
export type ToastPlacement = 'top' | 'bottom'
|
|
4
5
|
|
|
@@ -6,7 +7,7 @@ export interface ToastOptions {
|
|
|
6
7
|
title: string
|
|
7
8
|
timeout?: number
|
|
8
9
|
onClose?: () => void
|
|
9
|
-
modes?:
|
|
10
|
+
modes?: Modes
|
|
10
11
|
}
|
|
11
12
|
|
|
12
13
|
export interface ToastEntry {
|
|
@@ -14,7 +15,7 @@ export interface ToastEntry {
|
|
|
14
15
|
title: string
|
|
15
16
|
timeout: number
|
|
16
17
|
onClose?: (() => void) | undefined
|
|
17
|
-
modes?:
|
|
18
|
+
modes?: Modes | undefined
|
|
18
19
|
}
|
|
19
20
|
|
|
20
21
|
type Listener = () => void
|
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
} from 'react-native'
|
|
9
9
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
10
10
|
import { EMPTY_MODES } from '../../utils/react-utils'
|
|
11
|
+
import type { Modes } from '../../design-tokens'
|
|
11
12
|
|
|
12
13
|
export interface ToggleProps {
|
|
13
14
|
/** Whether the toggle is on (controlled) */
|
|
@@ -19,7 +20,7 @@ export interface ToggleProps {
|
|
|
19
20
|
/** Whether the toggle is disabled */
|
|
20
21
|
disabled?: boolean
|
|
21
22
|
/** Design token modes for theming */
|
|
22
|
-
modes?:
|
|
23
|
+
modes?: Modes
|
|
23
24
|
/** Override container styles */
|
|
24
25
|
style?: StyleProp<ViewStyle>
|
|
25
26
|
/** Accessibility label for screen readers */
|