jfs-components 0.0.5 → 0.0.7
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/lib/commonjs/components/Accordion/Accordion.mdx +1 -1
- package/lib/commonjs/components/ActionFooter/ActionFooter.js +2 -14
- package/lib/commonjs/components/ActionFooter/ActionFooter.js.map +1 -1
- package/lib/commonjs/components/ActionFooter/ActionFooter.mdx +1 -1
- package/lib/commonjs/components/ActionTile/ActionTile.js +10 -1
- package/lib/commonjs/components/ActionTile/ActionTile.js.map +1 -1
- package/lib/commonjs/components/ActionTile/ActionTile.mdx +5 -1
- package/lib/commonjs/components/AppBar/AppBar.js +109 -231
- package/lib/commonjs/components/AppBar/AppBar.js.map +1 -1
- package/lib/commonjs/components/AppBar/AppBar.mdx +51 -39
- package/lib/commonjs/components/Avatar/Avatar.mdx +9 -1
- package/lib/commonjs/components/AvatarGroup/AvatarGroup.mdx +9 -1
- package/lib/commonjs/components/Badge/Badge.mdx +1 -1
- package/lib/commonjs/components/Balance/Balance.js +77 -0
- package/lib/commonjs/components/Balance/Balance.js.map +1 -0
- package/lib/commonjs/components/Balance/Balance.mdx +62 -0
- package/lib/commonjs/components/BottomNav/BottomNav.js +9 -1
- package/lib/commonjs/components/BottomNav/BottomNav.js.map +1 -1
- package/lib/commonjs/components/BottomNav/BottomNav.mdx +5 -1
- package/lib/commonjs/components/BottomNavItem/BottomNavItem.js +9 -1
- package/lib/commonjs/components/BottomNavItem/BottomNavItem.js.map +1 -1
- package/lib/commonjs/components/BottomNavItem/BottomNavItem.mdx +5 -1
- package/lib/commonjs/components/Button/Button.mdx +5 -1
- package/lib/commonjs/components/ButtonGroup/ButtonGroup.js +64 -0
- package/lib/commonjs/components/ButtonGroup/ButtonGroup.js.map +1 -0
- package/lib/commonjs/components/ButtonGroup/ButtonGroup.mdx +56 -0
- package/lib/commonjs/components/Card/Card.mdx +1 -1
- package/lib/commonjs/components/CardFeedback/CardFeedback.mdx +5 -1
- package/lib/commonjs/components/ChipGroup/ChipGroup.js +54 -0
- package/lib/commonjs/components/ChipGroup/ChipGroup.js.map +1 -0
- package/lib/commonjs/components/ChipGroup/ChipGroup.mdx +40 -0
- package/lib/commonjs/components/ChipSelect/ChipSelect.js +103 -0
- package/lib/commonjs/components/ChipSelect/ChipSelect.js.map +1 -0
- package/lib/commonjs/components/ChipSelect/ChipSelect.mdx +80 -0
- package/lib/commonjs/components/CtaCard/CtaCard.js +15 -20
- package/lib/commonjs/components/CtaCard/CtaCard.js.map +1 -1
- package/lib/commonjs/components/CtaCard/CtaCard.mdx +1 -1
- package/lib/commonjs/components/Disclaimer/Disclaimer.js +9 -1
- package/lib/commonjs/components/Disclaimer/Disclaimer.js.map +1 -1
- package/lib/commonjs/components/Disclaimer/Disclaimer.mdx +5 -1
- package/lib/commonjs/components/Divider/Divider.mdx +5 -1
- package/lib/commonjs/components/Drawer/Drawer.mdx +9 -1
- package/lib/commonjs/components/EmptyState/EmptyState.js +138 -0
- package/lib/commonjs/components/EmptyState/EmptyState.js.map +1 -0
- package/lib/commonjs/components/EmptyState/EmptyState.mdx +73 -0
- package/lib/commonjs/components/FilterBar/FilterBar.mdx +1 -1
- package/lib/commonjs/components/HStack/HStack.js +67 -0
- package/lib/commonjs/components/HStack/HStack.js.map +1 -0
- package/lib/commonjs/components/HStack/HStack.mdx +44 -0
- package/lib/commonjs/components/IconButton/IconButton.mdx +5 -1
- package/lib/commonjs/components/IconCapsule/IconCapsule.js +12 -4
- package/lib/commonjs/components/IconCapsule/IconCapsule.js.map +1 -1
- package/lib/commonjs/components/IconCapsule/IconCapsule.mdx +12 -4
- package/lib/commonjs/components/Introduction.mdx +3 -98
- package/lib/commonjs/components/LazyList/LazyList.mdx +1 -1
- package/lib/commonjs/components/ListGroup/ListGroup.js +3 -30
- package/lib/commonjs/components/ListGroup/ListGroup.js.map +1 -1
- package/lib/commonjs/components/ListGroup/ListGroup.mdx +5 -1
- package/lib/commonjs/components/ListItem/ListItem.js +5 -37
- package/lib/commonjs/components/ListItem/ListItem.js.map +1 -1
- package/lib/commonjs/components/ListItem/ListItem.mdx +5 -1
- package/lib/commonjs/components/MediaCard/MediaCard.mdx +5 -1
- package/lib/commonjs/components/MerchantProfile/MerchantProfile.mdx +1 -1
- package/lib/commonjs/components/MoneyValue/MoneyValue.mdx +6 -2
- package/lib/commonjs/components/NavArrow/NavArrow.js +42 -17
- package/lib/commonjs/components/NavArrow/NavArrow.js.map +1 -1
- package/lib/commonjs/components/NavArrow/NavArrow.mdx +5 -1
- package/lib/commonjs/components/PageTitle/PageTitle.js +10 -1
- package/lib/commonjs/components/PageTitle/PageTitle.js.map +1 -1
- package/lib/commonjs/components/PageTitle/PageTitle.mdx +5 -1
- package/lib/commonjs/components/Screen/Screen.js +53 -0
- package/lib/commonjs/components/Screen/Screen.js.map +1 -0
- package/lib/commonjs/components/Screen/Screen.mdx +58 -0
- package/lib/commonjs/components/Section/Section.js +3 -25
- package/lib/commonjs/components/Section/Section.js.map +1 -1
- package/lib/commonjs/components/Section/Section.mdx +5 -1
- package/lib/commonjs/components/Stepper/Step.mdx +5 -1
- package/lib/commonjs/components/Stepper/StepLabel.mdx +5 -1
- package/lib/commonjs/components/Stepper/Stepper.mdx +1 -1
- package/lib/commonjs/components/SupportText/SupportText.js +83 -0
- package/lib/commonjs/components/SupportText/SupportText.js.map +1 -0
- package/lib/commonjs/components/SupportText/SupportText.mdx +48 -0
- package/lib/commonjs/components/SupportText/SupportTextIcon.js +47 -0
- package/lib/commonjs/components/SupportText/SupportTextIcon.js.map +1 -0
- package/lib/commonjs/components/SupportText/SupportTextIcon.mdx +35 -0
- package/lib/commonjs/components/SupportText/index.js +21 -0
- package/lib/commonjs/components/SupportText/index.js.map +1 -0
- package/lib/commonjs/components/TextInput/TextInput.mdx +9 -1
- package/lib/commonjs/components/ThreadHero/ThreadHero.mdx +1 -1
- package/lib/commonjs/components/Tooltip/Tooltip.mdx +5 -1
- package/lib/commonjs/components/TransactionBubble/TransactionBubble.mdx +1 -1
- package/lib/commonjs/components/TransactionDetails/TransactionDetails.js +2 -24
- package/lib/commonjs/components/TransactionDetails/TransactionDetails.js.map +1 -1
- package/lib/commonjs/components/TransactionDetails/TransactionDetails.mdx +1 -1
- package/lib/commonjs/components/TransactionStatus/TransactionStatus.mdx +1 -1
- package/lib/commonjs/components/UpiHandle/UpiHandle.js +9 -1
- package/lib/commonjs/components/UpiHandle/UpiHandle.js.map +1 -1
- package/lib/commonjs/components/UpiHandle/UpiHandle.mdx +5 -1
- package/lib/commonjs/components/VStack/VStack.js +73 -0
- package/lib/commonjs/components/VStack/VStack.js.map +1 -0
- package/lib/commonjs/components/VStack/VStack.mdx +44 -0
- package/lib/commonjs/components/index.js +28 -0
- package/lib/commonjs/components/index.js.map +1 -1
- package/lib/commonjs/design-tokens/JFS Variables-variables-full.json +1 -18633
- package/lib/commonjs/icons/ic_info.svg +1 -0
- package/lib/commonjs/icons/ic_warning.svg +1 -0
- package/lib/commonjs/icons/registry.js +2 -2
- package/lib/commonjs/icons/registry.js.map +1 -1
- package/lib/commonjs/utils/react-utils.js +47 -0
- package/lib/commonjs/utils/react-utils.js.map +1 -0
- package/lib/module/components/Accordion/Accordion.mdx +1 -1
- package/lib/module/components/ActionFooter/ActionFooter.js +2 -14
- package/lib/module/components/ActionFooter/ActionFooter.js.map +1 -1
- package/lib/module/components/ActionFooter/ActionFooter.mdx +1 -1
- package/lib/module/components/ActionTile/ActionTile.js +10 -1
- package/lib/module/components/ActionTile/ActionTile.js.map +1 -1
- package/lib/module/components/ActionTile/ActionTile.mdx +5 -1
- package/lib/module/components/AppBar/AppBar.js +109 -231
- package/lib/module/components/AppBar/AppBar.js.map +1 -1
- package/lib/module/components/AppBar/AppBar.mdx +51 -39
- package/lib/module/components/Avatar/Avatar.mdx +9 -1
- package/lib/module/components/AvatarGroup/AvatarGroup.mdx +9 -1
- package/lib/module/components/Badge/Badge.mdx +1 -1
- package/lib/module/components/Balance/Balance.js +72 -0
- package/lib/module/components/Balance/Balance.js.map +1 -0
- package/lib/module/components/Balance/Balance.mdx +62 -0
- package/lib/module/components/BottomNav/BottomNav.js +9 -1
- package/lib/module/components/BottomNav/BottomNav.js.map +1 -1
- package/lib/module/components/BottomNav/BottomNav.mdx +5 -1
- package/lib/module/components/BottomNavItem/BottomNavItem.js +9 -1
- package/lib/module/components/BottomNavItem/BottomNavItem.js.map +1 -1
- package/lib/module/components/BottomNavItem/BottomNavItem.mdx +5 -1
- package/lib/module/components/Button/Button.mdx +5 -1
- package/lib/module/components/ButtonGroup/ButtonGroup.js +59 -0
- package/lib/module/components/ButtonGroup/ButtonGroup.js.map +1 -0
- package/lib/module/components/ButtonGroup/ButtonGroup.mdx +56 -0
- package/lib/module/components/Card/Card.mdx +1 -1
- package/lib/module/components/CardFeedback/CardFeedback.mdx +5 -1
- package/lib/module/components/ChipGroup/ChipGroup.js +49 -0
- package/lib/module/components/ChipGroup/ChipGroup.js.map +1 -0
- package/lib/module/components/ChipGroup/ChipGroup.mdx +40 -0
- package/lib/module/components/ChipSelect/ChipSelect.js +98 -0
- package/lib/module/components/ChipSelect/ChipSelect.js.map +1 -0
- package/lib/module/components/ChipSelect/ChipSelect.mdx +80 -0
- package/lib/module/components/CtaCard/CtaCard.js +15 -20
- package/lib/module/components/CtaCard/CtaCard.js.map +1 -1
- package/lib/module/components/CtaCard/CtaCard.mdx +1 -1
- package/lib/module/components/Disclaimer/Disclaimer.js +9 -1
- package/lib/module/components/Disclaimer/Disclaimer.js.map +1 -1
- package/lib/module/components/Disclaimer/Disclaimer.mdx +5 -1
- package/lib/module/components/Divider/Divider.mdx +5 -1
- package/lib/module/components/Drawer/Drawer.mdx +9 -1
- package/lib/module/components/EmptyState/EmptyState.js +132 -0
- package/lib/module/components/EmptyState/EmptyState.js.map +1 -0
- package/lib/module/components/EmptyState/EmptyState.mdx +73 -0
- package/lib/module/components/FilterBar/FilterBar.mdx +1 -1
- package/lib/module/components/HStack/HStack.js +61 -0
- package/lib/module/components/HStack/HStack.js.map +1 -0
- package/lib/module/components/HStack/HStack.mdx +44 -0
- package/lib/module/components/IconButton/IconButton.mdx +5 -1
- package/lib/module/components/IconCapsule/IconCapsule.js +12 -4
- package/lib/module/components/IconCapsule/IconCapsule.js.map +1 -1
- package/lib/module/components/IconCapsule/IconCapsule.mdx +12 -4
- package/lib/module/components/Introduction.mdx +3 -98
- package/lib/module/components/LazyList/LazyList.mdx +1 -1
- package/lib/module/components/ListGroup/ListGroup.js +1 -30
- package/lib/module/components/ListGroup/ListGroup.js.map +1 -1
- package/lib/module/components/ListGroup/ListGroup.mdx +5 -1
- package/lib/module/components/ListItem/ListItem.js +1 -35
- package/lib/module/components/ListItem/ListItem.js.map +1 -1
- package/lib/module/components/ListItem/ListItem.mdx +5 -1
- package/lib/module/components/MediaCard/MediaCard.mdx +5 -1
- package/lib/module/components/MerchantProfile/MerchantProfile.mdx +1 -1
- package/lib/module/components/MoneyValue/MoneyValue.mdx +6 -2
- package/lib/module/components/NavArrow/NavArrow.js +42 -17
- package/lib/module/components/NavArrow/NavArrow.js.map +1 -1
- package/lib/module/components/NavArrow/NavArrow.mdx +5 -1
- package/lib/module/components/PageTitle/PageTitle.js +10 -1
- package/lib/module/components/PageTitle/PageTitle.js.map +1 -1
- package/lib/module/components/PageTitle/PageTitle.mdx +5 -1
- package/lib/module/components/Screen/Screen.js +47 -0
- package/lib/module/components/Screen/Screen.js.map +1 -0
- package/lib/module/components/Screen/Screen.mdx +58 -0
- package/lib/module/components/Section/Section.js +1 -23
- package/lib/module/components/Section/Section.js.map +1 -1
- package/lib/module/components/Section/Section.mdx +5 -1
- package/lib/module/components/Stepper/Step.mdx +5 -1
- package/lib/module/components/Stepper/StepLabel.mdx +5 -1
- package/lib/module/components/Stepper/Stepper.mdx +1 -1
- package/lib/module/components/SupportText/SupportText.js +78 -0
- package/lib/module/components/SupportText/SupportText.js.map +1 -0
- package/lib/module/components/SupportText/SupportText.mdx +48 -0
- package/lib/module/components/SupportText/SupportTextIcon.js +42 -0
- package/lib/module/components/SupportText/SupportTextIcon.js.map +1 -0
- package/lib/module/components/SupportText/SupportTextIcon.mdx +35 -0
- package/lib/module/components/SupportText/index.js +5 -0
- package/lib/module/components/SupportText/index.js.map +1 -0
- package/lib/module/components/TextInput/TextInput.mdx +9 -1
- package/lib/module/components/ThreadHero/ThreadHero.mdx +1 -1
- package/lib/module/components/Tooltip/Tooltip.mdx +5 -1
- package/lib/module/components/TransactionBubble/TransactionBubble.mdx +1 -1
- package/lib/module/components/TransactionDetails/TransactionDetails.js +2 -26
- package/lib/module/components/TransactionDetails/TransactionDetails.js.map +1 -1
- package/lib/module/components/TransactionDetails/TransactionDetails.mdx +1 -1
- package/lib/module/components/TransactionStatus/TransactionStatus.mdx +1 -1
- package/lib/module/components/UpiHandle/UpiHandle.js +9 -1
- package/lib/module/components/UpiHandle/UpiHandle.js.map +1 -1
- package/lib/module/components/UpiHandle/UpiHandle.mdx +5 -1
- package/lib/module/components/VStack/VStack.js +67 -0
- package/lib/module/components/VStack/VStack.js.map +1 -0
- package/lib/module/components/VStack/VStack.mdx +44 -0
- package/lib/module/components/index.js +4 -0
- package/lib/module/components/index.js.map +1 -1
- package/lib/module/design-tokens/JFS Variables-variables-full.json +1 -18633
- package/lib/module/design-tokens/figma-variables-resolver.js +2 -2
- package/lib/module/design-tokens/figma-variables-resolver.js.map +1 -1
- package/lib/module/icons/ic_info.svg +1 -0
- package/lib/module/icons/ic_warning.svg +1 -0
- package/lib/module/icons/registry.js +2 -2
- package/lib/module/icons/registry.js.map +1 -1
- package/lib/module/utils/react-utils.js +43 -0
- package/lib/module/utils/react-utils.js.map +1 -0
- package/lib/typescript/components/ActionFooter/ActionFooter.d.ts.map +1 -1
- package/lib/typescript/components/ActionTile/ActionTile.d.ts +1 -1
- package/lib/typescript/components/ActionTile/ActionTile.d.ts.map +1 -1
- package/lib/typescript/components/AppBar/AppBar.d.ts +34 -68
- package/lib/typescript/components/AppBar/AppBar.d.ts.map +1 -1
- package/lib/typescript/components/Balance/Balance.d.ts +44 -0
- package/lib/typescript/components/Balance/Balance.d.ts.map +1 -0
- package/lib/typescript/components/BottomNav/BottomNav.d.ts +1 -1
- package/lib/typescript/components/BottomNav/BottomNav.d.ts.map +1 -1
- package/lib/typescript/components/BottomNavItem/BottomNavItem.d.ts +1 -1
- package/lib/typescript/components/BottomNavItem/BottomNavItem.d.ts.map +1 -1
- package/lib/typescript/components/ButtonGroup/ButtonGroup.d.ts +36 -0
- package/lib/typescript/components/ButtonGroup/ButtonGroup.d.ts.map +1 -0
- package/lib/typescript/components/ChipGroup/ChipGroup.d.ts +29 -0
- package/lib/typescript/components/ChipGroup/ChipGroup.d.ts.map +1 -0
- package/lib/typescript/components/ChipSelect/ChipSelect.d.ts +47 -0
- package/lib/typescript/components/ChipSelect/ChipSelect.d.ts.map +1 -0
- package/lib/typescript/components/CtaCard/CtaCard.d.ts +1 -1
- package/lib/typescript/components/CtaCard/CtaCard.d.ts.map +1 -1
- package/lib/typescript/components/Disclaimer/Disclaimer.d.ts +1 -1
- package/lib/typescript/components/Disclaimer/Disclaimer.d.ts.map +1 -1
- package/lib/typescript/components/EmptyState/EmptyState.d.ts +38 -0
- package/lib/typescript/components/EmptyState/EmptyState.d.ts.map +1 -0
- package/lib/typescript/components/HStack/HStack.d.ts +41 -0
- package/lib/typescript/components/HStack/HStack.d.ts.map +1 -0
- package/lib/typescript/components/IconCapsule/IconCapsule.d.ts +1 -1
- package/lib/typescript/components/IconCapsule/IconCapsule.d.ts.map +1 -1
- package/lib/typescript/components/ListGroup/ListGroup.d.ts.map +1 -1
- package/lib/typescript/components/ListItem/ListItem.d.ts.map +1 -1
- package/lib/typescript/components/NavArrow/NavArrow.d.ts +3 -3
- package/lib/typescript/components/NavArrow/NavArrow.d.ts.map +1 -1
- package/lib/typescript/components/PageTitle/PageTitle.d.ts +1 -1
- package/lib/typescript/components/PageTitle/PageTitle.d.ts.map +1 -1
- package/lib/typescript/components/Screen/Screen.d.ts +23 -0
- package/lib/typescript/components/Screen/Screen.d.ts.map +1 -0
- package/lib/typescript/components/Section/Section.d.ts.map +1 -1
- package/lib/typescript/components/SupportText/SupportText.d.ts +34 -0
- package/lib/typescript/components/SupportText/SupportText.d.ts.map +1 -0
- package/lib/typescript/components/SupportText/SupportTextIcon.d.ts +10 -0
- package/lib/typescript/components/SupportText/SupportTextIcon.d.ts.map +1 -0
- package/lib/typescript/components/SupportText/index.d.ts +3 -0
- package/lib/typescript/components/SupportText/index.d.ts.map +1 -0
- package/lib/typescript/components/TransactionDetails/TransactionDetails.d.ts.map +1 -1
- package/lib/typescript/components/UpiHandle/UpiHandle.d.ts +1 -1
- package/lib/typescript/components/UpiHandle/UpiHandle.d.ts.map +1 -1
- package/lib/typescript/components/VStack/VStack.d.ts +41 -0
- package/lib/typescript/components/VStack/VStack.d.ts.map +1 -0
- package/lib/typescript/components/index.d.ts +4 -0
- package/lib/typescript/components/index.d.ts.map +1 -1
- package/lib/typescript/icons/registry.d.ts +1 -1
- package/lib/typescript/icons/registry.d.ts.map +1 -1
- package/lib/typescript/utils/react-utils.d.ts +7 -0
- package/lib/typescript/utils/react-utils.d.ts.map +1 -0
- package/package.json +7 -5
- package/src/components/.token-metadata.json +468 -12
- package/src/components/Accordion/Accordion.mdx +1 -1
- package/src/components/ActionFooter/ActionFooter.mdx +1 -1
- package/src/components/ActionFooter/ActionFooter.tsx +3 -12
- package/src/components/ActionTile/ActionTile.mdx +5 -1
- package/src/components/ActionTile/ActionTile.tsx +5 -1
- package/src/components/AppBar/AppBar.mdx +51 -39
- package/src/components/AppBar/AppBar.tsx +149 -263
- package/src/components/Avatar/Avatar.mdx +9 -1
- package/src/components/AvatarGroup/AvatarGroup.mdx +9 -1
- package/src/components/Badge/Badge.mdx +1 -1
- package/src/components/Balance/Balance.mdx +62 -0
- package/src/components/Balance/Balance.tsx +107 -0
- package/src/components/BottomNav/BottomNav.mdx +5 -1
- package/src/components/BottomNav/BottomNav.tsx +6 -3
- package/src/components/BottomNavItem/BottomNavItem.mdx +5 -1
- package/src/components/BottomNavItem/BottomNavItem.tsx +19 -16
- package/src/components/Button/Button.mdx +5 -1
- package/src/components/ButtonGroup/ButtonGroup.mdx +56 -0
- package/src/components/ButtonGroup/ButtonGroup.tsx +78 -0
- package/src/components/Card/Card.mdx +1 -1
- package/src/components/CardFeedback/CardFeedback.mdx +5 -1
- package/src/components/ChipGroup/ChipGroup.mdx +40 -0
- package/src/components/ChipGroup/ChipGroup.tsx +67 -0
- package/src/components/ChipSelect/ChipSelect.mdx +80 -0
- package/src/components/ChipSelect/ChipSelect.tsx +138 -0
- package/src/components/CtaCard/CtaCard.mdx +1 -1
- package/src/components/CtaCard/CtaCard.tsx +16 -21
- package/src/components/Disclaimer/Disclaimer.mdx +5 -1
- package/src/components/Disclaimer/Disclaimer.tsx +6 -3
- package/src/components/Divider/Divider.mdx +5 -1
- package/src/components/Drawer/Drawer.mdx +9 -1
- package/src/components/EmptyState/EmptyState.mdx +73 -0
- package/src/components/EmptyState/EmptyState.tsx +181 -0
- package/src/components/FilterBar/FilterBar.mdx +1 -1
- package/src/components/HStack/HStack.mdx +44 -0
- package/src/components/HStack/HStack.tsx +95 -0
- package/src/components/IconButton/IconButton.mdx +5 -1
- package/src/components/IconCapsule/IconCapsule.mdx +12 -4
- package/src/components/IconCapsule/IconCapsule.tsx +13 -10
- package/src/components/Introduction.mdx +3 -98
- package/src/components/LazyList/LazyList.mdx +1 -1
- package/src/components/ListGroup/ListGroup.mdx +5 -1
- package/src/components/ListGroup/ListGroup.tsx +5 -43
- package/src/components/ListItem/ListItem.mdx +5 -1
- package/src/components/ListItem/ListItem.tsx +15 -60
- package/src/components/MediaCard/MediaCard.mdx +5 -1
- package/src/components/MerchantProfile/MerchantProfile.mdx +1 -1
- package/src/components/MoneyValue/MoneyValue.mdx +6 -2
- package/src/components/NavArrow/NavArrow.mdx +5 -1
- package/src/components/NavArrow/NavArrow.tsx +48 -16
- package/src/components/PageTitle/PageTitle.mdx +5 -1
- package/src/components/PageTitle/PageTitle.tsx +8 -4
- package/src/components/Screen/Screen.mdx +58 -0
- package/src/components/Screen/Screen.tsx +60 -0
- package/src/components/Section/Section.mdx +5 -1
- package/src/components/Section/Section.tsx +17 -46
- package/src/components/Stepper/Step.mdx +5 -1
- package/src/components/Stepper/StepLabel.mdx +5 -1
- package/src/components/Stepper/Stepper.mdx +1 -1
- package/src/components/SupportText/SupportText.mdx +48 -0
- package/src/components/SupportText/SupportText.tsx +104 -0
- package/src/components/SupportText/SupportTextIcon.mdx +35 -0
- package/src/components/SupportText/SupportTextIcon.tsx +45 -0
- package/src/components/SupportText/index.ts +2 -0
- package/src/components/TextInput/TextInput.mdx +9 -1
- package/src/components/ThreadHero/ThreadHero.mdx +1 -1
- package/src/components/Tooltip/Tooltip.mdx +5 -1
- package/src/components/TransactionBubble/TransactionBubble.mdx +1 -1
- package/src/components/TransactionDetails/TransactionDetails.mdx +1 -1
- package/src/components/TransactionDetails/TransactionDetails.tsx +1 -38
- package/src/components/TransactionStatus/TransactionStatus.mdx +1 -1
- package/src/components/UpiHandle/UpiHandle.mdx +5 -1
- package/src/components/UpiHandle/UpiHandle.tsx +4 -1
- package/src/components/VStack/VStack.mdx +44 -0
- package/src/components/VStack/VStack.tsx +100 -0
- package/src/components/index.ts +4 -0
- package/src/design-tokens/JFS Variables-variables-full.json +1 -18633
- package/src/icons/ic_info.svg +1 -0
- package/src/icons/ic_warning.svg +1 -0
- package/src/icons/registry.ts +9 -1
- package/src/utils/react-utils.ts +51 -0
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { View, Text, TouchableOpacity, type StyleProp, type ViewStyle, type TextStyle } from 'react-native';
|
|
3
|
+
import { getVariableByName } from '../../design-tokens/figma-variables-resolver';
|
|
4
|
+
import Icon from '../../icons/Icon';
|
|
5
|
+
|
|
6
|
+
export type ChipSelectProps = {
|
|
7
|
+
/**
|
|
8
|
+
* Label text to display.
|
|
9
|
+
* @default "Date"
|
|
10
|
+
*/
|
|
11
|
+
label?: string;
|
|
12
|
+
/**
|
|
13
|
+
* Whether the chip is in active state.
|
|
14
|
+
* @default false
|
|
15
|
+
*/
|
|
16
|
+
active?: boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Icon name to display in Idle state (when active is false).
|
|
19
|
+
* @default "ic_calendar_week"
|
|
20
|
+
*/
|
|
21
|
+
icon?: string;
|
|
22
|
+
/**
|
|
23
|
+
* Whether to show the close icon in Active state (when active is true).
|
|
24
|
+
* @default true
|
|
25
|
+
*/
|
|
26
|
+
close?: boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Modes for design token resolution.
|
|
29
|
+
*/
|
|
30
|
+
modes?: Record<string, any>;
|
|
31
|
+
/**
|
|
32
|
+
* Optional style overrides.
|
|
33
|
+
*/
|
|
34
|
+
style?: StyleProp<ViewStyle>;
|
|
35
|
+
/**
|
|
36
|
+
* Optional slot to override the label text.
|
|
37
|
+
*/
|
|
38
|
+
labelSlot?: React.ReactNode;
|
|
39
|
+
/**
|
|
40
|
+
* Button press handler.
|
|
41
|
+
*/
|
|
42
|
+
onPress?: () => void;
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* ChipSelect component for selecting options (e.g. Date selection).
|
|
47
|
+
* Based on Figma Node 1901-4727.
|
|
48
|
+
*/
|
|
49
|
+
function ChipSelect({
|
|
50
|
+
label = 'Date',
|
|
51
|
+
active = false,
|
|
52
|
+
icon = 'ic_calendar_week',
|
|
53
|
+
close = true,
|
|
54
|
+
modes = {},
|
|
55
|
+
style,
|
|
56
|
+
labelSlot,
|
|
57
|
+
onPress,
|
|
58
|
+
}: ChipSelectProps) {
|
|
59
|
+
// Force control of the 'ChipSelect State' mode based on the active prop
|
|
60
|
+
// This overrides any 'ChipSelect State' passed from outside, but preserves other modes
|
|
61
|
+
const resolvedModes = {
|
|
62
|
+
...modes,
|
|
63
|
+
'ChipSelect State': active ? 'Active' : 'Idle',
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
// --- Token Resolution ---
|
|
67
|
+
const gap = parseInt(getVariableByName('chipSelect/gap', resolvedModes), 10) || 4;
|
|
68
|
+
const paddingHorizontal = parseInt(getVariableByName('chipSelect/padding/horizontal', resolvedModes), 10) || 16;
|
|
69
|
+
const paddingVertical = parseInt(getVariableByName('chipSelect/padding/vertical', resolvedModes), 10) || 0;
|
|
70
|
+
const radius = parseInt(getVariableByName('chipSelect/radius', resolvedModes), 10) || 999;
|
|
71
|
+
|
|
72
|
+
// Background
|
|
73
|
+
const backgroundColor = getVariableByName('chipSelect/background', resolvedModes) || '#f5f5f5';
|
|
74
|
+
|
|
75
|
+
// Text Styles
|
|
76
|
+
const textColor = getVariableByName('chipSelect/foreground', resolvedModes) || '#0d0d0f';
|
|
77
|
+
const fontSize = parseInt(getVariableByName('chipSelect/fontSize', resolvedModes), 10) || 14;
|
|
78
|
+
const fontFamily = getVariableByName('chipSelect/fontFamily', resolvedModes) || 'JioType Var';
|
|
79
|
+
const lineHeight = parseInt(getVariableByName('chipSelect/lineHeight', resolvedModes), 10) || 32;
|
|
80
|
+
const fontWeight = getVariableByName('chipSelect/fontWeight', resolvedModes) || '700';
|
|
81
|
+
|
|
82
|
+
// Icon Styles
|
|
83
|
+
const iconSize = parseInt(getVariableByName('chipSelect/icon/size', resolvedModes), 10) || 16;
|
|
84
|
+
|
|
85
|
+
// --- Styles ---
|
|
86
|
+
const containerStyle: ViewStyle = {
|
|
87
|
+
flexDirection: 'row',
|
|
88
|
+
alignItems: 'center',
|
|
89
|
+
justifyContent: 'center',
|
|
90
|
+
backgroundColor: backgroundColor,
|
|
91
|
+
borderRadius: radius,
|
|
92
|
+
paddingHorizontal: paddingHorizontal,
|
|
93
|
+
paddingVertical: paddingVertical,
|
|
94
|
+
gap: gap,
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
const textStyle: TextStyle = {
|
|
98
|
+
color: textColor,
|
|
99
|
+
fontFamily: fontFamily,
|
|
100
|
+
fontSize: fontSize,
|
|
101
|
+
lineHeight: lineHeight,
|
|
102
|
+
fontWeight: fontWeight as any,
|
|
103
|
+
textAlign: 'center',
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
const renderLabel = () => {
|
|
107
|
+
if (labelSlot) {
|
|
108
|
+
if (React.isValidElement(labelSlot)) {
|
|
109
|
+
// Pass resolved modes to slot
|
|
110
|
+
return React.cloneElement(labelSlot as React.ReactElement<any>, { modes: resolvedModes });
|
|
111
|
+
}
|
|
112
|
+
return labelSlot;
|
|
113
|
+
}
|
|
114
|
+
return <Text style={textStyle}>{label}</Text>;
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
return (
|
|
118
|
+
<TouchableOpacity
|
|
119
|
+
style={[containerStyle, style]}
|
|
120
|
+
onPress={onPress}
|
|
121
|
+
activeOpacity={0.8}
|
|
122
|
+
>
|
|
123
|
+
{/* Start Icon */}
|
|
124
|
+
{icon && (
|
|
125
|
+
<Icon name={icon} size={iconSize} color={textColor} />
|
|
126
|
+
)}
|
|
127
|
+
|
|
128
|
+
{renderLabel()}
|
|
129
|
+
|
|
130
|
+
{/* End/Close Icon (Only when active AND close is true) */}
|
|
131
|
+
{active && close && (
|
|
132
|
+
<Icon name="ic_close" size={iconSize} color={textColor} />
|
|
133
|
+
)}
|
|
134
|
+
</TouchableOpacity>
|
|
135
|
+
);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
export default ChipSelect;
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import React from 'react'
|
|
2
|
-
import { View, Text, type StyleProp, type ViewStyle, type TextStyle } from 'react-native'
|
|
3
|
-
import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
4
|
-
import
|
|
5
|
-
import
|
|
1
|
+
import React from 'react'
|
|
2
|
+
import { View, Text, type StyleProp, type ViewStyle, type TextStyle } from 'react-native'
|
|
3
|
+
import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
4
|
+
import { useTokens } from '../../design-tokens/JFSThemeProvider'
|
|
5
|
+
import IconCapsule from '../IconCapsule/IconCapsule'
|
|
6
|
+
import Button from '../Button/Button'
|
|
7
|
+
import { cloneChildrenWithModes } from '../../utils/react-utils'
|
|
6
8
|
|
|
7
9
|
type CtaCardProps = {
|
|
8
10
|
/**
|
|
@@ -68,13 +70,15 @@ function CtaCard({
|
|
|
68
70
|
iconName = "ic_upi_number",
|
|
69
71
|
buttonLabel = "Get started",
|
|
70
72
|
onPressButton,
|
|
71
|
-
modes = {},
|
|
73
|
+
modes: propModes = {},
|
|
72
74
|
iconSlot,
|
|
73
75
|
titleSlot,
|
|
74
76
|
bodySlot,
|
|
75
77
|
buttonSlot,
|
|
76
78
|
style,
|
|
77
79
|
}: CtaCardProps) {
|
|
80
|
+
const { modes: globalModes } = useTokens()
|
|
81
|
+
const modes = { ...globalModes, ...propModes }
|
|
78
82
|
// --- Token Resolution ---
|
|
79
83
|
// Container
|
|
80
84
|
const backgroundColor = getVariableByName('ctaCard/background', modes) || '#0078ad';
|
|
@@ -132,37 +136,28 @@ function CtaCard({
|
|
|
132
136
|
fontWeight: '400', // Regular
|
|
133
137
|
};
|
|
134
138
|
|
|
135
|
-
|
|
136
|
-
// Helper to clone element with modes if no modes are already present on it (standard in this library)
|
|
137
|
-
const renderSlot = (slot: React.ReactNode) => {
|
|
138
|
-
if (React.isValidElement(slot)) {
|
|
139
|
-
return React.cloneElement(slot as React.ReactElement<any>, {
|
|
140
|
-
modes: { ...modes, ...(slot as any).props.modes },
|
|
141
|
-
});
|
|
142
|
-
}
|
|
143
|
-
return slot;
|
|
144
|
-
};
|
|
139
|
+
|
|
145
140
|
|
|
146
141
|
return (
|
|
147
142
|
<View style={[containerStyle, style]}>
|
|
148
143
|
<View style={contentWrapStyle}>
|
|
149
144
|
{/* Icon Slot */}
|
|
150
145
|
{iconSlot ? (
|
|
151
|
-
|
|
146
|
+
cloneChildrenWithModes(iconSlot, modes)
|
|
152
147
|
) : (
|
|
153
148
|
<IconCapsule iconName={iconName} modes={modes} />
|
|
154
149
|
)}
|
|
155
150
|
|
|
156
151
|
{/* Title Slot */}
|
|
157
152
|
{titleSlot ? (
|
|
158
|
-
|
|
153
|
+
cloneChildrenWithModes(titleSlot, modes)
|
|
159
154
|
) : (
|
|
160
155
|
<Text style={titleStyle}>{title}</Text>
|
|
161
156
|
)}
|
|
162
157
|
|
|
163
158
|
{/* Body Slot */}
|
|
164
159
|
{bodySlot ? (
|
|
165
|
-
|
|
160
|
+
cloneChildrenWithModes(bodySlot, modes)
|
|
166
161
|
) : (
|
|
167
162
|
<Text style={bodyStyle}>{body}</Text>
|
|
168
163
|
)}
|
|
@@ -170,11 +165,11 @@ function CtaCard({
|
|
|
170
165
|
|
|
171
166
|
{/* Button Slot - placed outside content wrap based on Figma structure (flex-col gap=16) */}
|
|
172
167
|
{buttonSlot ? (
|
|
173
|
-
|
|
168
|
+
cloneChildrenWithModes(buttonSlot, modes)
|
|
174
169
|
) : (
|
|
175
170
|
<Button
|
|
176
171
|
label={buttonLabel}
|
|
177
|
-
onPress={onPressButton}
|
|
172
|
+
onPress={onPressButton || (() => { })}
|
|
178
173
|
modes={modes}
|
|
179
174
|
/>
|
|
180
175
|
)}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Meta, Story, Canvas,
|
|
1
|
+
import { Meta, Story, Canvas, Controls } from '@storybook/blocks';
|
|
2
2
|
import * as DisclaimerStories from './Disclaimer.stories';
|
|
3
3
|
import Disclaimer from './Disclaimer';
|
|
4
4
|
import { AccessibilitySection, AnatomySection, UsageConstraintsSection } from '../docs/DocSections';
|
|
@@ -16,6 +16,10 @@ This component uses the following design token collections. Each collection supp
|
|
|
16
16
|
### Color Mode
|
|
17
17
|
- **Modes:** Light | Dark
|
|
18
18
|
- **Default:** Light
|
|
19
|
+
|
|
20
|
+
### Colors Router
|
|
21
|
+
- **Modes:** POC | Old
|
|
22
|
+
- **Default:** POC
|
|
19
23
|
## Usage
|
|
20
24
|
|
|
21
25
|
<Canvas>
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import React from 'react'
|
|
2
2
|
import { View, Text, type StyleProp, type ViewStyle, type TextStyle } from 'react-native'
|
|
3
3
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
4
|
+
import { useTokens } from '../../design-tokens/JFSThemeProvider'
|
|
4
5
|
|
|
5
6
|
type DisclaimerProps = {
|
|
6
7
|
disclaimer?: string;
|
|
@@ -34,13 +35,15 @@ type DisclaimerProps = {
|
|
|
34
35
|
*/
|
|
35
36
|
function Disclaimer({
|
|
36
37
|
disclaimer = 'All financial services are provided by Jio Payments Bank Pvt. Ltd.',
|
|
37
|
-
modes = {},
|
|
38
|
+
modes: propModes = {},
|
|
38
39
|
style,
|
|
39
40
|
textStyle,
|
|
40
41
|
accessibilityLabel,
|
|
41
42
|
accessibilityHint,
|
|
42
43
|
...rest
|
|
43
44
|
}: DisclaimerProps) {
|
|
45
|
+
const { modes: globalModes } = useTokens()
|
|
46
|
+
const modes = { ...globalModes, ...propModes }
|
|
44
47
|
// Resolve typography and color from Figma variables
|
|
45
48
|
const color = getVariableByName('disclaimer/color', modes) || '#24262b'
|
|
46
49
|
const fontSize =
|
|
@@ -77,14 +80,14 @@ function Disclaimer({
|
|
|
77
80
|
const defaultAccessibilityLabel = accessibilityLabel || disclaimer
|
|
78
81
|
|
|
79
82
|
return (
|
|
80
|
-
<View
|
|
83
|
+
<View
|
|
81
84
|
style={[containerStyle, style]}
|
|
82
85
|
accessibilityRole="text"
|
|
83
86
|
accessibilityLabel={defaultAccessibilityLabel}
|
|
84
87
|
accessibilityHint={accessibilityHint}
|
|
85
88
|
{...rest}
|
|
86
89
|
>
|
|
87
|
-
<Text
|
|
90
|
+
<Text
|
|
88
91
|
style={[baseTextStyle, textStyle]}
|
|
89
92
|
accessibilityElementsHidden={true}
|
|
90
93
|
importantForAccessibility="no"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Meta, Story, Canvas,
|
|
1
|
+
import { Meta, Story, Canvas, Controls } from '@storybook/blocks';
|
|
2
2
|
import * as DividerStories from './Divider.stories';
|
|
3
3
|
import Divider from './Divider';
|
|
4
4
|
|
|
@@ -19,6 +19,10 @@ This component uses the following design token collections. Each collection supp
|
|
|
19
19
|
### Color Mode
|
|
20
20
|
- **Modes:** Light | Dark
|
|
21
21
|
- **Default:** Light
|
|
22
|
+
|
|
23
|
+
### Colors Router
|
|
24
|
+
- **Modes:** POC | Old
|
|
25
|
+
- **Default:** POC
|
|
22
26
|
## Usage
|
|
23
27
|
|
|
24
28
|
### Horizontal Divider
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Meta, Story, Canvas,
|
|
1
|
+
import { Meta, Story, Canvas, Controls } from '@storybook/blocks';
|
|
2
2
|
import * as DrawerStories from './Drawer.stories';
|
|
3
3
|
import Drawer from './Drawer';
|
|
4
4
|
import { AccessibilitySection, AnatomySection, UsageConstraintsSection } from '../docs/DocSections';
|
|
@@ -13,9 +13,17 @@ Lightweight bottom drawer/sheet with a draggable handle.
|
|
|
13
13
|
|
|
14
14
|
This component uses the following design token collections. Each collection supports multiple modes that can be configured via the `modes` prop.
|
|
15
15
|
|
|
16
|
+
### Page type
|
|
17
|
+
- **Modes:** MainPage | SubPage
|
|
18
|
+
- **Default:** MainPage
|
|
19
|
+
|
|
16
20
|
### Color Mode
|
|
17
21
|
- **Modes:** Light | Dark
|
|
18
22
|
- **Default:** Light
|
|
23
|
+
|
|
24
|
+
### Colors Router
|
|
25
|
+
- **Modes:** POC | Old
|
|
26
|
+
- **Default:** POC
|
|
19
27
|
## Usage
|
|
20
28
|
|
|
21
29
|
<Canvas>
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { Meta, Story, Canvas, Controls } from '@storybook/blocks';
|
|
2
|
+
import * as EmptyStateStories from './EmptyState.stories';
|
|
3
|
+
import EmptyState from './EmptyState';
|
|
4
|
+
|
|
5
|
+
<Meta of={EmptyStateStories} />
|
|
6
|
+
|
|
7
|
+
# EmptyState
|
|
8
|
+
|
|
9
|
+
The `EmptyState` component is used to display messages when there is no content to show, typically with an icon, title, description, and an action button.
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
## Available Collections and Modes
|
|
13
|
+
|
|
14
|
+
This component uses the following design token collections. Each collection supports multiple modes that can be configured via the `modes` prop.
|
|
15
|
+
|
|
16
|
+
### Color Mode
|
|
17
|
+
- **Modes:** Light | Dark
|
|
18
|
+
- **Default:** Light
|
|
19
|
+
|
|
20
|
+
### Colors Router
|
|
21
|
+
- **Modes:** POC | Old
|
|
22
|
+
- **Default:** POC
|
|
23
|
+
## Usage
|
|
24
|
+
|
|
25
|
+
```tsx
|
|
26
|
+
import { EmptyState } from 'jfs-components';
|
|
27
|
+
|
|
28
|
+
<EmptyState
|
|
29
|
+
title="No payments to show"
|
|
30
|
+
description="Start by paying bills, recharge or your friends"
|
|
31
|
+
modes={{}}
|
|
32
|
+
/>
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Props
|
|
36
|
+
|
|
37
|
+
<Controls />
|
|
38
|
+
|
|
39
|
+
## Examples
|
|
40
|
+
|
|
41
|
+
### Default
|
|
42
|
+
|
|
43
|
+
<Canvas of={EmptyStateStories.Default} />
|
|
44
|
+
|
|
45
|
+
### Custom Text
|
|
46
|
+
|
|
47
|
+
<Canvas of={EmptyStateStories.WithCustomText} />
|
|
48
|
+
|
|
49
|
+
### Custom Slots
|
|
50
|
+
|
|
51
|
+
<Canvas of={EmptyStateStories.CustomSlots} />
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
## Design Tokens
|
|
55
|
+
|
|
56
|
+
This component uses the following design tokens, resolved through `getVariableByName`:
|
|
57
|
+
|
|
58
|
+
- **`emptyState/body/color`**
|
|
59
|
+
- **`emptyState/body/fontFamily`**
|
|
60
|
+
- **`emptyState/body/fontSize`**
|
|
61
|
+
- **`emptyState/body/fontWeight`**
|
|
62
|
+
- **`emptyState/body/lineHeight`**
|
|
63
|
+
- **`emptyState/content/gap`**
|
|
64
|
+
- **`emptyState/gap`**
|
|
65
|
+
- **`emptyState/padding`**
|
|
66
|
+
- **`emptyState/radius`**
|
|
67
|
+
- **`emptyState/title/color`**
|
|
68
|
+
- **`emptyState/title/fontFamily`**
|
|
69
|
+
- **`emptyState/title/fontSize`**
|
|
70
|
+
- **`emptyState/title/fontWeight`**
|
|
71
|
+
- **`emptyState/title/lineHeight`**
|
|
72
|
+
|
|
73
|
+
All tokens support mode-based theming through the `modes` prop.
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import React, { useMemo } from 'react'
|
|
2
|
+
import { View, Text, type StyleProp, type ViewStyle, type TextStyle } from 'react-native'
|
|
3
|
+
import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
4
|
+
import { useTokens } from '../../design-tokens/JFSThemeProvider'
|
|
5
|
+
import IconCapsule from '../IconCapsule/IconCapsule'
|
|
6
|
+
import Button from '../Button/Button'
|
|
7
|
+
|
|
8
|
+
export type EmptyStateProps = {
|
|
9
|
+
/**
|
|
10
|
+
* Title text for the empty state
|
|
11
|
+
* @default "No payments to show"
|
|
12
|
+
*/
|
|
13
|
+
title?: string;
|
|
14
|
+
/**
|
|
15
|
+
* Body description text
|
|
16
|
+
* @default "Start by paying bills, recharge or your friends"
|
|
17
|
+
*/
|
|
18
|
+
description?: string;
|
|
19
|
+
/**
|
|
20
|
+
* Custom slot for the icon area. Defaults to IconCapsule.
|
|
21
|
+
* If providing a custom component, ensure it accepts `modes` if needed.
|
|
22
|
+
*/
|
|
23
|
+
iconSlot?: React.ReactNode;
|
|
24
|
+
/**
|
|
25
|
+
* Custom slot for the button area. Defaults to "Button" component.
|
|
26
|
+
* If providing a custom component, ensure it accepts `modes` if needed.
|
|
27
|
+
*/
|
|
28
|
+
buttonSlot?: React.ReactNode;
|
|
29
|
+
/**
|
|
30
|
+
* Mode configuration for theming
|
|
31
|
+
*/
|
|
32
|
+
modes?: Record<string, any>;
|
|
33
|
+
style?: StyleProp<ViewStyle>;
|
|
34
|
+
testID?: string;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* EmptyState component that displays an icon, title, description and an action button.
|
|
39
|
+
*
|
|
40
|
+
* @component
|
|
41
|
+
*/
|
|
42
|
+
function EmptyState({
|
|
43
|
+
title = "No payments to show",
|
|
44
|
+
description = "Start by paying bills, recharge or your friends",
|
|
45
|
+
iconSlot,
|
|
46
|
+
buttonSlot,
|
|
47
|
+
modes: propModes = {},
|
|
48
|
+
style,
|
|
49
|
+
testID,
|
|
50
|
+
}: EmptyStateProps) {
|
|
51
|
+
const { modes: globalModes } = useTokens()
|
|
52
|
+
const modes = { ...globalModes, ...propModes }
|
|
53
|
+
|
|
54
|
+
// Container Tokens
|
|
55
|
+
const gap = getVariableByName('emptyState/gap', modes) || 24
|
|
56
|
+
const padding = getVariableByName('emptyState/padding', modes) || 4
|
|
57
|
+
const radius = getVariableByName('emptyState/radius', modes) || 16
|
|
58
|
+
|
|
59
|
+
// Content Wrap Tokens
|
|
60
|
+
const contentGap = getVariableByName('emptyState/content/gap', modes) || 16
|
|
61
|
+
|
|
62
|
+
// Title Tokens
|
|
63
|
+
const titleColor = getVariableByName('emptyState/title/color', modes) || '#0d0d0f'
|
|
64
|
+
const titleFontSize = getVariableByName('emptyState/title/fontSize', modes) || 16
|
|
65
|
+
const titleFontFamily = getVariableByName('emptyState/title/fontFamily', modes) || 'System'
|
|
66
|
+
const titleLineHeight = getVariableByName('emptyState/title/lineHeight', modes) || 18
|
|
67
|
+
const titleFontWeight = getVariableByName('emptyState/title/fontWeight', modes) || 700
|
|
68
|
+
|
|
69
|
+
// Body Tokens
|
|
70
|
+
const bodyColor = getVariableByName('emptyState/body/color', modes) || '#1a1c1f'
|
|
71
|
+
const bodyFontSize = getVariableByName('emptyState/body/fontSize', modes) || 12
|
|
72
|
+
const bodyFontFamily = getVariableByName('emptyState/body/fontFamily', modes) || 'System'
|
|
73
|
+
const bodyLineHeight = getVariableByName('emptyState/body/lineHeight', modes) || 16
|
|
74
|
+
const bodyFontWeight = getVariableByName('emptyState/body/fontWeight', modes) || 400
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
const containerStyle: ViewStyle = {
|
|
78
|
+
flexDirection: 'column',
|
|
79
|
+
alignItems: 'center',
|
|
80
|
+
justifyContent: 'center',
|
|
81
|
+
gap: gap,
|
|
82
|
+
padding: padding,
|
|
83
|
+
borderRadius: radius,
|
|
84
|
+
// Width is set in Figma as fixed 236, but typical practice is to let it be flexible or controlled by parent
|
|
85
|
+
// However, for strict adherence to "Maximize existing component usage" and specific styles, we can leave width
|
|
86
|
+
// to parent or default to auto.
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
const contentWrapStyle: ViewStyle = {
|
|
90
|
+
flexDirection: 'column',
|
|
91
|
+
alignItems: 'center',
|
|
92
|
+
gap: contentGap,
|
|
93
|
+
width: '100%',
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
const titleStyle: TextStyle = {
|
|
97
|
+
color: titleColor,
|
|
98
|
+
fontSize: titleFontSize,
|
|
99
|
+
fontFamily: titleFontFamily,
|
|
100
|
+
lineHeight: titleLineHeight,
|
|
101
|
+
fontWeight: String(titleFontWeight) as TextStyle['fontWeight'],
|
|
102
|
+
textAlign: 'center',
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
const bodyStyle: TextStyle = {
|
|
106
|
+
color: bodyColor,
|
|
107
|
+
fontSize: bodyFontSize,
|
|
108
|
+
fontFamily: bodyFontFamily,
|
|
109
|
+
lineHeight: bodyLineHeight,
|
|
110
|
+
fontWeight: String(bodyFontWeight) as TextStyle['fontWeight'],
|
|
111
|
+
textAlign: 'center',
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
const defaultIconSlot = useMemo(() => (
|
|
115
|
+
<IconCapsule modes={modes} />
|
|
116
|
+
), [modes])
|
|
117
|
+
|
|
118
|
+
// Checking if iconSlot is passed; if not use default.
|
|
119
|
+
// If it is passed, we assume the user handles everything or we inject props if it's a valid element?
|
|
120
|
+
// User instructions say: "whenever there is a slot, that's should be implemented as real react slot... manual passing down modes"
|
|
121
|
+
// So we just render what is passed, but for defaults we pass modes.
|
|
122
|
+
// Ideally, if iconSlot is a function we could pass modes, but ReactNode is static.
|
|
123
|
+
// The instruction "make sure modes are always passed to all slot children" implies we might need to cloneElement if possible,
|
|
124
|
+
// AND/OR user needs to pass it manually in usage.
|
|
125
|
+
// But for the DEFAULT slots we render, we definitely pass modes.
|
|
126
|
+
|
|
127
|
+
const iconContent = iconSlot || defaultIconSlot
|
|
128
|
+
|
|
129
|
+
const defaultButtonSlot = useMemo(() => (
|
|
130
|
+
<Button label="Button" modes={modes} />
|
|
131
|
+
), [modes])
|
|
132
|
+
|
|
133
|
+
const buttonContent = buttonSlot || defaultButtonSlot
|
|
134
|
+
|
|
135
|
+
return (
|
|
136
|
+
<View style={[containerStyle, style]} testID={testID}>
|
|
137
|
+
<View style={contentWrapStyle}>
|
|
138
|
+
{/* Icon Slot */}
|
|
139
|
+
{iconContent}
|
|
140
|
+
|
|
141
|
+
{/* Texts */}
|
|
142
|
+
<View style={{ alignItems: 'center', gap: 0 }}>
|
|
143
|
+
{/* Note: Figma auto-layout shows gap undefined for the texts parent wrapper if it existed,
|
|
144
|
+
but looking at structure:
|
|
145
|
+
Empty state (gap 24) -> Content wrap (gap 16) -> Icon Capsule, Texts
|
|
146
|
+
Wait, the Figma structure from context:
|
|
147
|
+
Empty state (gap 24)
|
|
148
|
+
-> Content wrap (gap 16)
|
|
149
|
+
-> Icon Capsule
|
|
150
|
+
-> (Implicit Text grouping? Or direct text nodes?)
|
|
151
|
+
Looking at context:
|
|
152
|
+
Empty state (Gap 24)
|
|
153
|
+
Content wrap (Gap 16)
|
|
154
|
+
Icon Capsule
|
|
155
|
+
p (Title)
|
|
156
|
+
p (Body)
|
|
157
|
+
Button
|
|
158
|
+
Wait, looking closer at provided context from Step 6:
|
|
159
|
+
Root (Empty state) -> gap 24
|
|
160
|
+
- Content wrap -> gap 16
|
|
161
|
+
- Icon Capsule
|
|
162
|
+
- Title text
|
|
163
|
+
- Body text
|
|
164
|
+
- Button
|
|
165
|
+
|
|
166
|
+
So Title and Body are inside Content wrap.
|
|
167
|
+
*/}
|
|
168
|
+
<View style={{ alignItems: 'center' }}>
|
|
169
|
+
<Text style={titleStyle}>{title}</Text>
|
|
170
|
+
{description ? <Text style={bodyStyle}>{description}</Text> : null}
|
|
171
|
+
</View>
|
|
172
|
+
</View>
|
|
173
|
+
</View>
|
|
174
|
+
|
|
175
|
+
{/* Button Slot */}
|
|
176
|
+
{buttonContent}
|
|
177
|
+
</View>
|
|
178
|
+
)
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
export default EmptyState
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Meta, Story, Canvas,
|
|
1
|
+
import { Meta, Story, Canvas, Controls } from '@storybook/blocks';
|
|
2
2
|
import * as FilterBarStories from './FilterBar.stories';
|
|
3
3
|
import FilterBar from './FilterBar';
|
|
4
4
|
import { AccessibilitySection, AnatomySection, UsageConstraintsSection } from '../docs/DocSections';
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { Meta, Story, Canvas, Controls } from '@storybook/blocks';
|
|
2
|
+
import * as HStackStories from './HStack.stories';
|
|
3
|
+
import HStack from './HStack';
|
|
4
|
+
|
|
5
|
+
<Meta of={HStackStories} />
|
|
6
|
+
|
|
7
|
+
# HStack
|
|
8
|
+
|
|
9
|
+
`HStack` arranges its children in a horizontal line. It uses design tokens for spacing and gap.
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
## Available Collections and Modes
|
|
13
|
+
|
|
14
|
+
This component does not use any design token collections with multiple modes.
|
|
15
|
+
## Usage
|
|
16
|
+
|
|
17
|
+
```tsx
|
|
18
|
+
import { HStack } from 'jfs-components';
|
|
19
|
+
|
|
20
|
+
<HStack justifyHorizontal="space-between" modes={{ 'hstack/gap': 16 }}>
|
|
21
|
+
<View>Left</View>
|
|
22
|
+
<View>Right</View>
|
|
23
|
+
</HStack>
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
<Canvas>
|
|
27
|
+
<Story of={HStackStories.Default} />
|
|
28
|
+
</Canvas>
|
|
29
|
+
|
|
30
|
+
## Props
|
|
31
|
+
|
|
32
|
+
<Controls of={HStackStories.Default} />
|
|
33
|
+
|
|
34
|
+
## Design Tokens
|
|
35
|
+
|
|
36
|
+
This component uses the following design tokens, resolved through `getVariableByName`:
|
|
37
|
+
|
|
38
|
+
- **`hstack/gap`**
|
|
39
|
+
- **`hstack/padding/bottom`**
|
|
40
|
+
- **`hstack/padding/left`**
|
|
41
|
+
- **`hstack/padding/right`**
|
|
42
|
+
- **`hstack/padding/top`**
|
|
43
|
+
|
|
44
|
+
All tokens support mode-based theming through the `modes` prop.
|