From 6ff107dce3283eebcbc4eee915cfb2129f0dba32 Mon Sep 17 00:00:00 2001 From: saurabhdaware Date: Fri, 25 Oct 2024 11:09:50 +0530 Subject: [PATCH 01/21] docs(BottomNav): add BottomNav API --- .../BottomNav/_decisions/bottomnav-title.png | Bin 0 -> 79029 bytes .../BottomNav/_decisions/decisions.md | 83 ++++++++++++++++++ 2 files changed, 83 insertions(+) create mode 100644 packages/blade/src/components/BottomNav/_decisions/bottomnav-title.png create mode 100644 packages/blade/src/components/BottomNav/_decisions/decisions.md diff --git a/packages/blade/src/components/BottomNav/_decisions/bottomnav-title.png b/packages/blade/src/components/BottomNav/_decisions/bottomnav-title.png new file mode 100644 index 0000000000000000000000000000000000000000..fa949746f8515ff2d6718a3d6ac956453014214b GIT binary patch literal 79029 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

Z$7KGRuv`2hI82`?iM3 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 + +## Links + +- [Figma - Bottom Navigation](https://www.figma.com/design/jubmQL9Z8V7881ayUD95ps/Blade-DSL?node-id=96521-157514&node-type=instance&m=dev) + +## API + + +```jsx +import { NavLink } from 'react-router-dom'; + + + + + + { + // This can be used to open SideNav drawer + setIsSideNavOpen(true) + }} + /> + +``` + +## Alternate APIs + +- No alternate APIs were considered since this BottomNav API is consistent with our SideNav and TopNav API + +## Props + +### BottomNav + +| **Props** | **Description** | **Type** | **Default Value** | +| --------- | ------------------------------------------------- | -------- | ----------------- | +| children | children slot of BottomNav, accepts BottomNavItem | JSX | | + +```jsx +{/* children */} +``` + +### BottomNavItem + +| **Props** | **Description** | **Type** | **Default Value** | +| --------- | ---------------------------------------------------------------------------------------------------------------------------- | ----------------------------- | ------------------------------------------------------------ | +| title | title of BottomNavItem | string | | +| as | as prop for passing React Router's NavLink | NavLinkComponentType | | +| href | URL to navigate to. Internally links to `to` attribute of router (Also turns item into anchor tag when passed) | string | | +| isActive | Sets the link as selected / active | boolean | undefined | +| target | anchor tag target attribute [target - MDN Documentation](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a#target) | AnchorTargetType | \_self | +| rel | anchor tag rel attribute [rel - MDN Documentation](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a#rel) | AnchorRelType | target === ' \_blank ' ? ' noreferrer noopener ' : undefined | +| onClick | Click handler on item | (e: React.MouseEvent) => void | | +| icon | Blade's Icon Component | IconComponent | | + +## Accessibility + +1. All items should be accessible by `TAB` +2. It should have role navigation +3. Should have `aria-current="page"` on active item + +## References + +- [BottomNavigation - Base Web](https://baseweb.design/components/bottom-navigation/) From a54f339fca9da58e609e5dece3f9ca72bc1dde03 Mon Sep 17 00:00:00 2001 From: saurabhdaware Date: Fri, 25 Oct 2024 11:12:59 +0530 Subject: [PATCH 02/21] feat: update title image --- .../BottomNav/_decisions/bottomnav-title.png | Bin 79029 -> 39308 bytes .../BottomNav/_decisions/decisions.md | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/blade/src/components/BottomNav/_decisions/bottomnav-title.png b/packages/blade/src/components/BottomNav/_decisions/bottomnav-title.png index fa949746f8515ff2d6718a3d6ac956453014214b..a9445f86066abe99023360cf8d0854c9eb6dccff 100644 GIT binary patch literal 39308 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 literal 79029 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

