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
|
@@ -14,6 +14,7 @@ import { EMPTY_MODES } from '../../utils/react-utils'
|
|
|
14
14
|
import type { UnifiedSource } from '../../utils/MediaSource'
|
|
15
15
|
import Skeleton from '../../skeleton/Skeleton'
|
|
16
16
|
import { useSkeleton } from '../../skeleton/SkeletonGroup'
|
|
17
|
+
import type { Modes } from '../../design-tokens'
|
|
17
18
|
|
|
18
19
|
type IconButtonProps = SafePressableProps & {
|
|
19
20
|
/** Built-in icon name from the registry (default state). */
|
|
@@ -26,7 +27,7 @@ type IconButtonProps = SafePressableProps & {
|
|
|
26
27
|
* follows design tokens just like a built-in icon. See {@link UnifiedSource}.
|
|
27
28
|
*/
|
|
28
29
|
source?: UnifiedSource;
|
|
29
|
-
modes?:
|
|
30
|
+
modes?: Modes;
|
|
30
31
|
onPress?: () => void;
|
|
31
32
|
disabled?: boolean;
|
|
32
33
|
style?: StyleProp<ViewStyle>;
|
|
@@ -96,7 +97,7 @@ interface IconButtonTokens {
|
|
|
96
97
|
iconSize: number;
|
|
97
98
|
}
|
|
98
99
|
|
|
99
|
-
function resolveIconButtonTokens(modes:
|
|
100
|
+
function resolveIconButtonTokens(modes: Modes, disabled: boolean): IconButtonTokens {
|
|
100
101
|
const radiusRaw = (getVariableByName('iconButton/radius', modes) ?? 9999) as number
|
|
101
102
|
const padding = (getVariableByName('iconButton/padding', modes) ?? 12) as number
|
|
102
103
|
const backgroundColor = (getVariableByName('iconButton/background', modes) ?? '#cfa159') as string
|
|
@@ -5,6 +5,7 @@ import { useTokens } from '../../design-tokens/JFSThemeProvider'
|
|
|
5
5
|
import { EMPTY_MODES } from '../../utils/react-utils'
|
|
6
6
|
import Icon from '../../icons/Icon'
|
|
7
7
|
import type { UnifiedSource } from '../../utils/MediaSource'
|
|
8
|
+
import type { Modes } from '../../design-tokens'
|
|
8
9
|
|
|
9
10
|
type IconCapsuleProps = {
|
|
10
11
|
iconName?: string;
|
|
@@ -17,7 +18,7 @@ type IconCapsuleProps = {
|
|
|
17
18
|
* {@link UnifiedSource}.
|
|
18
19
|
*/
|
|
19
20
|
source?: UnifiedSource;
|
|
20
|
-
modes?:
|
|
21
|
+
modes?: Modes;
|
|
21
22
|
accessibilityLabel?: string;
|
|
22
23
|
accessibilityRole?: string;
|
|
23
24
|
} & React.ComponentProps<typeof View>;
|
|
@@ -28,7 +29,7 @@ interface IconCapsuleTokens {
|
|
|
28
29
|
iconSize: number;
|
|
29
30
|
}
|
|
30
31
|
|
|
31
|
-
function resolveIconCapsuleTokens(modes:
|
|
32
|
+
function resolveIconCapsuleTokens(modes: Modes): IconCapsuleTokens {
|
|
32
33
|
const size = (getVariableByName('iconCapsule/size', modes) || 42) as number
|
|
33
34
|
const radiusRaw = (getVariableByName('iconCapsule/radius', modes) || 9999) as number
|
|
34
35
|
const backgroundColor = (getVariableByName('iconCapsule/background', modes) || '#cfa159') as string
|
|
@@ -8,6 +8,8 @@ import {
|
|
|
8
8
|
type ViewStyle,
|
|
9
9
|
type ImageResizeMode,
|
|
10
10
|
} from 'react-native'
|
|
11
|
+
|
|
12
|
+
type ImageResizeMethod = 'auto' | 'resize' | 'scale' | 'none'
|
|
11
13
|
import Skeleton from '../../skeleton/Skeleton'
|
|
12
14
|
import { useSkeleton } from '../../skeleton/SkeletonGroup'
|
|
13
15
|
|
|
@@ -33,6 +35,21 @@ export type ImageProps = {
|
|
|
33
35
|
ratio?: number | undefined
|
|
34
36
|
/** How the image is fit inside its box. Defaults to `'cover'`. */
|
|
35
37
|
resizeMode?: ImageResizeMode | undefined
|
|
38
|
+
/**
|
|
39
|
+
* (Android only) How the bitmap is resampled when the source resolution
|
|
40
|
+
* differs from the rendered box.
|
|
41
|
+
*
|
|
42
|
+
* RN's own default is `'auto'`, which for large source images silently picks
|
|
43
|
+
* `'resize'`: a pre-decode software downsample that DESTROYS detail and makes
|
|
44
|
+
* big hero/background images look soft/pixelated even when the asset is
|
|
45
|
+
* high-res. To avoid that, this component defaults to:
|
|
46
|
+
* - `'none'` when an explicit `width` + `height` box is set (full-bleed
|
|
47
|
+
* hero/background usage — full resolution, maximum sharpness), and
|
|
48
|
+
* - `'scale'` otherwise (GPU scaling — high quality and memory-safe for
|
|
49
|
+
* ordinary aspect-ratio images).
|
|
50
|
+
* Pass an explicit value to override. No-op on iOS/web.
|
|
51
|
+
*/
|
|
52
|
+
resizeMethod?: ImageResizeMethod | undefined
|
|
36
53
|
/**
|
|
37
54
|
* Optional explicit width. If omitted and a `ratio` is set, the image
|
|
38
55
|
* defaults to `width: '100%'` so it fills its parent.
|
|
@@ -96,6 +113,7 @@ function Image({
|
|
|
96
113
|
imageSource,
|
|
97
114
|
ratio = DEFAULT_RATIO,
|
|
98
115
|
resizeMode = 'cover',
|
|
116
|
+
resizeMethod,
|
|
99
117
|
width,
|
|
100
118
|
height,
|
|
101
119
|
borderRadius,
|
|
@@ -107,11 +125,16 @@ function Image({
|
|
|
107
125
|
}: ImageProps) {
|
|
108
126
|
const source = useMemo(() => normalizeSource(imageSource), [imageSource])
|
|
109
127
|
|
|
128
|
+
// Explicit { width, height } means a "fill an exact box" layout — typically a
|
|
129
|
+
// full-bleed hero/background where the asset is high-res and sharpness
|
|
130
|
+
// matters most. There, default to `'none'` (full-resolution, no pre-decode
|
|
131
|
+
// downsample) so detail is never thrown away. Aspect-ratio images keep the
|
|
132
|
+
// memory-safe `'scale'` default. A caller-supplied `resizeMethod` always wins.
|
|
133
|
+
const isExplicitBox = width != null && height != null
|
|
134
|
+
const effectiveResizeMethod: ImageResizeMethod =
|
|
135
|
+
resizeMethod ?? (isExplicitBox ? 'none' : 'scale')
|
|
136
|
+
|
|
110
137
|
const layoutStyle: ImageStyle = useMemo(() => {
|
|
111
|
-
// If the caller has fully specified width AND height, they're doing a
|
|
112
|
-
// non-aspect layout (e.g. "fill the parent") — respect that and skip
|
|
113
|
-
// `aspectRatio` so it doesn't conflict.
|
|
114
|
-
const isExplicitBox = width != null && height != null
|
|
115
138
|
const s: ImageStyle = {
|
|
116
139
|
width: width ?? '100%',
|
|
117
140
|
...(isExplicitBox
|
|
@@ -120,7 +143,7 @@ function Image({
|
|
|
120
143
|
}
|
|
121
144
|
if (borderRadius != null) s.borderRadius = borderRadius
|
|
122
145
|
return s
|
|
123
|
-
}, [ratio, width, height, borderRadius])
|
|
146
|
+
}, [ratio, width, height, borderRadius, isExplicitBox])
|
|
124
147
|
|
|
125
148
|
const { active: groupActive } = useSkeleton()
|
|
126
149
|
const isLoading = loading ?? groupActive
|
|
@@ -146,6 +169,7 @@ function Image({
|
|
|
146
169
|
source={source}
|
|
147
170
|
style={[layoutStyle, style]}
|
|
148
171
|
resizeMode={resizeMode}
|
|
172
|
+
resizeMethod={effectiveResizeMethod}
|
|
149
173
|
accessibilityLabel={accessibilityLabel}
|
|
150
174
|
accessibilityElementsHidden={accessibilityElementsHidden}
|
|
151
175
|
importantForAccessibility={importantForAccessibility}
|
|
@@ -4,6 +4,7 @@ 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
6
|
import TextInput from '../TextInput/TextInput'
|
|
7
|
+
import type { Modes } from '../../design-tokens'
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* SupportText component derived from Figma design.
|
|
@@ -15,7 +16,7 @@ type SupportTextProps = {
|
|
|
15
16
|
* Defaults to 'ic_info'.
|
|
16
17
|
*/
|
|
17
18
|
iconName?: string;
|
|
18
|
-
modes?:
|
|
19
|
+
modes?: Modes;
|
|
19
20
|
style?: StyleProp<ViewStyle>;
|
|
20
21
|
}
|
|
21
22
|
|
|
@@ -64,7 +65,7 @@ export type InputSearchProps = {
|
|
|
64
65
|
* (e.g. 'ic_info', 'ic_cart'). Defaults to 'ic_info'.
|
|
65
66
|
*/
|
|
66
67
|
supportTextIcon?: string;
|
|
67
|
-
modes?:
|
|
68
|
+
modes?: Modes;
|
|
68
69
|
containerStyle?: StyleProp<ViewStyle>;
|
|
69
70
|
|
|
70
71
|
// Props to pass through to TextInput
|
|
@@ -10,6 +10,7 @@ import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
|
10
10
|
import { useTokens } from '../../design-tokens/JFSThemeProvider'
|
|
11
11
|
import { EMPTY_MODES, cloneChildrenWithModes } from '../../utils/react-utils'
|
|
12
12
|
import MediaSource, { type UnifiedSource } from '../../utils/MediaSource'
|
|
13
|
+
import type { Modes } from '../../design-tokens'
|
|
13
14
|
|
|
14
15
|
// Default avatar asset (shared with the Avatar component) so that
|
|
15
16
|
// InstitutionBadge has a sensible visual fallback when no `source` is
|
|
@@ -35,7 +36,7 @@ export type InstitutionBadgeProps = InstitutionBadgeBaseProps & {
|
|
|
35
36
|
/** Slot replacing the default Avatar (e.g. for monogram avatars). Receives `modes` recursively. */
|
|
36
37
|
avatarSlot?: React.ReactNode
|
|
37
38
|
/** Design token modes forwarded to token lookups and the Avatar slot. */
|
|
38
|
-
modes?:
|
|
39
|
+
modes?: Modes
|
|
39
40
|
/** Container style override. */
|
|
40
41
|
style?: StyleProp<ViewStyle>
|
|
41
42
|
/** Label style override. */
|
|
@@ -77,7 +78,7 @@ const toFontWeight = (value: unknown, fallback: TextStyle['fontWeight']) => {
|
|
|
77
78
|
}
|
|
78
79
|
|
|
79
80
|
function resolveInstitutionBadgeTokens(
|
|
80
|
-
modes:
|
|
81
|
+
modes: Modes
|
|
81
82
|
): InstitutionBadgeTokens {
|
|
82
83
|
const gap = toNumber(getVariableByName('institutionBadge/gap', modes), 8)
|
|
83
84
|
|
|
@@ -2,10 +2,11 @@ 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, cloneChildrenWithModes } from '../../utils/react-utils'
|
|
5
|
+
import type { Modes } from '../../design-tokens'
|
|
5
6
|
|
|
6
7
|
type LazyListProps = {
|
|
7
8
|
listGroupsSlot?: React.ReactNode;
|
|
8
|
-
modes?:
|
|
9
|
+
modes?: Modes;
|
|
9
10
|
style?: StyleProp<ViewStyle>;
|
|
10
11
|
accessibilityLabel?: string;
|
|
11
12
|
accessibilityHint?: string;
|
|
@@ -4,10 +4,11 @@ import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
|
4
4
|
import { EMPTY_MODES } from '../../utils/react-utils'
|
|
5
5
|
import MoneyValue from '../MoneyValue/MoneyValue'
|
|
6
6
|
import LinearProgress from '../LinearProgress/LinearProgress'
|
|
7
|
+
import type { Modes } from '../../design-tokens'
|
|
7
8
|
|
|
8
9
|
type LinearMeterLabelProps = {
|
|
9
10
|
children: React.ReactNode
|
|
10
|
-
modes?:
|
|
11
|
+
modes?: Modes
|
|
11
12
|
style?: StyleProp<TextStyle>
|
|
12
13
|
} & React.ComponentProps<typeof Text>
|
|
13
14
|
|
|
@@ -41,7 +42,7 @@ const LinearMeterLabel = ({
|
|
|
41
42
|
|
|
42
43
|
export type LinearMeterProps = {
|
|
43
44
|
value?: number // 0 to 1
|
|
44
|
-
modes?:
|
|
45
|
+
modes?: Modes
|
|
45
46
|
style?: StyleProp<ViewStyle>
|
|
46
47
|
trackStyle?: StyleProp<ViewStyle>
|
|
47
48
|
indicatorStyle?: StyleProp<ViewStyle>
|
|
@@ -7,12 +7,13 @@ import {
|
|
|
7
7
|
} from 'react-native'
|
|
8
8
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
9
9
|
import { EMPTY_MODES } from '../../utils/react-utils'
|
|
10
|
+
import type { Modes } from '../../design-tokens'
|
|
10
11
|
|
|
11
12
|
export type LinearProgressProps = {
|
|
12
13
|
/** Progress value between 0 and 1. Values are clamped. */
|
|
13
14
|
value?: number
|
|
14
15
|
/** Design token modes for theming */
|
|
15
|
-
modes?:
|
|
16
|
+
modes?: Modes
|
|
16
17
|
/** Override container styles (the track wrapper) */
|
|
17
18
|
style?: StyleProp<ViewStyle>
|
|
18
19
|
/** Override the track styles */
|
|
@@ -7,12 +7,13 @@ import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
|
7
7
|
* This ensures that all child components in slots receive the modes prop from the parent.
|
|
8
8
|
*/
|
|
9
9
|
import { EMPTY_MODES, cloneChildrenWithModes, flattenChildren } from '../../utils/react-utils'
|
|
10
|
+
import type { Modes } from '../../design-tokens'
|
|
10
11
|
|
|
11
12
|
type ListGroupProps = {
|
|
12
13
|
label?: string;
|
|
13
14
|
listGroupSlot?: React.ReactNode;
|
|
14
15
|
children?: React.ReactNode;
|
|
15
|
-
modes?:
|
|
16
|
+
modes?: Modes;
|
|
16
17
|
style?: StyleProp<ViewStyle>;
|
|
17
18
|
accessibilityLabel?: string;
|
|
18
19
|
accessibilityHint?: string;
|
|
@@ -14,6 +14,7 @@ import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
|
14
14
|
import NavArrow from '../NavArrow/NavArrow'
|
|
15
15
|
import { usePressableWebSupport, type WebAccessibilityProps } from '../../utils/web-platform-utils'
|
|
16
16
|
import { EMPTY_MODES, cloneChildrenWithModes } from '../../utils/react-utils'
|
|
17
|
+
import type { Modes } from '../../design-tokens'
|
|
17
18
|
|
|
18
19
|
type ListItemProps = {
|
|
19
20
|
layout?: 'Vertical' | 'Horizontal';
|
|
@@ -33,7 +34,7 @@ type ListItemProps = {
|
|
|
33
34
|
endSlot?: React.ReactNode;
|
|
34
35
|
/** Whether to show the NavArrow on the far right (Horizontal layout only). Defaults to true. */
|
|
35
36
|
navArrow?: boolean;
|
|
36
|
-
modes?:
|
|
37
|
+
modes?: Modes;
|
|
37
38
|
onPress?: () => void;
|
|
38
39
|
style?: StyleProp<ViewStyle>;
|
|
39
40
|
contentStyle?: StyleProp<ViewStyle>;
|
|
@@ -79,7 +80,7 @@ interface ListItemTokens {
|
|
|
79
80
|
resolvedModes: Record<string, any>;
|
|
80
81
|
}
|
|
81
82
|
|
|
82
|
-
function resolveListItemTokens(modes:
|
|
83
|
+
function resolveListItemTokens(modes: Modes): ListItemTokens {
|
|
83
84
|
// Modes used to cascade into slot children (leading / supportSlot / trailing).
|
|
84
85
|
// We do NOT inject an `AppearanceBrand` default here: slot content such as
|
|
85
86
|
// Buttons or Badges carry their own intended appearance, so forcing one onto
|
|
@@ -10,6 +10,7 @@ import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
|
10
10
|
import { useTokens } from '../../design-tokens/JFSThemeProvider'
|
|
11
11
|
import Button from '../Button/Button'
|
|
12
12
|
import { EMPTY_MODES, cloneChildrenWithModes } from '../../utils/react-utils'
|
|
13
|
+
import type { Modes } from '../../design-tokens'
|
|
13
14
|
|
|
14
15
|
const DEFAULT_MEDIA_SIZE = 117
|
|
15
16
|
|
|
@@ -40,7 +41,7 @@ export type LottieIntroBlockProps = {
|
|
|
40
41
|
*/
|
|
41
42
|
buttonSlot?: React.ReactNode
|
|
42
43
|
/** Mode configuration for design-token theming. */
|
|
43
|
-
modes?:
|
|
44
|
+
modes?: Modes
|
|
44
45
|
/** Style overrides applied to the outer container. */
|
|
45
46
|
style?: StyleProp<ViewStyle>
|
|
46
47
|
testID?: string
|
|
@@ -4,6 +4,7 @@ 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
6
|
import { getNativeLottieView } from './loadNativeLottieView'
|
|
7
|
+
import type { Modes } from '../../design-tokens'
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* A parsed Lottie animation. The JSON object you get from
|
|
@@ -39,7 +40,7 @@ export type LottiePlayerProps = {
|
|
|
39
40
|
/** Loop the animation. Defaults to `true`. */
|
|
40
41
|
loop?: boolean
|
|
41
42
|
/** Mode configuration for design-token theming. */
|
|
42
|
-
modes?:
|
|
43
|
+
modes?: Modes
|
|
43
44
|
/** Style overrides applied to the underlying view. */
|
|
44
45
|
style?: StyleProp<ViewStyle>
|
|
45
46
|
/** Accessibility label. Lottie is decorative by default. */
|
|
@@ -51,7 +52,7 @@ const DEFAULT_SIZE = 117
|
|
|
51
52
|
|
|
52
53
|
function resolveSize(
|
|
53
54
|
size: LottiePlayerProps['size'],
|
|
54
|
-
modes:
|
|
55
|
+
modes: Modes
|
|
55
56
|
) {
|
|
56
57
|
if (typeof size === 'number') return { width: size, height: size }
|
|
57
58
|
if (size && typeof size === 'object') return size
|
|
@@ -4,6 +4,7 @@ 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
6
|
import { getWebLottieView } from './loadWebLottieView'
|
|
7
|
+
import type { Modes } from '../../design-tokens'
|
|
7
8
|
|
|
8
9
|
export type LottieAnimationSource = Record<string, unknown>
|
|
9
10
|
|
|
@@ -12,7 +13,7 @@ export type LottiePlayerProps = {
|
|
|
12
13
|
size?: number | { width: number; height: number }
|
|
13
14
|
autoPlay?: boolean
|
|
14
15
|
loop?: boolean
|
|
15
|
-
modes?:
|
|
16
|
+
modes?: Modes
|
|
16
17
|
style?: StyleProp<ViewStyle>
|
|
17
18
|
accessibilityLabel?: string
|
|
18
19
|
testID?: string
|
|
@@ -22,7 +23,7 @@ const DEFAULT_SIZE = 117
|
|
|
22
23
|
|
|
23
24
|
function resolveSize(
|
|
24
25
|
size: LottiePlayerProps['size'],
|
|
25
|
-
modes:
|
|
26
|
+
modes: Modes
|
|
26
27
|
) {
|
|
27
28
|
if (typeof size === 'number') return { width: size, height: size }
|
|
28
29
|
if (size && typeof size === 'object') return size
|
|
@@ -14,17 +14,6 @@ const INSTALL_HINT =
|
|
|
14
14
|
' npm install lottie-react-native\n' +
|
|
15
15
|
' cd ios && pod install'
|
|
16
16
|
|
|
17
|
-
/**
|
|
18
|
-
* Metro resolves `require('lottie-react-native')` at bundle time even inside
|
|
19
|
-
* try/catch, which breaks apps that import `jfs-components` without having
|
|
20
|
-
* the optional peer installed. Splitting the module id into a runtime string
|
|
21
|
-
* keeps Metro from statically linking it — the native module is loaded only
|
|
22
|
-
* when present in the consumer's node_modules.
|
|
23
|
-
*/
|
|
24
|
-
function resolveNativeLottieModuleName() {
|
|
25
|
-
return ['lottie', '-react', '-native'].join('')
|
|
26
|
-
}
|
|
27
|
-
|
|
28
17
|
function LottieUnavailableView({ style }: Pick<NativeLottieViewProps, 'style'>) {
|
|
29
18
|
if (__DEV__) {
|
|
30
19
|
return (
|
|
@@ -75,10 +64,17 @@ export function getNativeLottieView(): React.ComponentType<NativeLottieViewProps
|
|
|
75
64
|
if (cachedView !== undefined) return cachedView
|
|
76
65
|
|
|
77
66
|
try {
|
|
78
|
-
|
|
67
|
+
// Static require so Metro resolves the module by its build-time numeric id.
|
|
68
|
+
// A runtime-constructed string path is NOT resolvable by Metro's `require`
|
|
69
|
+
// (it indexes modules by number, not path), so it would always throw and
|
|
70
|
+
// fall back to the install hint even when the package is installed. The
|
|
71
|
+
// dependency stays an *optional* peer: apps that use LottiePlayer install
|
|
72
|
+
// it; apps that don't simply never import this module.
|
|
73
|
+
const mod = require('lottie-react-native') as {
|
|
79
74
|
default?: React.ComponentType<NativeLottieViewProps>
|
|
75
|
+
LottieView?: React.ComponentType<NativeLottieViewProps>
|
|
80
76
|
}
|
|
81
|
-
cachedView = mod.default ?? LottieUnavailable
|
|
77
|
+
cachedView = mod.default ?? mod.LottieView ?? LottieUnavailable
|
|
82
78
|
} catch {
|
|
83
79
|
cachedView = LottieUnavailable
|
|
84
80
|
}
|
|
@@ -4,8 +4,9 @@ import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
|
4
4
|
import Image from '../Image/Image'
|
|
5
5
|
import GlassFill, { type GlassTint } from './GlassFill'
|
|
6
6
|
import { EMPTY_MODES } from '../../utils/react-utils'
|
|
7
|
+
import type { Modes } from '../../design-tokens'
|
|
7
8
|
|
|
8
|
-
const MediaCardContext = createContext<{ modes?:
|
|
9
|
+
const MediaCardContext = createContext<{ modes?: Modes }>({})
|
|
9
10
|
|
|
10
11
|
export interface MediaCardProps {
|
|
11
12
|
/**
|
|
@@ -34,7 +35,7 @@ export interface MediaCardProps {
|
|
|
34
35
|
/**
|
|
35
36
|
* Modes object for token resolution.
|
|
36
37
|
*/
|
|
37
|
-
modes?:
|
|
38
|
+
modes?: Modes
|
|
38
39
|
/**
|
|
39
40
|
* Style overrides for the card container.
|
|
40
41
|
*/
|
|
@@ -137,7 +138,7 @@ export function Header({ children, style }: { children?: React.ReactNode; style?
|
|
|
137
138
|
* Title component.
|
|
138
139
|
* Tokens: cardMedia/title/*
|
|
139
140
|
*/
|
|
140
|
-
export function Title({ children, style, modes: propModes }: { children?: React.ReactNode; style?: StyleProp<TextStyle>; modes?:
|
|
141
|
+
export function Title({ children, style, modes: propModes }: { children?: React.ReactNode; style?: StyleProp<TextStyle>; modes?: Modes }) {
|
|
141
142
|
const context = useContext(MediaCardContext)
|
|
142
143
|
const modes = propModes || context.modes || {}
|
|
143
144
|
|
|
@@ -181,7 +182,7 @@ export function Title({ children, style, modes: propModes }: { children?: React.
|
|
|
181
182
|
*
|
|
182
183
|
* Tokens still drive the tint color, blur intensity and inner spacing.
|
|
183
184
|
*/
|
|
184
|
-
export function Footer({ children, style, modes: propModes }: { children?: React.ReactNode; style?: StyleProp<ViewStyle>; modes?:
|
|
185
|
+
export function Footer({ children, style, modes: propModes }: { children?: React.ReactNode; style?: StyleProp<ViewStyle>; modes?: Modes }) {
|
|
185
186
|
const context = useContext(MediaCardContext)
|
|
186
187
|
const modes = propModes || context.modes || {}
|
|
187
188
|
|
|
@@ -245,7 +246,7 @@ export function Footer({ children, style, modes: propModes }: { children?: React
|
|
|
245
246
|
* Footer Title
|
|
246
247
|
* Tokens: cardMedia/footer/title/*
|
|
247
248
|
*/
|
|
248
|
-
export function FooterTitle({ children, style, modes: propModes }: { children?: React.ReactNode; style?: StyleProp<TextStyle>; modes?:
|
|
249
|
+
export function FooterTitle({ children, style, modes: propModes }: { children?: React.ReactNode; style?: StyleProp<TextStyle>; modes?: Modes }) {
|
|
249
250
|
const context = useContext(MediaCardContext)
|
|
250
251
|
const modes = propModes || context.modes || {}
|
|
251
252
|
|
|
@@ -266,7 +267,7 @@ export function FooterTitle({ children, style, modes: propModes }: { children?:
|
|
|
266
267
|
* Footer Subtitle
|
|
267
268
|
* Tokens: cardMedia/footer/subtitle/*
|
|
268
269
|
*/
|
|
269
|
-
export function FooterSubtitle({ children, style, modes: propModes }: { children?: React.ReactNode; style?: StyleProp<TextStyle>; modes?:
|
|
270
|
+
export function FooterSubtitle({ children, style, modes: propModes }: { children?: React.ReactNode; style?: StyleProp<TextStyle>; modes?: Modes }) {
|
|
270
271
|
const context = useContext(MediaCardContext)
|
|
271
272
|
const modes = propModes || context.modes || {}
|
|
272
273
|
|
|
@@ -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 MerchantProfileProps = {
|
|
14
15
|
/**
|
|
@@ -23,7 +24,7 @@ export type MerchantProfileProps = {
|
|
|
23
24
|
* Mode configuration passed to the token resolver.
|
|
24
25
|
* Also passed to the Avatar child component for consistent theming.
|
|
25
26
|
*/
|
|
26
|
-
modes?:
|
|
27
|
+
modes?: Modes
|
|
27
28
|
/**
|
|
28
29
|
* Optional style overrides for the container
|
|
29
30
|
*/
|
|
@@ -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 } from '../../utils/react-utils'
|
|
14
14
|
import { useFormContext } from '../Form/Form'
|
|
15
|
+
import type { Modes } from '../../design-tokens'
|
|
15
16
|
|
|
16
17
|
// ---------------------------------------------------------------------------
|
|
17
18
|
// Types
|
|
@@ -82,7 +83,7 @@ export type MessageFieldProps = {
|
|
|
82
83
|
/** Auto-focus the textarea on mount. */
|
|
83
84
|
autoFocus?: boolean
|
|
84
85
|
/** Modes for design token resolution (e.g. `{ 'Color Mode': 'Light' }`). */
|
|
85
|
-
modes?:
|
|
86
|
+
modes?: Modes
|
|
86
87
|
/** Style overrides for the outermost wrapper. */
|
|
87
88
|
style?: StyleProp<ViewStyle>
|
|
88
89
|
/** Style overrides for the textarea container (border/padding/etc). */
|
|
@@ -129,7 +130,7 @@ function firstError(error: string | string[] | undefined): string | undefined {
|
|
|
129
130
|
return error
|
|
130
131
|
}
|
|
131
132
|
|
|
132
|
-
function useMessageFieldTokens(modes:
|
|
133
|
+
function useMessageFieldTokens(modes: Modes) {
|
|
133
134
|
return useMemo(() => {
|
|
134
135
|
const wrapperGap = toNumber(getVariableByName('messageField/gap', modes), 8)
|
|
135
136
|
|
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
} from 'react-native'
|
|
9
9
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
10
10
|
import { EMPTY_MODES } from '../../utils/react-utils'
|
|
11
|
+
import type { Modes } from '../../design-tokens'
|
|
11
12
|
|
|
12
13
|
export type MetricLegendItemProps = {
|
|
13
14
|
/** The label text on the left (after the indicator). */
|
|
@@ -29,7 +30,7 @@ export type MetricLegendItemProps = {
|
|
|
29
30
|
*/
|
|
30
31
|
indicatorShape?: 'dot' | 'line'
|
|
31
32
|
/** Design token modes for theming (e.g. `{ 'Color Mode': 'Light' }`). */
|
|
32
|
-
modes?:
|
|
33
|
+
modes?: Modes
|
|
33
34
|
/** Override container styles. */
|
|
34
35
|
style?: StyleProp<ViewStyle>
|
|
35
36
|
/** Override the indicator (dot) styles. */
|
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
} from 'react-native'
|
|
11
11
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
12
12
|
import { EMPTY_MODES } from '../../utils/react-utils'
|
|
13
|
+
import type { Modes } from '../../design-tokens'
|
|
13
14
|
|
|
14
15
|
// Map of common ISO 4217 currency codes to display symbols
|
|
15
16
|
const CURRENCY_SYMBOLS = {
|
|
@@ -58,7 +59,7 @@ export type MoneyValueProps = {
|
|
|
58
59
|
/** When true, a blinking vertical cursor is shown at the end of the value text. */
|
|
59
60
|
focused?: boolean
|
|
60
61
|
/** Modes configuration mapped to Figma tokens. */
|
|
61
|
-
modes?:
|
|
62
|
+
modes?: Modes
|
|
62
63
|
style?: StyleProp<ViewStyle>
|
|
63
64
|
valueStyle?: StyleProp<TextStyle>
|
|
64
65
|
currencyStyle?: StyleProp<TextStyle>
|
|
@@ -10,6 +10,7 @@ import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
|
10
10
|
import { useTokens } from '../../design-tokens/JFSThemeProvider'
|
|
11
11
|
import { EMPTY_MODES } from '../../utils/react-utils'
|
|
12
12
|
import MetricLegendItem from '../MetricLegendItem/MetricLegendItem'
|
|
13
|
+
import type { Modes } from '../../design-tokens'
|
|
13
14
|
|
|
14
15
|
/**
|
|
15
16
|
* The three semantic states a calendar glyph can be in. Maps 1:1 to the
|
|
@@ -37,7 +38,7 @@ export type MonthlyStatusGridMonth = {
|
|
|
37
38
|
* Per-month design token mode overrides. Merged on top of the parent
|
|
38
39
|
* `modes` and the per-month `Calendar Glyph State` derived from `status`.
|
|
39
40
|
*/
|
|
40
|
-
modes?:
|
|
41
|
+
modes?: Modes
|
|
41
42
|
/** Per-month accessibility label. */
|
|
42
43
|
accessibilityLabel?: string
|
|
43
44
|
}
|
|
@@ -67,7 +68,7 @@ export type MonthlyStatusGridProps = {
|
|
|
67
68
|
*/
|
|
68
69
|
legendStatuses?: MonthlyStatus[]
|
|
69
70
|
/** Design token modes (e.g. `{ 'Color Mode': 'Light' }`). */
|
|
70
|
-
modes?:
|
|
71
|
+
modes?: Modes
|
|
71
72
|
/** Container style override. */
|
|
72
73
|
style?: StyleProp<ViewStyle>
|
|
73
74
|
/** Style applied to the months section (the rows wrapper). */
|
|
@@ -162,7 +163,7 @@ export type CalendarGlyphProps = {
|
|
|
162
163
|
*/
|
|
163
164
|
status?: MonthlyStatus
|
|
164
165
|
/** Design token mode overrides. */
|
|
165
|
-
modes?:
|
|
166
|
+
modes?: Modes
|
|
166
167
|
/** Container style override. */
|
|
167
168
|
style?: StyleProp<ViewStyle>
|
|
168
169
|
/** Label text style override. */
|
|
@@ -268,7 +269,7 @@ function CalendarGlyph({
|
|
|
268
269
|
*/
|
|
269
270
|
function resolveStatusColors(
|
|
270
271
|
status: MonthlyStatus,
|
|
271
|
-
modes:
|
|
272
|
+
modes: Modes
|
|
272
273
|
): { bg: string; fg: string; statusModes: Record<string, any> } {
|
|
273
274
|
const statusModes = { ...modes, 'Calendar Glyph State': status }
|
|
274
275
|
const bg =
|
|
@@ -14,6 +14,7 @@ import {
|
|
|
14
14
|
type SafePressableProps,
|
|
15
15
|
} from '../../utils/web-platform-utils'
|
|
16
16
|
import { EMPTY_MODES } from '../../utils/react-utils'
|
|
17
|
+
import type { Modes } from '../../design-tokens'
|
|
17
18
|
|
|
18
19
|
type NavArrowDirection = 'Back' | 'Forward' | 'Down'
|
|
19
20
|
|
|
@@ -33,7 +34,7 @@ type NavArrowProps = SafePressableProps & {
|
|
|
33
34
|
/** Direction of the arrow: 'Back' (left chevron), 'Forward' (right chevron), or 'Down' */
|
|
34
35
|
direction?: NavArrowDirection
|
|
35
36
|
/** Modes used to resolve design tokens */
|
|
36
|
-
modes?:
|
|
37
|
+
modes?: Modes
|
|
37
38
|
/** Optional additional container style */
|
|
38
39
|
style?: StyleProp<ViewStyle>
|
|
39
40
|
/** Accessibility label for the arrow */
|
|
@@ -55,7 +56,7 @@ interface NavArrowTokens {
|
|
|
55
56
|
backgroundColor: string
|
|
56
57
|
}
|
|
57
58
|
|
|
58
|
-
function resolveNavArrowTokens(modes:
|
|
59
|
+
function resolveNavArrowTokens(modes: Modes): NavArrowTokens {
|
|
59
60
|
const iconColor =
|
|
60
61
|
(getVariableByName('navArrow/icon/color', modes) as string) || '#24262b'
|
|
61
62
|
|
|
@@ -12,6 +12,7 @@ import {
|
|
|
12
12
|
} from 'react-native'
|
|
13
13
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
14
14
|
import { EMPTY_MODES } from '../../utils/react-utils'
|
|
15
|
+
import type { Modes } from '../../design-tokens'
|
|
15
16
|
|
|
16
17
|
export type NoteInputProps = {
|
|
17
18
|
/** The value of the text input */
|
|
@@ -21,7 +22,7 @@ export type NoteInputProps = {
|
|
|
21
22
|
/** Callback when text changes */
|
|
22
23
|
onChangeText?: (text: string) => void
|
|
23
24
|
/** Design token modes (e.g., {'InputState': 'Idle', 'Color Mode': 'Light'}) */
|
|
24
|
-
modes?:
|
|
25
|
+
modes?: Modes
|
|
25
26
|
/** Custom container style */
|
|
26
27
|
style?: StyleProp<ViewStyle>
|
|
27
28
|
/** Custom text input style */
|
|
@@ -5,6 +5,7 @@ import { useTokens } from '../../design-tokens/JFSThemeProvider'
|
|
|
5
5
|
import { cloneChildrenWithModes, EMPTY_MODES } from '../../utils/react-utils'
|
|
6
6
|
import Button from '../Button/Button'
|
|
7
7
|
import Icon from '../../icons/Icon'
|
|
8
|
+
import type { Modes } from '../../design-tokens'
|
|
8
9
|
|
|
9
10
|
export type NudgeType = 'stacked-prominent' | 'stacked-detailed' | 'inline-compact'
|
|
10
11
|
|
|
@@ -31,7 +32,7 @@ export type NudgeProps = {
|
|
|
31
32
|
/** Content slot — overrides default content, or provides detailed list content */
|
|
32
33
|
children?: React.ReactNode;
|
|
33
34
|
/** Mode configuration for design token resolution */
|
|
34
|
-
modes?:
|
|
35
|
+
modes?: Modes;
|
|
35
36
|
/** Optional container style overrides */
|
|
36
37
|
style?: StyleProp<ViewStyle>;
|
|
37
38
|
};
|
|
@@ -61,7 +62,7 @@ function toFontWeight(value: unknown, fallback: TextStyle['fontWeight']): TextSt
|
|
|
61
62
|
return fallback
|
|
62
63
|
}
|
|
63
64
|
|
|
64
|
-
function resolveNudgeTokens(modes:
|
|
65
|
+
function resolveNudgeTokens(modes: Modes): NudgeTokens {
|
|
65
66
|
const background = getVariableByName('nudge/background', modes) || '#f5f5f5'
|
|
66
67
|
const radius = getVariableByName('nudge/radius', modes) || 12
|
|
67
68
|
const paddingH = getVariableByName('nudge/padding/horizontal', modes) || 12
|
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
11
11
|
import { EMPTY_MODES } from '../../utils/react-utils'
|
|
12
12
|
import Icon from '../../icons/Icon'
|
|
13
|
+
import type { Modes } from '../../design-tokens'
|
|
13
14
|
|
|
14
15
|
export type NumpadKeyValue =
|
|
15
16
|
| '0'
|
|
@@ -27,7 +28,7 @@ export type NumpadKeyValue =
|
|
|
27
28
|
|
|
28
29
|
export interface NumpadProps {
|
|
29
30
|
/** Design token modes for theming (e.g., {"Color Mode": "Light"}) */
|
|
30
|
-
modes?:
|
|
31
|
+
modes?: Modes
|
|
31
32
|
/** Callback fired when any key is pressed */
|
|
32
33
|
onKeyPress?: (key: NumpadKeyValue) => void
|
|
33
34
|
/** Whether to show the decimal point key (default: true) */
|