jfs-components 0.1.0 → 0.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +37 -0
- package/lib/commonjs/components/AmountInput/AmountInput.js +8 -5
- package/lib/commonjs/components/AreaLineChart/AreaLineChart.js +1 -1
- package/lib/commonjs/components/Balance/Balance.js +17 -12
- package/lib/commonjs/components/BenefitCard/BenefitCard.js +231 -0
- package/lib/commonjs/components/Card/Card.js +2 -1
- package/lib/commonjs/components/CardFeedback/CardFeedback.js +2 -1
- package/lib/commonjs/components/CcCard/CcCard.js +470 -0
- package/lib/commonjs/components/Checkbox/Checkbox.js +6 -4
- package/lib/commonjs/components/CheckboxItem/CheckboxItem.js +4 -3
- package/lib/commonjs/components/CompareTable/CompareTable.js +372 -0
- package/lib/commonjs/components/ComparisonBar/ComparisonBar.js +266 -0
- package/lib/commonjs/components/Drawer/Drawer.js +13 -4
- package/lib/commonjs/components/DropdownInput/DropdownInput.js +36 -4
- package/lib/commonjs/components/FormField/FormField.js +4 -3
- package/lib/commonjs/components/FullscreenModal/FullscreenModal.js +62 -2
- package/lib/commonjs/components/Image/Image.js +11 -5
- package/lib/commonjs/components/InputSearch/InputSearch.js +6 -4
- package/lib/commonjs/components/LottiePlayer/loadNativeLottieView.js +8 -13
- package/lib/commonjs/components/NoteInput/NoteInput.js +6 -5
- package/lib/commonjs/components/Overlay/Overlay.js +92 -0
- package/lib/commonjs/components/PdpCcCard/PdpCcCard.js +273 -0
- package/lib/commonjs/components/PlanComparisonCard/PlanComparisonCard.js +2 -1
- package/lib/commonjs/components/ProductMerchandisingCard/GlassFill.js +263 -0
- package/lib/commonjs/components/ProductMerchandisingCard/GlassFill.web.js +116 -0
- package/lib/commonjs/components/ProductMerchandisingCard/ProductMerchandisingCard.js +353 -0
- package/lib/commonjs/components/ProjectionMarker/ProjectionMarker.js +161 -0
- package/lib/commonjs/components/Radio/Radio.js +5 -5
- package/lib/commonjs/components/Slider/Slider.js +473 -0
- package/lib/commonjs/components/TextInput/TextInput.js +15 -9
- package/lib/commonjs/components/TextSegment/TextSegment.js +118 -0
- package/lib/commonjs/components/docs/modeControls.js +116 -0
- package/lib/commonjs/components/index.js +70 -0
- package/lib/commonjs/design-tokens/Coin Variables-variables-full.json +1 -1
- package/lib/commonjs/design-tokens/JFSThemeProvider.js +1 -1
- package/lib/commonjs/design-tokens/figma-modes.generated.js +420 -0
- package/lib/commonjs/design-tokens/index.js +11 -0
- package/lib/commonjs/icons/registry.js +1 -1
- package/lib/commonjs/utils/react-utils.js +22 -0
- package/lib/module/components/Accordion/Accordion.js +1 -2
- package/lib/module/components/AmountInput/AmountInput.js +6 -4
- package/lib/module/components/AreaLineChart/AreaLineChart.js +1 -1
- package/lib/module/components/Balance/Balance.js +18 -13
- package/lib/module/components/BenefitCard/BenefitCard.js +225 -0
- package/lib/module/components/Card/Card.js +1 -2
- package/lib/module/components/CardFeedback/CardFeedback.js +1 -2
- package/lib/module/components/CcCard/CcCard.js +464 -0
- package/lib/module/components/Checkbox/Checkbox.js +6 -6
- package/lib/module/components/CheckboxItem/CheckboxItem.js +5 -4
- package/lib/module/components/CompareTable/CompareTable.js +367 -0
- package/lib/module/components/ComparisonBar/ComparisonBar.js +260 -0
- package/lib/module/components/Drawer/Drawer.js +12 -4
- package/lib/module/components/DropdownInput/DropdownInput.js +37 -5
- package/lib/module/components/FormField/FormField.js +5 -4
- package/lib/module/components/FullscreenModal/FullscreenModal.js +64 -5
- package/lib/module/components/Image/Image.js +11 -5
- package/lib/module/components/InputSearch/InputSearch.js +6 -4
- package/lib/module/components/InstitutionBadge/InstitutionBadge.js +1 -2
- package/lib/module/components/LottiePlayer/loadNativeLottieView.js +8 -13
- package/lib/module/components/MoneyValue/MoneyValue.js +1 -2
- package/lib/module/components/NoteInput/NoteInput.js +7 -6
- package/lib/module/components/OTP/OTP.js +1 -2
- package/lib/module/components/Overlay/Overlay.js +87 -0
- package/lib/module/components/PdpCcCard/PdpCcCard.js +267 -0
- package/lib/module/components/PlanComparisonCard/PlanComparisonCard.js +1 -2
- package/lib/module/components/PoweredByLabel/PoweredByLabel.js +1 -2
- package/lib/module/components/ProductMerchandisingCard/GlassFill.js +257 -0
- package/lib/module/components/ProductMerchandisingCard/GlassFill.web.js +111 -0
- package/lib/module/components/ProductMerchandisingCard/ProductMerchandisingCard.js +347 -0
- package/lib/module/components/ProjectionMarker/ProjectionMarker.js +156 -0
- package/lib/module/components/Radio/Radio.js +5 -4
- package/lib/module/components/RechargeCard/RechargeCard.js +1 -2
- package/lib/module/components/Section/Section.js +1 -2
- package/lib/module/components/Slider/Slider.js +468 -0
- package/lib/module/components/TextInput/TextInput.js +16 -12
- package/lib/module/components/TextSegment/TextSegment.js +113 -0
- package/lib/module/components/UpiHandle/UpiHandle.js +1 -2
- package/lib/module/components/docs/modeControls.js +111 -0
- package/lib/module/components/index.js +10 -0
- package/lib/module/design-tokens/Coin Variables-variables-full.json +1 -1
- package/lib/module/design-tokens/JFSThemeProvider.js +1 -1
- package/lib/module/design-tokens/figma-modes.generated.js +416 -0
- package/lib/module/design-tokens/index.js +2 -1
- package/lib/module/icons/registry.js +1 -1
- package/lib/module/utils/react-utils.js +21 -1
- package/lib/typescript/src/components/Accordion/Accordion.d.ts +2 -1
- package/lib/typescript/src/components/AccordionCheckbox/AccordionCheckbox.d.ts +2 -1
- package/lib/typescript/src/components/AccountCard/AccountCard.d.ts +2 -1
- package/lib/typescript/src/components/ActionFooter/ActionFooter.d.ts +2 -1
- package/lib/typescript/src/components/ActionTile/ActionTile.d.ts +2 -1
- package/lib/typescript/src/components/AllocationComparisonChart/AllocationComparisonChart.d.ts +2 -1
- package/lib/typescript/src/components/AmountInput/AmountInput.d.ts +5 -3
- package/lib/typescript/src/components/AppBar/AppBar.d.ts +2 -1
- package/lib/typescript/src/components/AreaLineChart/AreaLineChart.d.ts +3 -2
- package/lib/typescript/src/components/Attached/Attached.d.ts +2 -1
- package/lib/typescript/src/components/Avatar/Avatar.d.ts +2 -1
- package/lib/typescript/src/components/AvatarGroup/AvatarGroup.d.ts +2 -1
- package/lib/typescript/src/components/Badge/Badge.d.ts +2 -1
- package/lib/typescript/src/components/Balance/Balance.d.ts +2 -1
- package/lib/typescript/src/components/BenefitCard/BenefitCard.d.ts +93 -0
- package/lib/typescript/src/components/BottomNav/BottomNav.d.ts +2 -1
- package/lib/typescript/src/components/BottomNavItem/BottomNavItem.d.ts +2 -1
- package/lib/typescript/src/components/BrandChip/BrandChip.d.ts +2 -1
- package/lib/typescript/src/components/BubbleChart/BubbleChart.d.ts +2 -1
- package/lib/typescript/src/components/Button/Button.d.ts +2 -1
- package/lib/typescript/src/components/ButtonGroup/ButtonGroup.d.ts +2 -1
- package/lib/typescript/src/components/Card/Card.d.ts +3 -2
- package/lib/typescript/src/components/CardAdvisory/CardAdvisory.d.ts +2 -1
- package/lib/typescript/src/components/CardBankAccount/CardBankAccount.d.ts +2 -1
- package/lib/typescript/src/components/CardCTA/CardCTA.d.ts +2 -1
- package/lib/typescript/src/components/CardFeedback/CardFeedback.d.ts +7 -6
- package/lib/typescript/src/components/CardFinancialCondition/CardFinancialCondition.d.ts +2 -1
- package/lib/typescript/src/components/CardInsight/CardInsight.d.ts +2 -1
- package/lib/typescript/src/components/CardProviderInfo/CardProviderInfo.d.ts +2 -1
- package/lib/typescript/src/components/Carousel/Carousel.d.ts +4 -3
- package/lib/typescript/src/components/CcCard/CcCard.d.ts +137 -0
- package/lib/typescript/src/components/Checkbox/Checkbox.d.ts +5 -3
- package/lib/typescript/src/components/CheckboxGroup/CheckboxGroup.d.ts +2 -1
- package/lib/typescript/src/components/CheckboxItem/CheckboxItem.d.ts +4 -3
- package/lib/typescript/src/components/ChipGroup/ChipGroup.d.ts +2 -1
- package/lib/typescript/src/components/ChipSelect/ChipSelect.d.ts +2 -1
- package/lib/typescript/src/components/CircularProgressBar/CircularProgressBar.d.ts +2 -1
- package/lib/typescript/src/components/CircularProgressBarDoted/CircularProgressBarDoted.d.ts +2 -1
- package/lib/typescript/src/components/CircularRating/CircularRating.d.ts +2 -1
- package/lib/typescript/src/components/ClusterBubble/ClusterBubble.d.ts +2 -1
- package/lib/typescript/src/components/CompareTable/CompareTable.d.ts +88 -0
- package/lib/typescript/src/components/ComparisonBar/ComparisonBar.d.ts +118 -0
- package/lib/typescript/src/components/CoverageBarComparison/CoverageBarComparison.d.ts +3 -2
- package/lib/typescript/src/components/CoverageRing/CoverageRing.d.ts +2 -1
- package/lib/typescript/src/components/DebitCard/DebitCard.d.ts +2 -1
- package/lib/typescript/src/components/Disclaimer/Disclaimer.d.ts +2 -1
- package/lib/typescript/src/components/Divider/Divider.d.ts +2 -1
- package/lib/typescript/src/components/DonutChart/DonutChart.d.ts +4 -3
- package/lib/typescript/src/components/DonutChartSummary/DonutChartSummary.d.ts +3 -2
- package/lib/typescript/src/components/Drawer/Drawer.d.ts +15 -1
- package/lib/typescript/src/components/Dropdown/Dropdown.d.ts +3 -2
- package/lib/typescript/src/components/DropdownInput/DropdownInput.d.ts +22 -2
- package/lib/typescript/src/components/EmptyState/EmptyState.d.ts +2 -1
- package/lib/typescript/src/components/ExpandableCheckbox/ExpandableCheckbox.d.ts +2 -1
- package/lib/typescript/src/components/FilterBar/FilterBar.d.ts +3 -2
- package/lib/typescript/src/components/Form/Form.d.ts +2 -1
- package/lib/typescript/src/components/FormField/FormField.d.ts +4 -3
- package/lib/typescript/src/components/FullscreenModal/FullscreenModal.d.ts +2 -1
- package/lib/typescript/src/components/Gauge/Gauge.d.ts +2 -1
- package/lib/typescript/src/components/HStack/HStack.d.ts +2 -1
- package/lib/typescript/src/components/HoldingsCard/HoldingsCard.d.ts +2 -1
- package/lib/typescript/src/components/Icon/Icon.d.ts +2 -1
- package/lib/typescript/src/components/IconButton/IconButton.d.ts +2 -1
- package/lib/typescript/src/components/IconCapsule/IconCapsule.d.ts +2 -1
- package/lib/typescript/src/components/Image/Image.d.ts +17 -1
- package/lib/typescript/src/components/InputSearch/InputSearch.d.ts +25 -3
- package/lib/typescript/src/components/InstitutionBadge/InstitutionBadge.d.ts +2 -1
- package/lib/typescript/src/components/LazyList/LazyList.d.ts +2 -1
- package/lib/typescript/src/components/LinearMeter/LinearMeter.d.ts +3 -2
- package/lib/typescript/src/components/LinearProgress/LinearProgress.d.ts +2 -1
- package/lib/typescript/src/components/ListGroup/ListGroup.d.ts +2 -1
- package/lib/typescript/src/components/ListItem/ListItem.d.ts +2 -1
- package/lib/typescript/src/components/LottieIntroBlock/LottieIntroBlock.d.ts +2 -1
- package/lib/typescript/src/components/LottiePlayer/LottiePlayer.d.ts +2 -1
- package/lib/typescript/src/components/LottiePlayer/LottiePlayer.web.d.ts +2 -1
- package/lib/typescript/src/components/MediaCard/MediaCard.d.ts +6 -5
- package/lib/typescript/src/components/MerchantProfile/MerchantProfile.d.ts +2 -1
- package/lib/typescript/src/components/MessageField/MessageField.d.ts +2 -1
- package/lib/typescript/src/components/MetricLegendItem/MetricLegendItem.d.ts +2 -1
- package/lib/typescript/src/components/MoneyValue/MoneyValue.d.ts +2 -1
- package/lib/typescript/src/components/MonthlyStatusGrid/MonthlyStatusGrid.d.ts +4 -3
- package/lib/typescript/src/components/NavArrow/NavArrow.d.ts +2 -1
- package/lib/typescript/src/components/NoteInput/NoteInput.d.ts +21 -3
- package/lib/typescript/src/components/Nudge/Nudge.d.ts +2 -1
- package/lib/typescript/src/components/Numpad/Numpad.d.ts +2 -1
- package/lib/typescript/src/components/OTP/OTP.d.ts +3 -2
- package/lib/typescript/src/components/Overlay/Overlay.d.ts +52 -0
- package/lib/typescript/src/components/PageHero/PageHero.d.ts +2 -1
- package/lib/typescript/src/components/PaymentFeedback/PaymentFeedback.d.ts +2 -1
- package/lib/typescript/src/components/PdpCcCard/PdpCcCard.d.ts +84 -0
- package/lib/typescript/src/components/PlanComparisonCard/PlanComparisonCard.d.ts +2 -1
- package/lib/typescript/src/components/Popup/Popup.d.ts +2 -1
- package/lib/typescript/src/components/PortfolioHero/PortfolioHero.d.ts +2 -1
- package/lib/typescript/src/components/PoweredByLabel/PoweredByLabel.d.ts +2 -1
- package/lib/typescript/src/components/ProductLabel/ProductLabel.d.ts +2 -1
- package/lib/typescript/src/components/ProductMerchandisingCard/GlassFill.d.ts +56 -0
- package/lib/typescript/src/components/ProductMerchandisingCard/GlassFill.web.d.ts +27 -0
- package/lib/typescript/src/components/ProductMerchandisingCard/ProductMerchandisingCard.d.ts +81 -0
- package/lib/typescript/src/components/ProductOverview/ProductOverview.d.ts +2 -1
- package/lib/typescript/src/components/ProgressBadge/ProgressBadge.d.ts +2 -1
- package/lib/typescript/src/components/ProjectionMarker/ProjectionMarker.d.ts +82 -0
- package/lib/typescript/src/components/Radio/Radio.d.ts +5 -3
- package/lib/typescript/src/components/RadioButton/RadioButton.d.ts +2 -2
- package/lib/typescript/src/components/RangeTrack/RangeTrack.d.ts +3 -2
- package/lib/typescript/src/components/RechargeCard/RechargeCard.d.ts +2 -1
- package/lib/typescript/src/components/SavingsGoalSummary/SavingsGoalSummary.d.ts +2 -1
- package/lib/typescript/src/components/Screen/Screen.d.ts +2 -1
- package/lib/typescript/src/components/Section/Section.d.ts +3 -2
- package/lib/typescript/src/components/SegmentedControl/SegmentedControl.d.ts +2 -1
- package/lib/typescript/src/components/SegmentedTrack/SegmentedTrack.d.ts +4 -3
- package/lib/typescript/src/components/Slider/Slider.d.ts +99 -0
- package/lib/typescript/src/components/Slot/Slot.d.ts +2 -1
- package/lib/typescript/src/components/Spinner/Spinner.d.ts +2 -1
- package/lib/typescript/src/components/StatGroup/StatGroup.d.ts +2 -1
- package/lib/typescript/src/components/StatItem/StatItem.d.ts +2 -1
- package/lib/typescript/src/components/StatusHero/StatusHero.d.ts +2 -1
- package/lib/typescript/src/components/Stepper/Step.d.ts +2 -1
- package/lib/typescript/src/components/Stepper/StepLabel.d.ts +2 -1
- package/lib/typescript/src/components/Stepper/Stepper.d.ts +2 -1
- package/lib/typescript/src/components/StrengthIndicator/StrengthIndicator.d.ts +2 -1
- package/lib/typescript/src/components/SuggestiveSearch/SuggestiveSearch.d.ts +2 -1
- package/lib/typescript/src/components/SummaryTile/SummaryTile.d.ts +2 -1
- package/lib/typescript/src/components/SupportText/SupportText.d.ts +2 -1
- package/lib/typescript/src/components/SupportText/SupportTextIcon.d.ts +2 -1
- package/lib/typescript/src/components/SwappableAmount/SwappableAmount.d.ts +2 -1
- package/lib/typescript/src/components/Tabs/TabItem.d.ts +2 -1
- package/lib/typescript/src/components/Tabs/Tabs.d.ts +2 -1
- package/lib/typescript/src/components/TestimonialsCard/TestimonialsCard.d.ts +2 -1
- package/lib/typescript/src/components/Text/Text.d.ts +2 -1
- package/lib/typescript/src/components/TextInput/TextInput.d.ts +12 -31
- package/lib/typescript/src/components/TextSegment/TextSegment.d.ts +100 -0
- package/lib/typescript/src/components/ThreadHero/ThreadHero.d.ts +2 -1
- package/lib/typescript/src/components/Title/Title.d.ts +2 -1
- package/lib/typescript/src/components/Toast/Toast.d.ts +2 -1
- package/lib/typescript/src/components/Toast/ToastProvider.d.ts +2 -1
- package/lib/typescript/src/components/Toast/useToast.d.ts +3 -2
- package/lib/typescript/src/components/Toggle/Toggle.d.ts +2 -1
- package/lib/typescript/src/components/Tooltip/Tooltip.d.ts +2 -1
- package/lib/typescript/src/components/TransactionBubble/TransactionBubble.d.ts +2 -1
- package/lib/typescript/src/components/TransactionDetails/TransactionDetails.d.ts +3 -2
- package/lib/typescript/src/components/TransactionStatus/TransactionStatus.d.ts +2 -1
- package/lib/typescript/src/components/UpiHandle/UpiHandle.d.ts +2 -1
- package/lib/typescript/src/components/VStack/VStack.d.ts +2 -1
- package/lib/typescript/src/components/docs/modeControls.d.ts +28 -0
- package/lib/typescript/src/components/index.d.ts +11 -1
- package/lib/typescript/src/design-tokens/JFSThemeProvider.d.ts +4 -3
- package/lib/typescript/src/design-tokens/figma-modes.generated.d.ts +284 -0
- package/lib/typescript/src/design-tokens/index.d.ts +1 -0
- package/lib/typescript/src/icons/registry.d.ts +1 -1
- package/lib/typescript/src/skeleton/Skeleton.d.ts +2 -1
- package/lib/typescript/src/utils/react-utils.d.ts +12 -1
- package/package.json +4 -2
- package/src/components/Accordion/Accordion.tsx +2 -1
- package/src/components/AccordionCheckbox/AccordionCheckbox.tsx +2 -1
- package/src/components/AccountCard/AccountCard.tsx +2 -1
- package/src/components/ActionFooter/ActionFooter.tsx +2 -1
- package/src/components/ActionTile/ActionTile.tsx +2 -1
- package/src/components/AllocationComparisonChart/AllocationComparisonChart.tsx +2 -1
- package/src/components/AmountInput/AmountInput.tsx +9 -6
- package/src/components/AppBar/AppBar.tsx +2 -1
- package/src/components/AreaLineChart/AreaLineChart.tsx +8 -7
- package/src/components/Attached/Attached.tsx +2 -1
- package/src/components/Avatar/Avatar.tsx +3 -2
- package/src/components/AvatarGroup/AvatarGroup.tsx +2 -1
- package/src/components/Badge/Badge.tsx +2 -1
- package/src/components/Balance/Balance.tsx +18 -12
- package/src/components/BenefitCard/BenefitCard.tsx +309 -0
- package/src/components/BottomNav/BottomNav.tsx +2 -1
- package/src/components/BottomNavItem/BottomNavItem.tsx +3 -2
- package/src/components/BrandChip/BrandChip.tsx +3 -2
- package/src/components/BubbleChart/BubbleChart.tsx +2 -1
- package/src/components/Button/Button.tsx +3 -2
- package/src/components/ButtonGroup/ButtonGroup.tsx +2 -1
- package/src/components/Card/Card.tsx +4 -3
- package/src/components/CardAdvisory/CardAdvisory.tsx +3 -2
- package/src/components/CardBankAccount/CardBankAccount.tsx +2 -1
- package/src/components/CardCTA/CardCTA.tsx +3 -2
- package/src/components/CardFeedback/CardFeedback.tsx +11 -10
- package/src/components/CardFinancialCondition/CardFinancialCondition.tsx +3 -2
- package/src/components/CardInsight/CardInsight.tsx +2 -1
- package/src/components/CardProviderInfo/CardProviderInfo.tsx +2 -1
- package/src/components/Carousel/Carousel.tsx +5 -4
- package/src/components/CcCard/CcCard.tsx +598 -0
- package/src/components/Checkbox/Checkbox.tsx +7 -5
- package/src/components/CheckboxGroup/CheckboxGroup.tsx +2 -1
- package/src/components/CheckboxItem/CheckboxItem.tsx +7 -5
- package/src/components/ChipGroup/ChipGroup.tsx +2 -1
- package/src/components/ChipSelect/ChipSelect.tsx +2 -1
- package/src/components/CircularProgressBar/CircularProgressBar.tsx +2 -1
- package/src/components/CircularProgressBarDoted/CircularProgressBarDoted.tsx +2 -1
- package/src/components/CircularRating/CircularRating.tsx +3 -2
- package/src/components/ClusterBubble/ClusterBubble.tsx +2 -1
- package/src/components/CompareTable/CompareTable.tsx +477 -0
- package/src/components/ComparisonBar/ComparisonBar.tsx +356 -0
- package/src/components/CoverageBarComparison/CoverageBarComparison.tsx +3 -2
- package/src/components/CoverageRing/CoverageRing.tsx +2 -1
- package/src/components/DebitCard/DebitCard.tsx +2 -1
- package/src/components/Disclaimer/Disclaimer.tsx +2 -1
- package/src/components/Divider/Divider.tsx +2 -1
- package/src/components/DonutChart/DonutChart.tsx +6 -5
- package/src/components/DonutChartSummary/DonutChartSummary.tsx +3 -2
- package/src/components/Drawer/Drawer.tsx +21 -1
- package/src/components/Dropdown/Dropdown.tsx +4 -3
- package/src/components/DropdownInput/DropdownInput.tsx +60 -7
- package/src/components/EmptyState/EmptyState.tsx +2 -1
- package/src/components/ExpandableCheckbox/ExpandableCheckbox.tsx +2 -1
- package/src/components/FilterBar/FilterBar.tsx +3 -2
- package/src/components/Form/Form.tsx +2 -1
- package/src/components/FormField/FormField.tsx +8 -6
- package/src/components/FullscreenModal/FullscreenModal.tsx +68 -10
- package/src/components/Gauge/Gauge.tsx +2 -1
- package/src/components/HStack/HStack.tsx +2 -1
- package/src/components/HoldingsCard/HoldingsCard.tsx +2 -1
- package/src/components/Icon/Icon.tsx +3 -2
- package/src/components/IconButton/IconButton.tsx +3 -2
- package/src/components/IconCapsule/IconCapsule.tsx +3 -2
- package/src/components/Image/Image.tsx +29 -5
- package/src/components/InputSearch/InputSearch.tsx +11 -7
- package/src/components/InstitutionBadge/InstitutionBadge.tsx +3 -2
- package/src/components/LazyList/LazyList.tsx +2 -1
- package/src/components/LinearMeter/LinearMeter.tsx +3 -2
- package/src/components/LinearProgress/LinearProgress.tsx +2 -1
- package/src/components/ListGroup/ListGroup.tsx +2 -1
- package/src/components/ListItem/ListItem.tsx +3 -2
- package/src/components/LottieIntroBlock/LottieIntroBlock.tsx +2 -1
- package/src/components/LottiePlayer/LottiePlayer.tsx +3 -2
- package/src/components/LottiePlayer/LottiePlayer.web.tsx +3 -2
- package/src/components/LottiePlayer/loadNativeLottieView.tsx +9 -13
- package/src/components/MediaCard/MediaCard.tsx +7 -6
- package/src/components/MerchantProfile/MerchantProfile.tsx +2 -1
- package/src/components/MessageField/MessageField.tsx +3 -2
- package/src/components/MetricLegendItem/MetricLegendItem.tsx +2 -1
- package/src/components/MoneyValue/MoneyValue.tsx +2 -1
- package/src/components/MonthlyStatusGrid/MonthlyStatusGrid.tsx +5 -4
- package/src/components/NavArrow/NavArrow.tsx +3 -2
- package/src/components/NoteInput/NoteInput.tsx +10 -7
- package/src/components/Nudge/Nudge.tsx +3 -2
- package/src/components/Numpad/Numpad.tsx +2 -1
- package/src/components/OTP/OTP.tsx +3 -2
- package/src/components/Overlay/Overlay.tsx +114 -0
- package/src/components/PageHero/PageHero.tsx +2 -1
- package/src/components/PaymentFeedback/PaymentFeedback.tsx +2 -1
- package/src/components/PdpCcCard/PdpCcCard.tsx +356 -0
- package/src/components/PlanComparisonCard/PlanComparisonCard.tsx +2 -1
- package/src/components/Popup/Popup.tsx +2 -1
- package/src/components/PortfolioHero/PortfolioHero.tsx +2 -1
- package/src/components/PoweredByLabel/PoweredByLabel.tsx +2 -1
- package/src/components/ProductLabel/ProductLabel.tsx +2 -1
- package/src/components/ProductMerchandisingCard/GlassFill.tsx +276 -0
- package/src/components/ProductMerchandisingCard/GlassFill.web.tsx +127 -0
- package/src/components/ProductMerchandisingCard/ProductMerchandisingCard.tsx +423 -0
- package/src/components/ProductOverview/ProductOverview.tsx +2 -1
- package/src/components/ProgressBadge/ProgressBadge.tsx +2 -1
- package/src/components/ProjectionMarker/ProjectionMarker.tsx +277 -0
- package/src/components/Radio/Radio.tsx +7 -5
- package/src/components/RangeTrack/RangeTrack.tsx +3 -2
- package/src/components/RechargeCard/RechargeCard.tsx +2 -1
- package/src/components/SavingsGoalSummary/SavingsGoalSummary.tsx +2 -1
- package/src/components/Screen/Screen.tsx +2 -1
- package/src/components/Section/Section.tsx +6 -5
- package/src/components/SegmentedControl/SegmentedControl.tsx +3 -2
- package/src/components/SegmentedTrack/SegmentedTrack.tsx +5 -4
- package/src/components/Slider/Slider.tsx +628 -0
- package/src/components/Slot/Slot.tsx +2 -1
- package/src/components/Spinner/Spinner.tsx +2 -1
- package/src/components/StatGroup/StatGroup.tsx +3 -2
- package/src/components/StatItem/StatItem.tsx +2 -1
- package/src/components/StatusHero/StatusHero.tsx +2 -1
- package/src/components/Stepper/Step.tsx +2 -1
- package/src/components/Stepper/StepLabel.tsx +2 -1
- package/src/components/Stepper/Stepper.tsx +2 -1
- package/src/components/StrengthIndicator/StrengthIndicator.tsx +2 -1
- package/src/components/SuggestiveSearch/SuggestiveSearch.tsx +4 -3
- package/src/components/SummaryTile/SummaryTile.tsx +2 -1
- package/src/components/SupportText/SupportText.tsx +2 -1
- package/src/components/SupportText/SupportTextIcon.tsx +2 -1
- package/src/components/SwappableAmount/SwappableAmount.tsx +2 -1
- package/src/components/Tabs/TabItem.tsx +2 -1
- package/src/components/Tabs/Tabs.tsx +2 -1
- package/src/components/TestimonialsCard/TestimonialsCard.tsx +2 -1
- package/src/components/Text/Text.tsx +2 -1
- package/src/components/TextInput/TextInput.tsx +18 -13
- package/src/components/TextSegment/TextSegment.tsx +166 -0
- package/src/components/ThreadHero/ThreadHero.tsx +2 -1
- package/src/components/Title/Title.tsx +2 -1
- package/src/components/Toast/Toast.tsx +2 -1
- package/src/components/Toast/ToastProvider.tsx +2 -1
- package/src/components/Toast/useToast.ts +3 -2
- package/src/components/Toggle/Toggle.tsx +2 -1
- package/src/components/Tooltip/Tooltip.tsx +3 -2
- package/src/components/TransactionBubble/TransactionBubble.tsx +2 -1
- package/src/components/TransactionDetails/TransactionDetails.tsx +3 -2
- package/src/components/TransactionStatus/TransactionStatus.tsx +3 -2
- package/src/components/UpiHandle/UpiHandle.tsx +3 -2
- package/src/components/VStack/VStack.tsx +2 -1
- package/src/components/docs/modeControls.tsx +122 -0
- package/src/components/index.ts +11 -1
- package/src/design-tokens/Coin Variables-variables-full.json +1 -1
- package/src/design-tokens/JFSThemeProvider.tsx +4 -3
- package/src/design-tokens/figma-modes.generated.ts +425 -0
- package/src/design-tokens/index.ts +1 -0
- package/src/icons/registry.ts +1 -1
- package/src/skeleton/Skeleton.tsx +2 -1
- package/src/utils/react-utils.ts +26 -2
- package/lib/typescript/scripts/extract-component-tokens.d.ts +0 -9
- package/lib/typescript/scripts/generate-component-docs.d.ts +0 -9
- package/lib/typescript/scripts/generate-icon-registry.d.ts +0 -3
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
3
|
+
import React, { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';
|
|
4
4
|
import { Dimensions, Modal, Platform, Pressable, StyleSheet, Text, View } from 'react-native';
|
|
5
5
|
import { useSafeAreaInsets } from 'react-native-safe-area-context';
|
|
6
6
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver';
|
|
@@ -16,6 +16,12 @@ const IS_WEB = Platform.OS === 'web';
|
|
|
16
16
|
// Types
|
|
17
17
|
// ---------------------------------------------------------------------------
|
|
18
18
|
|
|
19
|
+
/**
|
|
20
|
+
* Imperative handle exposed via `ref`. Lets the consumer drive the dropdown
|
|
21
|
+
* from outside — e.g. close it when an Android hardware/system button is
|
|
22
|
+
* pressed, or open it programmatically from a sibling control.
|
|
23
|
+
*/
|
|
24
|
+
|
|
19
25
|
// ---------------------------------------------------------------------------
|
|
20
26
|
// Token resolution
|
|
21
27
|
// ---------------------------------------------------------------------------
|
|
@@ -119,7 +125,7 @@ function collectOptionsFromChildren(children) {
|
|
|
119
125
|
// Component
|
|
120
126
|
// ---------------------------------------------------------------------------
|
|
121
127
|
|
|
122
|
-
function DropdownInput({
|
|
128
|
+
const DropdownInput = /*#__PURE__*/forwardRef(function DropdownInput({
|
|
123
129
|
label,
|
|
124
130
|
placeholder = 'Select an option',
|
|
125
131
|
items,
|
|
@@ -150,7 +156,7 @@ function DropdownInput({
|
|
|
150
156
|
accessibilityHint,
|
|
151
157
|
onFocus,
|
|
152
158
|
onBlur
|
|
153
|
-
}) {
|
|
159
|
+
}, ref) {
|
|
154
160
|
// ---------------- Modes ----------------
|
|
155
161
|
const {
|
|
156
162
|
modes: globalModes
|
|
@@ -264,6 +270,32 @@ function DropdownInput({
|
|
|
264
270
|
measure();
|
|
265
271
|
}, [measure]);
|
|
266
272
|
|
|
273
|
+
// ---------------- Imperative handle ----------------
|
|
274
|
+
useImperativeHandle(ref, () => ({
|
|
275
|
+
open: () => {
|
|
276
|
+
if (isDisabled || isReadOnly) return;
|
|
277
|
+
measure();
|
|
278
|
+
setOpenState(true);
|
|
279
|
+
},
|
|
280
|
+
close: closeMenu,
|
|
281
|
+
toggle: () => {
|
|
282
|
+
if (isDisabled || isReadOnly) return;
|
|
283
|
+
measure();
|
|
284
|
+
toggleMenu();
|
|
285
|
+
},
|
|
286
|
+
focus: () => {
|
|
287
|
+
;
|
|
288
|
+
triggerRef.current?.focus?.();
|
|
289
|
+
},
|
|
290
|
+
blur: () => {
|
|
291
|
+
;
|
|
292
|
+
triggerRef.current?.blur?.();
|
|
293
|
+
},
|
|
294
|
+
measureInWindow: callback => {
|
|
295
|
+
triggerRef.current?.measureInWindow(callback);
|
|
296
|
+
}
|
|
297
|
+
}), [isDisabled, isReadOnly, measure, setOpenState, closeMenu, toggleMenu]);
|
|
298
|
+
|
|
267
299
|
// ---------------- Popup positioning ----------------
|
|
268
300
|
const [menuSize, setMenuSize] = useState(null);
|
|
269
301
|
const handleMenuLayout = useCallback(e => {
|
|
@@ -531,7 +563,7 @@ function DropdownInput({
|
|
|
531
563
|
transparent: true,
|
|
532
564
|
statusBarTranslucent: true,
|
|
533
565
|
navigationBarTranslucent: true,
|
|
534
|
-
animationType: "
|
|
566
|
+
animationType: "none",
|
|
535
567
|
onRequestClose: closeMenu,
|
|
536
568
|
children: /*#__PURE__*/_jsx(Pressable, {
|
|
537
569
|
style: StyleSheet.absoluteFill,
|
|
@@ -558,7 +590,7 @@ function DropdownInput({
|
|
|
558
590
|
})
|
|
559
591
|
})]
|
|
560
592
|
});
|
|
561
|
-
}
|
|
593
|
+
});
|
|
562
594
|
const webNoOutline = {
|
|
563
595
|
outlineStyle: 'none',
|
|
564
596
|
outlineWidth: 0,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import React, { useCallback, useMemo, useState } from 'react';
|
|
3
|
+
import React, { forwardRef, useCallback, useMemo, useState } from 'react';
|
|
4
4
|
import { View, Text, TextInput as RNTextInput } from 'react-native';
|
|
5
5
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver';
|
|
6
6
|
import { useTokens } from '../../design-tokens/JFSThemeProvider';
|
|
@@ -156,7 +156,7 @@ function firstError(error) {
|
|
|
156
156
|
// Component
|
|
157
157
|
// ---------------------------------------------------------------------------
|
|
158
158
|
|
|
159
|
-
function FormField({
|
|
159
|
+
const FormField = /*#__PURE__*/forwardRef(function FormField({
|
|
160
160
|
label,
|
|
161
161
|
placeholder,
|
|
162
162
|
value,
|
|
@@ -184,7 +184,7 @@ function FormField({
|
|
|
184
184
|
accessibilityLabel,
|
|
185
185
|
accessibilityHint,
|
|
186
186
|
testID
|
|
187
|
-
}) {
|
|
187
|
+
}, ref) {
|
|
188
188
|
// -- Form context integration -------------------------------------------
|
|
189
189
|
const formCtx = useFormContext();
|
|
190
190
|
const formError = name && formCtx ? firstError(formCtx.validationErrors[name]) : undefined;
|
|
@@ -341,6 +341,7 @@ function FormField({
|
|
|
341
341
|
importantForAccessibility: "no",
|
|
342
342
|
children: processedLeading
|
|
343
343
|
}), /*#__PURE__*/_jsx(RNTextInput, {
|
|
344
|
+
ref: ref,
|
|
344
345
|
style: [inputTextStyles, inputTextStyle],
|
|
345
346
|
value: value ?? '',
|
|
346
347
|
onChangeText: handleChangeText,
|
|
@@ -370,5 +371,5 @@ function FormField({
|
|
|
370
371
|
modes: modes
|
|
371
372
|
})]
|
|
372
373
|
});
|
|
373
|
-
}
|
|
374
|
+
});
|
|
374
375
|
export default FormField;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import React, { useMemo, useRef } from 'react';
|
|
3
|
+
import React, { useMemo, useRef, useState, useCallback } from 'react';
|
|
4
4
|
import { View, Text, Animated } from 'react-native';
|
|
5
5
|
import { useSafeAreaInsets } from 'react-native-safe-area-context';
|
|
6
6
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver';
|
|
@@ -11,7 +11,7 @@ import Disclaimer from '../Disclaimer/Disclaimer';
|
|
|
11
11
|
import IconButton from '../IconButton/IconButton';
|
|
12
12
|
import ActionFooter from '../ActionFooter/ActionFooter';
|
|
13
13
|
import Slot from '../Slot/Slot';
|
|
14
|
-
|
|
14
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
15
15
|
// ---------------------------------------------------------------------------
|
|
16
16
|
// Forced modes
|
|
17
17
|
//
|
|
@@ -24,7 +24,6 @@ import Slot from '../Slot/Slot';
|
|
|
24
24
|
// stays hot, and so `cloneChildrenWithModes` can use it as the
|
|
25
25
|
// always-wins `forcedModes` argument.
|
|
26
26
|
// ---------------------------------------------------------------------------
|
|
27
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
28
27
|
const FULLSCREEN_MODAL_FORCED_MODES = Object.freeze({
|
|
29
28
|
context5: 'Fullscreen Modal'
|
|
30
29
|
});
|
|
@@ -248,7 +247,57 @@ function FullscreenModal({
|
|
|
248
247
|
useNativeDriver: true
|
|
249
248
|
}), [scrollY]);
|
|
250
249
|
const heroTranslateY = useMemo(() => Animated.multiply(scrollY, -1), [scrollY]);
|
|
251
|
-
|
|
250
|
+
|
|
251
|
+
// The hero media is a full-bleed background pinned to the top of the modal.
|
|
252
|
+
// Its wrapper is absolutely positioned (`top/left/right: 0`) so it never
|
|
253
|
+
// contributes to scroll height. We measure the modal's own width so we can
|
|
254
|
+
// give the hero media a DEFINITE { width, height } box (see
|
|
255
|
+
// `processedHeroMedia` below) — relying on the media's own `width: '100%'` +
|
|
256
|
+
// `aspectRatio` is unreliable inside an indefinite-height absolute box (RN's
|
|
257
|
+
// `<Image>` falls back to its intrinsic width and leaves a gap), so we size
|
|
258
|
+
// it explicitly here instead.
|
|
259
|
+
const [containerWidth, setContainerWidth] = useState(0);
|
|
260
|
+
const onContainerLayout = useCallback(e => {
|
|
261
|
+
const w = e.nativeEvent.layout.width;
|
|
262
|
+
setContainerWidth(prev => prev !== w ? w : prev);
|
|
263
|
+
}, []);
|
|
264
|
+
const processedHeroMedia = useMemo(() => {
|
|
265
|
+
if (!heroMedia) return null;
|
|
266
|
+
// Defer rendering the hero until we have measured the modal width. This
|
|
267
|
+
// matters for image sharpness: React Native decodes a bitmap once, on the
|
|
268
|
+
// first render, and caches it. If we rendered the media before knowing the
|
|
269
|
+
// final box, that first decode would be sized/sampled for the wrong box and
|
|
270
|
+
// the cached (downsampled) bitmap would then just be scaled up — blurry.
|
|
271
|
+
// Rendering only once the explicit { width, height } box is known means the
|
|
272
|
+
// very first decode is already full-resolution for the correct box.
|
|
273
|
+
if (containerWidth <= 0) return null;
|
|
274
|
+
const withModes = cloneChildrenWithModes(heroMedia, modes, FULLSCREEN_MODAL_FORCED_MODES);
|
|
275
|
+
|
|
276
|
+
// Force the hero to fill the modal width edge to edge, top-aligned, with the
|
|
277
|
+
// height derived from the media's native aspect ratio.
|
|
278
|
+
//
|
|
279
|
+
// Why we inject explicit width/height instead of relying on the media's own
|
|
280
|
+
// `width: '100%'` + `aspectRatio`: the hero wrapper is absolutely positioned
|
|
281
|
+
// with an INDEFINITE height, and in that layout context React Native's
|
|
282
|
+
// `<Image>` falls back to its INTRINSIC width (so a 361px-wide asset renders
|
|
283
|
+
// 361px wide and leaves a gap on the right) rather than stretching to the
|
|
284
|
+
// parent. By computing `height = containerWidth / ratio` here and passing a
|
|
285
|
+
// DEFINITE { width, height } box (which makes `<Image>` skip aspectRatio and
|
|
286
|
+
// cover-fit into that exact box), the hero always fills the width with the
|
|
287
|
+
// correct ratio-derived height.
|
|
288
|
+
return React.Children.map(withModes, child => {
|
|
289
|
+
if (! /*#__PURE__*/React.isValidElement(child)) return child;
|
|
290
|
+
const props = child.props;
|
|
291
|
+
const ratio = typeof props.ratio === 'number' && props.ratio > 0 ? props.ratio : undefined;
|
|
292
|
+
// Only size media that exposes a numeric `ratio` and hasn't already been
|
|
293
|
+
// given an explicit box by the caller.
|
|
294
|
+
if (ratio == null || props.width != null || props.height != null) return child;
|
|
295
|
+
return /*#__PURE__*/React.cloneElement(child, {
|
|
296
|
+
width: containerWidth,
|
|
297
|
+
height: containerWidth / ratio
|
|
298
|
+
});
|
|
299
|
+
});
|
|
300
|
+
}, [heroMedia, modes, containerWidth]);
|
|
252
301
|
const processedChildren = useMemo(() => children ? cloneChildrenWithModes(children, modes, FULLSCREEN_MODAL_FORCED_MODES) : null, [children, modes]);
|
|
253
302
|
|
|
254
303
|
// The hero text region always reserves `heroHeight` and anchors its content
|
|
@@ -301,8 +350,18 @@ function FullscreenModal({
|
|
|
301
350
|
return /*#__PURE__*/_jsxs(View, {
|
|
302
351
|
style: [rootStyle, style],
|
|
303
352
|
testID: testID,
|
|
353
|
+
onLayout: onContainerLayout,
|
|
304
354
|
children: [processedHeroMedia ? /*#__PURE__*/_jsx(Animated.View, {
|
|
305
|
-
style: [heroBackgroundStyle,
|
|
355
|
+
style: [heroBackgroundStyle,
|
|
356
|
+
// Give the absolute wrapper a DEFINITE width (the measured modal
|
|
357
|
+
// width) so the media's `width: '100%'` + `aspectRatio` resolves to
|
|
358
|
+
// a true edge-to-edge fill with a ratio-derived height, top-aligned.
|
|
359
|
+
// Before the first layout pass `containerWidth` is 0 — fall back to
|
|
360
|
+
// stretching via `left/right: 0` so there is no flash of a mis-sized
|
|
361
|
+
// image.
|
|
362
|
+
containerWidth > 0 ? {
|
|
363
|
+
width: containerWidth
|
|
364
|
+
} : null, {
|
|
306
365
|
transform: [{
|
|
307
366
|
translateY: heroTranslateY
|
|
308
367
|
}]
|
|
@@ -37,6 +37,7 @@ function Image({
|
|
|
37
37
|
imageSource,
|
|
38
38
|
ratio = DEFAULT_RATIO,
|
|
39
39
|
resizeMode = 'cover',
|
|
40
|
+
resizeMethod,
|
|
40
41
|
width,
|
|
41
42
|
height,
|
|
42
43
|
borderRadius,
|
|
@@ -47,11 +48,15 @@ function Image({
|
|
|
47
48
|
loading
|
|
48
49
|
}) {
|
|
49
50
|
const source = useMemo(() => normalizeSource(imageSource), [imageSource]);
|
|
51
|
+
|
|
52
|
+
// Explicit { width, height } means a "fill an exact box" layout — typically a
|
|
53
|
+
// full-bleed hero/background where the asset is high-res and sharpness
|
|
54
|
+
// matters most. There, default to `'none'` (full-resolution, no pre-decode
|
|
55
|
+
// downsample) so detail is never thrown away. Aspect-ratio images keep the
|
|
56
|
+
// memory-safe `'scale'` default. A caller-supplied `resizeMethod` always wins.
|
|
57
|
+
const isExplicitBox = width != null && height != null;
|
|
58
|
+
const effectiveResizeMethod = resizeMethod ?? (isExplicitBox ? 'none' : 'scale');
|
|
50
59
|
const layoutStyle = useMemo(() => {
|
|
51
|
-
// If the caller has fully specified width AND height, they're doing a
|
|
52
|
-
// non-aspect layout (e.g. "fill the parent") — respect that and skip
|
|
53
|
-
// `aspectRatio` so it doesn't conflict.
|
|
54
|
-
const isExplicitBox = width != null && height != null;
|
|
55
60
|
const s = {
|
|
56
61
|
width: width ?? '100%',
|
|
57
62
|
...(isExplicitBox ? {
|
|
@@ -65,7 +70,7 @@ function Image({
|
|
|
65
70
|
};
|
|
66
71
|
if (borderRadius != null) s.borderRadius = borderRadius;
|
|
67
72
|
return s;
|
|
68
|
-
}, [ratio, width, height, borderRadius]);
|
|
73
|
+
}, [ratio, width, height, borderRadius, isExplicitBox]);
|
|
69
74
|
const {
|
|
70
75
|
active: groupActive
|
|
71
76
|
} = useSkeleton();
|
|
@@ -96,6 +101,7 @@ function Image({
|
|
|
96
101
|
source: source,
|
|
97
102
|
style: [layoutStyle, style],
|
|
98
103
|
resizeMode: resizeMode,
|
|
104
|
+
resizeMethod: effectiveResizeMethod,
|
|
99
105
|
accessibilityLabel: accessibilityLabel,
|
|
100
106
|
accessibilityElementsHidden: accessibilityElementsHidden,
|
|
101
107
|
importantForAccessibility: importantForAccessibility
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import React, { useState } from 'react';
|
|
3
|
+
import React, { forwardRef, useState } from 'react';
|
|
4
4
|
import { View, Text, Pressable } from 'react-native';
|
|
5
5
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver';
|
|
6
6
|
import { EMPTY_MODES } from '../../utils/react-utils';
|
|
@@ -48,7 +48,7 @@ function SupportText({
|
|
|
48
48
|
})]
|
|
49
49
|
});
|
|
50
50
|
}
|
|
51
|
-
|
|
51
|
+
const InputSearch = /*#__PURE__*/forwardRef(function InputSearch({
|
|
52
52
|
supportText = true,
|
|
53
53
|
supportTextLabel = "Support Text",
|
|
54
54
|
supportTextIcon = "ic_info",
|
|
@@ -63,7 +63,7 @@ export default function InputSearch({
|
|
|
63
63
|
trailing,
|
|
64
64
|
inputStyle,
|
|
65
65
|
...rest
|
|
66
|
-
}) {
|
|
66
|
+
}, ref) {
|
|
67
67
|
const [isFocused, setIsFocused] = useState(false);
|
|
68
68
|
|
|
69
69
|
// Hardcode InputState based on the state prop, ignoring any external InputState passed in modes
|
|
@@ -118,6 +118,7 @@ export default function InputSearch({
|
|
|
118
118
|
gap: formFieldGap
|
|
119
119
|
}, containerStyle],
|
|
120
120
|
children: [/*#__PURE__*/_jsx(TextInput, {
|
|
121
|
+
ref: ref,
|
|
121
122
|
placeholder: placeholder,
|
|
122
123
|
value: value || '',
|
|
123
124
|
onChangeText: onChangeText || (() => {}),
|
|
@@ -137,4 +138,5 @@ export default function InputSearch({
|
|
|
137
138
|
modes: componentModes
|
|
138
139
|
})]
|
|
139
140
|
});
|
|
140
|
-
}
|
|
141
|
+
});
|
|
142
|
+
export default InputSearch;
|
|
@@ -6,11 +6,10 @@ import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
|
6
6
|
import { useTokens } from '../../design-tokens/JFSThemeProvider';
|
|
7
7
|
import { EMPTY_MODES, cloneChildrenWithModes } from '../../utils/react-utils';
|
|
8
8
|
import MediaSource from '../../utils/MediaSource';
|
|
9
|
-
|
|
9
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
10
10
|
// Default avatar asset (shared with the Avatar component) so that
|
|
11
11
|
// InstitutionBadge has a sensible visual fallback when no `source` is
|
|
12
12
|
// provided in stories or playgrounds.
|
|
13
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
14
13
|
const DEFAULT_AVATAR_IMAGE = require('../Avatar/31595e70c4181263f9971590224b12934b280c9b.png');
|
|
15
14
|
const toNumber = (value, fallback) => {
|
|
16
15
|
if (typeof value === 'number') {
|
|
@@ -6,17 +6,6 @@ import { Text, View } from 'react-native';
|
|
|
6
6
|
/** Props we forward to the underlying native Lottie view. */
|
|
7
7
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
8
8
|
const INSTALL_HINT = 'LottiePlayer requires lottie-react-native in your app.\n' + ' npm install lottie-react-native\n' + ' cd ios && pod install';
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Metro resolves `require('lottie-react-native')` at bundle time even inside
|
|
12
|
-
* try/catch, which breaks apps that import `jfs-components` without having
|
|
13
|
-
* the optional peer installed. Splitting the module id into a runtime string
|
|
14
|
-
* keeps Metro from statically linking it — the native module is loaded only
|
|
15
|
-
* when present in the consumer's node_modules.
|
|
16
|
-
*/
|
|
17
|
-
function resolveNativeLottieModuleName() {
|
|
18
|
-
return ['lottie', '-react', '-native'].join('');
|
|
19
|
-
}
|
|
20
9
|
function LottieUnavailableView({
|
|
21
10
|
style
|
|
22
11
|
}) {
|
|
@@ -60,8 +49,14 @@ let cachedView;
|
|
|
60
49
|
export function getNativeLottieView() {
|
|
61
50
|
if (cachedView !== undefined) return cachedView;
|
|
62
51
|
try {
|
|
63
|
-
|
|
64
|
-
|
|
52
|
+
// Static require so Metro resolves the module by its build-time numeric id.
|
|
53
|
+
// A runtime-constructed string path is NOT resolvable by Metro's `require`
|
|
54
|
+
// (it indexes modules by number, not path), so it would always throw and
|
|
55
|
+
// fall back to the install hint even when the package is installed. The
|
|
56
|
+
// dependency stays an *optional* peer: apps that use LottiePlayer install
|
|
57
|
+
// it; apps that don't simply never import this module.
|
|
58
|
+
const mod = require('lottie-react-native');
|
|
59
|
+
cachedView = mod.default ?? mod.LottieView ?? LottieUnavailable;
|
|
65
60
|
} catch {
|
|
66
61
|
cachedView = LottieUnavailable;
|
|
67
62
|
}
|
|
@@ -4,9 +4,8 @@ import React, { useMemo, useEffect, useRef } from 'react';
|
|
|
4
4
|
import { View, Text, Pressable, Animated } from 'react-native';
|
|
5
5
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver';
|
|
6
6
|
import { EMPTY_MODES } from '../../utils/react-utils';
|
|
7
|
-
|
|
8
|
-
// Map of common ISO 4217 currency codes to display symbols
|
|
9
7
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
8
|
+
// Map of common ISO 4217 currency codes to display symbols
|
|
10
9
|
const CURRENCY_SYMBOLS = {
|
|
11
10
|
INR: '₹',
|
|
12
11
|
USD: '$',
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import React, { useState, useRef } from 'react';
|
|
3
|
+
import React, { forwardRef, useState, useRef } from 'react';
|
|
4
4
|
import { View, TextInput as RNTextInput, Text, Pressable } from 'react-native';
|
|
5
5
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver';
|
|
6
|
-
import { EMPTY_MODES } from '../../utils/react-utils';
|
|
6
|
+
import { EMPTY_MODES, mergeRefs } from '../../utils/react-utils';
|
|
7
7
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
8
8
|
/**
|
|
9
9
|
* NoteInput component representing an interactive "Add note" badge style field.
|
|
10
10
|
* Allows the user to click, clears the placeholder text, and shows a blinking cursor when focused.
|
|
11
11
|
*/
|
|
12
|
-
|
|
12
|
+
const NoteInput = /*#__PURE__*/forwardRef(function NoteInput({
|
|
13
13
|
value = '',
|
|
14
14
|
placeholder = 'Add note',
|
|
15
15
|
onChangeText,
|
|
@@ -20,7 +20,7 @@ export default function NoteInput({
|
|
|
20
20
|
onFocus,
|
|
21
21
|
onBlur,
|
|
22
22
|
...rest
|
|
23
|
-
}) {
|
|
23
|
+
}, ref) {
|
|
24
24
|
const [internalFocused, setInternalFocused] = useState(false);
|
|
25
25
|
const inputRef = useRef(null);
|
|
26
26
|
|
|
@@ -92,7 +92,7 @@ export default function NoteInput({
|
|
|
92
92
|
importantForAccessibility: "no",
|
|
93
93
|
children: internalFocused ? value || ' ' : value || placeholder
|
|
94
94
|
}), /*#__PURE__*/_jsx(RNTextInput, {
|
|
95
|
-
ref: inputRef,
|
|
95
|
+
ref: mergeRefs(inputRef, ref),
|
|
96
96
|
value: value,
|
|
97
97
|
onChangeText: onChangeText,
|
|
98
98
|
placeholder: internalFocused ? '' : placeholder,
|
|
@@ -112,4 +112,5 @@ export default function NoteInput({
|
|
|
112
112
|
})]
|
|
113
113
|
})
|
|
114
114
|
});
|
|
115
|
-
}
|
|
115
|
+
});
|
|
116
|
+
export default NoteInput;
|
|
@@ -7,11 +7,10 @@ import { useTokens } from '../../design-tokens/JFSThemeProvider';
|
|
|
7
7
|
import SupportText from '../SupportText/SupportText';
|
|
8
8
|
import Button from '../Button/Button';
|
|
9
9
|
import { cloneChildrenWithModes, EMPTY_MODES } from '../../utils/react-utils';
|
|
10
|
-
|
|
10
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
11
11
|
// Default mode overrides for the resend Button. Per design: a small,
|
|
12
12
|
// low-emphasis, neutral-appearance button. Consumers can override any of
|
|
13
13
|
// these via OTPResendConfig.resendButtonModes.
|
|
14
|
-
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
15
14
|
const DEFAULT_RESEND_BUTTON_MODES = {
|
|
16
15
|
AppearanceBrand: 'Neutral',
|
|
17
16
|
'Button / Size': 'S',
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React, { useMemo } from 'react';
|
|
4
|
+
import { Pressable, StyleSheet, View } from 'react-native';
|
|
5
|
+
import { getVariableByName } from '../../design-tokens/figma-variables-resolver';
|
|
6
|
+
import { useTokens } from '../../design-tokens/JFSThemeProvider';
|
|
7
|
+
import { cloneChildrenWithModes, EMPTY_MODES } from '../../utils/react-utils';
|
|
8
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
9
|
+
const PLACEMENT_STYLE = {
|
|
10
|
+
center: {
|
|
11
|
+
justifyContent: 'center',
|
|
12
|
+
alignItems: 'center'
|
|
13
|
+
},
|
|
14
|
+
top: {
|
|
15
|
+
justifyContent: 'flex-start',
|
|
16
|
+
alignItems: 'stretch'
|
|
17
|
+
},
|
|
18
|
+
bottom: {
|
|
19
|
+
justifyContent: 'flex-end',
|
|
20
|
+
alignItems: 'stretch'
|
|
21
|
+
},
|
|
22
|
+
stretch: {
|
|
23
|
+
justifyContent: 'center',
|
|
24
|
+
alignItems: 'stretch'
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Overlay — a token-driven scrim that dims content behind an overlaid surface.
|
|
30
|
+
*
|
|
31
|
+
* Renders a semi-transparent backdrop using the `overlay/background` design
|
|
32
|
+
* token and optionally hosts content (e.g. a modal, sheet or dialog) on top.
|
|
33
|
+
* Pair it with a `Modal` for true full-screen overlays, or drop it inside any
|
|
34
|
+
* relatively-positioned container to dim just that region.
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```tsx
|
|
38
|
+
* <Overlay modes={modes} onPress={close}>
|
|
39
|
+
* <Card>Dialog content</Card>
|
|
40
|
+
* </Overlay>
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
function Overlay({
|
|
44
|
+
children,
|
|
45
|
+
contentPlacement = 'center',
|
|
46
|
+
onPress,
|
|
47
|
+
fill = true,
|
|
48
|
+
modes: propModes = EMPTY_MODES,
|
|
49
|
+
style,
|
|
50
|
+
...rest
|
|
51
|
+
}) {
|
|
52
|
+
const {
|
|
53
|
+
modes: globalModes
|
|
54
|
+
} = useTokens();
|
|
55
|
+
const modes = useMemo(() => ({
|
|
56
|
+
...globalModes,
|
|
57
|
+
...propModes
|
|
58
|
+
}), [globalModes, propModes]);
|
|
59
|
+
const {
|
|
60
|
+
containerStyle,
|
|
61
|
+
processedChildren
|
|
62
|
+
} = useMemo(() => {
|
|
63
|
+
const backgroundColor = getVariableByName('overlay/background', modes) ?? 'rgba(0, 0, 0, 0.7)';
|
|
64
|
+
const container = {
|
|
65
|
+
backgroundColor,
|
|
66
|
+
overflow: 'hidden',
|
|
67
|
+
...PLACEMENT_STYLE[contentPlacement]
|
|
68
|
+
};
|
|
69
|
+
const processed = children ? cloneChildrenWithModes(children, modes) : null;
|
|
70
|
+
return {
|
|
71
|
+
containerStyle: container,
|
|
72
|
+
processedChildren: processed
|
|
73
|
+
};
|
|
74
|
+
}, [children, modes, contentPlacement]);
|
|
75
|
+
return /*#__PURE__*/_jsxs(View, {
|
|
76
|
+
style: [fill && StyleSheet.absoluteFill, containerStyle, style],
|
|
77
|
+
accessibilityViewIsModal: true,
|
|
78
|
+
...rest,
|
|
79
|
+
children: [onPress ? /*#__PURE__*/_jsx(Pressable, {
|
|
80
|
+
style: StyleSheet.absoluteFill,
|
|
81
|
+
onPress: onPress,
|
|
82
|
+
accessibilityRole: "button",
|
|
83
|
+
accessibilityLabel: "Dismiss overlay"
|
|
84
|
+
}) : null, processedChildren]
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
export default /*#__PURE__*/React.memo(Overlay);
|