jfs-components 0.1.0 → 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 +8 -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/DropdownInput/DropdownInput.js +1 -1
- package/lib/commonjs/components/FullscreenModal/FullscreenModal.js +62 -2
- 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/TextInput/TextInput.js +2 -1
- package/lib/commonjs/components/docs/modeControls.js +116 -0
- package/lib/commonjs/components/index.js +7 -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/DropdownInput/DropdownInput.js +1 -1
- package/lib/module/components/FullscreenModal/FullscreenModal.js +64 -5
- 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/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 +1 -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 +2 -1
- package/lib/typescript/src/components/Gauge/Gauge.d.ts +2 -1
- package/lib/typescript/src/components/HStack/HStack.d.ts +2 -1
- package/lib/typescript/src/components/HoldingsCard/HoldingsCard.d.ts +2 -1
- package/lib/typescript/src/components/Icon/Icon.d.ts +2 -1
- package/lib/typescript/src/components/IconButton/IconButton.d.ts +2 -1
- package/lib/typescript/src/components/IconCapsule/IconCapsule.d.ts +2 -1
- package/lib/typescript/src/components/Image/Image.d.ts +17 -1
- package/lib/typescript/src/components/InputSearch/InputSearch.d.ts +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 +2 -1
- 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 +1 -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 +4 -3
- 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 +68 -10
- package/src/components/Gauge/Gauge.tsx +2 -1
- package/src/components/HStack/HStack.tsx +2 -1
- package/src/components/HoldingsCard/HoldingsCard.tsx +2 -1
- package/src/components/Icon/Icon.tsx +3 -2
- package/src/components/IconButton/IconButton.tsx +3 -2
- package/src/components/IconCapsule/IconCapsule.tsx +3 -2
- package/src/components/Image/Image.tsx +29 -5
- package/src/components/InputSearch/InputSearch.tsx +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 +2 -1
- 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 +1 -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
|
@@ -4,6 +4,7 @@ import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
|
4
4
|
import { Step } from './Step'
|
|
5
5
|
import { StepLabel } from './StepLabel'
|
|
6
6
|
import { EMPTY_MODES } from '../../utils/react-utils'
|
|
7
|
+
import type { Modes } from '../../design-tokens'
|
|
7
8
|
|
|
8
9
|
export { Step, StepLabel }
|
|
9
10
|
export type { StepProps, StepStatus } from './Step'
|
|
@@ -11,7 +12,7 @@ export type { StepLabelProps } from './StepLabel'
|
|
|
11
12
|
|
|
12
13
|
export type StepperProps = {
|
|
13
14
|
children?: React.ReactNode
|
|
14
|
-
modes?:
|
|
15
|
+
modes?: Modes
|
|
15
16
|
style?: ViewStyle
|
|
16
17
|
}
|
|
17
18
|
|
|
@@ -2,6 +2,7 @@ import React from 'react'
|
|
|
2
2
|
import { View, type StyleProp, type ViewStyle } from 'react-native'
|
|
3
3
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
4
4
|
import { EMPTY_MODES } from '../../utils/react-utils'
|
|
5
|
+
import type { Modes } from '../../design-tokens'
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
8
|
* Confidence levels supported by the indicator. Mirrors the Figma `Confidence`
|
|
@@ -40,7 +41,7 @@ export type StrengthIndicatorProps = {
|
|
|
40
41
|
*/
|
|
41
42
|
confidence?: StrengthIndicatorConfidenceValue
|
|
42
43
|
/** Design token modes for theming (e.g. `{ 'Color Mode': 'Light' }`). */
|
|
43
|
-
modes?:
|
|
44
|
+
modes?: Modes
|
|
44
45
|
/** Override container styles. */
|
|
45
46
|
style?: StyleProp<ViewStyle>
|
|
46
47
|
} & Omit<React.ComponentProps<typeof View>, 'style'>
|
|
@@ -23,6 +23,7 @@ import { EMPTY_MODES } from '../../utils/react-utils'
|
|
|
23
23
|
import SupportText from '../SupportText/SupportText'
|
|
24
24
|
import type { SupportTextStatus } from '../SupportText/SupportTextIcon'
|
|
25
25
|
import Dropdown, { DropdownItem } from '../Dropdown/Dropdown'
|
|
26
|
+
import type { Modes } from '../../design-tokens'
|
|
26
27
|
|
|
27
28
|
const IS_WEB = Platform.OS === 'web'
|
|
28
29
|
|
|
@@ -134,7 +135,7 @@ export type SuggestiveSearchProps = {
|
|
|
134
135
|
/** Replaces `supportText` when `isInvalid` is true. */
|
|
135
136
|
errorMessage?: string
|
|
136
137
|
/** Modes for design token resolution. */
|
|
137
|
-
modes?:
|
|
138
|
+
modes?: Modes
|
|
138
139
|
/** Style overrides for the outermost wrapper. */
|
|
139
140
|
style?: StyleProp<ViewStyle>
|
|
140
141
|
/** Style overrides for the input row. */
|
|
@@ -180,7 +181,7 @@ const defaultFilter = (query: string, option: SuggestiveSearchOption) =>
|
|
|
180
181
|
// Token resolution
|
|
181
182
|
// ---------------------------------------------------------------------------
|
|
182
183
|
|
|
183
|
-
function useFormFieldTokens(modes:
|
|
184
|
+
function useFormFieldTokens(modes: Modes) {
|
|
184
185
|
return useMemo(() => {
|
|
185
186
|
const labelColor =
|
|
186
187
|
(getVariableByName('formField/label/color', modes) as string) ||
|
|
@@ -261,7 +262,7 @@ function useFormFieldTokens(modes: Record<string, any>) {
|
|
|
261
262
|
}, [modes])
|
|
262
263
|
}
|
|
263
264
|
|
|
264
|
-
function useDropdownItemTextTokens(modes:
|
|
265
|
+
function useDropdownItemTextTokens(modes: Modes) {
|
|
265
266
|
return useMemo(() => {
|
|
266
267
|
const foreground =
|
|
267
268
|
(getVariableByName('dropdownItem/foreground', modes) as string) ||
|
|
@@ -15,6 +15,7 @@ import NavArrow from '../NavArrow/NavArrow'
|
|
|
15
15
|
import StrengthIndicator, {
|
|
16
16
|
type StrengthIndicatorConfidenceValue,
|
|
17
17
|
} from '../StrengthIndicator/StrengthIndicator'
|
|
18
|
+
import type { Modes } from '../../design-tokens'
|
|
18
19
|
|
|
19
20
|
export type SummaryTileProps = {
|
|
20
21
|
/** Bold heading shown at the top-left of the tile. */
|
|
@@ -50,7 +51,7 @@ export type SummaryTileProps = {
|
|
|
50
51
|
*/
|
|
51
52
|
onPress?: () => void
|
|
52
53
|
/** Design token modes for theming (e.g. `{ 'Color Mode': 'Light' }`). */
|
|
53
|
-
modes?:
|
|
54
|
+
modes?: Modes
|
|
54
55
|
/** Override container styles. */
|
|
55
56
|
style?: StyleProp<ViewStyle>
|
|
56
57
|
/** Override the title text styles. */
|
|
@@ -4,6 +4,7 @@ import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
|
4
4
|
import { useTokens } from '../../design-tokens/JFSThemeProvider';
|
|
5
5
|
import SupportTextIcon, { type SupportTextStatus } from './SupportTextIcon';
|
|
6
6
|
import { EMPTY_MODES } from '../../utils/react-utils';
|
|
7
|
+
import type { Modes } from '../../design-tokens'
|
|
7
8
|
|
|
8
9
|
export type SupportTextProps = {
|
|
9
10
|
/**
|
|
@@ -27,7 +28,7 @@ export type SupportTextProps = {
|
|
|
27
28
|
/**
|
|
28
29
|
* Modes object for design token resolution.
|
|
29
30
|
*/
|
|
30
|
-
modes?:
|
|
31
|
+
modes?: Modes;
|
|
31
32
|
|
|
32
33
|
style?: StyleProp<ViewStyle>;
|
|
33
34
|
};
|
|
@@ -3,12 +3,13 @@ import { View, type ViewStyle } from 'react-native';
|
|
|
3
3
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver';
|
|
4
4
|
import Icon from '../../icons/Icon';
|
|
5
5
|
import { EMPTY_MODES } from '../../utils/react-utils';
|
|
6
|
+
import type { Modes } from '../../design-tokens'
|
|
6
7
|
|
|
7
8
|
export type SupportTextStatus = 'Neutral' | 'Warning' | 'Error' | 'Success' | 'Loading';
|
|
8
9
|
|
|
9
10
|
export type SupportTextIconProps = {
|
|
10
11
|
status?: SupportTextStatus;
|
|
11
|
-
modes?:
|
|
12
|
+
modes?: Modes;
|
|
12
13
|
style?: ViewStyle;
|
|
13
14
|
};
|
|
14
15
|
|
|
@@ -3,6 +3,7 @@ import { View, Text, type ViewStyle, type TextStyle } from 'react-native'
|
|
|
3
3
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
4
4
|
import Button from '../Button/Button'
|
|
5
5
|
import { EMPTY_MODES } from '../../utils/react-utils'
|
|
6
|
+
import type { Modes } from '../../design-tokens'
|
|
6
7
|
|
|
7
8
|
export type SwappableAmountProps = {
|
|
8
9
|
/** Large display value (e.g. "49g"). */
|
|
@@ -18,7 +19,7 @@ export type SwappableAmountProps = {
|
|
|
18
19
|
/** Callback when the amount/swap button is pressed. */
|
|
19
20
|
onAmountPress?: () => void
|
|
20
21
|
/** Modes configuration for design token resolution. */
|
|
21
|
-
modes?:
|
|
22
|
+
modes?: Modes
|
|
22
23
|
/** Container style override. */
|
|
23
24
|
style?: ViewStyle
|
|
24
25
|
}
|
|
@@ -9,6 +9,7 @@ import {
|
|
|
9
9
|
} from 'react-native'
|
|
10
10
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
11
11
|
import { EMPTY_MODES } from '../../utils/react-utils'
|
|
12
|
+
import type { Modes } from '../../design-tokens'
|
|
12
13
|
|
|
13
14
|
export interface TabItemProps {
|
|
14
15
|
/** Label text to display */
|
|
@@ -18,7 +19,7 @@ export interface TabItemProps {
|
|
|
18
19
|
/** Callback when this tab item is pressed */
|
|
19
20
|
onPress?: () => void
|
|
20
21
|
/** Design token modes for theming */
|
|
21
|
-
modes?:
|
|
22
|
+
modes?: Modes
|
|
22
23
|
/** Override container styles */
|
|
23
24
|
style?: StyleProp<ViewStyle>
|
|
24
25
|
/** Override label text styles */
|
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
9
9
|
import TabItem from './TabItem'
|
|
10
10
|
import { EMPTY_MODES } from '../../utils/react-utils'
|
|
11
|
+
import type { Modes } from '../../design-tokens'
|
|
11
12
|
|
|
12
13
|
export interface TabsProps {
|
|
13
14
|
/**
|
|
@@ -16,7 +17,7 @@ export interface TabsProps {
|
|
|
16
17
|
*/
|
|
17
18
|
children: React.ReactNode
|
|
18
19
|
/** Design token modes for theming */
|
|
19
|
-
modes?:
|
|
20
|
+
modes?: Modes
|
|
20
21
|
/**
|
|
21
22
|
* When true, the tabs row scrolls horizontally (useful for many items).
|
|
22
23
|
* @default false
|
|
@@ -9,6 +9,7 @@ import {
|
|
|
9
9
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
10
10
|
import { EMPTY_MODES } from '../../utils/react-utils'
|
|
11
11
|
import Avatar, { type AvatarProps } from '../Avatar/Avatar'
|
|
12
|
+
import type { Modes } from '../../design-tokens'
|
|
12
13
|
|
|
13
14
|
export type TestimonialsCardProps = {
|
|
14
15
|
/**
|
|
@@ -23,7 +24,7 @@ export type TestimonialsCardProps = {
|
|
|
23
24
|
* Mode configuration passed to the token resolver. Also forwarded to the
|
|
24
25
|
* Avatar child for consistent theming.
|
|
25
26
|
*/
|
|
26
|
-
modes?:
|
|
27
|
+
modes?: Modes
|
|
27
28
|
/**
|
|
28
29
|
* Optional style overrides for the card container.
|
|
29
30
|
*/
|
|
@@ -4,6 +4,7 @@ import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
|
4
4
|
import { EMPTY_MODES } from '../../utils/react-utils'
|
|
5
5
|
import Skeleton from '../../skeleton/Skeleton'
|
|
6
6
|
import { useSkeleton } from '../../skeleton/SkeletonGroup'
|
|
7
|
+
import type { Modes } from '../../design-tokens'
|
|
7
8
|
|
|
8
9
|
export type TextProps = {
|
|
9
10
|
/**
|
|
@@ -20,7 +21,7 @@ export type TextProps = {
|
|
|
20
21
|
/** Horizontal alignment of the text. */
|
|
21
22
|
textAlign?: 'Left' | 'Center'
|
|
22
23
|
/** Modes configuration for design token resolution. */
|
|
23
|
-
modes?:
|
|
24
|
+
modes?: Modes
|
|
24
25
|
/** Style override for the text. */
|
|
25
26
|
style?: StyleProp<TextStyle>
|
|
26
27
|
/** Number of lines to limit the text to. */
|
|
@@ -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;
|
|
@@ -2,6 +2,7 @@ import React, { isValidElement, cloneElement, type ReactNode } from 'react'
|
|
|
2
2
|
import { View, Text, type ViewStyle, type TextStyle } from 'react-native'
|
|
3
3
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
4
4
|
import { EMPTY_MODES } from '../../utils/react-utils'
|
|
5
|
+
import type { Modes } from '../../design-tokens'
|
|
5
6
|
|
|
6
7
|
export type ThreadHeroProps = {
|
|
7
8
|
/** Title text, e.g. "Subhash Rajan" */
|
|
@@ -13,7 +14,7 @@ export type ThreadHeroProps = {
|
|
|
13
14
|
/** Slot for Avatar component */
|
|
14
15
|
renderAvatar?: ReactNode
|
|
15
16
|
/** Modes for design token resolution */
|
|
16
|
-
modes?:
|
|
17
|
+
modes?: Modes
|
|
17
18
|
/** Optional container style */
|
|
18
19
|
style?: ViewStyle
|
|
19
20
|
}
|
|
@@ -3,6 +3,7 @@ import { View, Text, type StyleProp, type ViewStyle, type TextStyle } from 'reac
|
|
|
3
3
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
4
4
|
import { useTokens } from '../../design-tokens/JFSThemeProvider'
|
|
5
5
|
import { EMPTY_MODES } from '../../utils/react-utils'
|
|
6
|
+
import type { Modes } from '../../design-tokens'
|
|
6
7
|
|
|
7
8
|
export type TitleProps = {
|
|
8
9
|
title?: string;
|
|
@@ -10,7 +11,7 @@ export type TitleProps = {
|
|
|
10
11
|
subtitle?: string;
|
|
11
12
|
/** Horizontal alignment of the title text. */
|
|
12
13
|
textAlign?: 'Left' | 'Center';
|
|
13
|
-
modes?:
|
|
14
|
+
modes?: Modes;
|
|
14
15
|
style?: StyleProp<ViewStyle>;
|
|
15
16
|
textStyle?: StyleProp<TextStyle>;
|
|
16
17
|
/** Optional style overrides for the subtitle text. */
|
|
@@ -4,13 +4,14 @@ import Animated, { FadeIn, FadeOut, SlideInDown, SlideInUp } from 'react-native-
|
|
|
4
4
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
5
5
|
import { closeToast, type ToastPlacement } from './useToast'
|
|
6
6
|
import { EMPTY_MODES } from '../../utils/react-utils'
|
|
7
|
+
import type { Modes } from '../../design-tokens'
|
|
7
8
|
|
|
8
9
|
export interface ToastProps {
|
|
9
10
|
id: string
|
|
10
11
|
title: string
|
|
11
12
|
timeout?: number | undefined
|
|
12
13
|
onClose?: (() => void) | undefined
|
|
13
|
-
modes?:
|
|
14
|
+
modes?: Modes | undefined
|
|
14
15
|
placement?: ToastPlacement | undefined
|
|
15
16
|
style?: StyleProp<ViewStyle> | undefined
|
|
16
17
|
}
|
|
@@ -3,12 +3,13 @@ import { StyleSheet, View } from 'react-native'
|
|
|
3
3
|
import { useSafeAreaInsets } from 'react-native-safe-area-context'
|
|
4
4
|
import { useToast, type ToastPlacement } from './useToast'
|
|
5
5
|
import Toast from './Toast'
|
|
6
|
+
import type { Modes } from '../../design-tokens'
|
|
6
7
|
|
|
7
8
|
export interface ToastProviderProps {
|
|
8
9
|
children: React.ReactNode
|
|
9
10
|
maxVisibleToasts?: number
|
|
10
11
|
placement?: ToastPlacement
|
|
11
|
-
modes?:
|
|
12
|
+
modes?: Modes
|
|
12
13
|
}
|
|
13
14
|
|
|
14
15
|
function ToastProvider({
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { useCallback, useSyncExternalStore } from 'react'
|
|
2
|
+
import type { Modes } from '../../design-tokens'
|
|
2
3
|
|
|
3
4
|
export type ToastPlacement = 'top' | 'bottom'
|
|
4
5
|
|
|
@@ -6,7 +7,7 @@ export interface ToastOptions {
|
|
|
6
7
|
title: string
|
|
7
8
|
timeout?: number
|
|
8
9
|
onClose?: () => void
|
|
9
|
-
modes?:
|
|
10
|
+
modes?: Modes
|
|
10
11
|
}
|
|
11
12
|
|
|
12
13
|
export interface ToastEntry {
|
|
@@ -14,7 +15,7 @@ export interface ToastEntry {
|
|
|
14
15
|
title: string
|
|
15
16
|
timeout: number
|
|
16
17
|
onClose?: (() => void) | undefined
|
|
17
|
-
modes?:
|
|
18
|
+
modes?: Modes | undefined
|
|
18
19
|
}
|
|
19
20
|
|
|
20
21
|
type Listener = () => void
|
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
} from 'react-native'
|
|
9
9
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
10
10
|
import { EMPTY_MODES } from '../../utils/react-utils'
|
|
11
|
+
import type { Modes } from '../../design-tokens'
|
|
11
12
|
|
|
12
13
|
export interface ToggleProps {
|
|
13
14
|
/** Whether the toggle is on (controlled) */
|
|
@@ -19,7 +20,7 @@ export interface ToggleProps {
|
|
|
19
20
|
/** Whether the toggle is disabled */
|
|
20
21
|
disabled?: boolean
|
|
21
22
|
/** Design token modes for theming */
|
|
22
|
-
modes?:
|
|
23
|
+
modes?: Modes
|
|
23
24
|
/** Override container styles */
|
|
24
25
|
style?: StyleProp<ViewStyle>
|
|
25
26
|
/** Accessibility label for screen readers */
|
|
@@ -22,6 +22,7 @@ import Svg, { Path } from 'react-native-svg'
|
|
|
22
22
|
import { useSafeAreaInsets } from 'react-native-safe-area-context'
|
|
23
23
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
24
24
|
import { EMPTY_MODES } from '../../utils/react-utils'
|
|
25
|
+
import type { Modes } from '../../design-tokens'
|
|
25
26
|
|
|
26
27
|
// --- Types ---
|
|
27
28
|
|
|
@@ -49,7 +50,7 @@ type TooltipContextValue = {
|
|
|
49
50
|
setTriggerRect: (rect: Rect | null) => void
|
|
50
51
|
contentSize: Size | null
|
|
51
52
|
setContentSize: (size: Size) => void
|
|
52
|
-
modes:
|
|
53
|
+
modes: Modes
|
|
53
54
|
placement: Placement
|
|
54
55
|
}
|
|
55
56
|
|
|
@@ -81,7 +82,7 @@ function useTooltipContext() {
|
|
|
81
82
|
|
|
82
83
|
export type TooltipProps = {
|
|
83
84
|
children: ReactNode
|
|
84
|
-
modes?:
|
|
85
|
+
modes?: Modes
|
|
85
86
|
/** Initial visibility state (controlled) */
|
|
86
87
|
open?: boolean
|
|
87
88
|
/** Callback when visibility changes */
|
|
@@ -6,6 +6,7 @@ import TransactionStatus from '../TransactionStatus/TransactionStatus'
|
|
|
6
6
|
import NavArrow from '../NavArrow/NavArrow'
|
|
7
7
|
import { EMPTY_MODES, cloneChildrenWithModes } from '../../utils/react-utils'
|
|
8
8
|
import { usePressableWebSupport, type WebAccessibilityProps } from '../../utils/web-platform-utils'
|
|
9
|
+
import type { Modes } from '../../design-tokens'
|
|
9
10
|
|
|
10
11
|
export type TransactionBubbleProps = {
|
|
11
12
|
description?: string
|
|
@@ -16,7 +17,7 @@ export type TransactionBubbleProps = {
|
|
|
16
17
|
/** Slot for the status area. When provided, replaces the default TransactionStatus + NavArrow. */
|
|
17
18
|
statusSlot?: React.ReactNode
|
|
18
19
|
children?: React.ReactNode
|
|
19
|
-
modes?:
|
|
20
|
+
modes?: Modes
|
|
20
21
|
onPress?: () => void
|
|
21
22
|
style?: ViewStyle
|
|
22
23
|
accessibilityLabel?: string
|
|
@@ -3,6 +3,7 @@ import { View, Text, type StyleProp, type ViewStyle, type TextStyle } from 'reac
|
|
|
3
3
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
4
4
|
|
|
5
5
|
import { EMPTY_MODES, cloneChildrenWithModes } from '../../utils/react-utils'
|
|
6
|
+
import type { Modes } from '../../design-tokens'
|
|
6
7
|
|
|
7
8
|
// ===== Item Subcomponent =====
|
|
8
9
|
|
|
@@ -12,7 +13,7 @@ export type TransactionDetailsItemProps = {
|
|
|
12
13
|
/** The value text displayed below the label (e.g., "101674916166") */
|
|
13
14
|
value?: string
|
|
14
15
|
/** Modes object passed to `getVariableByName` for design token resolution */
|
|
15
|
-
modes?:
|
|
16
|
+
modes?: Modes
|
|
16
17
|
/** Optional container style overrides */
|
|
17
18
|
style?: StyleProp<ViewStyle>
|
|
18
19
|
/** Optional label text style overrides */
|
|
@@ -126,7 +127,7 @@ export type TransactionDetailsProps = {
|
|
|
126
127
|
/** Slot for TransactionDetails.Item children */
|
|
127
128
|
children?: React.ReactNode
|
|
128
129
|
/** Modes object passed to `getVariableByName` for design token resolution */
|
|
129
|
-
modes?:
|
|
130
|
+
modes?: Modes
|
|
130
131
|
/** Optional container style overrides */
|
|
131
132
|
style?: StyleProp<ViewStyle>
|
|
132
133
|
/** Accessibility label for screen readers */
|
|
@@ -3,10 +3,11 @@ import { View, Text, type ViewStyle, type TextStyle } from 'react-native'
|
|
|
3
3
|
import { Svg, Path } from 'react-native-svg'
|
|
4
4
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
5
5
|
import { EMPTY_MODES } from '../../utils/react-utils'
|
|
6
|
+
import type { Modes } from '../../design-tokens'
|
|
6
7
|
|
|
7
8
|
// --- Internal Icon Component ---
|
|
8
9
|
type StatusIconProps = {
|
|
9
|
-
modes?:
|
|
10
|
+
modes?: Modes
|
|
10
11
|
width?: number
|
|
11
12
|
height?: number
|
|
12
13
|
color?: string
|
|
@@ -44,7 +45,7 @@ export type TransactionStatusProps = {
|
|
|
44
45
|
/** Date text, e.g. "20 Mar 2025" */
|
|
45
46
|
date?: string
|
|
46
47
|
/** Modes for design token resolution */
|
|
47
|
-
modes?:
|
|
48
|
+
modes?: Modes
|
|
48
49
|
/** Optional container style */
|
|
49
50
|
style?: ViewStyle
|
|
50
51
|
}
|
|
@@ -16,6 +16,7 @@ import { useTokens } from '../../design-tokens/JFSThemeProvider'
|
|
|
16
16
|
import { EMPTY_MODES } from '../../utils/react-utils'
|
|
17
17
|
import MediaSource, { type UnifiedSource } from '../../utils/MediaSource'
|
|
18
18
|
import Icon from '../../icons/Icon'
|
|
19
|
+
import type { Modes } from '../../design-tokens'
|
|
19
20
|
|
|
20
21
|
// Default static asset from the component folder.
|
|
21
22
|
// Consumers can override the image via the `source` prop if needed.
|
|
@@ -30,7 +31,7 @@ const focusOverlayStyle: ViewStyle = { borderWidth: 1, borderColor: '#222' }
|
|
|
30
31
|
|
|
31
32
|
type UpiHandleProps = {
|
|
32
33
|
label?: string;
|
|
33
|
-
modes?:
|
|
34
|
+
modes?: Modes;
|
|
34
35
|
showIcon?: boolean;
|
|
35
36
|
iconName?: string;
|
|
36
37
|
/**
|
|
@@ -62,7 +63,7 @@ interface UpiHandleTokens {
|
|
|
62
63
|
iconPlaceholderStyle: ViewStyle;
|
|
63
64
|
}
|
|
64
65
|
|
|
65
|
-
function resolveUpiHandleTokens(modes:
|
|
66
|
+
function resolveUpiHandleTokens(modes: Modes): UpiHandleTokens {
|
|
66
67
|
const backgroundColor = (getVariableByName('upiHandle/background', modes) || '#f5f5f5') as string
|
|
67
68
|
const radius = (getVariableByName('upiHandle/radius', modes) || 99999) as number
|
|
68
69
|
const paddingLeft = (getVariableByName('upiHandle/padding/left', modes) || 4) as number
|
|
@@ -3,6 +3,7 @@ import { View, StyleProp, ViewStyle, ViewProps } from 'react-native'
|
|
|
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 interface VStackProps extends ViewProps {
|
|
8
9
|
/**
|
|
@@ -35,7 +36,7 @@ export interface VStackProps extends ViewProps {
|
|
|
35
36
|
/**
|
|
36
37
|
* Modes object to override default variable values.
|
|
37
38
|
*/
|
|
38
|
-
modes?:
|
|
39
|
+
modes?: Modes;
|
|
39
40
|
}
|
|
40
41
|
|
|
41
42
|
/**
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import {
|
|
3
|
+
FIGMA_MODES,
|
|
4
|
+
FIGMA_COMPONENT_MODES,
|
|
5
|
+
} from '../../design-tokens/figma-modes.generated'
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Storybook helpers that turn a component's design-token collections into real,
|
|
9
|
+
* per-collection `select` controls and merge the picked values into the `modes`
|
|
10
|
+
* prop — so authors get the same enum-driven DX in the Storybook Controls panel
|
|
11
|
+
* that the typed `modes` prop gives them in code.
|
|
12
|
+
*
|
|
13
|
+
* Fully backward compatible:
|
|
14
|
+
* - If nothing is picked, `modes` is left exactly as the story provided it.
|
|
15
|
+
* - Any `modes` value the story already sets WINS over a control selection,
|
|
16
|
+
* so existing stories render identically until someone touches a control.
|
|
17
|
+
* - The synthetic control args are stripped before they reach the component,
|
|
18
|
+
* so they never leak in as unknown props.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
const UNSET = '(default)'
|
|
22
|
+
|
|
23
|
+
type Collections = readonly string[]
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Resolve the list of collections to expose. Accepts a component name (looked up
|
|
27
|
+
* in the generated map), an explicit list, or both (merged + de-duplicated).
|
|
28
|
+
*/
|
|
29
|
+
function resolveCollections(
|
|
30
|
+
componentOrCollections: string | Collections,
|
|
31
|
+
extra: Collections = []
|
|
32
|
+
): string[] {
|
|
33
|
+
const fromName =
|
|
34
|
+
typeof componentOrCollections === 'string'
|
|
35
|
+
? FIGMA_COMPONENT_MODES[componentOrCollections] || []
|
|
36
|
+
: componentOrCollections
|
|
37
|
+
const merged = new Set<string>([...fromName, ...extra])
|
|
38
|
+
// Only keep collections that actually have more than one mode to choose from.
|
|
39
|
+
return [...merged].filter((name) => {
|
|
40
|
+
const modes = (FIGMA_MODES as Record<string, readonly string[]>)[name]
|
|
41
|
+
return Array.isArray(modes) && modes.length > 1
|
|
42
|
+
})
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Build `argTypes` entries — one `select` per multi-mode collection, grouped
|
|
47
|
+
* under a "Modes" category. Spread the result into your story `meta.argTypes`.
|
|
48
|
+
*/
|
|
49
|
+
export function modeArgTypes(
|
|
50
|
+
componentOrCollections: string | Collections,
|
|
51
|
+
extra: Collections = []
|
|
52
|
+
): Record<string, unknown> {
|
|
53
|
+
const collections = resolveCollections(componentOrCollections, extra)
|
|
54
|
+
const argTypes: Record<string, unknown> = {}
|
|
55
|
+
for (const name of collections) {
|
|
56
|
+
const modes = (FIGMA_MODES as Record<string, readonly string[]>)[name]
|
|
57
|
+
argTypes[name] = {
|
|
58
|
+
name,
|
|
59
|
+
description: `\`${name}\` collection mode`,
|
|
60
|
+
control: { type: 'select' },
|
|
61
|
+
options: [UNSET, ...modes],
|
|
62
|
+
table: { category: 'Modes' },
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return argTypes
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* A decorator that merges the picked collection modes into `args.modes` and
|
|
70
|
+
* strips the synthetic control args before they reach the component.
|
|
71
|
+
*/
|
|
72
|
+
export function modeDecorator(
|
|
73
|
+
componentOrCollections: string | Collections,
|
|
74
|
+
extra: Collections = []
|
|
75
|
+
) {
|
|
76
|
+
const collections = resolveCollections(componentOrCollections, extra)
|
|
77
|
+
|
|
78
|
+
return function ModeControlsDecorator(Story: any, context: any) {
|
|
79
|
+
const args = context?.args || {}
|
|
80
|
+
const picked: Record<string, string> = {}
|
|
81
|
+
// Start from the real story args so nothing is dropped. Passing only the
|
|
82
|
+
// synthetic keys here would REPLACE the story args in this Storybook
|
|
83
|
+
// renderer, wiping out real props (e.g. `series`, slot nodes) and leaving
|
|
84
|
+
// the component to render empty/crash.
|
|
85
|
+
const override: Record<string, unknown> = { ...args }
|
|
86
|
+
|
|
87
|
+
for (const name of collections) {
|
|
88
|
+
const value = args[name]
|
|
89
|
+
if (value && value !== UNSET) {
|
|
90
|
+
picked[name] = value
|
|
91
|
+
}
|
|
92
|
+
// Neutralise the synthetic arg so it is never spread onto the component.
|
|
93
|
+
override[name] = undefined
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// Explicit story-provided modes win over control selections.
|
|
97
|
+
override.modes = { ...picked, ...(args.modes || {}) }
|
|
98
|
+
|
|
99
|
+
return <Story args={override} />
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Convenience: returns `{ argTypes, decorators }` to spread directly into a
|
|
105
|
+
* story `meta`.
|
|
106
|
+
*
|
|
107
|
+
* @example
|
|
108
|
+
* const meta = {
|
|
109
|
+
* title: 'Components/Button',
|
|
110
|
+
* component: Button,
|
|
111
|
+
* ...withModeControls('Button'),
|
|
112
|
+
* }
|
|
113
|
+
*/
|
|
114
|
+
export function withModeControls(
|
|
115
|
+
componentOrCollections: string | Collections,
|
|
116
|
+
extra: Collections = []
|
|
117
|
+
): { argTypes: Record<string, unknown>; decorators: unknown[] } {
|
|
118
|
+
return {
|
|
119
|
+
argTypes: modeArgTypes(componentOrCollections, extra),
|
|
120
|
+
decorators: [modeDecorator(componentOrCollections, extra)],
|
|
121
|
+
}
|
|
122
|
+
}
|
package/src/components/index.ts
CHANGED
|
@@ -63,6 +63,7 @@ export { default as NoteInput, type NoteInputProps } from './NoteInput/NoteInput
|
|
|
63
63
|
export { default as Nudge, type NudgeProps } from './Nudge/Nudge';
|
|
64
64
|
export { default as NavArrow } from './NavArrow/NavArrow';
|
|
65
65
|
export { default as Numpad, type NumpadProps, type NumpadKeyValue } from './Numpad/Numpad';
|
|
66
|
+
export { default as Overlay, type OverlayProps } from './Overlay/Overlay';
|
|
66
67
|
export { default as Title, type TitleProps } from './Title/Title';
|
|
67
68
|
export { default as Screen, type ScreenProps } from './Screen/Screen';
|
|
68
69
|
export { default as Section } from './Section/Section';
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
|
|
2
2
|
import React, { createContext, useContext, ReactNode, useMemo } from 'react';
|
|
3
3
|
import { getVariableByName } from './figma-variables-resolver';
|
|
4
|
+
import type { Modes } from './figma-modes.generated'
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* Shape of the TokenContext
|
|
@@ -10,7 +11,7 @@ interface TokenContextType {
|
|
|
10
11
|
* Current active modes map
|
|
11
12
|
* @example { 'Color Mode': 'Dark', 'Platform': 'mobile' }
|
|
12
13
|
*/
|
|
13
|
-
modes:
|
|
14
|
+
modes: Modes;
|
|
14
15
|
/**
|
|
15
16
|
* Helper to resolve variable by name using the current context modes.
|
|
16
17
|
*/
|
|
@@ -24,7 +25,7 @@ interface JFSThemeProviderProps {
|
|
|
24
25
|
* Modes to apply globally.
|
|
25
26
|
* Can be used to set 'Color Mode', 'Platform', 'Density', etc.
|
|
26
27
|
*/
|
|
27
|
-
modes?:
|
|
28
|
+
modes?: Modes;
|
|
28
29
|
children: ReactNode;
|
|
29
30
|
}
|
|
30
31
|
|
|
@@ -61,7 +62,7 @@ export const JFSThemeProvider: React.FC<JFSThemeProviderProps> = ({
|
|
|
61
62
|
* Hook to access the current design token context.
|
|
62
63
|
*
|
|
63
64
|
* returns {
|
|
64
|
-
* modes:
|
|
65
|
+
* modes: Modes - The current active modes
|
|
65
66
|
* getVariable: (name: string) => any - Function to resolve a token value
|
|
66
67
|
* }
|
|
67
68
|
*/
|