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
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import React, { useId } from 'react'
|
|
2
2
|
import { View, StyleSheet, Platform, UIManager, type ViewStyle, type StyleProp } from 'react-native'
|
|
3
3
|
import { BlurView } from '@react-native-community/blur'
|
|
4
|
-
import MaskedView from '@react-native-masked-view/masked-view'
|
|
5
4
|
import Svg, { Defs, LinearGradient, Stop, Rect } from 'react-native-svg'
|
|
6
5
|
|
|
7
6
|
export type GlassTint = 'dark' | 'light'
|
|
@@ -31,10 +30,17 @@ export interface GlassFillProps {
|
|
|
31
30
|
/**
|
|
32
31
|
* Render a *progressive* (variable) blur instead of a uniform one: fully
|
|
33
32
|
* clear at the top, easing into a soft blur toward the bottom. Implemented
|
|
34
|
-
* by stacking
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
33
|
+
* mask-free by stacking several bottom-anchored `BlurView` "bands": each
|
|
34
|
+
* band is clipped to start a little lower than the last, and because a
|
|
35
|
+
* `BlurView` blurs whatever is rendered behind it, the bands COMPOUND toward
|
|
36
|
+
* the bottom (a lower band re-blurs the already-blurred output above it) so
|
|
37
|
+
* the effective radius swells smoothly downward. This deliberately avoids
|
|
38
|
+
* masking a native view — the old implementation wrapped each `BlurView` in
|
|
39
|
+
* `@react-native-masked-view/masked-view`, a legacy Paper component that
|
|
40
|
+
* resolves to a plain object (crashing "Element type is invalid") under the
|
|
41
|
+
* New Architecture interop. Works on iOS and Android with no extra native
|
|
42
|
+
* module. When the native blur isn't linked at all, falls back to a pure
|
|
43
|
+
* `react-native-svg` gradient scrim (see below).
|
|
38
44
|
*/
|
|
39
45
|
progressive?: boolean
|
|
40
46
|
/**
|
|
@@ -70,14 +76,13 @@ const DEFAULT_FALLBACK_LIGHT = '#ffffff66'
|
|
|
70
76
|
const NATIVE_BLUR_NAME = Platform.OS === 'android' ? 'AndroidBlurView' : 'BlurView'
|
|
71
77
|
|
|
72
78
|
/**
|
|
73
|
-
* Alpha stop on
|
|
74
|
-
* position (0 = top of the surface, 1 = bottom); `opacity` is the
|
|
75
|
-
* there (0 =
|
|
79
|
+
* Alpha stop on the no-native-blur fallback gradient. `offset` is the vertical
|
|
80
|
+
* position (0 = top of the surface, 1 = bottom); `opacity` is the tint alpha
|
|
81
|
+
* there (0 = fully clear, 1 = full fallback color).
|
|
76
82
|
*
|
|
77
|
-
* Using several stops (rather than a single linear 0 → 1 ramp)
|
|
78
|
-
*
|
|
79
|
-
*
|
|
80
|
-
* "glass" feel rather than a flat translucent panel.
|
|
83
|
+
* Using several stops (rather than a single linear 0 → 1 ramp) eases the tint
|
|
84
|
+
* in, so it swells smoothly toward the bottom instead of along a hard seam —
|
|
85
|
+
* the soft S-curve that gives the surface its "glass" feel.
|
|
81
86
|
*/
|
|
82
87
|
interface MaskStop {
|
|
83
88
|
offset: number
|
|
@@ -85,25 +90,24 @@ interface MaskStop {
|
|
|
85
90
|
}
|
|
86
91
|
|
|
87
92
|
/**
|
|
88
|
-
* A single
|
|
89
|
-
* - `
|
|
90
|
-
*
|
|
93
|
+
* A single bottom-anchored band of the progressive blur stack.
|
|
94
|
+
* - `start` is where the band begins, as a fraction from the top (0 = covers
|
|
95
|
+
* the whole surface, 0.8 = only the bottom 20%). Each band runs from `start`
|
|
96
|
+
* to the bottom.
|
|
97
|
+
* - `amount` is the band's own blur strength as a share (0–1) of the peak.
|
|
91
98
|
*
|
|
92
|
-
*
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
-
*
|
|
96
|
-
* heavy block), while still giving a genuine variable-radius result — the blur
|
|
97
|
-
* radius grows toward the bottom where the two layers overlap.
|
|
99
|
+
* Because each `BlurView` re-blurs everything rendered behind it, the bands
|
|
100
|
+
* COMPOUND where they overlap (toward the bottom), so the effective radius grows
|
|
101
|
+
* downward without any masking. The top region is covered only by the first,
|
|
102
|
+
* faint band; the bottom is covered by all of them.
|
|
98
103
|
*/
|
|
99
|
-
interface
|
|
100
|
-
|
|
104
|
+
interface ProgressiveBand {
|
|
105
|
+
start: number
|
|
101
106
|
amount: number
|
|
102
107
|
}
|
|
103
108
|
|
|
104
|
-
//
|
|
105
|
-
//
|
|
106
|
-
// snapping clear. Also reused for the no-native-blur fallback scrim.
|
|
109
|
+
// Eased tint ramp for the no-native-blur fallback scrim. A faint trace begins
|
|
110
|
+
// near the very top and grows steadily downward.
|
|
107
111
|
const BASE_MASK_STOPS: MaskStop[] = [
|
|
108
112
|
{ offset: 0.0, opacity: 0 },
|
|
109
113
|
{ offset: 0.08, opacity: 0.12 },
|
|
@@ -112,18 +116,16 @@ const BASE_MASK_STOPS: MaskStop[] = [
|
|
|
112
116
|
{ offset: 1.0, opacity: 1 },
|
|
113
117
|
]
|
|
114
118
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
],
|
|
126
|
-
},
|
|
119
|
+
// Bottom-anchored blur bands (top → bottom). The first band is faint and covers
|
|
120
|
+
// the whole surface so the top reads as barely-there glass; each subsequent band
|
|
121
|
+
// starts lower and adds strength, compounding toward the bottom for a smooth
|
|
122
|
+
// variable-radius result. Quadrature of these shares lands the bottom at ~peak.
|
|
123
|
+
const PROGRESSIVE_BANDS: ProgressiveBand[] = [
|
|
124
|
+
{ start: 0.0, amount: 0.18 },
|
|
125
|
+
{ start: 0.3, amount: 0.28 },
|
|
126
|
+
{ start: 0.52, amount: 0.38 },
|
|
127
|
+
{ start: 0.7, amount: 0.5 },
|
|
128
|
+
{ start: 0.84, amount: 0.6 },
|
|
127
129
|
]
|
|
128
130
|
|
|
129
131
|
/**
|
|
@@ -159,18 +161,18 @@ const NATIVE_BLUR_SUPPORTED: boolean = (() => {
|
|
|
159
161
|
})()
|
|
160
162
|
|
|
161
163
|
/**
|
|
162
|
-
* Vertical
|
|
163
|
-
*
|
|
164
|
-
*
|
|
165
|
-
*
|
|
164
|
+
* Vertical color-gradient scrim drawn with `react-native-svg` — used as the
|
|
165
|
+
* no-native-blur fallback. Paints `color` at the eased per-stop alpha so the
|
|
166
|
+
* tint swells smoothly from clear (top) to full (bottom), exactly mirroring the
|
|
167
|
+
* old `MaskedView`-over-solid-color fallback but with no native-view masking.
|
|
166
168
|
*/
|
|
167
|
-
function
|
|
169
|
+
function GradientScrim({ id, color, stops }: { id: string; color: string; stops: MaskStop[] }) {
|
|
168
170
|
return (
|
|
169
171
|
<Svg width="100%" height="100%">
|
|
170
172
|
<Defs>
|
|
171
173
|
<LinearGradient id={id} x1="0" y1="0" x2="0" y2="1">
|
|
172
174
|
{stops.map((s, i) => (
|
|
173
|
-
<Stop key={i} offset={s.offset} stopColor=
|
|
175
|
+
<Stop key={i} offset={s.offset} stopColor={color} stopOpacity={s.opacity} />
|
|
174
176
|
))}
|
|
175
177
|
</LinearGradient>
|
|
176
178
|
</Defs>
|
|
@@ -230,25 +232,26 @@ function GlassFill({
|
|
|
230
232
|
if (!NATIVE_BLUR_SUPPORTED) {
|
|
231
233
|
return (
|
|
232
234
|
<View style={[StyleSheet.absoluteFill, style]} pointerEvents="none">
|
|
233
|
-
<
|
|
234
|
-
style={StyleSheet.absoluteFill}
|
|
235
|
-
maskElement={<GradientMask id={`${maskId}-fb`} stops={BASE_MASK_STOPS} />}
|
|
236
|
-
>
|
|
237
|
-
<View style={[StyleSheet.absoluteFill, { backgroundColor: fallbackColor }]} />
|
|
238
|
-
</MaskedView>
|
|
235
|
+
<GradientScrim id={`${maskId}-fb`} color={fallbackColor} stops={BASE_MASK_STOPS} />
|
|
239
236
|
</View>
|
|
240
237
|
)
|
|
241
238
|
}
|
|
242
239
|
|
|
243
240
|
return (
|
|
244
241
|
<View style={[StyleSheet.absoluteFill, style]} pointerEvents="none">
|
|
245
|
-
{
|
|
246
|
-
const amount = Math.max(1, Math.round(peakBlur *
|
|
242
|
+
{PROGRESSIVE_BANDS.map((band, i) => {
|
|
243
|
+
const amount = Math.max(1, Math.round(peakBlur * band.amount))
|
|
247
244
|
return (
|
|
248
|
-
|
|
245
|
+
// Each band is clipped to start at `band.start` and run to
|
|
246
|
+
// the bottom; its `BlurView` blurs the content (and any
|
|
247
|
+
// lower bands) behind it, so the radius compounds downward.
|
|
248
|
+
<View
|
|
249
249
|
key={i}
|
|
250
|
-
style={
|
|
251
|
-
|
|
250
|
+
style={[
|
|
251
|
+
StyleSheet.absoluteFill,
|
|
252
|
+
{ top: `${band.start * 100}%`, overflow: 'hidden' },
|
|
253
|
+
]}
|
|
254
|
+
pointerEvents="none"
|
|
252
255
|
>
|
|
253
256
|
<BlurView
|
|
254
257
|
style={StyleSheet.absoluteFill}
|
|
@@ -256,7 +259,7 @@ function GlassFill({
|
|
|
256
259
|
blurAmount={amount}
|
|
257
260
|
reducedTransparencyFallbackColor={fallbackColor}
|
|
258
261
|
/>
|
|
259
|
-
</
|
|
262
|
+
</View>
|
|
260
263
|
)
|
|
261
264
|
})}
|
|
262
265
|
</View>
|
package/src/utils/index.ts
CHANGED
|
@@ -2,3 +2,5 @@ export { cloneChildrenWithModes, flattenChildren } from './react-utils'
|
|
|
2
2
|
export { default as MediaSource } from './MediaSource'
|
|
3
3
|
export type { UnifiedSource, MediaSourceProps } from './MediaSource'
|
|
4
4
|
export { formatIndianNumber } from './number-utils'
|
|
5
|
+
export { boxShadow, supportsNativeBoxShadow, parseBoxShadow, parseSingleShadow } from './shadow'
|
|
6
|
+
export type { BoxShadowOptions, ParsedShadow } from './shadow'
|
package/src/utils/react-utils.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import type
|
|
2
|
+
import { Platform, type StyleProp, type ViewStyle, type TextStyle } from 'react-native';
|
|
3
3
|
import type { Modes } from '../design-tokens'
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -172,6 +172,77 @@ export function resolveTruncation(
|
|
|
172
172
|
return { numberOfLines, ellipsizeMode };
|
|
173
173
|
}
|
|
174
174
|
|
|
175
|
+
export type TextLayoutResult = {
|
|
176
|
+
numberOfLines?: number | undefined;
|
|
177
|
+
ellipsizeMode?: EllipsizeMode | undefined;
|
|
178
|
+
/**
|
|
179
|
+
* Style fragment that MUST be merged onto the target `<Text>` (after the
|
|
180
|
+
* component's own style and any consumer `style` override) so the escape
|
|
181
|
+
* hatches can win. `undefined` when neither flag is set.
|
|
182
|
+
*/
|
|
183
|
+
style?: TextStyle | undefined;
|
|
184
|
+
};
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* Resolves the `<Text>` props + style for the two truncation escape hatches.
|
|
188
|
+
* This supersedes {@link resolveTruncation} for components that want the
|
|
189
|
+
* "brutal" overflow behaviour rather than just dropping the line clamp.
|
|
190
|
+
*
|
|
191
|
+
* - `disableTruncation`: never truncate. Drops `numberOfLines`/`ellipsizeMode`
|
|
192
|
+
* AND sets `flexShrink: 0`, so a tight flex parent can no longer squeeze the
|
|
193
|
+
* text into an ellipsis — instead the text keeps its intrinsic size and
|
|
194
|
+
* overflows, even if that means blowing past (and visually breaking) the
|
|
195
|
+
* parent layout. The text still wraps onto multiple lines.
|
|
196
|
+
* - `singleLine`: force everything onto one line with no wrapping. Implies
|
|
197
|
+
* `disableTruncation` (the ellipsis is never shown). On web this adds
|
|
198
|
+
* `whiteSpace: 'nowrap'` so the single line overflows horizontally instead of
|
|
199
|
+
* wrapping. The text is never shrunk.
|
|
200
|
+
*
|
|
201
|
+
* Note (native): React Native's `<Text>` has no `white-space: nowrap`
|
|
202
|
+
* equivalent, so on iOS/Android `singleLine` cannot force a hard non-wrapping
|
|
203
|
+
* overflow — it behaves like `disableTruncation` (no ellipsis, no shrink). The
|
|
204
|
+
* hard single-line overflow is honoured on web (Storybook / react-native-web).
|
|
205
|
+
*
|
|
206
|
+
* When neither flag is set, the supplied `numberOfLines`/`ellipsizeMode` pass
|
|
207
|
+
* through unchanged and no extra style is returned.
|
|
208
|
+
*/
|
|
209
|
+
export function resolveTextLayout({
|
|
210
|
+
disableTruncation,
|
|
211
|
+
singleLine,
|
|
212
|
+
numberOfLines,
|
|
213
|
+
ellipsizeMode,
|
|
214
|
+
}: {
|
|
215
|
+
disableTruncation?: boolean | undefined;
|
|
216
|
+
singleLine?: boolean | undefined;
|
|
217
|
+
numberOfLines?: number | undefined;
|
|
218
|
+
ellipsizeMode?: EllipsizeMode | undefined;
|
|
219
|
+
}): TextLayoutResult {
|
|
220
|
+
if (singleLine) {
|
|
221
|
+
return {
|
|
222
|
+
numberOfLines: undefined,
|
|
223
|
+
ellipsizeMode: undefined,
|
|
224
|
+
style: {
|
|
225
|
+
flexShrink: 0,
|
|
226
|
+
flexGrow: 0,
|
|
227
|
+
...(Platform.OS === 'web'
|
|
228
|
+
? { whiteSpace: 'nowrap' as const, overflow: 'visible' as const }
|
|
229
|
+
: {}),
|
|
230
|
+
},
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
if (disableTruncation) {
|
|
234
|
+
return {
|
|
235
|
+
numberOfLines: undefined,
|
|
236
|
+
ellipsizeMode: undefined,
|
|
237
|
+
style: {
|
|
238
|
+
flexShrink: 0,
|
|
239
|
+
...(Platform.OS === 'web' ? { overflow: 'visible' as const } : {}),
|
|
240
|
+
},
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
return { numberOfLines, ellipsizeMode }
|
|
244
|
+
}
|
|
245
|
+
|
|
175
246
|
/**
|
|
176
247
|
* Flattens React children, extracting them from Fragments.
|
|
177
248
|
* Useful for Group components that need to process individual items (e.g., for layout or styling)
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import { Platform } from 'react-native'
|
|
2
|
+
import type { ViewStyle } from 'react-native'
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Cross-platform drop-shadow helper with a backward-compatibility layer.
|
|
6
|
+
*
|
|
7
|
+
* Why this exists
|
|
8
|
+
* ----------------
|
|
9
|
+
* The spec-compliant `boxShadow` style prop only landed in React Native 0.76
|
|
10
|
+
* (and only on the New Architecture / Fabric). Older apps that consume this
|
|
11
|
+
* library are still on pre-0.76 React Native where `boxShadow` is silently
|
|
12
|
+
* ignored on native, so their shadows simply disappear.
|
|
13
|
+
*
|
|
14
|
+
* Rather than hand-rolling a `Platform.select` block in every component, route
|
|
15
|
+
* ALL drop shadows through this single helper. When `boxShadow` is natively
|
|
16
|
+
* supported it is used verbatim (web + RN 0.76+ Fabric). When it is NOT
|
|
17
|
+
* supported, the CSS-style shadow string is parsed and translated into the
|
|
18
|
+
* legacy native shadow API:
|
|
19
|
+
* - iOS: `shadowColor`, `shadowOffset`, `shadowOpacity`, `shadowRadius`
|
|
20
|
+
* - Android: `elevation`
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```tsx
|
|
24
|
+
* const style = boxShadow('0px 2px 4px 0px rgba(0,0,0,0.18)')
|
|
25
|
+
* <View style={[base, style]} />
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
export interface ParsedShadow {
|
|
30
|
+
offsetX: number
|
|
31
|
+
offsetY: number
|
|
32
|
+
blur: number
|
|
33
|
+
spread: number
|
|
34
|
+
color: string
|
|
35
|
+
inset: boolean
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export interface BoxShadowOptions {
|
|
39
|
+
/**
|
|
40
|
+
* Explicit Android `elevation` for the legacy fallback. When omitted it is
|
|
41
|
+
* derived from the most prominent shadow's blur radius. Android elevation
|
|
42
|
+
* cannot reproduce colored/ring shadows, so provide this when the default
|
|
43
|
+
* heuristic doesn't match the design.
|
|
44
|
+
*/
|
|
45
|
+
elevation?: number
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// `boxShadow` is intentionally absent from the @types/react-native surface in
|
|
49
|
+
// this repo (pinned to 0.73), so we widen ViewStyle locally for the cases
|
|
50
|
+
// where we DO emit the native/web boxShadow string.
|
|
51
|
+
type ShadowViewStyle = ViewStyle & { boxShadow?: string }
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Whether the spec-compliant `boxShadow` style prop is honored at runtime.
|
|
55
|
+
* - Web (react-native-web) always supports it.
|
|
56
|
+
* - Native supports it from RN 0.76+ AND only on the New Architecture (Fabric).
|
|
57
|
+
*/
|
|
58
|
+
export function supportsNativeBoxShadow(): boolean {
|
|
59
|
+
if (Platform.OS === 'web') {
|
|
60
|
+
return true
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const version = (Platform.constants as { reactNativeVersion?: { major: number; minor: number } } | undefined)
|
|
64
|
+
?.reactNativeVersion
|
|
65
|
+
|
|
66
|
+
const isVersionSupported = version
|
|
67
|
+
? version.major > 0 || (version.major === 0 && version.minor >= 76)
|
|
68
|
+
: false
|
|
69
|
+
|
|
70
|
+
// Even on 0.76+, boxShadow is a New Architecture feature. Fabric exposes a
|
|
71
|
+
// global UI manager; its presence is the most reliable runtime signal.
|
|
72
|
+
const isFabric =
|
|
73
|
+
typeof globalThis !== 'undefined' &&
|
|
74
|
+
(globalThis as { nativeFabricUIManager?: unknown }).nativeFabricUIManager != null
|
|
75
|
+
|
|
76
|
+
return isVersionSupported && isFabric
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Splits a (potentially multi-) box-shadow string on top-level commas, i.e.
|
|
81
|
+
* commas that are NOT inside a color function such as `rgba(12, 13, 16, 0.12)`.
|
|
82
|
+
*/
|
|
83
|
+
function splitShadows(value: string): string[] {
|
|
84
|
+
const out: string[] = []
|
|
85
|
+
let depth = 0
|
|
86
|
+
let current = ''
|
|
87
|
+
|
|
88
|
+
for (const ch of value) {
|
|
89
|
+
if (ch === '(') depth++
|
|
90
|
+
else if (ch === ')') depth--
|
|
91
|
+
|
|
92
|
+
if (ch === ',' && depth === 0) {
|
|
93
|
+
if (current.trim()) out.push(current.trim())
|
|
94
|
+
current = ''
|
|
95
|
+
} else {
|
|
96
|
+
current += ch
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
if (current.trim()) out.push(current.trim())
|
|
101
|
+
return out
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Parses a single CSS box-shadow layer into its primitive parts.
|
|
106
|
+
* Supports: `[inset] offsetX offsetY [blur] [spread] color` in any sensible
|
|
107
|
+
* ordering of the keyword/color, with `rgb()/rgba()/hsl()/hsla()`, hex, or
|
|
108
|
+
* named colors.
|
|
109
|
+
*/
|
|
110
|
+
export function parseSingleShadow(input: string): ParsedShadow {
|
|
111
|
+
let s = input.trim()
|
|
112
|
+
|
|
113
|
+
let inset = false
|
|
114
|
+
if (/(^|\s)inset(\s|$)/i.test(s)) {
|
|
115
|
+
inset = true
|
|
116
|
+
s = s.replace(/(^|\s)inset(\s|$)/i, ' ').trim()
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
let color = 'rgba(0,0,0,1)'
|
|
120
|
+
const fnColor = s.match(/(?:rgba?|hsla?)\([^)]*\)/i)
|
|
121
|
+
if (fnColor) {
|
|
122
|
+
color = fnColor[0]
|
|
123
|
+
s = s.replace(fnColor[0], ' ').trim()
|
|
124
|
+
} else {
|
|
125
|
+
const hex = s.match(/#[0-9a-fA-F]{3,8}\b/)
|
|
126
|
+
if (hex) {
|
|
127
|
+
color = hex[0]
|
|
128
|
+
s = s.replace(hex[0], ' ').trim()
|
|
129
|
+
} else {
|
|
130
|
+
// Fall back to a trailing named color token (e.g. "red", "black").
|
|
131
|
+
const tokens = s.split(/\s+/).filter(Boolean)
|
|
132
|
+
const last = tokens[tokens.length - 1]
|
|
133
|
+
if (last && Number.isNaN(parseFloat(last))) {
|
|
134
|
+
color = last
|
|
135
|
+
tokens.pop()
|
|
136
|
+
s = tokens.join(' ')
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
const nums = s.split(/\s+/).filter(Boolean).map((t) => parseFloat(t) || 0)
|
|
142
|
+
const [offsetX = 0, offsetY = 0, blur = 0, spread = 0] = nums
|
|
143
|
+
|
|
144
|
+
return { offsetX, offsetY, blur, spread, color, inset }
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Parses a full box-shadow string (one or more comma-separated layers).
|
|
149
|
+
*/
|
|
150
|
+
export function parseBoxShadow(value: string): ParsedShadow[] {
|
|
151
|
+
return splitShadows(value).map(parseSingleShadow)
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Picks the visually dominant shadow layer (largest blur, then largest spread).
|
|
156
|
+
* iOS' legacy shadow API can only render a single shadow per view.
|
|
157
|
+
*/
|
|
158
|
+
function pickPrimary(shadows: ParsedShadow[]): ParsedShadow | undefined {
|
|
159
|
+
if (shadows.length === 0) return undefined
|
|
160
|
+
return shadows.reduce((best, s) => {
|
|
161
|
+
if (s.blur > best.blur) return s
|
|
162
|
+
if (s.blur === best.blur && s.spread > best.spread) return s
|
|
163
|
+
return best
|
|
164
|
+
})
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Translates the parsed shadow into the legacy native shadow style used by
|
|
169
|
+
* pre-0.76 React Native.
|
|
170
|
+
*/
|
|
171
|
+
function legacyShadowStyle(value: string, options?: BoxShadowOptions): ViewStyle {
|
|
172
|
+
const shadows = parseBoxShadow(value)
|
|
173
|
+
const primary = pickPrimary(shadows)
|
|
174
|
+
|
|
175
|
+
if (!primary) {
|
|
176
|
+
return {}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
if (Platform.OS === 'android') {
|
|
180
|
+
const elevation = options?.elevation ?? Math.max(0, Math.round(primary.blur / 2))
|
|
181
|
+
if (elevation <= 0) {
|
|
182
|
+
return {}
|
|
183
|
+
}
|
|
184
|
+
return { elevation }
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
// iOS: shadowOpacity defaults to 0 (invisible), so it MUST be set. We keep
|
|
188
|
+
// the full color (its own alpha is respected) and use opacity 1 as the
|
|
189
|
+
// multiplier so rgba() alpha is honored end-to-end.
|
|
190
|
+
return {
|
|
191
|
+
shadowColor: primary.color,
|
|
192
|
+
shadowOffset: { width: primary.offsetX, height: primary.offsetY },
|
|
193
|
+
shadowOpacity: 1,
|
|
194
|
+
shadowRadius: primary.blur,
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* Returns a style object that renders the given CSS-style box-shadow on every
|
|
200
|
+
* platform. Uses the native `boxShadow` prop when supported, otherwise falls
|
|
201
|
+
* back to the legacy `shadow*` (iOS) / `elevation` (Android) API.
|
|
202
|
+
*
|
|
203
|
+
* @param value A CSS box-shadow string, e.g. `'0px 2px 4px 0px rgba(0,0,0,0.2)'`.
|
|
204
|
+
* Multiple comma-separated layers are supported; on the legacy
|
|
205
|
+
* fallback iOS uses the most prominent layer and Android uses a
|
|
206
|
+
* single elevation.
|
|
207
|
+
* @param options Optional overrides (e.g. explicit Android `elevation`).
|
|
208
|
+
*/
|
|
209
|
+
export function boxShadow(value: string, options?: BoxShadowOptions): ViewStyle {
|
|
210
|
+
if (!value) {
|
|
211
|
+
return {}
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
if (supportsNativeBoxShadow()) {
|
|
215
|
+
return { boxShadow: value } as ShadowViewStyle
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
return legacyShadowStyle(value, options)
|
|
219
|
+
}
|