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
|
@@ -10,12 +10,13 @@ import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
|
10
10
|
import { EMPTY_MODES } from '../../utils/react-utils'
|
|
11
11
|
import Skeleton from '../../skeleton/Skeleton'
|
|
12
12
|
import { useSkeleton } from '../../skeleton/SkeletonGroup'
|
|
13
|
+
import type { Modes } from '../../design-tokens'
|
|
13
14
|
|
|
14
15
|
type BadgeProps = {
|
|
15
16
|
/** Visible label text shown inside the badge */
|
|
16
17
|
label?: string
|
|
17
18
|
/** Modes used to resolve design tokens (e.g. Appearance, Size) */
|
|
18
|
-
modes?:
|
|
19
|
+
modes?: Modes
|
|
19
20
|
/** Optional press handler to make the badge interactive */
|
|
20
21
|
onPress?: () => void
|
|
21
22
|
accessibilityLabel?: string
|
|
@@ -2,7 +2,16 @@ import React from 'react'
|
|
|
2
2
|
import { View, Text, type StyleProp, type ViewStyle, type TextStyle } from 'react-native'
|
|
3
3
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
4
4
|
import MoneyValue from '../MoneyValue/MoneyValue'
|
|
5
|
-
import { EMPTY_MODES } from '../../utils/react-utils'
|
|
5
|
+
import { EMPTY_MODES, cloneChildrenWithModes } from '../../utils/react-utils'
|
|
6
|
+
import type { Modes } from '../../design-tokens'
|
|
7
|
+
|
|
8
|
+
// The Balance design renders its money value at the 36 px / 900-weight scale.
|
|
9
|
+
// The `moneyValue/*` tokens alias into the `Context3` collection, where the
|
|
10
|
+
// `Balance & Cards` mode supplies those larger values. Applied *before* the
|
|
11
|
+
// caller's `modes` so any consumer can still override individual keys.
|
|
12
|
+
const DEFAULT_MONEY_VALUE_MODES: Record<string, string> = {
|
|
13
|
+
Context3: 'Balance & Cards',
|
|
14
|
+
}
|
|
6
15
|
|
|
7
16
|
export type BalanceProps = {
|
|
8
17
|
/**
|
|
@@ -23,7 +32,7 @@ export type BalanceProps = {
|
|
|
23
32
|
/**
|
|
24
33
|
* Mode configuration for design tokens.
|
|
25
34
|
*/
|
|
26
|
-
modes?:
|
|
35
|
+
modes?: Modes;
|
|
27
36
|
/**
|
|
28
37
|
* Optional style overrides for the container.
|
|
29
38
|
*/
|
|
@@ -58,7 +67,7 @@ function Balance({
|
|
|
58
67
|
// Title styles
|
|
59
68
|
const titleColor = getVariableByName('balance/title/foreground', modes) ?? '#0c0d10'
|
|
60
69
|
const titleFontSize = getVariableByName('balance/title/fontSize', modes) ?? 14
|
|
61
|
-
const titleFontFamily = getVariableByName('balance/title/fontFamily', modes) ?? '
|
|
70
|
+
const titleFontFamily = getVariableByName('balance/title/fontFamily', modes) ?? 'JioType Var'
|
|
62
71
|
const titleLineHeight = getVariableByName('balance/title/lineHeight', modes) ?? 18
|
|
63
72
|
const titleFontWeightValue = getVariableByName('balance/title/fontWeight', modes) ?? 500
|
|
64
73
|
const titleFontWeight = typeof titleFontWeightValue === 'number'
|
|
@@ -79,13 +88,10 @@ function Balance({
|
|
|
79
88
|
fontWeight: titleFontWeight as any,
|
|
80
89
|
}
|
|
81
90
|
|
|
82
|
-
//
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
}
|
|
87
|
-
return child
|
|
88
|
-
})
|
|
91
|
+
// The money value renders at the Balance & Cards scale. Merge the default
|
|
92
|
+
// context mode first so the caller's `modes` can still override it, and
|
|
93
|
+
// force that context onto any slotted children so custom money values match.
|
|
94
|
+
const moneyValueModes: Modes = { ...DEFAULT_MONEY_VALUE_MODES, ...modes }
|
|
89
95
|
|
|
90
96
|
return (
|
|
91
97
|
<View style={[containerStyle, style]} data-node-id="1986:6203">
|
|
@@ -93,12 +99,12 @@ function Balance({
|
|
|
93
99
|
{title}
|
|
94
100
|
</Text>
|
|
95
101
|
{children ? (
|
|
96
|
-
|
|
102
|
+
cloneChildrenWithModes(children, modes, DEFAULT_MONEY_VALUE_MODES)
|
|
97
103
|
) : (
|
|
98
104
|
<MoneyValue
|
|
99
105
|
value={amount}
|
|
100
106
|
currency={currency}
|
|
101
|
-
modes={
|
|
107
|
+
modes={moneyValueModes}
|
|
102
108
|
/>
|
|
103
109
|
)}
|
|
104
110
|
</View>
|
|
@@ -4,6 +4,7 @@ import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
|
4
4
|
import { useTokens } from '../../design-tokens/JFSThemeProvider'
|
|
5
5
|
import BottomNavItem from '../BottomNavItem/BottomNavItem'
|
|
6
6
|
import { EMPTY_MODES } from '../../utils/react-utils'
|
|
7
|
+
import type { Modes } from '../../design-tokens'
|
|
7
8
|
|
|
8
9
|
type BottomNavProps = {
|
|
9
10
|
/**
|
|
@@ -20,7 +21,7 @@ type BottomNavProps = {
|
|
|
20
21
|
*/
|
|
21
22
|
children?: React.ReactNode;
|
|
22
23
|
|
|
23
|
-
modes?:
|
|
24
|
+
modes?: Modes;
|
|
24
25
|
style?: StyleProp<ViewStyle>;
|
|
25
26
|
accessibilityLabel?: string;
|
|
26
27
|
accessibilityHint?: string;
|
|
@@ -15,11 +15,12 @@ import { useTokens } from '../../design-tokens/JFSThemeProvider'
|
|
|
15
15
|
import Icon from '../../icons/Icon'
|
|
16
16
|
import { usePressableWebSupport, type SafePressableProps, type WebAccessibilityProps } from '../../utils/web-platform-utils'
|
|
17
17
|
import { EMPTY_MODES } from '../../utils/react-utils'
|
|
18
|
+
import type { Modes } from '../../design-tokens'
|
|
18
19
|
|
|
19
20
|
type BottomNavItemProps = SafePressableProps & {
|
|
20
21
|
iconName?: string;
|
|
21
22
|
label?: string;
|
|
22
|
-
modes?:
|
|
23
|
+
modes?: Modes;
|
|
23
24
|
onPress?: () => void;
|
|
24
25
|
disabled?: boolean;
|
|
25
26
|
style?: StyleProp<ViewStyle>;
|
|
@@ -51,7 +52,7 @@ interface BottomNavItemTokens {
|
|
|
51
52
|
}
|
|
52
53
|
|
|
53
54
|
function resolveBottomNavItemTokens(
|
|
54
|
-
modes:
|
|
55
|
+
modes: Modes,
|
|
55
56
|
disabled: boolean,
|
|
56
57
|
iconColorOverride?: string,
|
|
57
58
|
iconSizeOverride?: number,
|
|
@@ -12,6 +12,7 @@ import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
|
12
12
|
import { useTokens } from '../../design-tokens/JFSThemeProvider'
|
|
13
13
|
import { EMPTY_MODES, cloneChildrenWithModes } from '../../utils/react-utils'
|
|
14
14
|
import Avatar from '../Avatar/Avatar'
|
|
15
|
+
import type { Modes } from '../../design-tokens'
|
|
15
16
|
|
|
16
17
|
export type BrandChipProps = {
|
|
17
18
|
/** Visible label (e.g. `"Axis Bank • 0245"`). */
|
|
@@ -30,7 +31,7 @@ export type BrandChipProps = {
|
|
|
30
31
|
/** Optional press handler — when provided, the chip becomes a `Pressable`. */
|
|
31
32
|
onPress?: () => void
|
|
32
33
|
/** Design token modes for theming (e.g. `{ 'Color Mode': 'Light' }`). */
|
|
33
|
-
modes?:
|
|
34
|
+
modes?: Modes
|
|
34
35
|
/** Container style override. */
|
|
35
36
|
style?: StyleProp<ViewStyle>
|
|
36
37
|
/** Label style override. */
|
|
@@ -64,7 +65,7 @@ const toFontWeight = (
|
|
|
64
65
|
return fallback
|
|
65
66
|
}
|
|
66
67
|
|
|
67
|
-
function resolveBrandChipTokens(modes:
|
|
68
|
+
function resolveBrandChipTokens(modes: Modes): BrandChipTokens {
|
|
68
69
|
const background =
|
|
69
70
|
(getVariableByName('brandChip/background', modes) as string | null) ??
|
|
70
71
|
'#ffffff'
|
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
type ViewStyle,
|
|
8
8
|
} from 'react-native'
|
|
9
9
|
import { EMPTY_MODES } from '../../utils/react-utils'
|
|
10
|
+
import type { Modes } from '../../design-tokens'
|
|
10
11
|
import ClusterBubble, {
|
|
11
12
|
type ClusterBubbleLabelDirection,
|
|
12
13
|
type ClusterBubbleLabelPlacement,
|
|
@@ -78,7 +79,7 @@ export type BubbleChartProps = {
|
|
|
78
79
|
/** Notified when a bubble is pressed. Makes every bubble pressable. */
|
|
79
80
|
onBubblePress?: (datum: BubbleDatum, index: number) => void
|
|
80
81
|
/** Design token modes for theming (e.g. `{ 'Color Mode': 'Light' }`). */
|
|
81
|
-
modes?:
|
|
82
|
+
modes?: Modes
|
|
82
83
|
/** Container style override. */
|
|
83
84
|
style?: StyleProp<ViewStyle>
|
|
84
85
|
/** Accessibility label for the whole chart. */
|
|
@@ -16,6 +16,7 @@ import { EMPTY_MODES } from '../../utils/react-utils'
|
|
|
16
16
|
import Icon from '../../icons/Icon'
|
|
17
17
|
import Skeleton from '../../skeleton/Skeleton'
|
|
18
18
|
import { useSkeleton } from '../../skeleton/SkeletonGroup'
|
|
19
|
+
import type { Modes } from '../../design-tokens'
|
|
19
20
|
|
|
20
21
|
export type ButtonProps = SafePressableProps & {
|
|
21
22
|
label?: string;
|
|
@@ -44,7 +45,7 @@ export type ButtonProps = SafePressableProps & {
|
|
|
44
45
|
* Takes precedence over `trailing` if both are provided.
|
|
45
46
|
*/
|
|
46
47
|
icon?: string;
|
|
47
|
-
modes?:
|
|
48
|
+
modes?: Modes;
|
|
48
49
|
onPress?: () => void;
|
|
49
50
|
disabled?: boolean;
|
|
50
51
|
style?: StyleProp<ViewStyle>;
|
|
@@ -112,7 +113,7 @@ interface ButtonTokens {
|
|
|
112
113
|
accessoryOffset: number;
|
|
113
114
|
}
|
|
114
115
|
|
|
115
|
-
function resolveButtonTokens(modes:
|
|
116
|
+
function resolveButtonTokens(modes: Modes, disabled: boolean): ButtonTokens {
|
|
116
117
|
const backgroundColor = getVariableByName('button/background', modes) || '#cfa159'
|
|
117
118
|
const borderColor = getVariableByName('button/border/color', modes) || 'rgba(255,255,255,0)'
|
|
118
119
|
const borderWidth = getVariableByName('button/border/size', modes)
|
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
8
8
|
import { EMPTY_MODES, flattenChildren } from '../../utils/react-utils'
|
|
9
9
|
import IconButton from '../IconButton/IconButton'
|
|
10
|
+
import type { Modes } from '../../design-tokens'
|
|
10
11
|
|
|
11
12
|
export type ButtonGroupProps = {
|
|
12
13
|
/**
|
|
@@ -18,7 +19,7 @@ export type ButtonGroupProps = {
|
|
|
18
19
|
* Mode configuration for design tokens (e.g., {"Button / Size": "M", "Appearance": "high"})
|
|
19
20
|
* These modes are passed down to all child components.
|
|
20
21
|
*/
|
|
21
|
-
modes?:
|
|
22
|
+
modes?: Modes;
|
|
22
23
|
/**
|
|
23
24
|
* Additional styles for the container
|
|
24
25
|
*/
|
|
@@ -2,13 +2,14 @@ import React, { createContext, useContext, isValidElement, cloneElement, useMemo
|
|
|
2
2
|
import { View, Text, StyleSheet, type ViewStyle, type TextStyle, type StyleProp } 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
|
* Context to share 'modes' with child components like Card.Title and Card.SupportText.
|
|
8
9
|
* This ensures that nested components can resolve their tokens correctly without
|
|
9
10
|
* needing explicit mode prop passing for every child.
|
|
10
11
|
*/
|
|
11
|
-
const CardContext = createContext<{ modes?:
|
|
12
|
+
const CardContext = createContext<{ modes?: Modes }>({});
|
|
12
13
|
|
|
13
14
|
export interface CardProps {
|
|
14
15
|
/**
|
|
@@ -28,7 +29,7 @@ export interface CardProps {
|
|
|
28
29
|
/**
|
|
29
30
|
* Modes object for token resolution (e.g. { "Mode": "Dark" }).
|
|
30
31
|
*/
|
|
31
|
-
modes?:
|
|
32
|
+
modes?: Modes;
|
|
32
33
|
/**
|
|
33
34
|
* Aspect ratio for the media slot container.
|
|
34
35
|
* Default is based on Figma design 154/116 (~1.328).
|
|
@@ -151,7 +152,7 @@ export function Card({
|
|
|
151
152
|
export interface CardTextProps {
|
|
152
153
|
children?: React.ReactNode;
|
|
153
154
|
style?: StyleProp<TextStyle>;
|
|
154
|
-
modes?:
|
|
155
|
+
modes?: Modes;
|
|
155
156
|
}
|
|
156
157
|
|
|
157
158
|
/**
|
|
@@ -12,6 +12,7 @@ import Icon from '../../icons/Icon'
|
|
|
12
12
|
import { EMPTY_MODES, cloneChildrenWithModes } from '../../utils/react-utils'
|
|
13
13
|
import CircularProgressBar from '../CircularProgressBar/CircularProgressBar'
|
|
14
14
|
import Nudge from '../Nudge/Nudge'
|
|
15
|
+
import type { Modes } from '../../design-tokens'
|
|
15
16
|
|
|
16
17
|
type CardAdvisoryBaseProps = Omit<React.ComponentProps<typeof View>, 'children' | 'style'>
|
|
17
18
|
|
|
@@ -41,7 +42,7 @@ export type CardAdvisoryProps = CardAdvisoryBaseProps & {
|
|
|
41
42
|
/** Optional slot replacing the bottom nudge. Receives `modes` recursively. */
|
|
42
43
|
nudgeSlot?: React.ReactNode
|
|
43
44
|
/** Design token modes forwarded to token lookups and child components. */
|
|
44
|
-
modes?:
|
|
45
|
+
modes?: Modes
|
|
45
46
|
/** Optional container style override. */
|
|
46
47
|
style?: StyleProp<ViewStyle>
|
|
47
48
|
/** Optional main content row style override. */
|
|
@@ -94,7 +95,7 @@ const toFontWeight = (value: unknown, fallback: TextStyle['fontWeight']) => {
|
|
|
94
95
|
return fallback
|
|
95
96
|
}
|
|
96
97
|
|
|
97
|
-
function resolveCardAdvisoryTokens(modes:
|
|
98
|
+
function resolveCardAdvisoryTokens(modes: Modes): CardAdvisoryTokens {
|
|
98
99
|
const width = toNumber(getVariableByName('cardAdvisory/width', modes), 360)
|
|
99
100
|
const gap = toNumber(getVariableByName('cardAdvisory/gap', modes), 16)
|
|
100
101
|
const paddingHorizontal = toNumber(getVariableByName('cardAdvisory/padding/horizontal', modes), 0)
|
|
@@ -12,6 +12,7 @@ import Badge from '../Badge/Badge'
|
|
|
12
12
|
import Button from '../Button/Button'
|
|
13
13
|
import InstitutionBadge from '../InstitutionBadge/InstitutionBadge'
|
|
14
14
|
import type { UnifiedSource } from '../../utils/MediaSource'
|
|
15
|
+
import type { Modes } from '../../design-tokens'
|
|
15
16
|
|
|
16
17
|
export type CardBankAccountItem = {
|
|
17
18
|
/** Left-aligned label text (e.g. "Account type"). */
|
|
@@ -74,7 +75,7 @@ export type CardBankAccountProps = {
|
|
|
74
75
|
* out of the box. Caller-supplied modes are merged on top and can
|
|
75
76
|
* override any of the default keys.
|
|
76
77
|
*/
|
|
77
|
-
modes?:
|
|
78
|
+
modes?: Modes
|
|
78
79
|
/** Container style override. */
|
|
79
80
|
style?: StyleProp<ViewStyle>
|
|
80
81
|
/** Accessibility label for the card region. */
|
|
@@ -8,12 +8,13 @@ import Button from '../Button/Button'
|
|
|
8
8
|
import Badge from '../Badge/Badge'
|
|
9
9
|
import ButtonGroup from '../ButtonGroup/ButtonGroup'
|
|
10
10
|
import IconButton from '../IconButton/IconButton'
|
|
11
|
+
import type { Modes } from '../../design-tokens'
|
|
11
12
|
|
|
12
13
|
export type CardCTAType = 'cta' | 'rating'
|
|
13
14
|
|
|
14
15
|
const optionalTokenAvailability = new Map<string, boolean>()
|
|
15
16
|
|
|
16
|
-
function getOptionalVariableByName<T>(name: string, modes:
|
|
17
|
+
function getOptionalVariableByName<T>(name: string, modes: Modes, fallback: T): T {
|
|
17
18
|
let isAvailable = optionalTokenAvailability.get(name)
|
|
18
19
|
|
|
19
20
|
if (isAvailable === undefined) {
|
|
@@ -50,7 +51,7 @@ export type CardCTAProps = {
|
|
|
50
51
|
/** Callback for the default dislike action */
|
|
51
52
|
onPressDislike?: () => void;
|
|
52
53
|
/** Mode configuration for design token resolution */
|
|
53
|
-
modes?:
|
|
54
|
+
modes?: Modes;
|
|
54
55
|
/** Slot: replaces the default icon area (right side) */
|
|
55
56
|
iconSlot?: React.ReactNode;
|
|
56
57
|
/** Slot: replaces the default Button */
|
|
@@ -2,11 +2,12 @@ import React, { createContext, useContext, isValidElement, cloneElement } from '
|
|
|
2
2
|
import { View, Text, StyleSheet, type ViewStyle, type TextStyle, type StyleProp, Image } from 'react-native';
|
|
3
3
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver';
|
|
4
4
|
import IconComponent from '../../icons/Icon';
|
|
5
|
+
import type { Modes } from '../../design-tokens'
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
8
|
* Context to share 'modes' with child components.
|
|
8
9
|
*/
|
|
9
|
-
const CardFeedbackContext = createContext<{ modes?:
|
|
10
|
+
const CardFeedbackContext = createContext<{ modes?: Modes }>({});
|
|
10
11
|
|
|
11
12
|
export interface CardFeedbackProps {
|
|
12
13
|
/**
|
|
@@ -16,7 +17,7 @@ export interface CardFeedbackProps {
|
|
|
16
17
|
/**
|
|
17
18
|
* Modes object for token resolution.
|
|
18
19
|
*/
|
|
19
|
-
modes?:
|
|
20
|
+
modes?: Modes;
|
|
20
21
|
/**
|
|
21
22
|
* Style overrides for the card container.
|
|
22
23
|
*/
|
|
@@ -75,7 +76,7 @@ export function CardFeedback({
|
|
|
75
76
|
* Icon Wrapper
|
|
76
77
|
* Tokens: cardFeedback/icon/size, appearanceFeedback/cardFeedback/icon/color
|
|
77
78
|
*/
|
|
78
|
-
export function Icon({ children, style, modes: propModes, icon }: { children?: React.ReactNode; style?: StyleProp<ViewStyle>; modes?:
|
|
79
|
+
export function Icon({ children, style, modes: propModes, icon }: { children?: React.ReactNode; style?: StyleProp<ViewStyle>; modes?: Modes; icon?: string }) {
|
|
79
80
|
const context = useContext(CardFeedbackContext);
|
|
80
81
|
const modes = propModes || context.modes || {};
|
|
81
82
|
|
|
@@ -94,7 +95,7 @@ export function Icon({ children, style, modes: propModes, icon }: { children?: R
|
|
|
94
95
|
// Pass modes to children (e.g., icon components that accept modes)
|
|
95
96
|
const childrenWithModes = React.Children.map(children, child => {
|
|
96
97
|
if (isValidElement(child)) {
|
|
97
|
-
return cloneElement(child as React.ReactElement<{ modes?:
|
|
98
|
+
return cloneElement(child as React.ReactElement<{ modes?: Modes }>, { modes: { ...(child.props as any).modes, ...modes } });
|
|
98
99
|
}
|
|
99
100
|
return child;
|
|
100
101
|
});
|
|
@@ -115,7 +116,7 @@ export function Icon({ children, style, modes: propModes, icon }: { children?: R
|
|
|
115
116
|
* Wraps Title, Body, and sometimes Action.
|
|
116
117
|
* Tokens: cardFeedback/text/gap
|
|
117
118
|
*/
|
|
118
|
-
export function Content({ children, style, modes: propModes }: { children?: React.ReactNode; style?: StyleProp<ViewStyle>; modes?:
|
|
119
|
+
export function Content({ children, style, modes: propModes }: { children?: React.ReactNode; style?: StyleProp<ViewStyle>; modes?: Modes }) {
|
|
119
120
|
const context = useContext(CardFeedbackContext);
|
|
120
121
|
const modes = propModes || context.modes || {};
|
|
121
122
|
|
|
@@ -124,7 +125,7 @@ export function Content({ children, style, modes: propModes }: { children?: Reac
|
|
|
124
125
|
// Pass modes to children (Title, Body, etc.)
|
|
125
126
|
const childrenWithModes = React.Children.map(children, child => {
|
|
126
127
|
if (isValidElement(child)) {
|
|
127
|
-
return cloneElement(child as React.ReactElement<{ modes?:
|
|
128
|
+
return cloneElement(child as React.ReactElement<{ modes?: Modes }>, { modes: { ...(child.props as any).modes, ...modes } });
|
|
128
129
|
}
|
|
129
130
|
return child;
|
|
130
131
|
});
|
|
@@ -140,7 +141,7 @@ export function Content({ children, style, modes: propModes }: { children?: Reac
|
|
|
140
141
|
* Title Component
|
|
141
142
|
* Tokens: cardFeedback/title/*
|
|
142
143
|
*/
|
|
143
|
-
export function Title({ children, style, modes: propModes }: { children?: React.ReactNode; style?: StyleProp<TextStyle>; modes?:
|
|
144
|
+
export function Title({ children, style, modes: propModes }: { children?: React.ReactNode; style?: StyleProp<TextStyle>; modes?: Modes }) {
|
|
144
145
|
const context = useContext(CardFeedbackContext);
|
|
145
146
|
const modes = propModes || context.modes || {};
|
|
146
147
|
|
|
@@ -165,7 +166,7 @@ export function Title({ children, style, modes: propModes }: { children?: React.
|
|
|
165
166
|
* Body Component
|
|
166
167
|
* Tokens: cardFeedback/body/*
|
|
167
168
|
*/
|
|
168
|
-
export function Body({ children, style, modes: propModes }: { children?: React.ReactNode; style?: StyleProp<TextStyle>; modes?:
|
|
169
|
+
export function Body({ children, style, modes: propModes }: { children?: React.ReactNode; style?: StyleProp<TextStyle>; modes?: Modes }) {
|
|
169
170
|
const context = useContext(CardFeedbackContext);
|
|
170
171
|
const modes = propModes || context.modes || {};
|
|
171
172
|
|
|
@@ -190,7 +191,7 @@ export function Body({ children, style, modes: propModes }: { children?: React.R
|
|
|
190
191
|
* Action Slot Wrapper
|
|
191
192
|
* Tokens: cardFeedback/actionSlot/gap
|
|
192
193
|
*/
|
|
193
|
-
export function Action({ children, style, modes: propModes }: { children?: React.ReactNode; style?: StyleProp<ViewStyle>; modes?:
|
|
194
|
+
export function Action({ children, style, modes: propModes }: { children?: React.ReactNode; style?: StyleProp<ViewStyle>; modes?: Modes }) {
|
|
194
195
|
const context = useContext(CardFeedbackContext);
|
|
195
196
|
const modes = propModes || context.modes || {};
|
|
196
197
|
|
|
@@ -199,7 +200,7 @@ export function Action({ children, style, modes: propModes }: { children?: React
|
|
|
199
200
|
// "Maximise existing component usage" -> Pass modes to children (Buttons)
|
|
200
201
|
const childrenWithModes = React.Children.map(children, child => {
|
|
201
202
|
if (isValidElement(child)) {
|
|
202
|
-
return cloneElement(child as React.ReactElement<{ modes?:
|
|
203
|
+
return cloneElement(child as React.ReactElement<{ modes?: Modes }>, { modes: { ...(child.props as any).modes, ...modes } });
|
|
203
204
|
}
|
|
204
205
|
return child;
|
|
205
206
|
});
|
|
@@ -15,6 +15,7 @@ import CircularProgressBar, {
|
|
|
15
15
|
} from '../CircularProgressBar/CircularProgressBar'
|
|
16
16
|
import Divider from '../Divider/Divider'
|
|
17
17
|
import Nudge from '../Nudge/Nudge'
|
|
18
|
+
import type { Modes } from '../../design-tokens'
|
|
18
19
|
|
|
19
20
|
type CardFinancialConditionBaseProps = Omit<
|
|
20
21
|
React.ComponentProps<typeof View>,
|
|
@@ -51,7 +52,7 @@ export type CardFinancialConditionProps = CardFinancialConditionBaseProps & {
|
|
|
51
52
|
/** Slot replacing the default action button. Receives `modes` recursively. */
|
|
52
53
|
buttonSlot?: React.ReactNode
|
|
53
54
|
/** Design token modes forwarded to token lookups and child components. */
|
|
54
|
-
modes?:
|
|
55
|
+
modes?: Modes
|
|
55
56
|
/** Container style override. */
|
|
56
57
|
style?: StyleProp<ViewStyle>
|
|
57
58
|
/** Header row style override. */
|
|
@@ -100,7 +101,7 @@ const toFontWeight = (value: unknown, fallback: TextStyle['fontWeight']) => {
|
|
|
100
101
|
}
|
|
101
102
|
|
|
102
103
|
function resolveCardFinancialConditionTokens(
|
|
103
|
-
modes:
|
|
104
|
+
modes: Modes
|
|
104
105
|
): CardFinancialConditionTokens {
|
|
105
106
|
const background =
|
|
106
107
|
(getVariableByName('financialConditionCard/background', modes) as string) ||
|
|
@@ -12,6 +12,7 @@ import Badge from '../Badge/Badge'
|
|
|
12
12
|
import Divider from '../Divider/Divider'
|
|
13
13
|
import Nudge from '../Nudge/Nudge'
|
|
14
14
|
import SavingsGoalSummary from '../SavingsGoalSummary/SavingsGoalSummary'
|
|
15
|
+
import type { Modes } from '../../design-tokens'
|
|
15
16
|
|
|
16
17
|
export type CardInsightProps = {
|
|
17
18
|
/** Card title rendered in the header (left of the badge). */
|
|
@@ -41,7 +42,7 @@ export type CardInsightProps = {
|
|
|
41
42
|
*/
|
|
42
43
|
divider?: React.ReactNode | boolean
|
|
43
44
|
/** Design token modes for theming (e.g. `{ 'Color Mode': 'Light' }`). */
|
|
44
|
-
modes?:
|
|
45
|
+
modes?: Modes
|
|
45
46
|
/** Override container styles. */
|
|
46
47
|
style?: StyleProp<ViewStyle>
|
|
47
48
|
}
|
|
@@ -3,6 +3,7 @@ import { View, type ViewStyle, type StyleProp, type ImageSourcePropType } from '
|
|
|
3
3
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
4
4
|
import ProductLabel from '../ProductLabel/ProductLabel'
|
|
5
5
|
import { EMPTY_MODES, cloneChildrenWithModes } from '../../utils/react-utils'
|
|
6
|
+
import type { Modes } from '../../design-tokens'
|
|
6
7
|
|
|
7
8
|
export type CardProviderInfoProps = {
|
|
8
9
|
/** Product name shown in the ProductLabel header. */
|
|
@@ -12,7 +13,7 @@ export type CardProviderInfoProps = {
|
|
|
12
13
|
/** Slot content — typically StatItem components arranged in a 2-column grid. */
|
|
13
14
|
children?: React.ReactNode
|
|
14
15
|
/** Design token modes for theming. */
|
|
15
|
-
modes?:
|
|
16
|
+
modes?: Modes
|
|
16
17
|
/** Override container styles. */
|
|
17
18
|
style?: StyleProp<ViewStyle>
|
|
18
19
|
}
|
|
@@ -20,13 +20,14 @@ import {
|
|
|
20
20
|
} from 'react-native'
|
|
21
21
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
22
22
|
import { EMPTY_MODES } from '../../utils/react-utils'
|
|
23
|
+
import type { Modes } from '../../design-tokens'
|
|
23
24
|
|
|
24
25
|
// ---------------------------------------------------------------------------
|
|
25
26
|
// Context
|
|
26
27
|
// ---------------------------------------------------------------------------
|
|
27
28
|
|
|
28
29
|
interface CarouselContextValue {
|
|
29
|
-
modes:
|
|
30
|
+
modes: Modes
|
|
30
31
|
activeIndex: number
|
|
31
32
|
totalItems: number
|
|
32
33
|
goTo: (index: number) => void
|
|
@@ -51,7 +52,7 @@ export interface CarouselProps {
|
|
|
51
52
|
/** Content items to display (should be Carousel.Item or any React nodes). */
|
|
52
53
|
children?: React.ReactNode
|
|
53
54
|
/** Modes object for design-token resolution. */
|
|
54
|
-
modes?:
|
|
55
|
+
modes?: Modes
|
|
55
56
|
/** Enable auto-play. Default: false. */
|
|
56
57
|
autoPlay?: boolean
|
|
57
58
|
/** Auto-play interval in ms. Default: 4000. */
|
|
@@ -342,7 +343,7 @@ export function Carousel({
|
|
|
342
343
|
|
|
343
344
|
export interface CarouselItemProps {
|
|
344
345
|
children?: React.ReactNode
|
|
345
|
-
modes?:
|
|
346
|
+
modes?: Modes
|
|
346
347
|
style?: StyleProp<ViewStyle>
|
|
347
348
|
}
|
|
348
349
|
|
|
@@ -359,7 +360,7 @@ export function Item({ children, modes: _modes, style }: CarouselItemProps) {
|
|
|
359
360
|
// ---------------------------------------------------------------------------
|
|
360
361
|
|
|
361
362
|
export interface PaginationProps {
|
|
362
|
-
modes?:
|
|
363
|
+
modes?: Modes
|
|
363
364
|
style?: StyleProp<ViewStyle>
|
|
364
365
|
}
|
|
365
366
|
|
|
@@ -9,6 +9,7 @@ import {
|
|
|
9
9
|
import Svg, { Path } from 'react-native-svg'
|
|
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
|
/**
|
|
14
15
|
* Tracks whether the last user interaction was a keyboard event (Tab).
|
|
@@ -80,7 +81,7 @@ export interface CheckboxProps {
|
|
|
80
81
|
/** Whether the checkbox is disabled */
|
|
81
82
|
disabled?: boolean
|
|
82
83
|
/** Design token modes for theming */
|
|
83
|
-
modes?:
|
|
84
|
+
modes?: Modes
|
|
84
85
|
/** Override container styles */
|
|
85
86
|
style?: StyleProp<ViewStyle>
|
|
86
87
|
/** Accessibility label for screen readers */
|
|
@@ -3,6 +3,7 @@ import { View, type StyleProp, type ViewStyle } from 'react-native'
|
|
|
3
3
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
4
4
|
import { EMPTY_MODES, cloneChildrenWithModes } from '../../utils/react-utils'
|
|
5
5
|
import CheckboxItem from '../CheckboxItem/CheckboxItem'
|
|
6
|
+
import type { Modes } from '../../design-tokens'
|
|
6
7
|
|
|
7
8
|
export type CheckboxGroupProps = {
|
|
8
9
|
/**
|
|
@@ -14,7 +15,7 @@ export type CheckboxGroupProps = {
|
|
|
14
15
|
*/
|
|
15
16
|
children?: React.ReactNode
|
|
16
17
|
/** Design token modes for theming (e.g. `{ 'Color Mode': 'Light' }`). */
|
|
17
|
-
modes?:
|
|
18
|
+
modes?: Modes
|
|
18
19
|
/** Override container styles. */
|
|
19
20
|
style?: StyleProp<ViewStyle>
|
|
20
21
|
/** Accessibility label for the surrounding group. */
|
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
11
11
|
import { EMPTY_MODES, cloneChildrenWithModes } from '../../utils/react-utils'
|
|
12
12
|
import Checkbox from '../Checkbox/Checkbox'
|
|
13
|
+
import type { Modes } from '../../design-tokens'
|
|
13
14
|
|
|
14
15
|
export type CheckboxItemProps = {
|
|
15
16
|
/** Whether the checkbox is checked (controlled). */
|
|
@@ -43,7 +44,7 @@ export type CheckboxItemProps = {
|
|
|
43
44
|
/** Width of the end slot container in pixels. Defaults to 80 to match the Figma reference. */
|
|
44
45
|
endSlotWidth?: number
|
|
45
46
|
/** Design token modes for theming (e.g. `{ 'Color Mode': 'Light' }`). */
|
|
46
|
-
modes?:
|
|
47
|
+
modes?: Modes
|
|
47
48
|
/** Override container styles. */
|
|
48
49
|
style?: StyleProp<ViewStyle>
|
|
49
50
|
/** Override the label text styles. */
|
|
@@ -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, flattenChildren } from '../../utils/react-utils';
|
|
5
|
+
import type { Modes } from '../../design-tokens'
|
|
5
6
|
|
|
6
7
|
export type ChipGroupProps = {
|
|
7
8
|
/**
|
|
@@ -13,7 +14,7 @@ export type ChipGroupProps = {
|
|
|
13
14
|
* Mode configuration for design tokens.
|
|
14
15
|
* These modes are passed down to all child components.
|
|
15
16
|
*/
|
|
16
|
-
modes?:
|
|
17
|
+
modes?: Modes;
|
|
17
18
|
/**
|
|
18
19
|
* Additional styles for the container.
|
|
19
20
|
*/
|
|
@@ -3,6 +3,7 @@ import { View, Text, TouchableOpacity, type StyleProp, type ViewStyle, type Text
|
|
|
3
3
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver';
|
|
4
4
|
import { EMPTY_MODES } from '../../utils/react-utils';
|
|
5
5
|
import Icon from '../../icons/Icon';
|
|
6
|
+
import type { Modes } from '../../design-tokens'
|
|
6
7
|
|
|
7
8
|
export type ChipSelectProps = {
|
|
8
9
|
/**
|
|
@@ -23,7 +24,7 @@ export type ChipSelectProps = {
|
|
|
23
24
|
/**
|
|
24
25
|
* Modes for design token resolution.
|
|
25
26
|
*/
|
|
26
|
-
modes?:
|
|
27
|
+
modes?: Modes;
|
|
27
28
|
/**
|
|
28
29
|
* Optional style overrides.
|
|
29
30
|
*/
|
|
@@ -5,6 +5,7 @@ import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
|
5
5
|
import { useTokens } from '../../design-tokens/JFSThemeProvider'
|
|
6
6
|
import { EMPTY_MODES } from '../../utils/react-utils'
|
|
7
7
|
import { IconMinus } from '../../icons/components/IconMinus'
|
|
8
|
+
import type { Modes } from '../../design-tokens'
|
|
8
9
|
|
|
9
10
|
type CircularProgressBarBaseProps = Omit<React.ComponentProps<typeof View>, 'children' | 'style'>
|
|
10
11
|
|
|
@@ -26,7 +27,7 @@ export type CircularProgressBarProps = CircularProgressBarBaseProps & {
|
|
|
26
27
|
*/
|
|
27
28
|
supportText?: string
|
|
28
29
|
/** Design token modes forwarded to token lookups. */
|
|
29
|
-
modes?:
|
|
30
|
+
modes?: Modes
|
|
30
31
|
/** Container style override. */
|
|
31
32
|
style?: StyleProp<ViewStyle>
|
|
32
33
|
/** Track stroke style override. */
|
|
@@ -13,6 +13,7 @@ import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
|
13
13
|
import { useTokens } from '../../design-tokens/JFSThemeProvider'
|
|
14
14
|
import { EMPTY_MODES, cloneChildrenWithModes } from '../../utils/react-utils'
|
|
15
15
|
import { IconChevronright } from '../../icons/components/IconChevronright'
|
|
16
|
+
import type { Modes } from '../../design-tokens'
|
|
16
17
|
|
|
17
18
|
type CircularProgressBarDotedBaseProps = Omit<React.ComponentProps<typeof View>, 'children' | 'style'>
|
|
18
19
|
|
|
@@ -32,7 +33,7 @@ export type CircularProgressBarDotedProps = CircularProgressBarDotedBaseProps &
|
|
|
32
33
|
/** Called when the tier row is pressed. */
|
|
33
34
|
onTierPress?: () => void
|
|
34
35
|
/** Design token modes forwarded to token lookups and slot children. */
|
|
35
|
-
modes?:
|
|
36
|
+
modes?: Modes
|
|
36
37
|
/** Slot rendered in the center of the dotted ring. Receives `modes` recursively. */
|
|
37
38
|
children?: React.ReactNode
|
|
38
39
|
/** Container style override. */
|