Z$7KGRuv`2hI82`?iM3 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 + ## Links From e07d62de08d129a13f427377122e744d4f4d7b65 Mon Sep 17 00:00:00 2001 From: saurabhdaware Date: Fri, 25 Oct 2024 11:19:11 +0530 Subject: [PATCH 03/21] feat: add examples of navitem --- .../BottomNav/_decisions/decisions.md | 47 ++++++++++++++++++ .../BottomNav/_decisions/navitem-selected.png | Bin 0 -> 5806 bytes .../BottomNav/_decisions/navitem.png | Bin 0 -> 6075 bytes 3 files changed, 47 insertions(+) create mode 100644 packages/blade/src/components/BottomNav/_decisions/navitem-selected.png create mode 100644 packages/blade/src/components/BottomNav/_decisions/navitem.png diff --git a/packages/blade/src/components/BottomNav/_decisions/decisions.md b/packages/blade/src/components/BottomNav/_decisions/decisions.md index a996a4efc0a..b40137dec16 100644 --- a/packages/blade/src/components/BottomNav/_decisions/decisions.md +++ b/packages/blade/src/components/BottomNav/_decisions/decisions.md @@ -72,6 +72,53 @@ import { NavLink } from 'react-router-dom'; | onClick | Click handler on item | (e: React.MouseEvent) => void | | | icon | Blade's Icon Component | IconComponent | | +#### Examples + + + + + + + + + + + + + + + +
+ + +```jsx + +``` + + + +
+ +```jsx + +``` + + + +
+ ## Accessibility 1. All items should be accessible by `TAB` diff --git a/packages/blade/src/components/BottomNav/_decisions/navitem-selected.png b/packages/blade/src/components/BottomNav/_decisions/navitem-selected.png new file mode 100644 index 0000000000000000000000000000000000000000..6ffce5c176c1db3ccfbf18ca8d9717d0162c7593 GIT binary patch literal 5806 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 XHa~f;mc{S?(17wo4a8?TbN~MW!$@?q literal 0 HcmV?d00001 diff --git a/packages/blade/src/components/BottomNav/_decisions/navitem.png b/packages/blade/src/components/BottomNav/_decisions/navitem.png new file mode 100644 index 0000000000000000000000000000000000000000..4b2a055ee8ac5c65c8bcf2d8c9f8496fbadf4f58 GIT binary patch literal 6075 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 Date: Fri, 25 Oct 2024 11:20:48 +0530 Subject: [PATCH 04/21] fix: adjust image width --- .../blade/src/components/BottomNav/_decisions/decisions.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/blade/src/components/BottomNav/_decisions/decisions.md b/packages/blade/src/components/BottomNav/_decisions/decisions.md index b40137dec16..6861e45307d 100644 --- a/packages/blade/src/components/BottomNav/_decisions/decisions.md +++ b/packages/blade/src/components/BottomNav/_decisions/decisions.md @@ -92,7 +92,7 @@ import { NavLink } from 'react-router-dom'; - + @@ -113,7 +113,7 @@ import { NavLink } from 'react-router-dom'; - + From 3541d232f5f50294c69b78ac6961416b8a76b2dc Mon Sep 17 00:00:00 2001 From: saurabhdaware Date: Fri, 25 Oct 2024 11:21:34 +0530 Subject: [PATCH 05/21] feat: remove rel and target prop --- .../BottomNav/_decisions/decisions.md | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/packages/blade/src/components/BottomNav/_decisions/decisions.md b/packages/blade/src/components/BottomNav/_decisions/decisions.md index 6861e45307d..853415b551e 100644 --- a/packages/blade/src/components/BottomNav/_decisions/decisions.md +++ b/packages/blade/src/components/BottomNav/_decisions/decisions.md @@ -61,16 +61,14 @@ import { NavLink } from 'react-router-dom'; ### BottomNavItem -| **Props** | **Description** | **Type** | **Default Value** | -| --------- | ---------------------------------------------------------------------------------------------------------------------------- | ----------------------------- | ------------------------------------------------------------ | -| title | title of BottomNavItem | string | | -| as | as prop for passing React Router's NavLink | NavLinkComponentType | | -| href | URL to navigate to. Internally links to `to` attribute of router (Also turns item into anchor tag when passed) | string | | -| isActive | Sets the link as selected / active | boolean | undefined | -| target | anchor tag target attribute [target - MDN Documentation](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a#target) | AnchorTargetType | \_self | -| rel | anchor tag rel attribute [rel - MDN Documentation](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a#rel) | AnchorRelType | target === ' \_blank ' ? ' noreferrer noopener ' : undefined | -| onClick | Click handler on item | (e: React.MouseEvent) => void | | -| icon | Blade's Icon Component | IconComponent | | +| **Props** | **Description** | **Type** | **Default Value** | +| --------- | -------------------------------------------------------------------------------------------------------------- | ----------------------------- | ----------------- | +| title | Title of BottomNavItem | string | | +| as | as prop for passing React Router's NavLink | NavLinkComponentType | | +| href | URL to navigate to. Internally links to `to` attribute of router (Also turns item into anchor tag when passed) | string | | +| isActive | Sets the link as selected / active | boolean | undefined | +| onClick | Click handler on item | (e: React.MouseEvent) => void | | +| icon | Blade's Icon Component | IconComponent | | #### Examples From bd642dbcdb6880297f968d8e2235cca448926423 Mon Sep 17 00:00:00 2001 From: saurabhdaware Date: Fri, 25 Oct 2024 11:22:11 +0530 Subject: [PATCH 06/21] feat: add description --- packages/blade/src/components/BottomNav/_decisions/decisions.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/blade/src/components/BottomNav/_decisions/decisions.md b/packages/blade/src/components/BottomNav/_decisions/decisions.md index 853415b551e..c406d3f3c81 100644 --- a/packages/blade/src/components/BottomNav/_decisions/decisions.md +++ b/packages/blade/src/components/BottomNav/_decisions/decisions.md @@ -1,5 +1,7 @@ # BottomNav +Bottom navigation component is a persistent user interface element at the bottom of a mobile app screen, providing quick access to core functionalities through icons and labels. + ## Links From 8de9cdd851ae29bad53d1916b96a214f754bcd6e Mon Sep 17 00:00:00 2001 From: saurabhdaware Date: Mon, 28 Oct 2024 10:38:08 +0530 Subject: [PATCH 07/21] feat(BottomNav): add bottomnav implementation --- .../BottomNav/BottomNav.stories.tsx | 80 ++++++++++++ .../components/BottomNav/BottomNav.web.tsx | 120 ++++++++++++++++++ .../blade/src/components/BottomNav/index.ts | 2 + .../blade/src/components/BottomNav/types.ts | 58 +++++++++ 4 files changed, 260 insertions(+) create mode 100644 packages/blade/src/components/BottomNav/BottomNav.stories.tsx create mode 100644 packages/blade/src/components/BottomNav/BottomNav.web.tsx create mode 100644 packages/blade/src/components/BottomNav/index.ts create mode 100644 packages/blade/src/components/BottomNav/types.ts diff --git a/packages/blade/src/components/BottomNav/BottomNav.stories.tsx b/packages/blade/src/components/BottomNav/BottomNav.stories.tsx new file mode 100644 index 00000000000..4fd6a74cb7f --- /dev/null +++ b/packages/blade/src/components/BottomNav/BottomNav.stories.tsx @@ -0,0 +1,80 @@ +import type { StoryFn, Meta } from '@storybook/react'; +// import { Title } from '@storybook/addon-docs'; +// import type { BadgeProps } from './Badge'; +// import { Badge as BadgeComponent } from './Badge'; +// import { InfoIcon } from '~components/Icons'; +import iconMap from '~components/Icons/iconMap'; +// import BaseBox from '~components/Box/BaseBox'; +// import { Text as BladeText } from '~components/Typography'; +// import { Sandbox } from '~utils/storybook/Sandbox'; +// import StoryPageWrapper from '~utils/storybook/StoryPageWrapper'; +import { getStyledPropsArgTypes } from '~components/Box/BaseBox/storybookArgTypes'; +import { BottomNav, BottomNavItem } from '.'; +import { PaymentGatewayIcon } from '~components/Icons'; + +// const Page = (): React.ReactElement => { +// return ( +// +// Usage +// +// {` +// import { Badge, InfoIcon } from '@razorpay/blade/components'; + +// function App(): React.ReactElement { +// return ( +// +// Boop +// +// ) +// } + +// export default App; +// `} +// +// +// ); +// }; + +export default { + title: 'Components/BottomNav', + component: BottomNav, + tags: ['autodocs'], + argTypes: { + ...getStyledPropsArgTypes(), + icon: { + name: 'icon', + // weird TS error + type: 'select' as 'string', + options: Object.keys(iconMap), + mapping: iconMap, + }, + }, + + parameters: { + viewport: { + defaultViewport: 'iPhone6', + }, + // docs: { + // page: Page, + // }, + }, +} as Meta; + +const BottomNavTemplate: StoryFn = ({ children, ...args }) => { + return ( + + + + + + + + ); +}; + +export const Default = BottomNavTemplate.bind({}); +Default.args = {}; diff --git a/packages/blade/src/components/BottomNav/BottomNav.web.tsx b/packages/blade/src/components/BottomNav/BottomNav.web.tsx new file mode 100644 index 00000000000..8d8cf4aa328 --- /dev/null +++ b/packages/blade/src/components/BottomNav/BottomNav.web.tsx @@ -0,0 +1,120 @@ +import React from 'react'; +import styled from 'styled-components'; +import BaseBox from '~components/Box/BaseBox'; +import { getStyledProps } from '~components/Box/styledProps'; +import { Text } from '~components/Typography'; +import { getFocusRingStyles } from '~utils/getFocusRingStyles'; +import { throwBladeError } from '~utils/logger'; +import { makeAccessible } from '~utils/makeAccessible'; +import type { BottomNavItemProps, BottomNavProps } from './types'; + +/** + * ### BottomNav component + * + * Bottom navigation component is a persistent user interface element at the bottom of a mobile app screen, providing quick access to core functionalities through icons and labels. + * + * --- + * + * #### Usage + * + * ```jsx + * import { NavLink } from 'react-router-dom'; + * + * + * + * + * { + * // This can be used to open SideNav drawer + * setIsSideNavOpen(true) + * }} + * /> + * + * ``` + * + * Checkout {@link https://blade.razorpay.com/??path=/docs/components-bottomnav--doc BottomNav Documentation} + + */ +const BottomNav = ({ children, ...styledProps }: BottomNavProps) => { + if (__DEV__) { + const childrenCount = React.Children.count(children); + if (childrenCount > 5 && childrenCount < 2) { + throwBladeError({ + moduleName: 'BottomNav', + message: 'children cannot be less than 2 and more than 5', + }); + } + } + + return ( + + {children} + + ); +}; + +const StyledBottomNavItem = styled(BaseBox)<{ to?: string }>((props) => { + return { + color: props.theme.colors.interactive.text.gray.subtle, + '&[aria-current="page"]': { + color: props.theme.colors.interactive.text.primary.subtle, + }, + '&:focus-visible': { + ...getFocusRingStyles({ theme: props.theme }), + }, + }; +}); + +const BottomNavItem = ({ title, href, as, isActive, onClick, icon: Icon }: BottomNavItemProps) => { + return ( + + + + {title} + + + ); +}; + +export { BottomNav, BottomNavItem }; diff --git a/packages/blade/src/components/BottomNav/index.ts b/packages/blade/src/components/BottomNav/index.ts new file mode 100644 index 00000000000..2d607b60f6d --- /dev/null +++ b/packages/blade/src/components/BottomNav/index.ts @@ -0,0 +1,2 @@ +export { BottomNav, BottomNavItem } from './BottomNav'; +export type { BottomNavItemProps, BottomNavProps } from './types'; diff --git a/packages/blade/src/components/BottomNav/types.ts b/packages/blade/src/components/BottomNav/types.ts new file mode 100644 index 00000000000..18431fc5c69 --- /dev/null +++ b/packages/blade/src/components/BottomNav/types.ts @@ -0,0 +1,58 @@ +import type { StyledPropsBlade } from '~components/Box/styledProps'; +import type { IconComponent } from '~components/Icons'; +import type { TestID } from '~utils/types'; + +type BottomNavProps = { + /** + * children slot of BottomNav, accepts BottomNavItem + */ + children: React.ReactElement[]; +} & StyledPropsBlade & + TestID; + +type BottomNavItemProps = { + /** + * Title text of the BottomNavItem + */ + title: string; + + /** + * Icon rendered above the title. + * + * Accepts icon component from blade + */ + icon: IconComponent; + + /** + * href property of link + * + * maps to `to` property when react router is being used + */ + href?: string; + + /** + * as prop to pass ReactRouter's Link component. + * + * ```jsx + * import { NavLink } from 'react-router-dom'; + * + * + * ``` + */ + // eslint-disable-next-line @typescript-eslint/no-explicit-any + as?: React.ComponentType; + + /** + * Active state of the BottomNavItem. + * + * Use this to set the current page's active state using react router + */ + isActive?: boolean; + + /** + * onClick handler of BottomNavItem + */ + onClick?: () => void; +}; + +export type { BottomNavItemProps, BottomNavProps }; From 3024b6a91ff97d3b818bf0d893efbd212637ea6b Mon Sep 17 00:00:00 2001 From: saurabhdaware Date: Mon, 28 Oct 2024 10:39:40 +0530 Subject: [PATCH 08/21] feat: add native exports --- .../components/BottomNav/BottomNav.native.tsx | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 packages/blade/src/components/BottomNav/BottomNav.native.tsx diff --git a/packages/blade/src/components/BottomNav/BottomNav.native.tsx b/packages/blade/src/components/BottomNav/BottomNav.native.tsx new file mode 100644 index 00000000000..57c2f06bbc2 --- /dev/null +++ b/packages/blade/src/components/BottomNav/BottomNav.native.tsx @@ -0,0 +1,23 @@ +import type { BottomNavProps, BottomNavItemProps } from './types'; +import { Text } from '~components/Typography'; +import { throwBladeError } from '~utils/logger'; + +const BottomNav = (_props: BottomNavProps): React.ReactElement => { + throwBladeError({ + message: 'BottomNav is not yet implemented for native', + moduleName: 'BottomNav', + }); + + return BottomNav Component is not available for Native mobile apps.; +}; + +const BottomNavItem = (_props: BottomNavItemProps): React.ReactElement => { + throwBladeError({ + message: 'BottomNavItem is not yet implemented for native', + moduleName: 'BottomNavItem', + }); + + return BottomNav Component is not available for Native mobile apps.; +}; + +export { BottomNav, BottomNavItem }; From 139e44c2ff4a1ffb9f1c72e95c034a57b4332496 Mon Sep 17 00:00:00 2001 From: saurabhdaware Date: Mon, 28 Oct 2024 11:14:38 +0530 Subject: [PATCH 09/21] docs: add bottomnavitem documentation --- .../BottomNav/BottomNav.stories.tsx | 88 ++++++++----------- .../components/BottomNav/BottomNav.web.tsx | 41 ++++++++- .../BottomNav/BottomNavItem.stories.tsx | 55 ++++++++++++ .../blade/src/components/BottomNav/types.ts | 9 +- packages/blade/src/utils/componentZIndices.ts | 1 + .../src/utils/metaAttribute/metaConstants.ts | 2 + 6 files changed, 142 insertions(+), 54 deletions(-) create mode 100644 packages/blade/src/components/BottomNav/BottomNavItem.stories.tsx diff --git a/packages/blade/src/components/BottomNav/BottomNav.stories.tsx b/packages/blade/src/components/BottomNav/BottomNav.stories.tsx index 4fd6a74cb7f..df78867cc73 100644 --- a/packages/blade/src/components/BottomNav/BottomNav.stories.tsx +++ b/packages/blade/src/components/BottomNav/BottomNav.stories.tsx @@ -1,66 +1,50 @@ import type { StoryFn, Meta } from '@storybook/react'; -// import { Title } from '@storybook/addon-docs'; -// import type { BadgeProps } from './Badge'; -// import { Badge as BadgeComponent } from './Badge'; -// import { InfoIcon } from '~components/Icons'; -import iconMap from '~components/Icons/iconMap'; -// import BaseBox from '~components/Box/BaseBox'; -// import { Text as BladeText } from '~components/Typography'; -// import { Sandbox } from '~utils/storybook/Sandbox'; -// import StoryPageWrapper from '~utils/storybook/StoryPageWrapper'; +import { Title } from '@storybook/addon-docs'; +import { Sandbox } from '~utils/storybook/Sandbox'; +import StoryPageWrapper from '~utils/storybook/StoryPageWrapper'; import { getStyledPropsArgTypes } from '~components/Box/BaseBox/storybookArgTypes'; import { BottomNav, BottomNavItem } from '.'; -import { PaymentGatewayIcon } from '~components/Icons'; +import { MenuDotsIcon, PaymentGatewayIcon } from '~components/Icons'; -// const Page = (): React.ReactElement => { -// return ( -// -// Usage -// -// {` -// import { Badge, InfoIcon } from '@razorpay/blade/components'; +const Page = (): React.ReactElement => { + return ( + + Usage + + {` + import { Badge, InfoIcon } from '@razorpay/blade/components'; -// function App(): React.ReactElement { -// return ( -// -// Boop -// -// ) -// } + function App(): React.ReactElement { + return ( + + Boop + + ) + } -// export default App; -// `} -// -// -// ); -// }; + export default App; + `} + + + ); +}; export default { title: 'Components/BottomNav', component: BottomNav, tags: ['autodocs'], - argTypes: { - ...getStyledPropsArgTypes(), - icon: { - name: 'icon', - // weird TS error - type: 'select' as 'string', - options: Object.keys(iconMap), - mapping: iconMap, - }, - }, - + argTypes: getStyledPropsArgTypes(), parameters: { viewport: { defaultViewport: 'iPhone6', }, - // docs: { - // page: Page, - // }, + docs: { + page: Page, + }, }, } as Meta; @@ -71,7 +55,13 @@ const BottomNavTemplate: StoryFn = ({ children, ...args }) => - + { + console.log('More Clicked'); + }} + icon={MenuDotsIcon} + /> ); }; diff --git a/packages/blade/src/components/BottomNav/BottomNav.web.tsx b/packages/blade/src/components/BottomNav/BottomNav.web.tsx index 8d8cf4aa328..549c1a11a3c 100644 --- a/packages/blade/src/components/BottomNav/BottomNav.web.tsx +++ b/packages/blade/src/components/BottomNav/BottomNav.web.tsx @@ -3,9 +3,12 @@ import styled from 'styled-components'; import BaseBox from '~components/Box/BaseBox'; import { getStyledProps } from '~components/Box/styledProps'; import { Text } from '~components/Typography'; +import { makeSpace } from '~utils'; +import { componentZIndices } from '~utils/componentZIndices'; import { getFocusRingStyles } from '~utils/getFocusRingStyles'; import { throwBladeError } from '~utils/logger'; import { makeAccessible } from '~utils/makeAccessible'; +import { metaAttribute, MetaConstants } from '~utils/metaAttribute'; import type { BottomNavItemProps, BottomNavProps } from './types'; /** @@ -48,7 +51,12 @@ import type { BottomNavItemProps, BottomNavProps } from './types'; * Checkout {@link https://blade.razorpay.com/??path=/docs/components-bottomnav--doc BottomNav Documentation} */ -const BottomNav = ({ children, ...styledProps }: BottomNavProps) => { +const BottomNav = ({ + children, + zIndex = componentZIndices.bottomNav, + testID, + ...styledProps +}: BottomNavProps) => { if (__DEV__) { const childrenCount = React.Children.count(children); if (childrenCount > 5 && childrenCount < 2) { @@ -68,10 +76,17 @@ const BottomNav = ({ children, ...styledProps }: BottomNavProps) => { elevation="midRaised" width="100%" backgroundColor="surface.background.gray.intense" + borderTopWidth="thin" + borderTopColor="surface.border.gray.muted" paddingX="spacing.2" display="flex" flexDirection="row" {...getStyledProps(styledProps)} + zIndex={zIndex} + {...metaAttribute({ + testID, + name: MetaConstants.BottomNav, + })} > {children} @@ -80,7 +95,12 @@ const BottomNav = ({ children, ...styledProps }: BottomNavProps) => { const StyledBottomNavItem = styled(BaseBox)<{ to?: string }>((props) => { return { + textDecoration: 'none', color: props.theme.colors.interactive.text.gray.subtle, + backgroundColor: 'transparent', + border: 'none', + paddingLeft: makeSpace(props.theme.spacing[0]), + paddingRight: makeSpace(props.theme.spacing[0]), '&[aria-current="page"]': { color: props.theme.colors.interactive.text.primary.subtle, }, @@ -90,7 +110,15 @@ const StyledBottomNavItem = styled(BaseBox)<{ to?: string }>((props) => { }; }); -const BottomNavItem = ({ title, href, as, isActive, onClick, icon: Icon }: BottomNavItemProps) => { +const BottomNavItem = ({ + title, + href, + as, + isActive, + onClick, + icon: Icon, + testID, +}: BottomNavItemProps) => { return ( - + {title} diff --git a/packages/blade/src/components/BottomNav/BottomNavItem.stories.tsx b/packages/blade/src/components/BottomNav/BottomNavItem.stories.tsx new file mode 100644 index 00000000000..6a3d6287738 --- /dev/null +++ b/packages/blade/src/components/BottomNav/BottomNavItem.stories.tsx @@ -0,0 +1,55 @@ +import type { StoryFn, Meta } from '@storybook/react'; +import iconMap from '~components/Icons/iconMap'; +import { BottomNav, BottomNavItem } from '.'; +import { BusinessBankingIcon, MenuDotsIcon, PaymentGatewayIcon } from '~components/Icons'; + +export default { + title: 'Components/BottomNav/BottomNavItem Playground', + component: BottomNavItem, + argTypes: { + icon: { + name: 'icon', + // weird TS error + type: 'select' as 'string', + options: Object.keys(iconMap), + mapping: iconMap, + }, + }, + parameters: { + viewport: { + defaultViewport: 'iPhone6', + }, + previewTabs: { + 'storybook/docs/panel': { + hidden: true, + }, + }, + }, +} as Meta; + +const BottomNavItemTemplate: StoryFn = (args) => { + return ( + + + + + + { + console.log('More Clicked'); + }} + icon={MenuDotsIcon} + /> + + ); +}; + +export const BottomNavItemPlayground = BottomNavItemTemplate.bind({}); +BottomNavItemPlayground.args = { + title: 'Banking', + href: '/banking', + icon: BusinessBankingIcon, + isActive: true, +}; +BottomNavItemPlayground.storyName = 'BottomNavItem Playground'; diff --git a/packages/blade/src/components/BottomNav/types.ts b/packages/blade/src/components/BottomNav/types.ts index 18431fc5c69..f87f8fe55f2 100644 --- a/packages/blade/src/components/BottomNav/types.ts +++ b/packages/blade/src/components/BottomNav/types.ts @@ -7,6 +7,13 @@ type BottomNavProps = { * children slot of BottomNav, accepts BottomNavItem */ children: React.ReactElement[]; + + /** + * zIndex of BottomNav + * + * @default 100 + */ + zIndex?: number; } & StyledPropsBlade & TestID; @@ -53,6 +60,6 @@ type BottomNavItemProps = { * onClick handler of BottomNavItem */ onClick?: () => void; -}; +} & TestID; export type { BottomNavItemProps, BottomNavProps }; diff --git a/packages/blade/src/utils/componentZIndices.ts b/packages/blade/src/utils/componentZIndices.ts index 6afeb89cf8a..59c0ae96a1f 100644 --- a/packages/blade/src/utils/componentZIndices.ts +++ b/packages/blade/src/utils/componentZIndices.ts @@ -1,6 +1,7 @@ // TODO: Move these properly to tokens at some point export const componentZIndices = { bottomSheet: 100, + bottomNav: 100, // should be behind drawer since sidenav opens in drawer in mobile modal: 1000, drawer: 1001, dropdownOverlay: 1002, diff --git a/packages/blade/src/utils/metaAttribute/metaConstants.ts b/packages/blade/src/utils/metaAttribute/metaConstants.ts index 84f79f8846e..f2e0f4c27c3 100644 --- a/packages/blade/src/utils/metaAttribute/metaConstants.ts +++ b/packages/blade/src/utils/metaAttribute/metaConstants.ts @@ -20,6 +20,8 @@ export const MetaConstants = { ButtonGroup: 'button-group', Breadcrumb: 'breadcrumb', BreadcrumbItem: 'breadcrumb-item', + BottomNav: 'bottomnav', + BottomNavItem: 'bottomnav-item', Carousel: 'carousel', Checkbox: 'checkbox', CheckboxGroup: 'checkbox-group', From fbab21fb80920c2cb1708e748d150bf6e4417c4f Mon Sep 17 00:00:00 2001 From: saurabhdaware Date: Mon, 28 Oct 2024 11:38:21 +0530 Subject: [PATCH 10/21] feat: add items sink stories --- .../BottomNav/BottomNav.stories.tsx | 88 +++++++++++++++---- 1 file changed, 73 insertions(+), 15 deletions(-) diff --git a/packages/blade/src/components/BottomNav/BottomNav.stories.tsx b/packages/blade/src/components/BottomNav/BottomNav.stories.tsx index df78867cc73..3a1b90b1691 100644 --- a/packages/blade/src/components/BottomNav/BottomNav.stories.tsx +++ b/packages/blade/src/components/BottomNav/BottomNav.stories.tsx @@ -3,8 +3,16 @@ import { Title } from '@storybook/addon-docs'; import { Sandbox } from '~utils/storybook/Sandbox'; import StoryPageWrapper from '~utils/storybook/StoryPageWrapper'; import { getStyledPropsArgTypes } from '~components/Box/BaseBox/storybookArgTypes'; -import { BottomNav, BottomNavItem } from '.'; -import { MenuDotsIcon, PaymentGatewayIcon } from '~components/Icons'; +import { BottomNav, BottomNavItem, BottomNavProps } from '.'; +import { + MenuDotsIcon, + PaymentGatewayIcon, + PaymentLinkIcon, + PaymentPagesIcon, + TransactionsIcon, +} from '~components/Icons'; +import { Box } from '~components/Box'; +import { Heading } from '~components/Typography'; const Page = (): React.ReactElement => { return ( @@ -48,23 +56,73 @@ export default { }, } as Meta; -const BottomNavTemplate: StoryFn = ({ children, ...args }) => { +const bottomNavItems = [ + { + title: 'Payments', + href: '/payments', + icon: PaymentGatewayIcon, + }, + { + title: 'Transactions', + href: '/transactions', + icon: TransactionsIcon, + isActive: true, + }, + { + title: 'Links', + href: '/payment-links', + icon: PaymentLinkIcon, + }, + { + title: 'Pages', + href: '/payment-pages', + icon: PaymentPagesIcon, + }, + { + title: 'More', + onClick: () => console.log('More Clicked'), + icon: MenuDotsIcon, + }, +]; + +const BottomNavTemplate: StoryFn = ({ children, ...args }) => { return ( - - - - - - { - console.log('More Clicked'); - }} - icon={MenuDotsIcon} - /> + + {children ?? bottomNavItems.map((item, index) => )} ); }; export const Default = BottomNavTemplate.bind({}); Default.args = {}; + +export const ItemsSink = () => { + return ( + + + 2 Items + + {bottomNavItems.slice(0, 2).map((item, index) => ( + + ))} + + + + 4 Items + + {bottomNavItems.slice(0, 4).map((item, index) => ( + + ))} + + + + Max Items + + {bottomNavItems.map((item, index) => ( + + ))} + + + + ); +}; From 53c8c6ed00b29272a0ac8a75845c31ac8c1ea93f Mon Sep 17 00:00:00 2001 From: saurabhdaware Date: Tue, 29 Oct 2024 04:05:58 +0530 Subject: [PATCH 11/21] docs: add documentation for BottomNav --- .../BottomNav/BottomNav.stories.tsx | 182 +++++++++++++++--- .../components/BottomNav/BottomNav.web.tsx | 15 +- .../BottomNav/BottomNavItem.stories.tsx | 53 +++-- .../_KitchenSink.BottomNav.stories.tsx | 31 +++ .../src/components/BottomNav/docsCode.ts | 133 +++++++++++++ .../blade/src/components/BottomNav/types.ts | 2 +- 6 files changed, 375 insertions(+), 41 deletions(-) create mode 100644 packages/blade/src/components/BottomNav/_KitchenSink.BottomNav.stories.tsx create mode 100644 packages/blade/src/components/BottomNav/docsCode.ts diff --git a/packages/blade/src/components/BottomNav/BottomNav.stories.tsx b/packages/blade/src/components/BottomNav/BottomNav.stories.tsx index 3a1b90b1691..ad3748aca1c 100644 --- a/packages/blade/src/components/BottomNav/BottomNav.stories.tsx +++ b/packages/blade/src/components/BottomNav/BottomNav.stories.tsx @@ -1,18 +1,29 @@ import type { StoryFn, Meta } from '@storybook/react'; import { Title } from '@storybook/addon-docs'; +import StoryRouter from 'storybook-react-router'; +import { NavLink, matchPath, Route, Switch, useLocation } from 'react-router-dom'; import { Sandbox } from '~utils/storybook/Sandbox'; import StoryPageWrapper from '~utils/storybook/StoryPageWrapper'; import { getStyledPropsArgTypes } from '~components/Box/BaseBox/storybookArgTypes'; -import { BottomNav, BottomNavItem, BottomNavProps } from '.'; +import type { SideNavLinkProps } from '~components/SideNav'; +import { SideNav, SideNavBody, SideNavLink } from '~components/SideNav'; +import { BottomNav, BottomNavItem, BottomNavItemProps, BottomNavProps } from '.'; import { + CurrentAccountIcon, + HomeIcon, MenuDotsIcon, + PaymentButtonIcon, PaymentGatewayIcon, PaymentLinkIcon, PaymentPagesIcon, + RazorpayIcon, TransactionsIcon, } from '~components/Icons'; import { Box } from '~components/Box'; import { Heading } from '~components/Typography'; +import React from 'react'; +import { bottomNavWithReactRouter } from './docsCode'; +import { Alert } from '~components/Alert'; const Page = (): React.ReactElement => { return ( @@ -21,22 +32,22 @@ const Page = (): React.ReactElement => { componentDescription="Bottom navigation component is a persistent user interface element at the bottom of a mobile app screen, providing quick access to core functionalities through icons and labels." figmaURL="https://www.figma.com/proto/jubmQL9Z8V7881ayUD95ps/Blade-DSL?node-id=96508-47113&node-type=frame&m=dev&scaling=min-zoom&content-scaling=fixed&page-id=91244%3A54900" > - Usage - - {` - import { Badge, InfoIcon } from '@razorpay/blade/components'; - - function App(): React.ReactElement { - return ( - - Boop - - ) - } - - export default App; - `} - + Usage (with React Router v6) + + + ); }; @@ -54,6 +65,8 @@ export default { page: Page, }, }, + // eslint-disable-next-line babel/new-cap + decorators: [StoryRouter(undefined, { initialEntries: ['/payments'] })] as unknown, } as Meta; const bottomNavItems = [ @@ -79,24 +92,145 @@ const bottomNavItems = [ icon: PaymentPagesIcon, }, { - title: 'More', - onClick: () => console.log('More Clicked'), - icon: MenuDotsIcon, + title: 'Buttons', + href: '/payment-buttons', + icon: PaymentButtonIcon, + }, +]; + +const sideNavItems = [ + { + title: 'Home', + href: '/home', + icon: HomeIcon, + }, + { + title: 'Current Account', + href: '/x/current-account', + icon: CurrentAccountIcon, + }, + { + title: 'Rize', + href: '/rize', + icon: RazorpayIcon, }, ]; +const SamplePage = ({ match }: { match: any }): React.ReactElement => ( + +

