jfs-components 0.0.99 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -0
- package/lib/commonjs/components/AreaLineChart/AreaLineChart.js +1 -1
- package/lib/commonjs/components/Balance/Balance.js +17 -12
- package/lib/commonjs/components/Card/Card.js +2 -1
- package/lib/commonjs/components/CardFeedback/CardFeedback.js +2 -1
- package/lib/commonjs/components/Checkbox/Checkbox.js +2 -1
- package/lib/commonjs/components/Drawer/Drawer.js +13 -4
- package/lib/commonjs/components/Dropdown/Dropdown.js +37 -18
- package/lib/commonjs/components/DropdownInput/DropdownInput.js +1 -1
- package/lib/commonjs/components/FullscreenModal/FullscreenModal.js +65 -4
- package/lib/commonjs/components/Image/Image.js +11 -5
- package/lib/commonjs/components/LottiePlayer/loadNativeLottieView.js +8 -13
- package/lib/commonjs/components/Overlay/Overlay.js +92 -0
- package/lib/commonjs/components/PlanComparisonCard/PlanComparisonCard.js +2 -1
- package/lib/commonjs/components/TestimonialsCard/TestimonialsCard.js +121 -0
- package/lib/commonjs/components/TextInput/TextInput.js +2 -1
- package/lib/commonjs/components/docs/modeControls.js +116 -0
- package/lib/commonjs/components/index.js +14 -0
- package/lib/commonjs/design-tokens/JFSThemeProvider.js +1 -1
- package/lib/commonjs/design-tokens/figma-modes.generated.js +391 -0
- package/lib/commonjs/design-tokens/index.js +11 -0
- package/lib/commonjs/icons/registry.js +1 -1
- package/lib/module/components/Accordion/Accordion.js +1 -2
- package/lib/module/components/AreaLineChart/AreaLineChart.js +1 -1
- package/lib/module/components/Balance/Balance.js +18 -13
- package/lib/module/components/Card/Card.js +1 -2
- package/lib/module/components/CardFeedback/CardFeedback.js +1 -2
- package/lib/module/components/Checkbox/Checkbox.js +1 -2
- package/lib/module/components/Drawer/Drawer.js +12 -4
- package/lib/module/components/Dropdown/Dropdown.js +37 -18
- package/lib/module/components/DropdownInput/DropdownInput.js +1 -1
- package/lib/module/components/FullscreenModal/FullscreenModal.js +67 -7
- package/lib/module/components/Image/Image.js +11 -5
- 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/OTP/OTP.js +1 -2
- package/lib/module/components/Overlay/Overlay.js +87 -0
- package/lib/module/components/PlanComparisonCard/PlanComparisonCard.js +1 -2
- package/lib/module/components/PoweredByLabel/PoweredByLabel.js +1 -2
- package/lib/module/components/RechargeCard/RechargeCard.js +1 -2
- package/lib/module/components/Section/Section.js +1 -2
- package/lib/module/components/TestimonialsCard/TestimonialsCard.js +116 -0
- package/lib/module/components/TextInput/TextInput.js +1 -2
- package/lib/module/components/UpiHandle/UpiHandle.js +1 -2
- package/lib/module/components/docs/modeControls.js +111 -0
- package/lib/module/components/index.js +2 -0
- package/lib/module/design-tokens/JFSThemeProvider.js +1 -1
- package/lib/module/design-tokens/figma-modes.generated.js +387 -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 +0 -1
- package/lib/typescript/scripts/extract-component-tokens.d.ts +1 -1
- package/lib/typescript/scripts/generate-mode-types.d.ts +2 -0
- package/lib/typescript/scripts/retype-modes.d.cts +2 -0
- 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 +2 -1
- 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/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/Checkbox/Checkbox.d.ts +2 -1
- package/lib/typescript/src/components/CheckboxGroup/CheckboxGroup.d.ts +2 -1
- package/lib/typescript/src/components/CheckboxItem/CheckboxItem.d.ts +2 -1
- 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/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 +2 -1
- 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 +2 -1
- package/lib/typescript/src/components/FullscreenModal/FullscreenModal.d.ts +9 -2
- 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 +2 -1
- 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 +2 -1
- 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/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/ProductOverview/ProductOverview.d.ts +2 -1
- package/lib/typescript/src/components/ProgressBadge/ProgressBadge.d.ts +2 -1
- package/lib/typescript/src/components/Radio/Radio.d.ts +2 -1
- 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/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 +52 -0
- package/lib/typescript/src/components/Text/Text.d.ts +2 -1
- package/lib/typescript/src/components/TextInput/TextInput.d.ts +3 -2
- 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 +2 -0
- package/lib/typescript/src/design-tokens/JFSThemeProvider.d.ts +4 -3
- package/lib/typescript/src/design-tokens/figma-modes.generated.d.ts +264 -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 +2 -1
- package/package.json +3 -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 +2 -1
- 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/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/Checkbox/Checkbox.tsx +2 -1
- package/src/components/CheckboxGroup/CheckboxGroup.tsx +2 -1
- package/src/components/CheckboxItem/CheckboxItem.tsx +2 -1
- 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/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 +42 -21
- package/src/components/DropdownInput/DropdownInput.tsx +5 -4
- 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 +3 -2
- package/src/components/FullscreenModal/FullscreenModal.tsx +77 -12
- 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 +3 -2
- 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 +2 -1
- 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/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/ProductOverview/ProductOverview.tsx +2 -1
- package/src/components/ProgressBadge/ProgressBadge.tsx +2 -1
- package/src/components/Radio/Radio.tsx +2 -1
- 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/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 +163 -0
- package/src/components/Text/Text.tsx +2 -1
- package/src/components/TextInput/TextInput.tsx +3 -2
- 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 +2 -0
- package/src/design-tokens/JFSThemeProvider.tsx +4 -3
- package/src/design-tokens/figma-modes.generated.ts +396 -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 +3 -2
|
@@ -8,6 +8,7 @@ import { useTokens } from '../../design-tokens/JFSThemeProvider'
|
|
|
8
8
|
* This ensures that all child components in slots receive the modes prop from the parent.
|
|
9
9
|
*/
|
|
10
10
|
import { cloneChildrenWithModes, EMPTY_MODES } from '../../utils/react-utils'
|
|
11
|
+
import type { Modes } from '../../design-tokens'
|
|
11
12
|
|
|
12
13
|
export interface ScreenProps {
|
|
13
14
|
/**
|
|
@@ -17,7 +18,7 @@ export interface ScreenProps {
|
|
|
17
18
|
/**
|
|
18
19
|
* Modes object to override default variable values.
|
|
19
20
|
*/
|
|
20
|
-
modes?:
|
|
21
|
+
modes?: Modes;
|
|
21
22
|
/**
|
|
22
23
|
* Optional style overrides for the container.
|
|
23
24
|
*/
|
|
@@ -15,6 +15,7 @@ import IconCapsule from '../IconCapsule/IconCapsule'
|
|
|
15
15
|
import ListItem from '../ListItem/ListItem'
|
|
16
16
|
import { usePressableWebSupport, type WebAccessibilityProps } from '../../utils/web-platform-utils'
|
|
17
17
|
import { EMPTY_MODES, cloneChildrenWithModes, flattenChildren } from '../../utils/react-utils'
|
|
18
|
+
import type { Modes } from '../../design-tokens'
|
|
18
19
|
|
|
19
20
|
// Match Button: delay the press visual on iOS so a scroll-cancelled touch
|
|
20
21
|
// never applies the "pressed" style. See Button.tsx for the rationale.
|
|
@@ -356,7 +357,7 @@ type SectionProps = {
|
|
|
356
357
|
slot?: React.ReactNode;
|
|
357
358
|
/** Layout direction of the slot's children. Defaults to 'row' (horizontal). */
|
|
358
359
|
slotDirection?: 'row' | 'column';
|
|
359
|
-
modes?:
|
|
360
|
+
modes?: Modes;
|
|
360
361
|
onPress?: () => void;
|
|
361
362
|
style?: StyleProp<ViewStyle>;
|
|
362
363
|
accessibilityLabel?: string;
|
|
@@ -400,7 +401,7 @@ interface SectionTokens {
|
|
|
400
401
|
slotGap: number;
|
|
401
402
|
}
|
|
402
403
|
|
|
403
|
-
function resolveSectionTokens(modes:
|
|
404
|
+
function resolveSectionTokens(modes: Modes): SectionTokens {
|
|
404
405
|
const backgroundColor = getVariableByName('section/background/color', modes) || '#ffffff'
|
|
405
406
|
const sectionGap = (getVariableByName('section/gap', modes) || 12) as number
|
|
406
407
|
const slotGap = (getVariableByName('slot/gap', modes) || 12) as number
|
|
@@ -630,7 +631,7 @@ function Section({
|
|
|
630
631
|
|
|
631
632
|
type SectionSlotProps = {
|
|
632
633
|
slot: React.ReactNode;
|
|
633
|
-
modes:
|
|
634
|
+
modes: Modes;
|
|
634
635
|
direction: 'row' | 'column';
|
|
635
636
|
rowGap: number;
|
|
636
637
|
columnGap: number;
|
|
@@ -667,7 +668,7 @@ type BentoToggleRenderState = {
|
|
|
667
668
|
type SectionBentoProps = {
|
|
668
669
|
navSlot?: React.ReactNode;
|
|
669
670
|
upiSlot?: React.ReactNode;
|
|
670
|
-
modes?:
|
|
671
|
+
modes?: Modes;
|
|
671
672
|
style?: StyleProp<ViewStyle>;
|
|
672
673
|
accessibilityLabel?: string;
|
|
673
674
|
accessibilityHint?: string;
|
|
@@ -891,7 +892,7 @@ function SectionBento({
|
|
|
891
892
|
type DefaultBentoToggleProps = {
|
|
892
893
|
expanded: boolean;
|
|
893
894
|
onPress: () => void;
|
|
894
|
-
modes:
|
|
895
|
+
modes: Modes;
|
|
895
896
|
moreLabel: string;
|
|
896
897
|
lessLabel: string;
|
|
897
898
|
moreIcon: string;
|
|
@@ -9,6 +9,7 @@ import {
|
|
|
9
9
|
} from 'react-native'
|
|
10
10
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
11
11
|
import { EMPTY_MODES } from '../../utils/react-utils'
|
|
12
|
+
import type { Modes } from '../../design-tokens'
|
|
12
13
|
|
|
13
14
|
export type SegmentedControlItem = {
|
|
14
15
|
key: React.Key
|
|
@@ -25,7 +26,7 @@ export type SegmentedControlProps = {
|
|
|
25
26
|
/** Callback fired when the selected segment changes */
|
|
26
27
|
onSelectionChange?: (key: React.Key) => void
|
|
27
28
|
/** Design token modes for theming */
|
|
28
|
-
modes?:
|
|
29
|
+
modes?: Modes
|
|
29
30
|
/** Override container styles */
|
|
30
31
|
style?: StyleProp<ViewStyle>
|
|
31
32
|
}
|
|
@@ -39,7 +40,7 @@ function SegmentedControlSegment({
|
|
|
39
40
|
label: string
|
|
40
41
|
active: boolean
|
|
41
42
|
onPress: () => void
|
|
42
|
-
modes:
|
|
43
|
+
modes: Modes
|
|
43
44
|
}) {
|
|
44
45
|
const resolvedModes = {
|
|
45
46
|
...modes,
|
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
8
8
|
import { useTokens } from '../../design-tokens/JFSThemeProvider'
|
|
9
9
|
import { EMPTY_MODES, flattenChildren } from '../../utils/react-utils'
|
|
10
|
+
import type { Modes } from '../../design-tokens'
|
|
10
11
|
|
|
11
12
|
/**
|
|
12
13
|
* Per-segment data definition for the data-driven `segments` prop.
|
|
@@ -39,7 +40,7 @@ export type SegmentedTrackSegmentData = {
|
|
|
39
40
|
* Per-segment design token mode overrides. Merged on top of the parent
|
|
40
41
|
* `modes` and the per-index Emphasis defaults.
|
|
41
42
|
*/
|
|
42
|
-
modes?:
|
|
43
|
+
modes?: Modes
|
|
43
44
|
/** Override individual segment styles. */
|
|
44
45
|
style?: StyleProp<ViewStyle>
|
|
45
46
|
/** Per-segment accessibility label. */
|
|
@@ -60,7 +61,7 @@ export type SegmentedTrackProps = {
|
|
|
60
61
|
*/
|
|
61
62
|
children?: React.ReactNode
|
|
62
63
|
/** Design token modes for theming (e.g. `{ 'Color Mode': 'Light' }`). */
|
|
63
|
-
modes?:
|
|
64
|
+
modes?: Modes
|
|
64
65
|
/** Override the container styles. */
|
|
65
66
|
style?: StyleProp<ViewStyle>
|
|
66
67
|
/** Style applied to every segment (data-driven mode only). */
|
|
@@ -83,7 +84,7 @@ type SegmentedTrackSegmentProps = {
|
|
|
83
84
|
* Design token modes for the segment. Merged with parent `modes` and the
|
|
84
85
|
* per-index Emphasis defaults injected by the parent `SegmentedTrack`.
|
|
85
86
|
*/
|
|
86
|
-
modes?:
|
|
87
|
+
modes?: Modes | undefined
|
|
87
88
|
/** Override the segment styles. */
|
|
88
89
|
style?: StyleProp<ViewStyle> | undefined
|
|
89
90
|
/** Per-segment accessibility label. */
|
|
@@ -216,7 +217,7 @@ function renderSegments({
|
|
|
216
217
|
}: {
|
|
217
218
|
segments: SegmentedTrackSegmentData[] | undefined
|
|
218
219
|
children: React.ReactNode | undefined
|
|
219
|
-
modes:
|
|
220
|
+
modes: Modes
|
|
220
221
|
segmentStyle: StyleProp<ViewStyle> | undefined
|
|
221
222
|
}): React.ReactNode[] {
|
|
222
223
|
if (children !== undefined && children !== null) {
|
|
@@ -3,6 +3,7 @@ import { View, type StyleProp, type ViewProps, type ViewStyle } from 'react-nati
|
|
|
3
3
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
4
4
|
import { useTokens } from '../../design-tokens/JFSThemeProvider'
|
|
5
5
|
import { cloneChildrenWithModes, EMPTY_MODES } from '../../utils/react-utils'
|
|
6
|
+
import type { Modes } from '../../design-tokens'
|
|
6
7
|
|
|
7
8
|
export type SlotLayoutDirection = 'vertical' | 'horizontal'
|
|
8
9
|
|
|
@@ -30,7 +31,7 @@ export type SlotProps = ViewProps & {
|
|
|
30
31
|
/**
|
|
31
32
|
* Mode configuration passed to the token resolver and cascaded to children.
|
|
32
33
|
*/
|
|
33
|
-
modes?:
|
|
34
|
+
modes?: Modes
|
|
34
35
|
style?: StyleProp<ViewStyle>
|
|
35
36
|
}
|
|
36
37
|
|
|
@@ -14,6 +14,7 @@ import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
|
14
14
|
import { useTokens } from '../../design-tokens/JFSThemeProvider'
|
|
15
15
|
import { EMPTY_MODES } from '../../utils/react-utils'
|
|
16
16
|
import { useReducedMotion } from '../../skeleton/useReducedMotion'
|
|
17
|
+
import type { Modes } from '../../design-tokens'
|
|
17
18
|
|
|
18
19
|
/**
|
|
19
20
|
* Per-segment colours, resolved from the Figma `spiner/*` tokens. Consumers can
|
|
@@ -52,7 +53,7 @@ export type SpinnerProps = SpinnerBaseProps & {
|
|
|
52
53
|
/** When false, renders a static resting spinner (also honoured for reduced motion). Defaults to true. */
|
|
53
54
|
animating?: boolean
|
|
54
55
|
/** Design token modes forwarded to token lookups. */
|
|
55
|
-
modes?:
|
|
56
|
+
modes?: Modes
|
|
56
57
|
/** Container style override. */
|
|
57
58
|
style?: StyleProp<ViewStyle>
|
|
58
59
|
/** Accessibility label announced to assistive tech. Defaults to "Loading". */
|
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
} from '../../utils/react-utils'
|
|
9
9
|
import StatItem from '../StatItem/StatItem'
|
|
10
10
|
import Divider from '../Divider/Divider'
|
|
11
|
+
import type { Modes } from '../../design-tokens'
|
|
11
12
|
|
|
12
13
|
export type StatGroupItem = {
|
|
13
14
|
/** Stable key for the item. Falls back to the label / index. */
|
|
@@ -34,7 +35,7 @@ export type StatGroupProps = {
|
|
|
34
35
|
*/
|
|
35
36
|
children?: React.ReactNode
|
|
36
37
|
/** Design token modes for theming (e.g. `{ 'Color Mode': 'Light' }`). */
|
|
37
|
-
modes?:
|
|
38
|
+
modes?: Modes
|
|
38
39
|
/** Override container styles. */
|
|
39
40
|
style?: StyleProp<ViewStyle>
|
|
40
41
|
}
|
|
@@ -123,7 +124,7 @@ function renderSlotChildren({
|
|
|
123
124
|
}: {
|
|
124
125
|
items?: StatGroupItem[]
|
|
125
126
|
children?: React.ReactNode
|
|
126
|
-
modes:
|
|
127
|
+
modes: Modes
|
|
127
128
|
}): React.ReactNode[] {
|
|
128
129
|
let nodes: React.ReactNode[]
|
|
129
130
|
|
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
} from 'react-native'
|
|
9
9
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
10
10
|
import { EMPTY_MODES } from '../../utils/react-utils'
|
|
11
|
+
import type { Modes } from '../../design-tokens'
|
|
11
12
|
|
|
12
13
|
export type StatItemLabelPosition = 'Top' | 'Bottom'
|
|
13
14
|
|
|
@@ -25,7 +26,7 @@ export type StatItemProps = {
|
|
|
25
26
|
*/
|
|
26
27
|
labelPosition?: StatItemLabelPosition
|
|
27
28
|
/** Design token modes for theming (e.g. `{ 'Color Mode': 'Light' }`). */
|
|
28
|
-
modes?:
|
|
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
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import {
|
|
3
|
+
View,
|
|
4
|
+
Text,
|
|
5
|
+
type ViewStyle,
|
|
6
|
+
type TextStyle,
|
|
7
|
+
type StyleProp,
|
|
8
|
+
} from 'react-native'
|
|
9
|
+
import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
10
|
+
import { EMPTY_MODES } from '../../utils/react-utils'
|
|
11
|
+
import Avatar, { type AvatarProps } from '../Avatar/Avatar'
|
|
12
|
+
import type { Modes } from '../../design-tokens'
|
|
13
|
+
|
|
14
|
+
export type TestimonialsCardProps = {
|
|
15
|
+
/**
|
|
16
|
+
* The testimonial heading, typically the author's name.
|
|
17
|
+
*/
|
|
18
|
+
title?: string
|
|
19
|
+
/**
|
|
20
|
+
* The testimonial body copy.
|
|
21
|
+
*/
|
|
22
|
+
body?: string
|
|
23
|
+
/**
|
|
24
|
+
* Mode configuration passed to the token resolver. Also forwarded to the
|
|
25
|
+
* Avatar child for consistent theming.
|
|
26
|
+
*/
|
|
27
|
+
modes?: Modes
|
|
28
|
+
/**
|
|
29
|
+
* Optional style overrides for the card container.
|
|
30
|
+
*/
|
|
31
|
+
style?: StyleProp<ViewStyle>
|
|
32
|
+
/**
|
|
33
|
+
* Props forwarded to the Avatar component (e.g. a custom `imageSource`).
|
|
34
|
+
*/
|
|
35
|
+
avatarProps?: Partial<AvatarProps>
|
|
36
|
+
/**
|
|
37
|
+
* Accessibility label for the card region. Falls back to a label generated
|
|
38
|
+
* from the title and body.
|
|
39
|
+
*/
|
|
40
|
+
accessibilityLabel?: string
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* TestimonialsCard renders a compact, fixed-width card with a circular avatar,
|
|
45
|
+
* a bold title, and a body paragraph. It is typically used inside a horizontal
|
|
46
|
+
* carousel of customer testimonials.
|
|
47
|
+
*
|
|
48
|
+
* All styling values are resolved from Figma design tokens using the provided
|
|
49
|
+
* `modes`.
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* ```tsx
|
|
53
|
+
* <TestimonialsCard
|
|
54
|
+
* title="Aarav S."
|
|
55
|
+
* body="I was dreading renewing my car insurance, but JioFinance made it a breeze."
|
|
56
|
+
* />
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
function TestimonialsCard({
|
|
60
|
+
title = 'Title',
|
|
61
|
+
body = 'I was dreading renewing my car insurance, but JioFinance made it a breeze.',
|
|
62
|
+
modes = EMPTY_MODES,
|
|
63
|
+
style,
|
|
64
|
+
avatarProps,
|
|
65
|
+
accessibilityLabel,
|
|
66
|
+
}: TestimonialsCardProps) {
|
|
67
|
+
// Container tokens
|
|
68
|
+
const background = getVariableByName('testimonialsCard/background', modes) ?? '#ffffff'
|
|
69
|
+
const borderColor = getVariableByName('testimonialsCard/border/color', modes) ?? '#e8e8e8'
|
|
70
|
+
const radius = getVariableByName('testimonialsCard/radius', modes) ?? 8
|
|
71
|
+
const gap = getVariableByName('testimonialsCard/gap', modes) ?? 8
|
|
72
|
+
const paddingHorizontal = getVariableByName('testimonialsCard/padding/horizontal', modes) ?? 12
|
|
73
|
+
const paddingVertical = getVariableByName('testimonialsCard/padding/vertical', modes) ?? 12
|
|
74
|
+
|
|
75
|
+
// Title typography tokens
|
|
76
|
+
const titleColor = getVariableByName('testimonialsCard/subtitle/color', modes) ?? '#1a1c1f'
|
|
77
|
+
const titleFontSize = getVariableByName('testimonialsCard/title/fontSize', modes) ?? 14
|
|
78
|
+
const titleFontFamily = getVariableByName('testimonialsCard/title/fontFamily', modes) ?? 'JioType Var'
|
|
79
|
+
const titleFontWeightRaw = getVariableByName('testimonialsCard/title/fontWeight', modes) ?? 700
|
|
80
|
+
const titleFontWeight =
|
|
81
|
+
typeof titleFontWeightRaw === 'number' ? titleFontWeightRaw.toString() : titleFontWeightRaw
|
|
82
|
+
|
|
83
|
+
// Body typography tokens
|
|
84
|
+
const bodyColor = getVariableByName('testimonialsCard/title/color', modes) ?? '#010101'
|
|
85
|
+
const bodyFontSize = getVariableByName('testimonialsCard/subtitle/fontSize', modes) ?? 12
|
|
86
|
+
const bodyLineHeight = getVariableByName('testimonialsCard/subtitle/lineHeight', modes) ?? 16
|
|
87
|
+
const bodyFontFamily = getVariableByName('testimonialsCard/subtitle/fontFamily', modes) ?? 'JioType Var'
|
|
88
|
+
const bodyFontWeightRaw = getVariableByName('testimonialsCard/subtitle/fontWeight', modes) ?? 400
|
|
89
|
+
const bodyFontWeight =
|
|
90
|
+
typeof bodyFontWeightRaw === 'number' ? bodyFontWeightRaw.toString() : bodyFontWeightRaw
|
|
91
|
+
|
|
92
|
+
const containerStyle: ViewStyle = {
|
|
93
|
+
width: 180,
|
|
94
|
+
backgroundColor: background as string,
|
|
95
|
+
borderColor: borderColor as string,
|
|
96
|
+
borderWidth: 1,
|
|
97
|
+
borderRadius: radius as number,
|
|
98
|
+
paddingHorizontal: paddingHorizontal as number,
|
|
99
|
+
paddingVertical: paddingVertical as number,
|
|
100
|
+
alignItems: 'flex-start',
|
|
101
|
+
gap: gap as number,
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
const titleTextStyle: TextStyle = {
|
|
105
|
+
color: titleColor as string,
|
|
106
|
+
fontSize: titleFontSize as number,
|
|
107
|
+
lineHeight: bodyLineHeight as number,
|
|
108
|
+
fontFamily: titleFontFamily as string,
|
|
109
|
+
fontWeight: titleFontWeight as TextStyle['fontWeight'],
|
|
110
|
+
width: '100%',
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
const bodyTextStyle: TextStyle = {
|
|
114
|
+
color: bodyColor as string,
|
|
115
|
+
fontSize: bodyFontSize as number,
|
|
116
|
+
lineHeight: bodyLineHeight as number,
|
|
117
|
+
fontFamily: bodyFontFamily as string,
|
|
118
|
+
fontWeight: bodyFontWeight as TextStyle['fontWeight'],
|
|
119
|
+
width: '100%',
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
const avatarModes = {
|
|
123
|
+
...modes,
|
|
124
|
+
...(avatarProps?.modes || {}),
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
const resolvedAccessibilityLabel =
|
|
128
|
+
accessibilityLabel ?? `Testimonial${title ? ` from ${title}` : ''}${body ? `: ${body}` : ''}`
|
|
129
|
+
|
|
130
|
+
return (
|
|
131
|
+
<View
|
|
132
|
+
style={[containerStyle, style]}
|
|
133
|
+
accessibilityRole="text"
|
|
134
|
+
accessibilityLabel={resolvedAccessibilityLabel}
|
|
135
|
+
>
|
|
136
|
+
<Avatar
|
|
137
|
+
style="Image"
|
|
138
|
+
modes={avatarModes}
|
|
139
|
+
{...avatarProps}
|
|
140
|
+
/>
|
|
141
|
+
<View style={textContainerStyle}>
|
|
142
|
+
{!!title && (
|
|
143
|
+
<Text style={titleTextStyle} accessibilityElementsHidden importantForAccessibility="no-hide-descendants">
|
|
144
|
+
{title}
|
|
145
|
+
</Text>
|
|
146
|
+
)}
|
|
147
|
+
{!!body && (
|
|
148
|
+
<Text style={bodyTextStyle} accessibilityElementsHidden importantForAccessibility="no-hide-descendants">
|
|
149
|
+
{body}
|
|
150
|
+
</Text>
|
|
151
|
+
)}
|
|
152
|
+
</View>
|
|
153
|
+
</View>
|
|
154
|
+
)
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
const textContainerStyle: ViewStyle = {
|
|
158
|
+
width: '100%',
|
|
159
|
+
alignItems: 'flex-start',
|
|
160
|
+
gap: 4,
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
export default React.memo(TestimonialsCard)
|
|
@@ -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. */
|
|
@@ -3,6 +3,7 @@ import { Platform, Pressable, View, TextInput as RNTextInput, type StyleProp, ty
|
|
|
3
3
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
4
4
|
import Icon from '../../icons/Icon'
|
|
5
5
|
import { EMPTY_MODES, cloneChildrenWithModes } 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;
|
|
@@ -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;
|