jfs-components 0.1.12 → 0.1.18
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 +24 -0
- package/lib/commonjs/components/ActionFooter/ActionFooter.js +7 -24
- package/lib/commonjs/components/ActionTile/ActionTile.js +10 -10
- package/lib/commonjs/components/AmountInput/AmountInput.js +3 -3
- package/lib/commonjs/components/AreaLineChart/AreaLineChart.js +2 -2
- package/lib/commonjs/components/Attached/Attached.js +1 -1
- package/lib/commonjs/components/Avatar/Avatar.js +10 -10
- package/lib/commonjs/components/AvatarGroup/AvatarGroup.js +50 -29
- package/lib/commonjs/components/Badge/Badge.js +12 -12
- package/lib/commonjs/components/BenefitCard/BenefitCard.js +95 -21
- package/lib/commonjs/components/BottomNav/BottomNav.js +2 -2
- package/lib/commonjs/components/BottomNavItem/BottomNavItem.js +3 -3
- package/lib/commonjs/components/Button/Button.js +31 -19
- package/lib/commonjs/components/Card/Card.js +20 -20
- package/lib/commonjs/components/CardAdvisory/CardAdvisory.js +6 -6
- package/lib/commonjs/components/CardCTA/CardCTA.js +21 -21
- package/lib/commonjs/components/CardFeedback/CardFeedback.js +18 -18
- package/lib/commonjs/components/CardFinancialCondition/CardFinancialCondition.js +7 -7
- package/lib/commonjs/components/CardInsight/CardInsight.js +1 -2
- package/lib/commonjs/components/Carousel/Carousel.js +18 -12
- package/lib/commonjs/components/CarouselCardAccounts/CarouselCardAccounts.js +75 -0
- package/lib/commonjs/components/Checkbox/Checkbox.js +6 -13
- package/lib/commonjs/components/ChipGroup/ChipGroup.js +1 -1
- package/lib/commonjs/components/ChipSelect/ChipSelect.js +11 -11
- package/lib/commonjs/components/CircularProgressBar/CircularProgressBar.js +5 -5
- package/lib/commonjs/components/CircularProgressBarDoted/CircularProgressBarDoted.js +8 -8
- package/lib/commonjs/components/CircularRating/CircularRating.js +3 -3
- package/lib/commonjs/components/CompareTable/CompareTable.js +16 -16
- package/lib/commonjs/components/DebitCard/DebitCard.js +18 -18
- package/lib/commonjs/components/Disclaimer/Disclaimer.js +5 -5
- package/lib/commonjs/components/DonutChart/DonutChart.js +11 -11
- package/lib/commonjs/components/Drawer/Drawer.js +60 -60
- package/lib/commonjs/components/Dropdown/Dropdown.js +22 -23
- package/lib/commonjs/components/DropdownInput/DropdownInput.js +10 -10
- package/lib/commonjs/components/EmptyState/EmptyState.js +14 -14
- package/lib/commonjs/components/FilterBar/FilterBar.js +2 -2
- package/lib/commonjs/components/Form/Form.js +3 -3
- package/lib/commonjs/components/FormField/FormField.js +6 -6
- package/lib/commonjs/components/FullscreenModal/FullscreenModal.js +24 -24
- package/lib/commonjs/components/Gauge/Gauge.js +8 -8
- package/lib/commonjs/components/HoldingsCard/HoldingsCard.js +10 -10
- package/lib/commonjs/components/Icon/Icon.js +6 -6
- package/lib/commonjs/components/IconCapsule/IconCapsule.js +7 -7
- package/lib/commonjs/components/InputSearch/InputSearch.js +9 -9
- package/lib/commonjs/components/InstitutionBadge/InstitutionBadge.js +3 -3
- package/lib/commonjs/components/ListGroup/ListGroup.js +8 -8
- package/lib/commonjs/components/ListItem/ListItem.js +10 -10
- package/lib/commonjs/components/LottieIntroBlock/LottieIntroBlock.js +13 -13
- package/lib/commonjs/components/LottiePlayer/LottiePlayer.js +2 -2
- package/lib/commonjs/components/LottiePlayer/LottiePlayer.web.js +2 -2
- package/lib/commonjs/components/MediaCard/MediaCard.js +21 -21
- package/lib/commonjs/components/MessageField/MessageField.js +8 -8
- package/lib/commonjs/components/MoneyValue/MoneyValue.js +7 -7
- package/lib/commonjs/components/NavArrow/NavArrow.js +8 -8
- package/lib/commonjs/components/NoteInput/NoteInput.js +12 -12
- package/lib/commonjs/components/Nudge/Nudge.js +20 -20
- package/lib/commonjs/components/OTP/OTP.js +15 -15
- package/lib/commonjs/components/PageHero/PageHero.js +16 -16
- package/lib/commonjs/components/PaymentFeedback/PaymentFeedback.js +23 -23
- package/lib/commonjs/components/Popup/Popup.js +1 -1
- package/lib/commonjs/components/ProductMerchandisingCard/ProductMerchandisingCard.js +64 -60
- package/lib/commonjs/components/ProgressBadge/ProgressBadge.js +5 -5
- package/lib/commonjs/components/Radio/Radio.js +8 -8
- package/lib/commonjs/components/RechargeCard/RechargeCard.js +31 -31
- package/lib/commonjs/components/SavingsGoalSummary/SavingsGoalSummary.js +59 -12
- package/lib/commonjs/components/ScrollArea/ScrollArea.js +126 -0
- package/lib/commonjs/components/Section/Section.js +24 -24
- package/lib/commonjs/components/StatusHero/StatusHero.js +14 -14
- package/lib/commonjs/components/Stepper/Step.js +16 -16
- package/lib/commonjs/components/Stepper/StepLabel.js +16 -16
- package/lib/commonjs/components/Stepper/Stepper.js +3 -3
- package/lib/commonjs/components/SuggestiveSearch/SuggestiveSearch.js +10 -10
- package/lib/commonjs/components/SupportText/SupportText.js +6 -6
- package/lib/commonjs/components/SupportText/SupportTextIcon.js +2 -2
- package/lib/commonjs/components/Text/Text.js +14 -2
- package/lib/commonjs/components/TextInput/TextInput.js +14 -14
- package/lib/commonjs/components/TextSegment/TextSegment.js +14 -2
- package/lib/commonjs/components/ThreadHero/ThreadHero.js +17 -17
- package/lib/commonjs/components/Title/Title.js +38 -16
- package/lib/commonjs/components/Toast/Toast.js +15 -15
- package/lib/commonjs/components/Toggle/Toggle.js +3 -11
- package/lib/commonjs/components/Tooltip/Tooltip.js +12 -12
- package/lib/commonjs/components/TransactionBubble/TransactionBubble.js +13 -13
- package/lib/commonjs/components/TransactionDetails/TransactionDetails.js +10 -10
- package/lib/commonjs/components/TransactionStatus/TransactionStatus.js +9 -9
- package/lib/commonjs/components/UpiHandle/UpiHandle.js +15 -15
- package/lib/commonjs/components/index.js +14 -0
- package/lib/commonjs/design-tokens/Coin Variables-variables-full.json +1 -1
- package/lib/commonjs/design-tokens/figma-modes.generated.js +50 -42
- package/lib/commonjs/icons/components/Icon4g.js +19 -0
- package/lib/commonjs/icons/components/Icon4gltedata.js +19 -0
- package/lib/commonjs/icons/components/Icon5g.js +19 -0
- package/lib/commonjs/icons/components/Icon5gdoubleplus.js +19 -0
- package/lib/commonjs/icons/components/Icon5gplus.js +19 -0
- package/lib/commonjs/icons/components/IconAdblocker.js +19 -0
- package/lib/commonjs/icons/components/IconAdblockplus.js +19 -0
- package/lib/commonjs/icons/components/IconAnalytics.js +19 -0
- package/lib/commonjs/icons/components/IconAnalyticsdata.js +19 -0
- package/lib/commonjs/icons/components/IconAnalyticspiechart.js +19 -0
- package/lib/commonjs/icons/components/IconAnalyticspiecharttree.js +19 -0
- package/lib/commonjs/icons/components/IconAnalyticspiecharttwo.js +19 -0
- package/lib/commonjs/icons/components/IconCompoundinterest.js +19 -0
- package/lib/commonjs/icons/components/IconConsumptionaccounted.js +19 -0
- package/lib/commonjs/icons/components/IconConsumptionaverage.js +19 -0
- package/lib/commonjs/icons/components/IconConsumptionhigh.js +19 -0
- package/lib/commonjs/icons/components/IconConsumptionlow.js +19 -0
- package/lib/commonjs/icons/components/IconConsumptionunaccounted.js +19 -0
- package/lib/commonjs/icons/components/IconCsvdoc.js +19 -0
- package/lib/commonjs/icons/components/IconDatabase.js +19 -0
- package/lib/commonjs/icons/components/IconDigitalecosystem.js +19 -0
- package/lib/commonjs/icons/components/IconDigitalselfservice.js +19 -0
- package/lib/commonjs/icons/components/IconDistribution.js +19 -0
- package/lib/commonjs/icons/components/IconDocument.js +19 -0
- package/lib/commonjs/icons/components/IconDocumentdoc.js +19 -0
- package/lib/commonjs/icons/components/IconDocumentjpg.js +19 -0
- package/lib/commonjs/icons/components/IconDocumentodt.js +19 -0
- package/lib/commonjs/icons/components/IconDocumentpdf.js +19 -0
- package/lib/commonjs/icons/components/IconDocumentpng.js +19 -0
- package/lib/commonjs/icons/components/IconDocumentraw.js +19 -0
- package/lib/commonjs/icons/components/IconDocumentrtf.js +19 -0
- package/lib/commonjs/icons/components/IconDocumentsettings.js +19 -0
- package/lib/commonjs/icons/components/IconDocumenttif.js +19 -0
- package/lib/commonjs/icons/components/IconDocumenttxt.js +19 -0
- package/lib/commonjs/icons/components/IconDocumentunknown.js +19 -0
- package/lib/commonjs/icons/components/IconDocumentxls.js +19 -0
- package/lib/commonjs/icons/components/IconDocumentxlsx.js +19 -0
- package/lib/commonjs/icons/components/IconFilerequest.js +19 -0
- package/lib/commonjs/icons/components/IconFilesend.js +19 -0
- package/lib/commonjs/icons/components/IconFileshare.js +19 -0
- package/lib/commonjs/icons/components/IconFindinpage.js +19 -0
- package/lib/commonjs/icons/components/IconFolder.js +19 -0
- package/lib/commonjs/icons/components/IconFolderbookmarks.js +19 -0
- package/lib/commonjs/icons/components/IconFolderfavorites.js +19 -0
- package/lib/commonjs/icons/components/IconFolderlocked.js +19 -0
- package/lib/commonjs/icons/components/IconFoldermovefiles.js +19 -0
- package/lib/commonjs/icons/components/IconFolderpublic.js +19 -0
- package/lib/commonjs/icons/components/IconFolderrated.js +19 -0
- package/lib/commonjs/icons/components/IconFolderrequest.js +19 -0
- package/lib/commonjs/icons/components/IconForm.js +19 -0
- package/lib/commonjs/icons/components/IconFormadd.js +19 -0
- package/lib/commonjs/icons/components/IconForms.js +19 -0
- package/lib/commonjs/icons/components/IconGraphincreasing.js +19 -0
- package/lib/commonjs/icons/components/IconGraphlow.js +19 -0
- package/lib/commonjs/icons/components/IconGraphtable.js +19 -0
- package/lib/commonjs/icons/components/IconHealthreport.js +19 -0
- package/lib/commonjs/icons/components/IconHubmode.js +19 -0
- package/lib/commonjs/icons/components/IconInfrastructure.js +19 -0
- package/lib/commonjs/icons/components/IconInterestlow.js +19 -0
- package/lib/commonjs/icons/components/IconLte.js +19 -0
- package/lib/commonjs/icons/components/IconNetworkfuture.js +19 -0
- package/lib/commonjs/icons/components/IconPagesettings.js +19 -0
- package/lib/commonjs/icons/components/IconPptxdoc.js +19 -0
- package/lib/commonjs/icons/components/IconPreferrednumber.js +19 -0
- package/lib/commonjs/icons/components/IconPremiumnumber.js +19 -0
- package/lib/commonjs/icons/components/IconProjection.js +19 -0
- package/lib/commonjs/icons/components/IconRequest.js +19 -0
- package/lib/commonjs/icons/components/IconRoutestraffic.js +19 -0
- package/lib/commonjs/icons/components/IconTechnology.js +19 -0
- package/lib/commonjs/icons/components/IconVolte.js +19 -0
- package/lib/commonjs/icons/components/IconVonr.js +19 -0
- package/lib/commonjs/icons/components/IconVowifi.js +19 -0
- package/lib/commonjs/icons/components/IconVpndata.js +19 -0
- package/lib/commonjs/icons/components/index.js +803 -0
- package/lib/commonjs/icons/registry.js +2 -2
- package/lib/commonjs/utils/GlassFill/GlassFill.js +69 -73
- package/lib/commonjs/utils/index.js +25 -0
- package/lib/commonjs/utils/react-utils.js +62 -0
- package/lib/commonjs/utils/shadow.js +200 -0
- package/lib/module/components/ActionFooter/ActionFooter.js +7 -24
- package/lib/module/components/ActionTile/ActionTile.js +10 -10
- package/lib/module/components/AmountInput/AmountInput.js +3 -3
- package/lib/module/components/AreaLineChart/AreaLineChart.js +2 -2
- package/lib/module/components/Attached/Attached.js +1 -1
- package/lib/module/components/Avatar/Avatar.js +10 -10
- package/lib/module/components/AvatarGroup/AvatarGroup.js +52 -30
- package/lib/module/components/Badge/Badge.js +12 -12
- package/lib/module/components/BenefitCard/BenefitCard.js +95 -21
- package/lib/module/components/BottomNav/BottomNav.js +2 -2
- package/lib/module/components/BottomNavItem/BottomNavItem.js +3 -3
- package/lib/module/components/Button/Button.js +32 -20
- package/lib/module/components/Card/Card.js +20 -20
- package/lib/module/components/CardAdvisory/CardAdvisory.js +6 -6
- package/lib/module/components/CardCTA/CardCTA.js +21 -21
- package/lib/module/components/CardFeedback/CardFeedback.js +18 -18
- package/lib/module/components/CardFinancialCondition/CardFinancialCondition.js +7 -7
- package/lib/module/components/CardInsight/CardInsight.js +1 -2
- package/lib/module/components/Carousel/Carousel.js +18 -12
- package/lib/module/components/CarouselCardAccounts/CarouselCardAccounts.js +71 -0
- package/lib/module/components/Checkbox/Checkbox.js +2 -9
- package/lib/module/components/ChipGroup/ChipGroup.js +1 -1
- package/lib/module/components/ChipSelect/ChipSelect.js +11 -11
- package/lib/module/components/CircularProgressBar/CircularProgressBar.js +5 -5
- package/lib/module/components/CircularProgressBarDoted/CircularProgressBarDoted.js +8 -8
- package/lib/module/components/CircularRating/CircularRating.js +3 -3
- package/lib/module/components/CompareTable/CompareTable.js +16 -16
- package/lib/module/components/DebitCard/DebitCard.js +18 -18
- package/lib/module/components/Disclaimer/Disclaimer.js +5 -5
- package/lib/module/components/DonutChart/DonutChart.js +11 -11
- package/lib/module/components/Drawer/Drawer.js +60 -60
- package/lib/module/components/Dropdown/Dropdown.js +22 -23
- package/lib/module/components/DropdownInput/DropdownInput.js +10 -10
- package/lib/module/components/EmptyState/EmptyState.js +14 -14
- package/lib/module/components/FilterBar/FilterBar.js +2 -2
- package/lib/module/components/Form/Form.js +3 -3
- package/lib/module/components/FormField/FormField.js +6 -6
- package/lib/module/components/FullscreenModal/FullscreenModal.js +24 -24
- package/lib/module/components/Gauge/Gauge.js +8 -8
- package/lib/module/components/HoldingsCard/HoldingsCard.js +10 -10
- package/lib/module/components/Icon/Icon.js +6 -6
- package/lib/module/components/IconCapsule/IconCapsule.js +7 -7
- package/lib/module/components/InputSearch/InputSearch.js +9 -9
- package/lib/module/components/InstitutionBadge/InstitutionBadge.js +3 -3
- package/lib/module/components/ListGroup/ListGroup.js +8 -8
- package/lib/module/components/ListItem/ListItem.js +10 -10
- package/lib/module/components/LottieIntroBlock/LottieIntroBlock.js +13 -13
- package/lib/module/components/LottiePlayer/LottiePlayer.js +2 -2
- package/lib/module/components/LottiePlayer/LottiePlayer.web.js +2 -2
- package/lib/module/components/MediaCard/MediaCard.js +21 -21
- package/lib/module/components/MessageField/MessageField.js +8 -8
- package/lib/module/components/MoneyValue/MoneyValue.js +7 -7
- package/lib/module/components/NavArrow/NavArrow.js +8 -8
- package/lib/module/components/NoteInput/NoteInput.js +12 -12
- package/lib/module/components/Nudge/Nudge.js +20 -20
- package/lib/module/components/OTP/OTP.js +15 -15
- package/lib/module/components/PageHero/PageHero.js +16 -16
- package/lib/module/components/PaymentFeedback/PaymentFeedback.js +23 -23
- package/lib/module/components/Popup/Popup.js +1 -1
- package/lib/module/components/ProductMerchandisingCard/ProductMerchandisingCard.js +66 -62
- package/lib/module/components/ProgressBadge/ProgressBadge.js +5 -5
- package/lib/module/components/Radio/Radio.js +9 -9
- package/lib/module/components/RechargeCard/RechargeCard.js +31 -31
- package/lib/module/components/SavingsGoalSummary/SavingsGoalSummary.js +60 -13
- package/lib/module/components/ScrollArea/ScrollArea.js +121 -0
- package/lib/module/components/Section/Section.js +24 -24
- package/lib/module/components/StatusHero/StatusHero.js +14 -14
- package/lib/module/components/Stepper/Step.js +16 -16
- package/lib/module/components/Stepper/StepLabel.js +16 -16
- package/lib/module/components/Stepper/Stepper.js +3 -3
- package/lib/module/components/SuggestiveSearch/SuggestiveSearch.js +10 -10
- package/lib/module/components/SupportText/SupportText.js +6 -6
- package/lib/module/components/SupportText/SupportTextIcon.js +2 -2
- package/lib/module/components/Text/Text.js +15 -3
- package/lib/module/components/TextInput/TextInput.js +14 -14
- package/lib/module/components/TextSegment/TextSegment.js +15 -3
- package/lib/module/components/ThreadHero/ThreadHero.js +17 -17
- package/lib/module/components/Title/Title.js +39 -17
- package/lib/module/components/Toast/Toast.js +15 -15
- package/lib/module/components/Toggle/Toggle.js +4 -12
- package/lib/module/components/Tooltip/Tooltip.js +12 -12
- package/lib/module/components/TransactionBubble/TransactionBubble.js +13 -13
- package/lib/module/components/TransactionDetails/TransactionDetails.js +10 -10
- package/lib/module/components/TransactionStatus/TransactionStatus.js +9 -9
- package/lib/module/components/UpiHandle/UpiHandle.js +15 -15
- package/lib/module/components/index.js +2 -0
- package/lib/module/design-tokens/Coin Variables-variables-full.json +1 -1
- package/lib/module/design-tokens/figma-modes.generated.js +50 -42
- package/lib/module/icons/components/Icon4g.js +12 -0
- package/lib/module/icons/components/Icon4gltedata.js +12 -0
- package/lib/module/icons/components/Icon5g.js +12 -0
- package/lib/module/icons/components/Icon5gdoubleplus.js +12 -0
- package/lib/module/icons/components/Icon5gplus.js +12 -0
- package/lib/module/icons/components/IconAdblocker.js +12 -0
- package/lib/module/icons/components/IconAdblockplus.js +12 -0
- package/lib/module/icons/components/IconAnalytics.js +12 -0
- package/lib/module/icons/components/IconAnalyticsdata.js +12 -0
- package/lib/module/icons/components/IconAnalyticspiechart.js +12 -0
- package/lib/module/icons/components/IconAnalyticspiecharttree.js +12 -0
- package/lib/module/icons/components/IconAnalyticspiecharttwo.js +12 -0
- package/lib/module/icons/components/IconCompoundinterest.js +12 -0
- package/lib/module/icons/components/IconConsumptionaccounted.js +12 -0
- package/lib/module/icons/components/IconConsumptionaverage.js +12 -0
- package/lib/module/icons/components/IconConsumptionhigh.js +12 -0
- package/lib/module/icons/components/IconConsumptionlow.js +12 -0
- package/lib/module/icons/components/IconConsumptionunaccounted.js +12 -0
- package/lib/module/icons/components/IconCsvdoc.js +12 -0
- package/lib/module/icons/components/IconDatabase.js +12 -0
- package/lib/module/icons/components/IconDigitalecosystem.js +12 -0
- package/lib/module/icons/components/IconDigitalselfservice.js +12 -0
- package/lib/module/icons/components/IconDistribution.js +12 -0
- package/lib/module/icons/components/IconDocument.js +12 -0
- package/lib/module/icons/components/IconDocumentdoc.js +12 -0
- package/lib/module/icons/components/IconDocumentjpg.js +12 -0
- package/lib/module/icons/components/IconDocumentodt.js +12 -0
- package/lib/module/icons/components/IconDocumentpdf.js +12 -0
- package/lib/module/icons/components/IconDocumentpng.js +12 -0
- package/lib/module/icons/components/IconDocumentraw.js +12 -0
- package/lib/module/icons/components/IconDocumentrtf.js +12 -0
- package/lib/module/icons/components/IconDocumentsettings.js +12 -0
- package/lib/module/icons/components/IconDocumenttif.js +12 -0
- package/lib/module/icons/components/IconDocumenttxt.js +12 -0
- package/lib/module/icons/components/IconDocumentunknown.js +12 -0
- package/lib/module/icons/components/IconDocumentxls.js +12 -0
- package/lib/module/icons/components/IconDocumentxlsx.js +12 -0
- package/lib/module/icons/components/IconFilerequest.js +12 -0
- package/lib/module/icons/components/IconFilesend.js +12 -0
- package/lib/module/icons/components/IconFileshare.js +12 -0
- package/lib/module/icons/components/IconFindinpage.js +12 -0
- package/lib/module/icons/components/IconFolder.js +12 -0
- package/lib/module/icons/components/IconFolderbookmarks.js +12 -0
- package/lib/module/icons/components/IconFolderfavorites.js +12 -0
- package/lib/module/icons/components/IconFolderlocked.js +12 -0
- package/lib/module/icons/components/IconFoldermovefiles.js +12 -0
- package/lib/module/icons/components/IconFolderpublic.js +12 -0
- package/lib/module/icons/components/IconFolderrated.js +12 -0
- package/lib/module/icons/components/IconFolderrequest.js +12 -0
- package/lib/module/icons/components/IconForm.js +12 -0
- package/lib/module/icons/components/IconFormadd.js +12 -0
- package/lib/module/icons/components/IconForms.js +12 -0
- package/lib/module/icons/components/IconGraphincreasing.js +12 -0
- package/lib/module/icons/components/IconGraphlow.js +12 -0
- package/lib/module/icons/components/IconGraphtable.js +12 -0
- package/lib/module/icons/components/IconHealthreport.js +12 -0
- package/lib/module/icons/components/IconHubmode.js +12 -0
- package/lib/module/icons/components/IconInfrastructure.js +12 -0
- package/lib/module/icons/components/IconInterestlow.js +12 -0
- package/lib/module/icons/components/IconLte.js +12 -0
- package/lib/module/icons/components/IconNetworkfuture.js +12 -0
- package/lib/module/icons/components/IconPagesettings.js +12 -0
- package/lib/module/icons/components/IconPptxdoc.js +12 -0
- package/lib/module/icons/components/IconPreferrednumber.js +12 -0
- package/lib/module/icons/components/IconPremiumnumber.js +12 -0
- package/lib/module/icons/components/IconProjection.js +12 -0
- package/lib/module/icons/components/IconRequest.js +12 -0
- package/lib/module/icons/components/IconRoutestraffic.js +12 -0
- package/lib/module/icons/components/IconTechnology.js +12 -0
- package/lib/module/icons/components/IconVolte.js +12 -0
- package/lib/module/icons/components/IconVonr.js +12 -0
- package/lib/module/icons/components/IconVowifi.js +12 -0
- package/lib/module/icons/components/IconVpndata.js +12 -0
- package/lib/module/icons/components/index.js +73 -0
- package/lib/module/icons/registry.js +2 -2
- package/lib/module/utils/GlassFill/GlassFill.js +69 -72
- package/lib/module/utils/index.js +2 -1
- package/lib/module/utils/react-utils.js +61 -0
- package/lib/module/utils/shadow.js +194 -0
- package/lib/typescript/src/components/BenefitCard/BenefitCard.d.ts +33 -4
- package/lib/typescript/src/components/Carousel/Carousel.d.ts +11 -1
- package/lib/typescript/src/components/CarouselCardAccounts/CarouselCardAccounts.d.ts +57 -0
- package/lib/typescript/src/components/SavingsGoalSummary/SavingsGoalSummary.d.ts +11 -1
- package/lib/typescript/src/components/ScrollArea/ScrollArea.d.ts +77 -0
- package/lib/typescript/src/components/Text/Text.d.ts +12 -3
- package/lib/typescript/src/components/TextSegment/TextSegment.d.ts +12 -3
- package/lib/typescript/src/components/Title/Title.d.ts +12 -2
- package/lib/typescript/src/components/index.d.ts +2 -0
- package/lib/typescript/src/design-tokens/figma-modes.generated.d.ts +23 -15
- package/lib/typescript/src/icons/components/Icon4g.d.ts +3 -0
- package/lib/typescript/src/icons/components/Icon4gltedata.d.ts +3 -0
- package/lib/typescript/src/icons/components/Icon5g.d.ts +3 -0
- package/lib/typescript/src/icons/components/Icon5gdoubleplus.d.ts +3 -0
- package/lib/typescript/src/icons/components/Icon5gplus.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconAdblocker.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconAdblockplus.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconAnalytics.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconAnalyticsdata.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconAnalyticspiechart.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconAnalyticspiecharttree.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconAnalyticspiecharttwo.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconCompoundinterest.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconConsumptionaccounted.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconConsumptionaverage.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconConsumptionhigh.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconConsumptionlow.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconConsumptionunaccounted.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconCsvdoc.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconDatabase.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconDigitalecosystem.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconDigitalselfservice.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconDistribution.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconDocument.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconDocumentdoc.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconDocumentjpg.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconDocumentodt.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconDocumentpdf.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconDocumentpng.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconDocumentraw.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconDocumentrtf.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconDocumentsettings.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconDocumenttif.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconDocumenttxt.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconDocumentunknown.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconDocumentxls.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconDocumentxlsx.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconFilerequest.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconFilesend.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconFileshare.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconFindinpage.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconFolder.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconFolderbookmarks.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconFolderfavorites.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconFolderlocked.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconFoldermovefiles.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconFolderpublic.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconFolderrated.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconFolderrequest.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconForm.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconFormadd.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconForms.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconGraphincreasing.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconGraphlow.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconGraphtable.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconHealthreport.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconHubmode.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconInfrastructure.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconInterestlow.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconLte.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconNetworkfuture.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconPagesettings.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconPptxdoc.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconPreferrednumber.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconPremiumnumber.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconProjection.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconRequest.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconRoutestraffic.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconTechnology.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconVolte.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconVonr.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconVowifi.d.ts +3 -0
- package/lib/typescript/src/icons/components/IconVpndata.d.ts +3 -0
- package/lib/typescript/src/icons/components/index.d.ts +73 -0
- package/lib/typescript/src/icons/registry.d.ts +1 -1
- package/lib/typescript/src/utils/GlassFill/GlassFill.d.ts +11 -4
- package/lib/typescript/src/utils/index.d.ts +2 -0
- package/lib/typescript/src/utils/react-utils.d.ts +40 -1
- package/lib/typescript/src/utils/shadow.d.ts +72 -0
- package/package.json +2 -2
- package/src/components/ActionFooter/ActionFooter.tsx +8 -26
- package/src/components/ActionTile/ActionTile.tsx +10 -10
- package/src/components/AmountInput/AmountInput.tsx +3 -3
- package/src/components/AreaLineChart/AreaLineChart.tsx +2 -2
- package/src/components/Attached/Attached.tsx +1 -1
- package/src/components/Avatar/Avatar.tsx +10 -10
- package/src/components/AvatarGroup/AvatarGroup.tsx +53 -27
- package/src/components/Badge/Badge.tsx +12 -13
- package/src/components/BenefitCard/BenefitCard.tsx +120 -27
- package/src/components/BottomNav/BottomNav.tsx +2 -2
- package/src/components/BottomNavItem/BottomNavItem.tsx +3 -3
- package/src/components/Button/Button.tsx +30 -20
- package/src/components/Card/Card.tsx +20 -20
- package/src/components/CardAdvisory/CardAdvisory.tsx +6 -6
- package/src/components/CardCTA/CardCTA.tsx +21 -21
- package/src/components/CardFeedback/CardFeedback.tsx +18 -18
- package/src/components/CardFinancialCondition/CardFinancialCondition.tsx +7 -10
- package/src/components/CardInsight/CardInsight.tsx +1 -3
- package/src/components/Carousel/Carousel.tsx +29 -12
- package/src/components/CarouselCardAccounts/CarouselCardAccounts.tsx +113 -0
- package/src/components/Checkbox/Checkbox.tsx +2 -8
- package/src/components/ChipGroup/ChipGroup.tsx +1 -1
- package/src/components/ChipSelect/ChipSelect.tsx +11 -11
- package/src/components/CircularProgressBar/CircularProgressBar.tsx +5 -5
- package/src/components/CircularProgressBarDoted/CircularProgressBarDoted.tsx +8 -8
- package/src/components/CircularRating/CircularRating.tsx +3 -3
- package/src/components/CompareTable/CompareTable.tsx +16 -16
- package/src/components/DebitCard/DebitCard.tsx +22 -22
- package/src/components/Disclaimer/Disclaimer.tsx +5 -5
- package/src/components/DonutChart/DonutChart.tsx +11 -45
- package/src/components/Drawer/Drawer.tsx +80 -71
- package/src/components/Dropdown/Dropdown.tsx +23 -28
- package/src/components/DropdownInput/DropdownInput.tsx +10 -17
- package/src/components/EmptyState/EmptyState.tsx +14 -14
- package/src/components/FilterBar/FilterBar.tsx +2 -2
- package/src/components/Form/Form.tsx +3 -3
- package/src/components/FormField/FormField.tsx +6 -11
- package/src/components/FullscreenModal/FullscreenModal.tsx +24 -24
- package/src/components/Gauge/Gauge.tsx +8 -8
- package/src/components/HoldingsCard/HoldingsCard.tsx +10 -10
- package/src/components/Icon/Icon.tsx +6 -6
- package/src/components/IconCapsule/IconCapsule.tsx +7 -7
- package/src/components/InputSearch/InputSearch.tsx +9 -9
- package/src/components/InstitutionBadge/InstitutionBadge.tsx +3 -6
- package/src/components/ListGroup/ListGroup.tsx +8 -8
- package/src/components/ListItem/ListItem.tsx +10 -10
- package/src/components/LottieIntroBlock/LottieIntroBlock.tsx +13 -16
- package/src/components/LottiePlayer/LottiePlayer.tsx +2 -2
- package/src/components/LottiePlayer/LottiePlayer.web.tsx +2 -2
- package/src/components/MediaCard/MediaCard.tsx +21 -21
- package/src/components/MessageField/MessageField.tsx +8 -16
- package/src/components/MoneyValue/MoneyValue.tsx +7 -7
- package/src/components/NavArrow/NavArrow.tsx +8 -8
- package/src/components/NoteInput/NoteInput.tsx +12 -12
- package/src/components/Nudge/Nudge.tsx +20 -20
- package/src/components/OTP/OTP.tsx +16 -16
- package/src/components/PageHero/PageHero.tsx +16 -16
- package/src/components/PaymentFeedback/PaymentFeedback.tsx +27 -27
- package/src/components/Popup/Popup.tsx +1 -1
- package/src/components/ProductMerchandisingCard/ProductMerchandisingCard.tsx +76 -47
- package/src/components/ProgressBadge/ProgressBadge.tsx +5 -5
- package/src/components/Radio/Radio.tsx +8 -9
- package/src/components/RechargeCard/RechargeCard.tsx +31 -31
- package/src/components/SavingsGoalSummary/SavingsGoalSummary.tsx +105 -13
- package/src/components/ScrollArea/ScrollArea.tsx +200 -0
- package/src/components/Section/Section.tsx +26 -26
- package/src/components/StatusHero/StatusHero.tsx +14 -14
- package/src/components/Stepper/Step.tsx +16 -18
- package/src/components/Stepper/StepLabel.tsx +16 -27
- package/src/components/Stepper/Stepper.tsx +3 -4
- package/src/components/SuggestiveSearch/SuggestiveSearch.tsx +10 -20
- package/src/components/SupportText/SupportText.tsx +6 -6
- package/src/components/SupportText/SupportTextIcon.tsx +2 -2
- package/src/components/Text/Text.tsx +23 -5
- package/src/components/TextInput/TextInput.tsx +14 -14
- package/src/components/TextSegment/TextSegment.tsx +22 -4
- package/src/components/ThreadHero/ThreadHero.tsx +17 -17
- package/src/components/Title/Title.tsx +44 -18
- package/src/components/Toast/Toast.tsx +15 -15
- package/src/components/Toggle/Toggle.tsx +5 -10
- package/src/components/Tooltip/Tooltip.tsx +12 -12
- package/src/components/TransactionBubble/TransactionBubble.tsx +15 -15
- package/src/components/TransactionDetails/TransactionDetails.tsx +10 -10
- package/src/components/TransactionStatus/TransactionStatus.tsx +9 -9
- package/src/components/UpiHandle/UpiHandle.tsx +15 -15
- package/src/components/index.ts +2 -0
- package/src/design-tokens/Coin Variables-variables-full.json +1 -1
- package/src/design-tokens/figma-modes.generated.ts +50 -42
- package/src/icons/components/Icon4g.tsx +11 -0
- package/src/icons/components/Icon4gltedata.tsx +11 -0
- package/src/icons/components/Icon5g.tsx +11 -0
- package/src/icons/components/Icon5gdoubleplus.tsx +11 -0
- package/src/icons/components/Icon5gplus.tsx +11 -0
- package/src/icons/components/IconAdblocker.tsx +11 -0
- package/src/icons/components/IconAdblockplus.tsx +11 -0
- package/src/icons/components/IconAnalytics.tsx +11 -0
- package/src/icons/components/IconAnalyticsdata.tsx +11 -0
- package/src/icons/components/IconAnalyticspiechart.tsx +11 -0
- package/src/icons/components/IconAnalyticspiecharttree.tsx +11 -0
- package/src/icons/components/IconAnalyticspiecharttwo.tsx +11 -0
- package/src/icons/components/IconCompoundinterest.tsx +11 -0
- package/src/icons/components/IconConsumptionaccounted.tsx +11 -0
- package/src/icons/components/IconConsumptionaverage.tsx +11 -0
- package/src/icons/components/IconConsumptionhigh.tsx +11 -0
- package/src/icons/components/IconConsumptionlow.tsx +11 -0
- package/src/icons/components/IconConsumptionunaccounted.tsx +11 -0
- package/src/icons/components/IconCsvdoc.tsx +11 -0
- package/src/icons/components/IconDatabase.tsx +11 -0
- package/src/icons/components/IconDigitalecosystem.tsx +11 -0
- package/src/icons/components/IconDigitalselfservice.tsx +11 -0
- package/src/icons/components/IconDistribution.tsx +11 -0
- package/src/icons/components/IconDocument.tsx +11 -0
- package/src/icons/components/IconDocumentdoc.tsx +11 -0
- package/src/icons/components/IconDocumentjpg.tsx +11 -0
- package/src/icons/components/IconDocumentodt.tsx +11 -0
- package/src/icons/components/IconDocumentpdf.tsx +11 -0
- package/src/icons/components/IconDocumentpng.tsx +11 -0
- package/src/icons/components/IconDocumentraw.tsx +11 -0
- package/src/icons/components/IconDocumentrtf.tsx +11 -0
- package/src/icons/components/IconDocumentsettings.tsx +11 -0
- package/src/icons/components/IconDocumenttif.tsx +11 -0
- package/src/icons/components/IconDocumenttxt.tsx +11 -0
- package/src/icons/components/IconDocumentunknown.tsx +11 -0
- package/src/icons/components/IconDocumentxls.tsx +11 -0
- package/src/icons/components/IconDocumentxlsx.tsx +11 -0
- package/src/icons/components/IconFilerequest.tsx +11 -0
- package/src/icons/components/IconFilesend.tsx +11 -0
- package/src/icons/components/IconFileshare.tsx +11 -0
- package/src/icons/components/IconFindinpage.tsx +11 -0
- package/src/icons/components/IconFolder.tsx +11 -0
- package/src/icons/components/IconFolderbookmarks.tsx +11 -0
- package/src/icons/components/IconFolderfavorites.tsx +11 -0
- package/src/icons/components/IconFolderlocked.tsx +11 -0
- package/src/icons/components/IconFoldermovefiles.tsx +11 -0
- package/src/icons/components/IconFolderpublic.tsx +11 -0
- package/src/icons/components/IconFolderrated.tsx +11 -0
- package/src/icons/components/IconFolderrequest.tsx +11 -0
- package/src/icons/components/IconForm.tsx +11 -0
- package/src/icons/components/IconFormadd.tsx +11 -0
- package/src/icons/components/IconForms.tsx +11 -0
- package/src/icons/components/IconGraphincreasing.tsx +11 -0
- package/src/icons/components/IconGraphlow.tsx +11 -0
- package/src/icons/components/IconGraphtable.tsx +11 -0
- package/src/icons/components/IconHealthreport.tsx +11 -0
- package/src/icons/components/IconHubmode.tsx +11 -0
- package/src/icons/components/IconInfrastructure.tsx +11 -0
- package/src/icons/components/IconInterestlow.tsx +11 -0
- package/src/icons/components/IconLte.tsx +11 -0
- package/src/icons/components/IconNetworkfuture.tsx +11 -0
- package/src/icons/components/IconPagesettings.tsx +11 -0
- package/src/icons/components/IconPptxdoc.tsx +11 -0
- package/src/icons/components/IconPreferrednumber.tsx +11 -0
- package/src/icons/components/IconPremiumnumber.tsx +11 -0
- package/src/icons/components/IconProjection.tsx +11 -0
- package/src/icons/components/IconRequest.tsx +11 -0
- package/src/icons/components/IconRoutestraffic.tsx +11 -0
- package/src/icons/components/IconTechnology.tsx +11 -0
- package/src/icons/components/IconVolte.tsx +11 -0
- package/src/icons/components/IconVonr.tsx +11 -0
- package/src/icons/components/IconVowifi.tsx +11 -0
- package/src/icons/components/IconVpndata.tsx +11 -0
- package/src/icons/components/index.ts +73 -0
- package/src/icons/registry.ts +293 -1
- package/src/utils/GlassFill/GlassFill.tsx +59 -56
- package/src/utils/index.ts +2 -0
- package/src/utils/react-utils.ts +72 -1
- package/src/utils/shadow.ts +219 -0
|
@@ -37,9 +37,9 @@ const AmountInput = forwardRef<View, AmountInputProps>(function AmountInput({
|
|
|
37
37
|
const modes = { ...globalModes, ...propModes }
|
|
38
38
|
|
|
39
39
|
// Resolve tokens
|
|
40
|
-
const gap = Number(getVariableByName('amountInput/gap', modes))
|
|
41
|
-
const paddingHorizontal = Number(getVariableByName('amountInput/padding/horizontal', modes))
|
|
42
|
-
const paddingVertical = Number(getVariableByName('amountInput/padding/vertical', modes))
|
|
40
|
+
const gap = Number(getVariableByName('amountInput/gap', modes))
|
|
41
|
+
const paddingHorizontal = Number(getVariableByName('amountInput/padding/horizontal', modes))
|
|
42
|
+
const paddingVertical = Number(getVariableByName('amountInput/padding/vertical', modes))
|
|
43
43
|
|
|
44
44
|
const containerStyle: ViewStyle = {
|
|
45
45
|
flexDirection: 'column',
|
|
@@ -1035,7 +1035,7 @@ function ChartTooltip({
|
|
|
1035
1035
|
const bg = (getVariableByName('tooltip/background', modes) as string | null) ?? '#0f0d0a'
|
|
1036
1036
|
const paddingH = toNumber(getVariableByName('tooltip/padding/horizontal', modes), 12)
|
|
1037
1037
|
const paddingV = toNumber(getVariableByName('tooltip/padding/vertical', modes), 8)
|
|
1038
|
-
const radius =
|
|
1038
|
+
const radius = 8
|
|
1039
1039
|
const labelColor = (getVariableByName('tooltip/label/color', modes) as string | null) ?? '#ffffff'
|
|
1040
1040
|
|
|
1041
1041
|
if (items.length === 0) return null
|
|
@@ -1111,7 +1111,7 @@ function ChartLegend() {
|
|
|
1111
1111
|
/** Resolve `axisItem/*` typography tokens into a memoized text style. */
|
|
1112
1112
|
function useAxisTypography(modes: Modes) {
|
|
1113
1113
|
return useMemo(() => {
|
|
1114
|
-
const color = (getVariableByName('axisItem/
|
|
1114
|
+
const color = (getVariableByName('axisItem/fg', modes) as string | null) ?? '#000000'
|
|
1115
1115
|
const fontFamily =
|
|
1116
1116
|
(getVariableByName('axisItem/fontFamily', modes) as string | null) ?? 'JioType Var'
|
|
1117
1117
|
const fontSize = toNumber(getVariableByName('axisItem/fontSize', modes), 12)
|
|
@@ -189,7 +189,7 @@ function Attached({
|
|
|
189
189
|
// anchor centering intact).
|
|
190
190
|
const slotBorderStyle = useMemo<ViewStyle | null>(() => {
|
|
191
191
|
const borderColor = getVariableByName('attached/slot/border', modes)
|
|
192
|
-
const borderWidth = parseFloat(getVariableByName('attached/slot/borderWidth', modes)
|
|
192
|
+
const borderWidth = parseFloat(getVariableByName('attached/slot/borderWidth', modes))
|
|
193
193
|
if (!borderColor || !(borderWidth > 0)) return null
|
|
194
194
|
|
|
195
195
|
// Match the inner clip radius so the ring stays concentric. The outer edge
|
|
@@ -65,18 +65,18 @@ interface AvatarTokens {
|
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
function resolveAvatarTokens(modes: Modes, isMonogram: boolean): AvatarTokens {
|
|
68
|
-
const size = (getVariableByName('avatar/size', modes)
|
|
69
|
-
const radiusRaw = (getVariableByName('avatar/radius', modes)
|
|
70
|
-
const backgroundColor = getVariableByName('avatar/background', modes)
|
|
71
|
-
const borderColor = getVariableByName('avatar/border/color', modes)
|
|
72
|
-
const borderSize = (getVariableByName('avatar/border/size', modes)
|
|
73
|
-
const labelColor = getVariableByName('avatar/label/color', modes)
|
|
74
|
-
const labelFontSize = (getVariableByName('avatar/label/fontSize', modes)
|
|
75
|
-
const labelLineHeight = (getVariableByName('avatar/label/lineHeight', modes)
|
|
76
|
-
const labelFontWeightRaw = getVariableByName('avatar/label/fontWeight', modes)
|
|
68
|
+
const size = (getVariableByName('avatar/size', modes)) as number
|
|
69
|
+
const radiusRaw = (getVariableByName('avatar/radius', modes)) as number
|
|
70
|
+
const backgroundColor = getVariableByName('avatar/background', modes)
|
|
71
|
+
const borderColor = getVariableByName('avatar/border/color', modes)
|
|
72
|
+
const borderSize = (getVariableByName('avatar/border/size', modes)) as number
|
|
73
|
+
const labelColor = getVariableByName('avatar/label/color', modes)
|
|
74
|
+
const labelFontSize = (getVariableByName('avatar/label/fontSize', modes)) as number
|
|
75
|
+
const labelLineHeight = (getVariableByName('avatar/label/lineHeight', modes)) as number
|
|
76
|
+
const labelFontWeightRaw = getVariableByName('avatar/label/fontWeight', modes)
|
|
77
77
|
const labelFontWeight =
|
|
78
78
|
typeof labelFontWeightRaw === 'number' ? labelFontWeightRaw.toString() : labelFontWeightRaw
|
|
79
|
-
const labelFontFamily = (getVariableByName('avatar/label/fontFamily', modes)
|
|
79
|
+
const labelFontFamily = (getVariableByName('avatar/label/fontFamily', modes)) as string
|
|
80
80
|
|
|
81
81
|
// 9999 is the design-token sentinel for "perfect circle"
|
|
82
82
|
const borderRadius = radiusRaw === 9999 ? size / 2 : radiusRaw
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import React from 'react';
|
|
1
|
+
import React, { useId } from 'react';
|
|
2
2
|
import { View, Platform, type ViewStyle } from 'react-native';
|
|
3
|
-
import
|
|
4
|
-
import Svg, { Path } from 'react-native-svg';
|
|
3
|
+
import Svg, { Defs, Mask, Path, ForeignObject } from 'react-native-svg';
|
|
5
4
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver';
|
|
6
5
|
import { EMPTY_MODES, flattenChildren } from '../../utils/react-utils';
|
|
7
6
|
import type { Modes } from '../../design-tokens'
|
|
@@ -13,18 +12,23 @@ type AvatarGroupProps = {
|
|
|
13
12
|
} & React.ComponentProps<typeof View>;
|
|
14
13
|
|
|
15
14
|
function AvatarGroup({ modes = EMPTY_MODES, children, style, ...rest }: AvatarGroupProps) {
|
|
16
|
-
|
|
15
|
+
// Stable, collision-free base for the per-avatar SVG mask ids so multiple
|
|
16
|
+
// groups on one screen (and multiple avatars in a group) never clash.
|
|
17
|
+
const rawId = useId();
|
|
18
|
+
const maskBaseId = `avatargroup-mask-${rawId.replace(/[^a-zA-Z0-9_-]/g, '')}`;
|
|
17
19
|
|
|
20
|
+
const gap = getVariableByName('avatarGroup/gap', modes);
|
|
18
21
|
|
|
19
|
-
const avatarSize = getVariableByName('avatar/size', modes) || 29;
|
|
20
|
-
const avatarRadius = getVariableByName('avatar/radius', modes) || 9999;
|
|
21
|
-
const borderSize = getVariableByName('avatar/border/size', modes) || 1;
|
|
22
|
-
const borderColor = getVariableByName('avatar/border/color', modes) || 'rgba(255,255,255,0)';
|
|
23
22
|
|
|
24
|
-
const
|
|
25
|
-
const
|
|
26
|
-
const
|
|
27
|
-
const
|
|
23
|
+
const avatarSize = getVariableByName('avatar/size', modes);
|
|
24
|
+
const avatarRadius = getVariableByName('avatar/radius', modes);
|
|
25
|
+
const borderSize = getVariableByName('avatar/border/size', modes);
|
|
26
|
+
const borderColor = getVariableByName('avatar/border/color', modes);
|
|
27
|
+
|
|
28
|
+
const paddingLeft = getVariableByName('avatarGroup/padding/left', modes);
|
|
29
|
+
const paddingRight = getVariableByName('avatarGroup/padding/right', modes);
|
|
30
|
+
const paddingTop = getVariableByName('avatarGroup/padding/top', modes);
|
|
31
|
+
const paddingBottom = getVariableByName('avatarGroup/padding/bottom', modes);
|
|
28
32
|
|
|
29
33
|
const validChildren = flattenChildren(children);
|
|
30
34
|
const totalChildren = validChildren.length;
|
|
@@ -43,7 +47,11 @@ function AvatarGroup({ modes = EMPTY_MODES, children, style, ...rest }: AvatarGr
|
|
|
43
47
|
const holeRadius = effectiveRadius + borderSizeInt;
|
|
44
48
|
const holeCenter = { x: nextAvatarX + r, y: r };
|
|
45
49
|
|
|
46
|
-
// Native
|
|
50
|
+
// Native mask path: the full avatar square MINUS a circular hole where the
|
|
51
|
+
// next (overlapping) avatar sits. Drawn as a single `evenodd` path so the
|
|
52
|
+
// hole is cut out of the square. Filled WHITE because react-native-svg's
|
|
53
|
+
// `<Mask>` is a *luminance* mask (white = visible, black/absent = hidden) —
|
|
54
|
+
// the inverse of the old `@react-native-masked-view` alpha convention.
|
|
47
55
|
const rectPath = `M 0 0 h ${avatarSizeInt} v ${avatarSizeInt} h -${avatarSizeInt} z`;
|
|
48
56
|
const circlePath = `M ${holeCenter.x},${holeCenter.y} m -${holeRadius},0 a ${holeRadius},${holeRadius} 0 1,0 ${holeRadius * 2},0 a ${holeRadius},${holeRadius} 0 1,0 -${holeRadius * 2},0`;
|
|
49
57
|
const maskPath = `${rectPath} ${circlePath}`;
|
|
@@ -101,23 +109,41 @@ function AvatarGroup({ modes = EMPTY_MODES, children, style, ...rest }: AvatarGr
|
|
|
101
109
|
);
|
|
102
110
|
}
|
|
103
111
|
|
|
104
|
-
// Native
|
|
112
|
+
// Native: mask the avatar with react-native-svg instead of the
|
|
113
|
+
// unmaintained `@react-native-masked-view/masked-view`, whose
|
|
114
|
+
// legacy `requireNativeComponent('RNCMaskedView')` resolves to a
|
|
115
|
+
// plain object (crashing "Element type is invalid") under the New
|
|
116
|
+
// Architecture interop. react-native-svg ships a Fabric/codegen
|
|
117
|
+
// `<Mask>` + `<ForeignObject>` that resolves on both architectures;
|
|
118
|
+
// the avatar is hosted inside the `<ForeignObject>` and revealed
|
|
119
|
+
// through the luminance mask.
|
|
120
|
+
const maskId = `${maskBaseId}-${index}`;
|
|
105
121
|
return (
|
|
106
122
|
<View key={index} style={wrapperStyle}>
|
|
107
|
-
<
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
<Path
|
|
112
|
-
d={maskPath}
|
|
113
|
-
fill="black"
|
|
114
|
-
fillRule="evenodd"
|
|
115
|
-
/>
|
|
116
|
-
</Svg>
|
|
117
|
-
}
|
|
123
|
+
<Svg
|
|
124
|
+
height="100%"
|
|
125
|
+
width="100%"
|
|
126
|
+
viewBox={`0 0 ${avatarSizeInt} ${avatarSizeInt}`}
|
|
118
127
|
>
|
|
119
|
-
|
|
120
|
-
|
|
128
|
+
<Defs>
|
|
129
|
+
<Mask
|
|
130
|
+
id={maskId}
|
|
131
|
+
maskUnits="userSpaceOnUse"
|
|
132
|
+
maskContentUnits="userSpaceOnUse"
|
|
133
|
+
>
|
|
134
|
+
<Path d={maskPath} fill="white" fillRule="evenodd" />
|
|
135
|
+
</Mask>
|
|
136
|
+
</Defs>
|
|
137
|
+
<ForeignObject
|
|
138
|
+
x="0"
|
|
139
|
+
y="0"
|
|
140
|
+
width={avatarSizeInt}
|
|
141
|
+
height={avatarSizeInt}
|
|
142
|
+
mask={`url(#${maskId})`}
|
|
143
|
+
>
|
|
144
|
+
{clonedChild}
|
|
145
|
+
</ForeignObject>
|
|
146
|
+
</Svg>
|
|
121
147
|
</View>
|
|
122
148
|
);
|
|
123
149
|
})}
|
|
@@ -84,34 +84,33 @@ function Badge({
|
|
|
84
84
|
// swaps the solid fill for a translucent overlay + white label, matching the
|
|
85
85
|
// Figma `badge/glass/*` tokens.
|
|
86
86
|
const backgroundColor =
|
|
87
|
-
(getVariableByName('badge/color/background', modes) as string)
|
|
87
|
+
(getVariableByName('badge/color/background', modes) as string)
|
|
88
88
|
const glassBackground =
|
|
89
|
-
(getVariableByName('badge/glass/color/background', modes) as string)
|
|
89
|
+
(getVariableByName('badge/glass/color/background', modes) as string)
|
|
90
90
|
const glassLabelColor =
|
|
91
|
-
(getVariableByName('badge/glass/color/label', modes) as string)
|
|
91
|
+
(getVariableByName('badge/glass/color/label', modes) as string)
|
|
92
92
|
const labelColor = isGlass
|
|
93
93
|
? glassLabelColor
|
|
94
|
-
: (getVariableByName('badge/color/label', modes) as string)
|
|
94
|
+
: (getVariableByName('badge/color/label', modes) as string)
|
|
95
95
|
const fontSize =
|
|
96
|
-
Number(getVariableByName('badge/label/fontSize', modes) as unknown)
|
|
96
|
+
Number(getVariableByName('badge/label/fontSize', modes) as unknown)
|
|
97
97
|
const fontFamily =
|
|
98
|
-
(getVariableByName('badge/fontFamily', modes) as string)
|
|
98
|
+
(getVariableByName('badge/fontFamily', modes) as string)
|
|
99
99
|
const fontWeight =
|
|
100
|
-
(getVariableByName('badge/label/fontWeight', modes) as string)
|
|
100
|
+
(getVariableByName('badge/label/fontWeight', modes) as string)
|
|
101
101
|
const paddingHorizontal =
|
|
102
|
-
Number(getVariableByName('badge/padding/horizontal', modes) as unknown)
|
|
102
|
+
Number(getVariableByName('badge/padding/horizontal', modes) as unknown)
|
|
103
103
|
const paddingVertical =
|
|
104
|
-
Number(getVariableByName('badge/padding/vertical', modes) as unknown)
|
|
104
|
+
Number(getVariableByName('badge/padding/vertical', modes) as unknown)
|
|
105
105
|
const borderRadius =
|
|
106
|
-
Number(getVariableByName('badge/radius', modes) as unknown)
|
|
106
|
+
Number(getVariableByName('badge/radius', modes) as unknown)
|
|
107
107
|
const lineHeight =
|
|
108
|
-
Number(getVariableByName('badge/label/lineHeight', modes) as unknown)
|
|
109
|
-
Math.round(fontSize * 1.2)
|
|
108
|
+
Number(getVariableByName('badge/label/lineHeight', modes) as unknown)
|
|
110
109
|
// Figma `blur/minimal` (px radius) -> GlassFill's 0–100 intensity scale, the
|
|
111
110
|
// same 1:1 mapping the merchandising card footer uses.
|
|
112
111
|
const blurIntensity = Math.max(
|
|
113
112
|
0,
|
|
114
|
-
Math.min(100, Math.round(Number(getVariableByName('blur/minimal', modes) as unknown)
|
|
113
|
+
Math.min(100, Math.round(Number(getVariableByName('blur/minimal', modes) as unknown))),
|
|
115
114
|
)
|
|
116
115
|
|
|
117
116
|
// Skeleton short-circuit. Size derived from the same tokens the loaded
|
|
@@ -15,6 +15,9 @@ import Text from '../Text/Text'
|
|
|
15
15
|
import ListItem from '../ListItem/ListItem'
|
|
16
16
|
import Divider from '../Divider/Divider'
|
|
17
17
|
import Button from '../Button/Button'
|
|
18
|
+
import Nudge from '../Nudge/Nudge'
|
|
19
|
+
import Avatar from '../Avatar/Avatar'
|
|
20
|
+
import TextSegment from '../TextSegment/TextSegment'
|
|
18
21
|
import type { Modes } from '../../design-tokens'
|
|
19
22
|
|
|
20
23
|
/**
|
|
@@ -42,17 +45,46 @@ export interface BenefitCardProps {
|
|
|
42
45
|
/** Header section title (e.g. `"You will earn"`). */
|
|
43
46
|
headerTitle?: string
|
|
44
47
|
/**
|
|
45
|
-
*
|
|
46
|
-
*
|
|
48
|
+
* @deprecated The header is now a multi-row list wrap. A single item still
|
|
49
|
+
* works and is rendered as a one-row list (lowest precedence, after
|
|
50
|
+
* `header` and `headerItems`). Prefer `headerItems` (declarative) or
|
|
51
|
+
* `header` (slot).
|
|
47
52
|
*/
|
|
48
53
|
headerItem?: BenefitCardItem
|
|
54
|
+
/**
|
|
55
|
+
* Declarative header list-wrap rows shown under the header title and above
|
|
56
|
+
* the divider (icon + title + optional trailing value). Replaces the
|
|
57
|
+
* legacy single {@link BenefitCardProps.headerItem}. Ignored when the
|
|
58
|
+
* `header` slot is provided.
|
|
59
|
+
*/
|
|
60
|
+
headerItems?: BenefitCardItem[]
|
|
61
|
+
/**
|
|
62
|
+
* Real slot for the header "list wrap" (the rows under the header title).
|
|
63
|
+
* Highest precedence — when provided, these children render instead of
|
|
64
|
+
* `headerItems` / `headerItem`; `modes` (plus the `List Item Style:
|
|
65
|
+
* Minimal` style) cascade into every child automatically.
|
|
66
|
+
*/
|
|
67
|
+
header?: React.ReactNode
|
|
49
68
|
/**
|
|
50
69
|
* Toggles the whole header section (title + item + divider). Mirrors the
|
|
51
70
|
* Figma `showHeader` property. Defaults to `true`.
|
|
52
71
|
*/
|
|
53
72
|
showHeader?: boolean
|
|
54
|
-
/**
|
|
73
|
+
/**
|
|
74
|
+
* @deprecated In the Figma redesign the plain body title was replaced by a
|
|
75
|
+
* slot-based upsell `Nudge` ({@link BenefitCardProps.bodyHeader}). Still
|
|
76
|
+
* honored for backward compatibility: when set, it renders as a plain text
|
|
77
|
+
* title in place of the default nudge. Prefer `bodyHeader`.
|
|
78
|
+
*/
|
|
55
79
|
bodyTitle?: string
|
|
80
|
+
/**
|
|
81
|
+
* Real slot rendered between the header divider and the body list — in the
|
|
82
|
+
* Figma reference this is an upsell `Nudge` (avatar + highlighted
|
|
83
|
+
* "JioFinance+" message). Defaults to that nudge. Pass `null`/`false` to
|
|
84
|
+
* hide it, `bodyTitle` for the legacy plain-text title, or any `ReactNode`
|
|
85
|
+
* for full control; `modes` cascade into the slot.
|
|
86
|
+
*/
|
|
87
|
+
bodyHeader?: React.ReactNode
|
|
56
88
|
/**
|
|
57
89
|
* Body benefit rows. Ignored when `children` is provided (the slot wins).
|
|
58
90
|
*/
|
|
@@ -109,8 +141,11 @@ export interface BenefitCardProps {
|
|
|
109
141
|
function BenefitCard({
|
|
110
142
|
headerTitle = 'You will earn',
|
|
111
143
|
headerItem,
|
|
144
|
+
headerItems,
|
|
145
|
+
header,
|
|
112
146
|
showHeader = true,
|
|
113
|
-
bodyTitle
|
|
147
|
+
bodyTitle,
|
|
148
|
+
bodyHeader,
|
|
114
149
|
items,
|
|
115
150
|
children,
|
|
116
151
|
buttonLabel = 'Upgrade',
|
|
@@ -125,14 +160,28 @@ function BenefitCard({
|
|
|
125
160
|
}: BenefitCardProps) {
|
|
126
161
|
const tokens = useMemo(() => resolveTokens(modes), [modes])
|
|
127
162
|
|
|
128
|
-
//
|
|
129
|
-
|
|
163
|
+
// Component-level modes. `List Item Style: Minimal` and `Nudge padding: None`
|
|
164
|
+
// are BenefitCard's own defaults: they live on the card and cascade down into
|
|
165
|
+
// every child (the list-wrap rows and the upsell nudge) rather than being
|
|
166
|
+
// threaded onto each individual item. Consumer `modes` always win.
|
|
167
|
+
const cascadeModes = useMemo<Modes>(
|
|
168
|
+
() => ({ 'List Item Style': 'Minimal', 'Nudge padding': 'None', ...modes }),
|
|
169
|
+
[modes]
|
|
170
|
+
)
|
|
171
|
+
// Sub-element modes layer their own specifics on top of the consumer modes.
|
|
130
172
|
const iconModes = useMemo<Modes>(() => ({ AppearanceBrand: 'Secondary', ...modes }), [modes])
|
|
131
173
|
const trailingTextModes = useMemo<Modes>(
|
|
132
174
|
() => ({ 'Text Sizes': 'Small', Weight: 'Regular', ...modes }),
|
|
133
175
|
[modes]
|
|
134
176
|
)
|
|
135
177
|
const ctaModes = useMemo<Modes>(() => ({ 'Button / Size': 'S', ...modes }), [modes])
|
|
178
|
+
// The upsell nudge keeps a white/transparent background (`AppearanceBrand:
|
|
179
|
+
// Neutral` → `nudge/background: #ffffff`); its `Nudge padding: None` cascades
|
|
180
|
+
// in from `cascadeModes` so it sits flush with the card.
|
|
181
|
+
const nudgeModes = useMemo<Modes>(
|
|
182
|
+
() => ({ AppearanceBrand: 'Neutral', ...cascadeModes }),
|
|
183
|
+
[cascadeModes]
|
|
184
|
+
)
|
|
136
185
|
|
|
137
186
|
const renderItem = (item: BenefitCardItem, key: React.Key) => {
|
|
138
187
|
const leading =
|
|
@@ -157,25 +206,57 @@ function BenefitCard({
|
|
|
157
206
|
leading={leading}
|
|
158
207
|
trailing={trailing}
|
|
159
208
|
onPress={item.onPress}
|
|
160
|
-
modes={listItemModes}
|
|
161
209
|
/>
|
|
162
210
|
)
|
|
163
211
|
}
|
|
164
212
|
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
213
|
+
// Header "list wrap" — slot-based. Precedence: `header` slot > `headerItems`
|
|
214
|
+
// array > legacy single `headerItem` > Figma default rows. The component-level
|
|
215
|
+
// `cascadeModes` are pushed into the whole group at once, so individual rows
|
|
216
|
+
// never carry their own list-item modes.
|
|
217
|
+
const headerListSource = header
|
|
218
|
+
? header
|
|
219
|
+
: (headerItems ?? (headerItem ? [headerItem] : DEFAULT_HEADER_ITEMS)).map((item, index) =>
|
|
220
|
+
renderItem(item, `header-${index}`)
|
|
221
|
+
)
|
|
222
|
+
const headerListNodes = cloneChildrenWithModes(headerListSource, cascadeModes)
|
|
223
|
+
|
|
224
|
+
const headerNode = showHeader ? (
|
|
225
|
+
<View style={styles.section}>
|
|
226
|
+
<View style={styles.cardHeader}>
|
|
227
|
+
{headerTitle != null ? <RNText style={tokens.title}>{headerTitle}</RNText> : null}
|
|
228
|
+
<View style={tokens.listWrap}>{headerListNodes}</View>
|
|
173
229
|
</View>
|
|
174
|
-
|
|
230
|
+
<Divider modes={modes} />
|
|
231
|
+
</View>
|
|
232
|
+
) : null
|
|
233
|
+
|
|
234
|
+
// Body "header" slot (between the divider and the body list). Precedence:
|
|
235
|
+
// explicit `bodyHeader` slot > legacy `bodyTitle` text > Figma upsell nudge.
|
|
236
|
+
const bodyHeaderNode =
|
|
237
|
+
bodyHeader === null || bodyHeader === false
|
|
238
|
+
? null
|
|
239
|
+
: bodyHeader !== undefined
|
|
240
|
+
? renderSlot(bodyHeader, cascadeModes)
|
|
241
|
+
: bodyTitle != null
|
|
242
|
+
? <RNText style={tokens.title}>{bodyTitle}</RNText>
|
|
243
|
+
: (
|
|
244
|
+
<Nudge type="inline-compact" modes={{ ...nudgeModes, ...cascadeModes }} startSlot={DEFAULT_UPSELL_AVATAR}>
|
|
245
|
+
<TextSegment
|
|
246
|
+
modes={cascadeModes}
|
|
247
|
+
segments={[
|
|
248
|
+
{ text: 'Upgrade to ' },
|
|
249
|
+
{ text: 'JioFinance+', modes: { 'Text Appearance': 'Primary' } },
|
|
250
|
+
{ text: ' and earn more' },
|
|
251
|
+
]}
|
|
252
|
+
/>
|
|
253
|
+
</Nudge>
|
|
254
|
+
)
|
|
175
255
|
|
|
176
|
-
const
|
|
177
|
-
?
|
|
256
|
+
const bodyListSource = children
|
|
257
|
+
? children
|
|
178
258
|
: (items ?? DEFAULT_ITEMS).map((item, index) => renderItem(item, index))
|
|
259
|
+
const bodyList = cloneChildrenWithModes(bodyListSource, cascadeModes)
|
|
179
260
|
|
|
180
261
|
const ctaNode = button ?? (
|
|
181
262
|
<Button label={buttonLabel} modes={ctaModes} onPress={onButtonPress} />
|
|
@@ -189,10 +270,8 @@ function BenefitCard({
|
|
|
189
270
|
const content = (
|
|
190
271
|
<>
|
|
191
272
|
{headerNode}
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
<View style={tokens.listWrap}>{bodyList}</View>
|
|
195
|
-
</View>
|
|
273
|
+
{bodyHeaderNode}
|
|
274
|
+
<View style={tokens.listWrap}>{bodyList}</View>
|
|
196
275
|
{showButton ? ctaNode : null}
|
|
197
276
|
</>
|
|
198
277
|
)
|
|
@@ -227,7 +306,6 @@ const CARD_HEADER_GAP = 4
|
|
|
227
306
|
|
|
228
307
|
interface ResolvedTokens {
|
|
229
308
|
container: ViewStyle
|
|
230
|
-
body: ViewStyle
|
|
231
309
|
listWrap: ViewStyle
|
|
232
310
|
title: TextStyle
|
|
233
311
|
}
|
|
@@ -267,10 +345,6 @@ function resolveTokens(modes: Modes): ResolvedTokens {
|
|
|
267
345
|
flexDirection: 'column',
|
|
268
346
|
alignItems: 'flex-start',
|
|
269
347
|
},
|
|
270
|
-
body: {
|
|
271
|
-
alignSelf: 'stretch',
|
|
272
|
-
gap,
|
|
273
|
-
},
|
|
274
348
|
listWrap: {
|
|
275
349
|
alignSelf: 'stretch',
|
|
276
350
|
gap,
|
|
@@ -287,11 +361,30 @@ function resolveTokens(modes: Modes): ResolvedTokens {
|
|
|
287
361
|
}
|
|
288
362
|
}
|
|
289
363
|
|
|
364
|
+
// Cascades `modes` into a slot node and unwraps a single child so the slot can
|
|
365
|
+
// be rendered inline without an extra fragment.
|
|
366
|
+
function renderSlot(node: React.ReactNode, modes: Modes): React.ReactNode {
|
|
367
|
+
const processed = cloneChildrenWithModes(node, modes)
|
|
368
|
+
return processed.length === 1 ? processed[0] : processed
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
// Figma reference rows for the header list wrap (two highlighted "JioPoints"
|
|
372
|
+
// rows). Used only when no `header` slot / `headerItems` / legacy `headerItem`
|
|
373
|
+
// is supplied.
|
|
374
|
+
const DEFAULT_HEADER_ITEMS: BenefitCardItem[] = [
|
|
375
|
+
{ icon: 'ic_jewellery_diamond', title: 'JioPoints', trailingText: 'Up to 2000 pts' },
|
|
376
|
+
{ icon: 'ic_jewellery_diamond', title: 'JioPoints', trailingText: 'Up to 2000 pts' },
|
|
377
|
+
]
|
|
378
|
+
|
|
290
379
|
const DEFAULT_ITEMS: BenefitCardItem[] = [
|
|
291
380
|
{ icon: 'ic_card', title: 'Up to ₹5000 cashback' },
|
|
292
381
|
{ icon: 'ic_card', title: '25% extra JioPoints' },
|
|
293
382
|
]
|
|
294
383
|
|
|
384
|
+
// Start-slot avatar for the default upsell nudge. `modes` cascade in from the
|
|
385
|
+
// nudge (XS keeps it compact next to the inline message).
|
|
386
|
+
const DEFAULT_UPSELL_AVATAR = <Avatar style="Image" modes={{ 'Avatar Size': 'XS' }} />
|
|
387
|
+
|
|
295
388
|
const styles = StyleSheet.create({
|
|
296
389
|
section: {
|
|
297
390
|
alignSelf: 'stretch',
|
|
@@ -53,8 +53,8 @@ function BottomNav({
|
|
|
53
53
|
const modes = { ...globalModes, ...propModes }
|
|
54
54
|
|
|
55
55
|
// Resolve container styling tokens
|
|
56
|
-
const backgroundColor = getVariableByName('bottomNav/background', modes)
|
|
57
|
-
const borderColor = getVariableByName('bottomNav/border/color', modes)
|
|
56
|
+
const backgroundColor = getVariableByName('bottomNav/background', modes)
|
|
57
|
+
const borderColor = getVariableByName('bottomNav/border/color', modes)
|
|
58
58
|
const borderWidth = getVariableByName('bottomNav/border/width', modes) ?? 1
|
|
59
59
|
const paddingTop = getVariableByName('bottomNav/padding/top', modes) ?? 10
|
|
60
60
|
const paddingBottom = getVariableByName('bottomNav/padding/bottom', modes) ?? 23
|
|
@@ -60,17 +60,17 @@ function resolveBottomNavItemTokens(
|
|
|
60
60
|
const gap = (getVariableByName('bottomNavItem/gap', modes) ?? 6) as number
|
|
61
61
|
|
|
62
62
|
const fontFamily =
|
|
63
|
-
(getVariableByName('bottomNavItem/fontFamily', modes)
|
|
63
|
+
(getVariableByName('bottomNavItem/fontFamily', modes)) as string
|
|
64
64
|
const fontWeightRaw = getVariableByName('bottomNavItem/fontWeight', modes) ?? 500
|
|
65
65
|
const fontWeight =
|
|
66
66
|
typeof fontWeightRaw === 'number' ? fontWeightRaw.toString() : fontWeightRaw
|
|
67
67
|
const fontSize = (getVariableByName('bottomNavItem/fontSize', modes) ?? 11) as number
|
|
68
68
|
const lineHeight = (getVariableByName('bottomNavItem/lineHeight', modes) ?? 14) as number
|
|
69
69
|
|
|
70
|
-
const labelColor = (getVariableByName('bottomNavItem/label/color', modes)
|
|
70
|
+
const labelColor = (getVariableByName('bottomNavItem/label/color', modes)) as string
|
|
71
71
|
|
|
72
72
|
const resolvedIconColor =
|
|
73
|
-
iconColorOverride || (getVariableByName('bottomNavItem/icon/color', modes)
|
|
73
|
+
iconColorOverride || (getVariableByName('bottomNavItem/icon/color', modes)) as string
|
|
74
74
|
const resolvedIconSize =
|
|
75
75
|
iconSizeOverride ?? (getVariableByName('bottomNavItem/icon/size', modes) ?? 24) as number
|
|
76
76
|
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
} from 'react-native'
|
|
13
13
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
14
14
|
import { usePressableWebSupport, type SafePressableProps, type WebAccessibilityProps } from '../../utils/web-platform-utils'
|
|
15
|
-
import { EMPTY_MODES
|
|
15
|
+
import { EMPTY_MODES } from '../../utils/react-utils'
|
|
16
16
|
import Icon from '../../icons/Icon'
|
|
17
17
|
import Skeleton from '../../skeleton/Skeleton'
|
|
18
18
|
import { useSkeleton } from '../../skeleton/SkeletonGroup'
|
|
@@ -95,6 +95,15 @@ const containerLayoutStyle = {
|
|
|
95
95
|
justifyContent: 'center' as const,
|
|
96
96
|
}
|
|
97
97
|
|
|
98
|
+
// Keeps the label on a single line. `flexShrink: 0` stops a tight flex parent
|
|
99
|
+
// from squeezing the text; on web `whiteSpace: 'nowrap'` is what actually
|
|
100
|
+
// prevents the line break (a bare `numberOfLines` line-clamp still allows the
|
|
101
|
+
// text to wrap inside a width-constrained pill in react-native-web).
|
|
102
|
+
const NO_WRAP_LABEL_STYLE: TextStyle = {
|
|
103
|
+
flexShrink: 0,
|
|
104
|
+
...(IS_WEB ? { whiteSpace: 'nowrap' as const } : {}),
|
|
105
|
+
}
|
|
106
|
+
|
|
98
107
|
// ---------------------------------------------------------------------------
|
|
99
108
|
// Token resolution
|
|
100
109
|
// ---------------------------------------------------------------------------
|
|
@@ -120,28 +129,28 @@ interface ButtonTokens {
|
|
|
120
129
|
}
|
|
121
130
|
|
|
122
131
|
function resolveButtonTokens(modes: Modes, disabled: boolean): ButtonTokens {
|
|
123
|
-
const backgroundColor = getVariableByName('button/background', modes)
|
|
124
|
-
const borderColor = getVariableByName('button/border/color', modes)
|
|
132
|
+
const backgroundColor = getVariableByName('button/background', modes)
|
|
133
|
+
const borderColor = getVariableByName('button/border/color', modes)
|
|
125
134
|
const borderWidth = getVariableByName('button/border/size', modes)
|
|
126
|
-
const radius = getVariableByName('button/radius', modes)
|
|
127
|
-
const paddingHorizontal = getVariableByName('button/padding/horizontal', modes)
|
|
128
|
-
const paddingVertical = getVariableByName('button/padding/vertical', modes)
|
|
129
|
-
const gap = getVariableByName('button/gap', modes)
|
|
135
|
+
const radius = getVariableByName('button/radius', modes)
|
|
136
|
+
const paddingHorizontal = getVariableByName('button/padding/horizontal', modes)
|
|
137
|
+
const paddingVertical = getVariableByName('button/padding/vertical', modes)
|
|
138
|
+
const gap = getVariableByName('button/gap', modes)
|
|
130
139
|
|
|
131
|
-
const fontFamily = getVariableByName('button/fontFamily', modes)
|
|
132
|
-
const fontWeightValue = getVariableByName('button/fontWeight', modes)
|
|
140
|
+
const fontFamily = getVariableByName('button/fontFamily', modes)
|
|
141
|
+
const fontWeightValue = getVariableByName('button/fontWeight', modes)
|
|
133
142
|
const fontWeight = typeof fontWeightValue === 'number' ? fontWeightValue.toString() : fontWeightValue
|
|
134
|
-
const lineHeight = getVariableByName('button/lineHeight', modes)
|
|
135
|
-
const fontSize = getVariableByName('button/fontSize', modes)
|
|
136
|
-
const textColor = getVariableByName('button/foreground', modes)
|
|
143
|
+
const lineHeight = getVariableByName('button/lineHeight', modes)
|
|
144
|
+
const fontSize = getVariableByName('button/fontSize', modes)
|
|
145
|
+
const textColor = getVariableByName('button/foreground', modes)
|
|
137
146
|
const iconSize = (getVariableByName('button/icon/size', modes) ?? 18) as number
|
|
138
147
|
|
|
139
148
|
// Pressed tokens are always resolved so the Pressable `style` callback can
|
|
140
149
|
// apply the pressed visual without scheduling a React render.
|
|
141
150
|
const pressedModes = { ...modes, 'Button / State': 'Pressed' }
|
|
142
|
-
const pressedBg = getVariableByName('button/background', pressedModes)
|
|
143
|
-
const pressedBorderColor = getVariableByName('button/border/color', pressedModes)
|
|
144
|
-
const pressedTextColor = (getVariableByName('button/foreground', pressedModes)
|
|
151
|
+
const pressedBg = getVariableByName('button/background', pressedModes)
|
|
152
|
+
const pressedBorderColor = getVariableByName('button/border/color', pressedModes)
|
|
153
|
+
const pressedTextColor = (getVariableByName('button/foreground', pressedModes)) as string
|
|
145
154
|
|
|
146
155
|
// Hover tokens are only meaningful on web. Skipping them on native saves
|
|
147
156
|
// ~3 token lookups + an object spread per render on every Button.
|
|
@@ -149,9 +158,9 @@ function resolveButtonTokens(modes: Modes, disabled: boolean): ButtonTokens {
|
|
|
149
158
|
let hoverTextColor: string | null = null
|
|
150
159
|
if (IS_WEB) {
|
|
151
160
|
const hoverModes = { ...modes, 'Button / State': 'Hover' }
|
|
152
|
-
const hoverBg = getVariableByName('button/background', hoverModes)
|
|
153
|
-
const hoverBorderColor = getVariableByName('button/border/color', hoverModes)
|
|
154
|
-
hoverTextColor = (getVariableByName('button/foreground', hoverModes)
|
|
161
|
+
const hoverBg = getVariableByName('button/background', hoverModes)
|
|
162
|
+
const hoverBorderColor = getVariableByName('button/border/color', hoverModes)
|
|
163
|
+
hoverTextColor = (getVariableByName('button/foreground', hoverModes)) as string
|
|
155
164
|
hoverContainer = { backgroundColor: hoverBg as string, borderColor: hoverBorderColor as string }
|
|
156
165
|
}
|
|
157
166
|
|
|
@@ -300,8 +309,9 @@ function ButtonImpl({
|
|
|
300
309
|
} else {
|
|
301
310
|
content = (
|
|
302
311
|
<Text
|
|
303
|
-
style={activeLabelStyle}
|
|
304
|
-
{
|
|
312
|
+
style={[activeLabelStyle, disableTruncation ? null : NO_WRAP_LABEL_STYLE]}
|
|
313
|
+
numberOfLines={disableTruncation ? undefined : 1}
|
|
314
|
+
ellipsizeMode={disableTruncation ? undefined : 'tail'}
|
|
305
315
|
>
|
|
306
316
|
{label}
|
|
307
317
|
</Text>
|