+      {JSON.stringify(match, null, 4)}
+    
+ +); + +const isItemActive = ( + location: { pathname: string }, + { href, activeOnLinks }: { href?: string; activeOnLinks?: string[] }, +): boolean => { + const isCurrentPathActive = Boolean( + matchPath(location.pathname, { + path: href, + exact: true, + }), + ); + + const isSubItemActive = Boolean( + activeOnLinks?.find((href) => matchPath(location.pathname, { path: href, exact: true })), + ); + + return isCurrentPathActive || isSubItemActive; +}; + +const BottomNavRouterItem = ( + props: Omit & { + activeOnLinks?: string[]; + }, +): React.ReactElement => { + const location = useLocation(); + + return ( + + ); +}; + +const SideNavRouterLink = ( + props: Omit & { + activeOnLinks?: string[]; + }, +): React.ReactElement => { + const location = useLocation(); + + return ( + + ); +}; + const BottomNavTemplate: StoryFn = ({ children, ...args }) => { return ( - {children ?? bottomNavItems.map((item, index) => )} + {bottomNavItems.map((item, index) => ( + + ))} ); }; -export const Default = BottomNavTemplate.bind({}); -Default.args = {}; +const WithRoutingTemplate: StoryFn = ({ children, ...args }) => { + const [isSideNavOpen, setIsSideNavOpen] = React.useState(false); + return ( + <> + + {[...Object.values(bottomNavItems), ...Object.values(sideNavItems)].map((route) => ( + + ))} + + setIsSideNavOpen(false)} + position="absolute" + > + + {sideNavItems.map((item) => ( + + ))} + + + + {children ?? ( + <> + {bottomNavItems.slice(0, -1).map((item, index) => ( + + ))} + setIsSideNavOpen(true)} + icon={MenuDotsIcon} + activeOnLinks={Object.values(sideNavItems).map((item) => item.href)} + /> + + )} + + + ); +}; + +export const SimpleBottomNav = BottomNavTemplate.bind({}); +SimpleBottomNav.args = {}; + +export const WithRouting = WithRoutingTemplate.bind({}); +WithRouting.args = {}; -export const ItemsSink = () => { +export const ItemsCount = () => { return ( diff --git a/packages/blade/src/components/BottomNav/BottomNav.web.tsx b/packages/blade/src/components/BottomNav/BottomNav.web.tsx index 549c1a11a3c..9f3a873cf51 100644 --- a/packages/blade/src/components/BottomNav/BottomNav.web.tsx +++ b/packages/blade/src/components/BottomNav/BottomNav.web.tsx @@ -3,7 +3,7 @@ import styled from 'styled-components'; import BaseBox from '~components/Box/BaseBox'; import { getStyledProps } from '~components/Box/styledProps'; import { Text } from '~components/Typography'; -import { makeSpace } from '~utils'; +import { makeMotionTime, makeSpace } from '~utils'; import { componentZIndices } from '~utils/componentZIndices'; import { getFocusRingStyles } from '~utils/getFocusRingStyles'; import { throwBladeError } from '~utils/logger'; @@ -101,12 +101,20 @@ const StyledBottomNavItem = styled(BaseBox)<{ to?: string }>((props) => { border: 'none', paddingLeft: makeSpace(props.theme.spacing[0]), paddingRight: makeSpace(props.theme.spacing[0]), + transition: `color,transform ${makeMotionTime(props.theme.motion.duration['2xquick'])} ${ + props.theme.motion.easing.standard.effective + }`, + transform: 'scale(1)', '&[aria-current="page"]': { color: props.theme.colors.interactive.text.primary.subtle, }, '&:focus-visible': { ...getFocusRingStyles({ theme: props.theme }), }, + '&:active': { + // @TODO: confirm this with designers once. Its not part of design currently + transform: 'scale(0.95)', + }, }; }); @@ -119,9 +127,12 @@ const BottomNavItem = ({ icon: Icon, testID, }: BottomNavItemProps) => { + const isRouterLink = as && href; + const defaultRenderElement = href ? 'a' : 'button'; + return ( ; +const bottomNavItems = [ + { + title: 'Payments', + href: '/payments', + icon: PaymentGatewayIcon, + }, + { + title: 'Transactions', + href: '/transactions', + icon: TransactionsIcon, + }, + { + title: 'Links', + href: '/payment-links', + icon: PaymentLinkIcon, + }, + { + title: 'Pages', + href: '/payment-pages', + icon: PaymentPagesIcon, + }, + { + title: 'Buttons', + href: '/payment-buttons', + icon: PaymentButtonIcon, + }, +]; + const BottomNavItemTemplate: StoryFn = (args) => { return ( - - - - { - console.log('More Clicked'); - }} - icon={MenuDotsIcon} - /> + {bottomNavItems.slice(1).map((item, index) => ( + + ))} ); }; export const BottomNavItemPlayground = BottomNavItemTemplate.bind({}); BottomNavItemPlayground.args = { - title: 'Banking', - href: '/banking', - icon: BusinessBankingIcon, + ...bottomNavItems[0], isActive: true, }; BottomNavItemPlayground.storyName = 'BottomNavItem Playground'; diff --git a/packages/blade/src/components/BottomNav/_KitchenSink.BottomNav.stories.tsx b/packages/blade/src/components/BottomNav/_KitchenSink.BottomNav.stories.tsx new file mode 100644 index 00000000000..8f95a6328fc --- /dev/null +++ b/packages/blade/src/components/BottomNav/_KitchenSink.BottomNav.stories.tsx @@ -0,0 +1,31 @@ +import { composeStories } from '@storybook/react'; +import * as bottomNavStories from './BottomNav.stories'; +import { Box } from '~components/Box'; +import { Heading } from '~components/Typography'; + +const allStories = Object.values(composeStories(bottomNavStories)); + +export const BottomNav = (): JSX.Element => { + return ( + + {allStories.map((Story) => { + return ( + <> + {Story.storyName} + + + ); + })} + + ); +}; + +export default { + title: 'Components/KitchenSink/BottomNav', + component: BottomNav, + parameters: { + // enable Chromatic's snapshotting only for kitchensink + chromatic: { disableSnapshot: false }, + options: { showPanel: false }, + }, +}; diff --git a/packages/blade/src/components/BottomNav/docsCode.ts b/packages/blade/src/components/BottomNav/docsCode.ts new file mode 100644 index 00000000000..03ba489cc99 --- /dev/null +++ b/packages/blade/src/components/BottomNav/docsCode.ts @@ -0,0 +1,133 @@ +import dedent from 'dedent'; + +export const bottomNavWithReactRouter = { + 'App.tsx': dedent`import React from 'react'; + import { BrowserRouter } from 'react-router-dom'; + import { AllRoutes, BottomNavExample } from './BottomNavExample'; + + const App = () => { + return ( + + + + + ); + }; + + export default App; + `, + 'BottomNavExample.tsx': dedent`import React from 'react'; + import { + matchPath, + useLocation, + NavLink, + Routes, + Route, + } from 'react-router-dom'; + import { + Box, + BottomNav, + BottomNavItem, + BottomNavItemProps + } from '@razorpay/blade/components'; + import { bottomNavItems } from './bottomNavItems'; + + + const SamplePage = ({ match }: { match: any }): React.ReactElement => ( + +
+        {JSON.stringify(match, null, 4)}
+      
+
+ ); + + /** + * Returns if the given href or one of the items from activeOnLinks are active + */ + const isItemActive = ( + location: { pathname: string }, + { href, activeOnLinks }: { href?: string; activeOnLinks?: string[] } + ): boolean => { + const isCurrentPathActive = Boolean(matchPath(location.pathname, href ?? '')); + + const isSubItemActive = Boolean( + activeOnLinks?.find((href) => matchPath(location.pathname, href)) + ); + + return isCurrentPathActive || isSubItemActive; + }; + + const BottomNavRouterItem = ( + props: Omit & { + activeOnLinks?: string[]; + }, + ): React.ReactElement => { + const location = useLocation(); + + return ( + + ); + }; + + export const AllRoutes = () => { + return ( + + {Object.values(bottomNavItems).map((route) => ( + } /> + ))} + + ) + } + + export const BottomNavExample = () => { + return ( + + {bottomNavItems.map((item, index) => ( + + ))} + + ) + } + `, + 'bottomNavItems.ts': dedent`import { + PaymentGatewayIcon, + TransactionsIcon, + PaymentLinkIcon, + PaymentPagesIcon, + PaymentButtonIcon, + } from '@razorpay/blade/components'; + + export const bottomNavItems = [ + { + title: 'Payments', + href: '/payments', + icon: PaymentGatewayIcon, + }, + { + title: 'Transactions', + href: '/transactions', + icon: TransactionsIcon, + isActive: true, + }, + { + title: 'Links', + href: '/payment-links', + icon: PaymentLinkIcon, + }, + { + title: 'Pages', + href: '/payment-pages', + icon: PaymentPagesIcon, + }, + { + title: 'Buttons', + href: '/payment-buttons', + icon: PaymentButtonIcon, + }, + ] as const; + `, +}; diff --git a/packages/blade/src/components/BottomNav/types.ts b/packages/blade/src/components/BottomNav/types.ts index f87f8fe55f2..420a78b40ce 100644 --- a/packages/blade/src/components/BottomNav/types.ts +++ b/packages/blade/src/components/BottomNav/types.ts @@ -6,7 +6,7 @@ type BottomNavProps = { /** * children slot of BottomNav, accepts BottomNavItem */ - children: React.ReactElement[]; + children: React.ReactNode; /** * zIndex of BottomNav From 05a5ac92fcaad256c7e8c9677137edd018e6a38b Mon Sep 17 00:00:00 2001 From: saurabhdaware Date: Tue, 29 Oct 2024 04:24:54 +0530 Subject: [PATCH 12/21] tests: add unit tests for bottomnav --- .../__tests__/BottomNav.ssr.test.tsx | 10 + .../__tests__/BottomNav.web.test.tsx | 44 ++ .../BottomNav/__tests__/BottomNavExample.tsx | 83 +++ .../__snapshots__/BottomNav.ssr.test.tsx.snap | 535 ++++++++++++++++++ .../__snapshots__/BottomNav.web.test.tsx.snap | 264 +++++++++ 5 files changed, 936 insertions(+) create mode 100644 packages/blade/src/components/BottomNav/__tests__/BottomNav.ssr.test.tsx create mode 100644 packages/blade/src/components/BottomNav/__tests__/BottomNav.web.test.tsx create mode 100644 packages/blade/src/components/BottomNav/__tests__/BottomNavExample.tsx create mode 100644 packages/blade/src/components/BottomNav/__tests__/__snapshots__/BottomNav.ssr.test.tsx.snap create mode 100644 packages/blade/src/components/BottomNav/__tests__/__snapshots__/BottomNav.web.test.tsx.snap diff --git a/packages/blade/src/components/BottomNav/__tests__/BottomNav.ssr.test.tsx b/packages/blade/src/components/BottomNav/__tests__/BottomNav.ssr.test.tsx new file mode 100644 index 00000000000..29675ab547b --- /dev/null +++ b/packages/blade/src/components/BottomNav/__tests__/BottomNav.ssr.test.tsx @@ -0,0 +1,10 @@ +import React from 'react'; +import { BottomNavExample } from './BottomNavExample'; +import renderWithSSR from '~utils/testing/renderWithSSR.web'; + +describe('', () => { + it('should render BottomNav ssr', () => { + const { container } = renderWithSSR(); + expect(container).toMatchSnapshot(); + }); +}); diff --git a/packages/blade/src/components/BottomNav/__tests__/BottomNav.web.test.tsx b/packages/blade/src/components/BottomNav/__tests__/BottomNav.web.test.tsx new file mode 100644 index 00000000000..fe5f30abba4 --- /dev/null +++ b/packages/blade/src/components/BottomNav/__tests__/BottomNav.web.test.tsx @@ -0,0 +1,44 @@ +import userEvents from '@testing-library/user-event'; +import { BottomNavExample } from './BottomNavExample'; +import renderWithTheme from '~utils/testing/renderWithTheme'; +import assertAccessible from '~utils/testing/assertAccessible'; + +describe('BottomNav', () => { + test('should render', () => { + const { container } = renderWithTheme(); + expect(container).toMatchSnapshot(); + }); + + test('should support styled-props', () => { + const { getByRole } = renderWithTheme( + // Have to pass display="block" otherwise component ignores media query style and selects base display value which is none + , + ); + expect(getByRole('navigation')).toHaveStyle('z-index: 1234; position: absolute'); + }); + + test('should keep item selected based on URL', () => { + const { getByRole } = renderWithTheme( + , + ); + + expect(getByRole('link', { name: 'Transactions' })).toHaveAttribute('aria-current', 'page'); + }); + + test('should call onClick when button is clicked', async () => { + const user = userEvents.setup(); + const mockMoreClick = jest.fn(); + + const { getByRole } = renderWithTheme(); + + await user.click(getByRole('button', { name: 'More' })); + + expect(mockMoreClick).toBeCalledTimes(1); + }); + + test('should pass general a11y', async () => { + const { container } = renderWithTheme(); + + await assertAccessible(container); + }); +}); diff --git a/packages/blade/src/components/BottomNav/__tests__/BottomNavExample.tsx b/packages/blade/src/components/BottomNav/__tests__/BottomNavExample.tsx new file mode 100644 index 00000000000..a490936797c --- /dev/null +++ b/packages/blade/src/components/BottomNav/__tests__/BottomNavExample.tsx @@ -0,0 +1,83 @@ +import { Link, MemoryRouter, useLocation, matchPath } from 'react-router-dom'; +import { BottomNavItem, BottomNav } from '../index'; +import type { BottomNavItemProps, BottomNavProps } from '../index'; +import { + MenuDotsIcon, + PaymentGatewayIcon, + PaymentLinkIcon, + TransactionsIcon, +} from '~components/Icons'; + +const isItemActive = ( + location: { pathname: string }, + { href, activeOnLinks }: { href?: string; activeOnLinks?: string[] }, +): boolean => { + const isCurrentPathActive = Boolean( + matchPath(location.pathname, { + path: href, + exact: false, + }), + ); + + const isSubItemActive = Boolean( + activeOnLinks?.find((href) => matchPath(location.pathname, { path: href, exact: false })), + ); + + return isCurrentPathActive || isSubItemActive; +}; + +const BottomNavRouterItem = ( + props: Omit & { + activeOnLinks?: string[]; + }, +): React.ReactElement => { + const location = useLocation(); + + return ( + + ); +}; + +const bottomNavItems = [ + { + title: 'Payments', + href: '/payments', + icon: PaymentGatewayIcon, + }, + { + title: 'Transactions', + href: '/transactions', + icon: TransactionsIcon, + }, + { + title: 'Links', + href: '/payment-links', + icon: PaymentLinkIcon, + }, +]; + +const BottomNavExample = ({ + initialEntries = ['/payments'], + moreClick, + ...args +}: Omit & { + initialEntries?: string[]; + moreClick?: () => void; +}): React.ReactElement => { + return ( + + + {bottomNavItems.map((item, index) => ( + + ))} + + + + ); +}; + +export { BottomNavExample }; diff --git a/packages/blade/src/components/BottomNav/__tests__/__snapshots__/BottomNav.ssr.test.tsx.snap b/packages/blade/src/components/BottomNav/__tests__/__snapshots__/BottomNav.ssr.test.tsx.snap new file mode 100644 index 00000000000..1f0d3ea125c --- /dev/null +++ b/packages/blade/src/components/BottomNav/__tests__/__snapshots__/BottomNav.ssr.test.tsx.snap @@ -0,0 +1,535 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[` should render BottomNav ssr 1`] = `""`; + +exports[` should render BottomNav ssr 2`] = ` +.c0.c0.c0.c0.c0 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + position: fixed; + z-index: 100; + padding-right: 4px; + padding-left: 4px; + width: 100%; + bottom: 0px; + left: 0px; + background-color: hsla(0,0%,100%,1); + border-top-width: 1px; + border-top-color: hsla(211,20%,52%,0.18); + border-top-style: solid; + box-shadow: 0px 8px 24px 0px hsla(217,56%,17%,0.12); +} + +.c1.c1.c1.c1.c1 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-align-items: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + padding-top: 16px; + padding-bottom: 12px; + gap: 2px; + cursor: pointer; +} + +.c3.c3.c3.c3.c3 { + color: currentColor; + font-family: "Inter","Inter Fallback Arial",Arial; + font-size: 0.625rem; + font-weight: 600; + font-style: normal; + -webkit-text-decoration-line: none; + text-decoration-line: none; + line-height: 0.875rem; + -webkit-letter-spacing: 0px; + -moz-letter-spacing: 0px; + -ms-letter-spacing: 0px; + letter-spacing: 0px; + margin: 0; + padding: 0; + overflow: hidden; + display: -webkit-box; + line-clamp: 1; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; + overflow-wrap: break-word; +} + +.c2.c2.c2.c2.c2 { + -webkit-text-decoration: none; + text-decoration: none; + color: hsla(211,26%,34%,1); + background-color: transparent; + border: none; + padding-left: 0px; + padding-right: 0px; + -webkit-transition: color,-webkit-transform 70ms cubic-bezier(0.3,0,0.2,1); + -webkit-transition: color,transform 70ms cubic-bezier(0.3,0,0.2,1); + transition: color,transform 70ms cubic-bezier(0.3,0,0.2,1); + -webkit-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); +} + +.c2.c2.c2.c2.c2[aria-current="page"] { + color: hsla(227,100%,59%,1); +} + +.c2.c2.c2.c2.c2:focus-visible { + outline: 4px solid hsla(227,100%,59%,0.18); + outline-offset: 1px; + -webkit-transition-property: outline-width; + transition-property: outline-width; + -webkit-transition-duration: 70ms; + transition-duration: 70ms; + -webkit-transition-timing-function: cubic-bezier(0.3,0,0.2,1); + transition-timing-function: cubic-bezier(0.3,0,0.2,1); +} + +.c2.c2.c2.c2.c2:active { + -webkit-transform: scale(0.95); + -ms-transform: scale(0.95); + transform: scale(0.95); +} + +@media screen and (min-width:320px) { + .c0.c0.c0.c0.c0 { + border-top-style: solid; + } +} + +@media screen and (min-width:480px) { + .c0.c0.c0.c0.c0 { + border-top-style: solid; + } +} + +@media screen and (min-width:768px) { + .c0.c0.c0.c0.c0 { + border-top-style: solid; + } +} + +@media screen and (min-width:1024px) { + .c0.c0.c0.c0.c0 { + border-top-style: solid; + } +} + +@media screen and (min-width:1200px) { + .c0.c0.c0.c0.c0 { + border-top-style: solid; + } +} + + +`; + +exports[` should render SideNav ssr 1`] = `""`; + +exports[` should render SideNav ssr 2`] = ` +.c0.c0.c0.c0.c0 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + position: fixed; + z-index: 100; + padding-right: 4px; + padding-left: 4px; + width: 100%; + bottom: 0px; + left: 0px; + background-color: hsla(0,0%,100%,1); + border-top-width: 1px; + border-top-color: hsla(211,20%,52%,0.18); + border-top-style: solid; + box-shadow: 0px 8px 24px 0px hsla(217,56%,17%,0.12); +} + +.c1.c1.c1.c1.c1 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-align-items: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + padding-top: 16px; + padding-bottom: 12px; + gap: 2px; + cursor: pointer; +} + +.c3.c3.c3.c3.c3 { + color: currentColor; + font-family: "Inter","Inter Fallback Arial",Arial; + font-size: 0.625rem; + font-weight: 600; + font-style: normal; + -webkit-text-decoration-line: none; + text-decoration-line: none; + line-height: 0.875rem; + -webkit-letter-spacing: 0px; + -moz-letter-spacing: 0px; + -ms-letter-spacing: 0px; + letter-spacing: 0px; + margin: 0; + padding: 0; + overflow: hidden; + display: -webkit-box; + line-clamp: 1; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; + overflow-wrap: break-word; +} + +.c2.c2.c2.c2.c2 { + -webkit-text-decoration: none; + text-decoration: none; + color: hsla(211,26%,34%,1); + background-color: transparent; + border: none; + padding-left: 0px; + padding-right: 0px; + -webkit-transition: color,-webkit-transform 70ms cubic-bezier(0.3,0,0.2,1); + -webkit-transition: color,transform 70ms cubic-bezier(0.3,0,0.2,1); + transition: color,transform 70ms cubic-bezier(0.3,0,0.2,1); + -webkit-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); +} + +.c2.c2.c2.c2.c2[aria-current="page"] { + color: hsla(227,100%,59%,1); +} + +.c2.c2.c2.c2.c2:focus-visible { + outline: 4px solid hsla(227,100%,59%,0.18); + outline-offset: 1px; + -webkit-transition-property: outline-width; + transition-property: outline-width; + -webkit-transition-duration: 70ms; + transition-duration: 70ms; + -webkit-transition-timing-function: cubic-bezier(0.3,0,0.2,1); + transition-timing-function: cubic-bezier(0.3,0,0.2,1); +} + +.c2.c2.c2.c2.c2:active { + -webkit-transform: scale(0.95); + -ms-transform: scale(0.95); + transform: scale(0.95); +} + +@media screen and (min-width:320px) { + .c0.c0.c0.c0.c0 { + border-top-style: solid; + } +} + +@media screen and (min-width:480px) { + .c0.c0.c0.c0.c0 { + border-top-style: solid; + } +} + +@media screen and (min-width:768px) { + .c0.c0.c0.c0.c0 { + border-top-style: solid; + } +} + +@media screen and (min-width:1024px) { + .c0.c0.c0.c0.c0 { + border-top-style: solid; + } +} + +@media screen and (min-width:1200px) { + .c0.c0.c0.c0.c0 { + border-top-style: solid; + } +} + + +`; diff --git a/packages/blade/src/components/BottomNav/__tests__/__snapshots__/BottomNav.web.test.tsx.snap b/packages/blade/src/components/BottomNav/__tests__/__snapshots__/BottomNav.web.test.tsx.snap new file mode 100644 index 00000000000..bfbeb5a5ffa --- /dev/null +++ b/packages/blade/src/components/BottomNav/__tests__/__snapshots__/BottomNav.web.test.tsx.snap @@ -0,0 +1,264 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`BottomNav should render 1`] = ` +.c0.c0.c0.c0.c0 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-direction: row; + -ms-flex-direction: row; + flex-direction: row; + position: fixed; + z-index: 100; + padding-right: 4px; + padding-left: 4px; + width: 100%; + bottom: 0px; + left: 0px; + background-color: hsla(0,0%,100%,1); + border-top-width: 1px; + border-top-color: hsla(211,20%,52%,0.18); + border-top-style: solid; + box-shadow: 0px 8px 24px 0px hsla(217,56%,17%,0.12); +} + +.c1.c1.c1.c1.c1 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex: 1; + -ms-flex: 1; + flex: 1; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + -webkit-align-items: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + padding-top: 16px; + padding-bottom: 12px; + gap: 2px; + cursor: pointer; +} + +.c3.c3.c3.c3.c3 { + color: currentColor; + font-family: "Inter","Inter Fallback Arial",Arial; + font-size: 0.625rem; + font-weight: 600; + font-style: normal; + -webkit-text-decoration-line: none; + text-decoration-line: none; + line-height: 0.875rem; + -webkit-letter-spacing: 0px; + -moz-letter-spacing: 0px; + -ms-letter-spacing: 0px; + letter-spacing: 0px; + margin: 0; + padding: 0; + overflow: hidden; + display: -webkit-box; + line-clamp: 1; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; + overflow-wrap: break-word; +} + +.c2.c2.c2.c2.c2 { + -webkit-text-decoration: none; + text-decoration: none; + color: hsla(211,26%,34%,1); + background-color: transparent; + border: none; + padding-left: 0px; + padding-right: 0px; + -webkit-transition: color,-webkit-transform 70ms cubic-bezier(0.3,0,0.2,1); + -webkit-transition: color,transform 70ms cubic-bezier(0.3,0,0.2,1); + transition: color,transform 70ms cubic-bezier(0.3,0,0.2,1); + -webkit-transform: scale(1); + -ms-transform: scale(1); + transform: scale(1); +} + +.c2.c2.c2.c2.c2[aria-current="page"] { + color: hsla(227,100%,59%,1); +} + +.c2.c2.c2.c2.c2:focus-visible { + outline: 4px solid hsla(227,100%,59%,0.18); + outline-offset: 1px; + -webkit-transition-property: outline-width; + transition-property: outline-width; + -webkit-transition-duration: 70ms; + transition-duration: 70ms; + -webkit-transition-timing-function: cubic-bezier(0.3,0,0.2,1); + transition-timing-function: cubic-bezier(0.3,0,0.2,1); +} + +.c2.c2.c2.c2.c2:active { + -webkit-transform: scale(0.95); + -ms-transform: scale(0.95); + transform: scale(0.95); +} + +@media screen and (min-width:320px) { + .c0.c0.c0.c0.c0 { + border-top-style: solid; + } +} + +@media screen and (min-width:480px) { + .c0.c0.c0.c0.c0 { + border-top-style: solid; + } +} + +@media screen and (min-width:768px) { + .c0.c0.c0.c0.c0 { + border-top-style: solid; + } +} + +@media screen and (min-width:1024px) { + .c0.c0.c0.c0.c0 { + border-top-style: solid; + } +} + +@media screen and (min-width:1200px) { + .c0.c0.c0.c0.c0 { + border-top-style: solid; + } +} + + +`; From 254d2bdcca7f825c17cccea05af7e331fe0fd412 Mon Sep 17 00:00:00 2001 From: saurabhdaware Date: Tue, 29 Oct 2024 04:49:56 +0530 Subject: [PATCH 13/21] fix: linting --- .../src/components/BottomNav/BottomNav.stories.tsx | 10 ++++++---- .../blade/src/components/BottomNav/BottomNav.web.tsx | 6 +++--- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/packages/blade/src/components/BottomNav/BottomNav.stories.tsx b/packages/blade/src/components/BottomNav/BottomNav.stories.tsx index ad3748aca1c..aa7ed737742 100644 --- a/packages/blade/src/components/BottomNav/BottomNav.stories.tsx +++ b/packages/blade/src/components/BottomNav/BottomNav.stories.tsx @@ -1,13 +1,16 @@ +import React from 'react'; import type { StoryFn, Meta } from '@storybook/react'; import { Title } from '@storybook/addon-docs'; import StoryRouter from 'storybook-react-router'; import { NavLink, matchPath, Route, Switch, useLocation } from 'react-router-dom'; +import { BottomNav, BottomNavItem } from '.'; +import type { BottomNavItemProps, BottomNavProps } from '.'; +import { bottomNavWithReactRouter } from './docsCode'; import { Sandbox } from '~utils/storybook/Sandbox'; import StoryPageWrapper from '~utils/storybook/StoryPageWrapper'; import { getStyledPropsArgTypes } from '~components/Box/BaseBox/storybookArgTypes'; import type { SideNavLinkProps } from '~components/SideNav'; import { SideNav, SideNavBody, SideNavLink } from '~components/SideNav'; -import { BottomNav, BottomNavItem, BottomNavItemProps, BottomNavProps } from '.'; import { CurrentAccountIcon, HomeIcon, @@ -21,8 +24,6 @@ import { } from '~components/Icons'; import { Box } from '~components/Box'; import { Heading } from '~components/Typography'; -import React from 'react'; -import { bottomNavWithReactRouter } from './docsCode'; import { Alert } from '~components/Alert'; const Page = (): React.ReactElement => { @@ -116,6 +117,7 @@ const sideNavItems = [ }, ]; +// eslint-disable-next-line const SamplePage = ({ match }: { match: any }): React.ReactElement => (
@@ -230,7 +232,7 @@ SimpleBottomNav.args = {};
 export const WithRouting = WithRoutingTemplate.bind({});
 WithRouting.args = {};
 
-export const ItemsCount = () => {
+export const ItemsCount = (): React.ReactElement => {
   return (
     
       
diff --git a/packages/blade/src/components/BottomNav/BottomNav.web.tsx b/packages/blade/src/components/BottomNav/BottomNav.web.tsx
index 9f3a873cf51..bc6ccb2f745 100644
--- a/packages/blade/src/components/BottomNav/BottomNav.web.tsx
+++ b/packages/blade/src/components/BottomNav/BottomNav.web.tsx
@@ -1,5 +1,6 @@
 import React from 'react';
 import styled from 'styled-components';
+import type { BottomNavItemProps, BottomNavProps } from './types';
 import BaseBox from '~components/Box/BaseBox';
 import { getStyledProps } from '~components/Box/styledProps';
 import { Text } from '~components/Typography';
@@ -9,7 +10,6 @@ import { getFocusRingStyles } from '~utils/getFocusRingStyles';
 import { throwBladeError } from '~utils/logger';
 import { makeAccessible } from '~utils/makeAccessible';
 import { metaAttribute, MetaConstants } from '~utils/metaAttribute';
-import type { BottomNavItemProps, BottomNavProps } from './types';
 
 /**
  * ### BottomNav component
@@ -56,7 +56,7 @@ const BottomNav = ({
   zIndex = componentZIndices.bottomNav,
   testID,
   ...styledProps
-}: BottomNavProps) => {
+}: BottomNavProps): React.ReactElement => {
   if (__DEV__) {
     const childrenCount = React.Children.count(children);
     if (childrenCount > 5 && childrenCount < 2) {
@@ -126,7 +126,7 @@ const BottomNavItem = ({
   onClick,
   icon: Icon,
   testID,
-}: BottomNavItemProps) => {
+}: BottomNavItemProps): React.ReactElement => {
   const isRouterLink = as && href;
   const defaultRenderElement = href ? 'a' : 'button';
 

From 6256341eceb7a08fb73e5ce579fca6da91c46bc5 Mon Sep 17 00:00:00 2001
From: saurabhdaware 
Date: Tue, 29 Oct 2024 11:48:31 +0530
Subject: [PATCH 14/21] feat: add rel and target

---
 .../components/BottomNav/BottomNav.web.tsx    |   5 +
 .../__snapshots__/BottomNav.ssr.test.tsx.snap | 267 ------------------
 .../blade/src/components/BottomNav/types.ts   |  13 +-
 3 files changed, 17 insertions(+), 268 deletions(-)

diff --git a/packages/blade/src/components/BottomNav/BottomNav.web.tsx b/packages/blade/src/components/BottomNav/BottomNav.web.tsx
index bc6ccb2f745..8d8840270a0 100644
--- a/packages/blade/src/components/BottomNav/BottomNav.web.tsx
+++ b/packages/blade/src/components/BottomNav/BottomNav.web.tsx
@@ -121,6 +121,8 @@ const StyledBottomNavItem = styled(BaseBox)<{ to?: string }>((props) => {
 const BottomNavItem = ({
   title,
   href,
+  rel,
+  target,
   as,
   isActive,
   onClick,
@@ -129,12 +131,15 @@ const BottomNavItem = ({
 }: BottomNavItemProps): React.ReactElement => {
   const isRouterLink = as && href;
   const defaultRenderElement = href ? 'a' : 'button';
+  const defaultRel = target === '_blank' ? 'noreferrer noopener' : undefined;
 
   return (
      should render BottomNav ssr 2`] = `
   
 
 `;
