Skip to content

Commit 24d80d3

Browse files
committed
feat: add navbar components
1 parent de81e3c commit 24d80d3

8 files changed

Lines changed: 138 additions & 1 deletion

File tree

package-lock.json

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,5 +28,8 @@
2828
"homepage": "https://github.com/Lemonpeach/panda-san#readme",
2929
"devDependencies": {
3030
"lerna": "^3.16.4"
31+
},
32+
"dependencies": {
33+
"classnames": "^2.2.6"
3134
}
3235
}
Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,14 @@
1-
export { Navbar } from './navbar'
1+
import { NavbarBrandIcon } from './navbar-brand-icon'
2+
import { NavbarBrand } from './navbar-brand'
3+
import { NavbarBurger } from './navbar-burger'
4+
import { NavbarMenuItem } from './navbar-menu-item'
5+
import { NavbarMenu } from './navbar-menu'
6+
import { Navbar } from './navbar'
7+
8+
Navbar.BrandIcon = NavbarBrandIcon
9+
Navbar.Brand = NavbarBrand
10+
Navbar.Burger = NavbarBurger
11+
Navbar.MenuItem = NavbarMenuItem
12+
Navbar.Menu = NavbarMenu
13+
14+
export { Navbar }
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import React from 'react'
2+
import PropTypes from 'prop-types'
3+
4+
export const NavbarBrandIcon = ({ children, href, text }) => (
5+
<a className="navbar__brand__icon" role="link" href={href}>
6+
<span className="hidden">{text}</span>
7+
{children}
8+
</a>
9+
)
10+
11+
NavbarBrandIcon.propTypes = {
12+
children: PropTypes.oneOfType([
13+
PropTypes.node,
14+
PropTypes.element,
15+
PropTypes.elementType,
16+
PropTypes.func
17+
]).isRequired,
18+
href: PropTypes.string.isRequired,
19+
text: PropTypes.string.isRequired
20+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import React from 'react'
2+
import PropTypes from 'prop-types'
3+
4+
export const NavbarBrand = ({ children }) => (
5+
<div className="navbar__brand">
6+
{children}
7+
</div>
8+
)
9+
10+
NavbarBrand.propTypes = {
11+
children: PropTypes.oneOfType([
12+
PropTypes.node,
13+
PropTypes.element,
14+
PropTypes.elementType,
15+
PropTypes.func
16+
]).isRequired
17+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import React from 'react'
2+
import PropTypes from 'prop-types'
3+
import classnames from 'classnames'
4+
5+
const getBurgerClassName = ({ toggled }) => (
6+
classnames('navbar__burger', { 'navbar__burger--active': toggled })
7+
)
8+
9+
export const NavbarBurger = ({ children, toggled, onClick }) => (
10+
<div className={getBurgerClassName({ toggled })}>
11+
<button
12+
role="button"
13+
aria-haspopup="true"
14+
aria-expanded={toggled}
15+
aria-controls="navbar-menu"
16+
onClick={onClick}
17+
>
18+
{children}
19+
</button>
20+
</div>
21+
)
22+
23+
NavbarBurger.propTypes = {
24+
children: PropTypes.oneOfType([
25+
PropTypes.node,
26+
PropTypes.element,
27+
PropTypes.elementType,
28+
PropTypes.func
29+
]).isRequired,
30+
toggled: PropTypes.bool.isRequired,
31+
onClick: PropTypes.func.isRequired
32+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import React from 'react'
2+
import PropTypes from 'prop-types'
3+
4+
export const NavbarMenuItem = ({ children, href }) => (
5+
<li role="none" className="navbar__item">
6+
<a
7+
role="menuitem"
8+
href={href}
9+
className="navbar__item navbar__item--link"
10+
>
11+
{children}
12+
</a>
13+
</li>
14+
)
15+
16+
NavbarMenuItem.propTypes = {
17+
children: PropTypes.oneOfType([
18+
PropTypes.node,
19+
PropTypes.element,
20+
PropTypes.elementType,
21+
PropTypes.func
22+
]).isRequired,
23+
href: PropTypes.string.isRequired
24+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import React from 'react'
2+
import PropTypes from 'prop-types'
3+
import classnames from 'classnames'
4+
5+
const getMenuClassNames = ({ toggled }) => (
6+
classnames('navbar__menu', { 'navbar__menu--active': toggled })
7+
)
8+
9+
export const NavbarMenu = ({ children, toggled }) => (
10+
<ul id="navbar-menu" role="menu" className={getMenuClassNames({ toggled })}>
11+
{children}
12+
</ul>
13+
)
14+
15+
NavbarMenu.propTypes = {
16+
children: PropTypes.oneOfType([
17+
PropTypes.node,
18+
PropTypes.element,
19+
PropTypes.elementType,
20+
PropTypes.func
21+
]).isRequired,
22+
toggled: PropTypes.bool.isRequired
23+
}

0 commit comments

Comments
 (0)