-
-exports[` should render SideNav ssr 1`] = `""`;
-
-exports[` should render SideNav ssr 2`] = `
-.c0.c0.c0.c0.c0 {
-  display: -webkit-box;
-  display: -webkit-flex;
-  display: -ms-flexbox;
-  display: flex;
-  -webkit-flex-direction: row;
-  -ms-flex-direction: row;
-  flex-direction: row;
-  position: fixed;
-  z-index: 100;
-  padding-right: 4px;
-  padding-left: 4px;
-  width: 100%;
-  bottom: 0px;
-  left: 0px;
-  background-color: hsla(0,0%,100%,1);
-  border-top-width: 1px;
-  border-top-color: hsla(211,20%,52%,0.18);
-  border-top-style: solid;
-  box-shadow: 0px 8px 24px 0px hsla(217,56%,17%,0.12);
-}
-
-.c1.c1.c1.c1.c1 {
-  display: -webkit-box;
-  display: -webkit-flex;
-  display: -ms-flexbox;
-  display: flex;
-  -webkit-flex: 1;
-  -ms-flex: 1;
-  flex: 1;
-  -webkit-flex-direction: column;
-  -ms-flex-direction: column;
-  flex-direction: column;
-  -webkit-align-items: center;
-  -webkit-box-align: center;
-  -ms-flex-align: center;
-  align-items: center;
-  -webkit-box-pack: center;
-  -webkit-justify-content: center;
-  -ms-flex-pack: center;
-  justify-content: center;
-  padding-top: 16px;
-  padding-bottom: 12px;
-  gap: 2px;
-  cursor: pointer;
-}
-
-.c3.c3.c3.c3.c3 {
-  color: currentColor;
-  font-family: "Inter","Inter Fallback Arial",Arial;
-  font-size: 0.625rem;
-  font-weight: 600;
-  font-style: normal;
-  -webkit-text-decoration-line: none;
-  text-decoration-line: none;
-  line-height: 0.875rem;
-  -webkit-letter-spacing: 0px;
-  -moz-letter-spacing: 0px;
-  -ms-letter-spacing: 0px;
-  letter-spacing: 0px;
-  margin: 0;
-  padding: 0;
-  overflow: hidden;
-  display: -webkit-box;
-  line-clamp: 1;
-  -webkit-line-clamp: 1;
-  -webkit-box-orient: vertical;
-  overflow-wrap: break-word;
-}
-
-.c2.c2.c2.c2.c2 {
-  -webkit-text-decoration: none;
-  text-decoration: none;
-  color: hsla(211,26%,34%,1);
-  background-color: transparent;
-  border: none;
-  padding-left: 0px;
-  padding-right: 0px;
-  -webkit-transition: color,-webkit-transform 70ms cubic-bezier(0.3,0,0.2,1);
-  -webkit-transition: color,transform 70ms cubic-bezier(0.3,0,0.2,1);
-  transition: color,transform 70ms cubic-bezier(0.3,0,0.2,1);
-  -webkit-transform: scale(1);
-  -ms-transform: scale(1);
-  transform: scale(1);
-}
-
-.c2.c2.c2.c2.c2[aria-current="page"] {
-  color: hsla(227,100%,59%,1);
-}
-
-.c2.c2.c2.c2.c2:focus-visible {
-  outline: 4px solid hsla(227,100%,59%,0.18);
-  outline-offset: 1px;
-  -webkit-transition-property: outline-width;
-  transition-property: outline-width;
-  -webkit-transition-duration: 70ms;
-  transition-duration: 70ms;
-  -webkit-transition-timing-function: cubic-bezier(0.3,0,0.2,1);
-  transition-timing-function: cubic-bezier(0.3,0,0.2,1);
-}
-
-.c2.c2.c2.c2.c2:active {
-  -webkit-transform: scale(0.95);
-  -ms-transform: scale(0.95);
-  transform: scale(0.95);
-}
-
-@media screen and (min-width:320px) {
-  .c0.c0.c0.c0.c0 {
-    border-top-style: solid;
-  }
-}
-
-@media screen and (min-width:480px) {
-  .c0.c0.c0.c0.c0 {
-    border-top-style: solid;
-  }
-}
-
-@media screen and (min-width:768px) {
-  .c0.c0.c0.c0.c0 {
-    border-top-style: solid;
-  }
-}
-
-@media screen and (min-width:1024px) {
-  .c0.c0.c0.c0.c0 {
-    border-top-style: solid;
-  }
-}
-
-@media screen and (min-width:1200px) {
-  .c0.c0.c0.c0.c0 {
-    border-top-style: solid;
-  }
-}
-
-
-`;
diff --git a/packages/blade/src/components/BottomNav/types.ts b/packages/blade/src/components/BottomNav/types.ts
index 420a78b40ce..39d93c44d56 100644
--- a/packages/blade/src/components/BottomNav/types.ts
+++ b/packages/blade/src/components/BottomNav/types.ts
@@ -1,5 +1,6 @@
 import type { StyledPropsBlade } from '~components/Box/styledProps';
 import type { IconComponent } from '~components/Icons';
+import { LinkProps } from '~components/Link';
 import type { TestID } from '~utils/types';
 
 type BottomNavProps = {
@@ -35,7 +36,17 @@ type BottomNavItemProps = {
    *
    * maps to `to` property when react router is being used
    */
-  href?: string;
+  href?: LinkProps['href'];
+
+  /**
+   * HTML's `target` attribute for anchor links
+   */
+  target?: LinkProps['target'];
+
+  /**
+   * HTML's `rel` tag of anchor links
+   */
+  rel?: LinkProps['rel'];
 
   /**
    * as prop to pass ReactRouter's Link component.

From cab863485a77d04e2c98e2768faf2d8694fdf010 Mon Sep 17 00:00:00 2001
From: saurabhdaware 
Date: Tue, 29 Oct 2024 14:27:22 +0530
Subject: [PATCH 15/21] fix: lint again

---
 .../src/components/BottomNav/BottomNav.stories.tsx     | 10 +++++++++-
 .../src/components/BottomNav/BottomNavItem.stories.tsx |  2 +-
 packages/blade/src/components/BottomNav/types.ts       |  2 +-
 3 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/packages/blade/src/components/BottomNav/BottomNav.stories.tsx b/packages/blade/src/components/BottomNav/BottomNav.stories.tsx
index aa7ed737742..e3e05f073d2 100644
--- a/packages/blade/src/components/BottomNav/BottomNav.stories.tsx
+++ b/packages/blade/src/components/BottomNav/BottomNav.stories.tsx
@@ -3,9 +3,9 @@ import type { StoryFn, Meta } from '@storybook/react';
 import { Title } from '@storybook/addon-docs';
 import StoryRouter from 'storybook-react-router';
 import { NavLink, matchPath, Route, Switch, useLocation } from 'react-router-dom';
+import { bottomNavWithReactRouter } from './docsCode';
 import { BottomNav, BottomNavItem } from '.';
 import type { BottomNavItemProps, BottomNavProps } from '.';
-import { bottomNavWithReactRouter } from './docsCode';
 import { Sandbox } from '~utils/storybook/Sandbox';
 import StoryPageWrapper from '~utils/storybook/StoryPageWrapper';
 import { getStyledPropsArgTypes } from '~components/Box/BaseBox/storybookArgTypes';
@@ -243,6 +243,14 @@ export const ItemsCount = (): React.ReactElement => {
           ))}
         
       
+      
+        3 Items
+        
+          {bottomNavItems.slice(0, 3).map((item, index) => (
+            
+          ))}
+        
+      
       
         4 Items
         
diff --git a/packages/blade/src/components/BottomNav/BottomNavItem.stories.tsx b/packages/blade/src/components/BottomNav/BottomNavItem.stories.tsx
index 7424b0fdbb6..90c6c83bb8a 100644
--- a/packages/blade/src/components/BottomNav/BottomNavItem.stories.tsx
+++ b/packages/blade/src/components/BottomNav/BottomNavItem.stories.tsx
@@ -1,6 +1,6 @@
 import type { StoryFn, Meta } from '@storybook/react';
-import iconMap from '~components/Icons/iconMap';
 import { BottomNav, BottomNavItem } from '.';
+import iconMap from '~components/Icons/iconMap';
 import {
   PaymentButtonIcon,
   PaymentGatewayIcon,
diff --git a/packages/blade/src/components/BottomNav/types.ts b/packages/blade/src/components/BottomNav/types.ts
index 39d93c44d56..ac6092b731c 100644
--- a/packages/blade/src/components/BottomNav/types.ts
+++ b/packages/blade/src/components/BottomNav/types.ts
@@ -1,6 +1,6 @@
 import type { StyledPropsBlade } from '~components/Box/styledProps';
 import type { IconComponent } from '~components/Icons';
-import { LinkProps } from '~components/Link';
+import type { LinkProps } from '~components/Link';
 import type { TestID } from '~utils/types';
 
 type BottomNavProps = {

From 023120aa20cfd04b8fad258911ebeb8177fb8b88 Mon Sep 17 00:00:00 2001
From: saurabhdaware 
Date: Tue, 29 Oct 2024 17:59:57 +0530
Subject: [PATCH 16/21] feat: add onClick event handler type

---
 packages/blade/src/components/BottomNav/types.ts | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/packages/blade/src/components/BottomNav/types.ts b/packages/blade/src/components/BottomNav/types.ts
index ac6092b731c..05aca55d46c 100644
--- a/packages/blade/src/components/BottomNav/types.ts
+++ b/packages/blade/src/components/BottomNav/types.ts
@@ -1,6 +1,8 @@
+import type React from 'react';
 import type { StyledPropsBlade } from '~components/Box/styledProps';
 import type { IconComponent } from '~components/Icons';
 import type { LinkProps } from '~components/Link';
+import { Platform } from '~utils';
 import type { TestID } from '~utils/types';
 
 type BottomNavProps = {
@@ -70,7 +72,7 @@ type BottomNavItemProps = {
   /**
    * onClick handler of BottomNavItem
    */
-  onClick?: () => void;
+  onClick?: Platform.Select<{ web: React.MouseEventHandler; native: undefined }>;
 } & TestID;
 
 export type { BottomNavItemProps, BottomNavProps };

From c76f815804824e638bd942ec9a03a7c31b542069 Mon Sep 17 00:00:00 2001
From: Saurabh Daware 
Date: Tue, 29 Oct 2024 18:02:38 +0530
Subject: [PATCH 17/21] Create shy-files-smile.md

---
 .changeset/shy-files-smile.md | 5 +++++
 1 file changed, 5 insertions(+)
 create mode 100644 .changeset/shy-files-smile.md

diff --git a/.changeset/shy-files-smile.md b/.changeset/shy-files-smile.md
new file mode 100644
index 00000000000..a475d2844d3
--- /dev/null
+++ b/.changeset/shy-files-smile.md
@@ -0,0 +1,5 @@
+---
+"@razorpay/blade": minor
+---
+
+feat(BottomNav): add BottomNav component

From d34b5adfe58d94330ee79a723d25a55772ec3f1e Mon Sep 17 00:00:00 2001
From: saurabhdaware 
Date: Tue, 29 Oct 2024 18:07:12 +0530
Subject: [PATCH 18/21] fix: ts

---
 .../src/components/BottomNav/__tests__/BottomNavExample.tsx     | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/blade/src/components/BottomNav/__tests__/BottomNavExample.tsx b/packages/blade/src/components/BottomNav/__tests__/BottomNavExample.tsx
index a490936797c..6deed52f682 100644
--- a/packages/blade/src/components/BottomNav/__tests__/BottomNavExample.tsx
+++ b/packages/blade/src/components/BottomNav/__tests__/BottomNavExample.tsx
@@ -74,7 +74,7 @@ const BottomNavExample = ({
         {bottomNavItems.map((item, index) => (
           
         ))}
-        
+        
       
     
   );

From fafcdce53a8dc64bacd4b05d9f7922c2dc119e8e Mon Sep 17 00:00:00 2001
From: saurabhdaware 
Date: Tue, 29 Oct 2024 19:45:08 +0530
Subject: [PATCH 19/21] fix: lint

---
 packages/blade/src/components/BottomNav/types.ts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/packages/blade/src/components/BottomNav/types.ts b/packages/blade/src/components/BottomNav/types.ts
index 05aca55d46c..3acfc9be865 100644
--- a/packages/blade/src/components/BottomNav/types.ts
+++ b/packages/blade/src/components/BottomNav/types.ts
@@ -2,7 +2,7 @@ import type React from 'react';
 import type { StyledPropsBlade } from '~components/Box/styledProps';
 import type { IconComponent } from '~components/Icons';
 import type { LinkProps } from '~components/Link';
-import { Platform } from '~utils';
+import type { Platform } from '~utils';
 import type { TestID } from '~utils/types';
 
 type BottomNavProps = {

From 88d541b165dc5743bdf276ede5dfc5a36c4902a2 Mon Sep 17 00:00:00 2001
From: saurabhdaware 
Date: Tue, 29 Oct 2024 19:51:38 +0530
Subject: [PATCH 20/21] feat: export BottomNav

---
 packages/blade/src/components/index.ts | 1 +
 1 file changed, 1 insertion(+)

diff --git a/packages/blade/src/components/index.ts b/packages/blade/src/components/index.ts
index 1168604877a..09224d8a038 100644
--- a/packages/blade/src/components/index.ts
+++ b/packages/blade/src/components/index.ts
@@ -6,6 +6,7 @@ export * from './Avatar';
 export * from './Badge';
 export * from './BladeProvider';
 export * from './BottomSheet';
+export * from './BottomNav';
 export * from './Breadcrumb';
 export * from './Box';
 export * from './Button';

From 1d7d41d7c55c15096e91f8342938b7c7fa8377df Mon Sep 17 00:00:00 2001
From: saurabhdaware 
Date: Tue, 29 Oct 2024 20:01:49 +0530
Subject: [PATCH 21/21] feat: set default route in example

---
 packages/blade/src/components/BottomNav/docsCode.ts | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/packages/blade/src/components/BottomNav/docsCode.ts b/packages/blade/src/components/BottomNav/docsCode.ts
index 03ba489cc99..36661337da8 100644
--- a/packages/blade/src/components/BottomNav/docsCode.ts
+++ b/packages/blade/src/components/BottomNav/docsCode.ts
@@ -104,14 +104,13 @@ export const bottomNavWithReactRouter = {
   export const bottomNavItems = [
     {
       title: 'Payments',
-      href: '/payments',
+      href: '/',
       icon: PaymentGatewayIcon,
     },
     {
       title: 'Transactions',
       href: '/transactions',
       icon: TransactionsIcon,
-      isActive: true,
     },
     {
       title: 'Links',