@@ -0,0 +1,5 @@ | |||
{ | |||
"projects": { | |||
"default": "<your_project_name>" | |||
} | |||
} |
@@ -0,0 +1,27 @@ | |||
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. | |||
# dependencies | |||
/node_modules | |||
/.pnp | |||
.pnp.js | |||
# testing | |||
/coverage | |||
# next.js | |||
/.next/ | |||
/out/ | |||
# production | |||
/build | |||
# misc | |||
.DS_Store | |||
.env* | |||
# debug | |||
npm-debug.log* | |||
yarn-debug.log* | |||
yarn-error.log* | |||
.vercel |
@@ -0,0 +1,30 @@ | |||
This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/zeit/next.js/tree/canary/packages/create-next-app). | |||
## Getting Started | |||
First, run the development server: | |||
```bash | |||
npm run dev | |||
# or | |||
yarn dev | |||
``` | |||
Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. | |||
You can start editing the page by modifying `pages/index.js`. The page auto-updates as you edit the file. | |||
## Learn More | |||
To learn more about Next.js, take a look at the following resources: | |||
- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. | |||
- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. | |||
You can check out [the Next.js GitHub repository](https://github.com/zeit/next.js/) - your feedback and contributions are welcome! | |||
## Deploy on ZEIT Now | |||
The easiest way to deploy your Next.js app is to use the [ZEIT Now Platform](https://zeit.co/) from the creators of Next.js. | |||
Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. |
@@ -0,0 +1,14 @@ | |||
{ | |||
"name": "001-landing-next", | |||
"description": "", | |||
"formation": { | |||
"web": { | |||
"quantity": 1 | |||
} | |||
}, | |||
"buildpacks": [ | |||
{ | |||
"url": "heroku/nodejs" | |||
} | |||
] | |||
} |
@@ -0,0 +1,10 @@ | |||
{ | |||
"hosting": { | |||
"public": "out", | |||
"ignore": [ | |||
"firebase.json", | |||
"**/.*", | |||
"**/node_modules/**" | |||
] | |||
} | |||
} |
@@ -0,0 +1,5 @@ | |||
{ | |||
"compilerOptions": { | |||
"baseUrl": "src" | |||
} | |||
} |
@@ -0,0 +1,4 @@ | |||
# netlify.toml | |||
[build] | |||
command = "next build && next export" | |||
publish = "out" |
@@ -0,0 +1,12 @@ | |||
module.exports = { | |||
siteUrl: 'https://startup-agency.vercel.app', | |||
generateRobotsTxt: true, | |||
// optional | |||
// robotsTxtOptions: { | |||
// additionalSitemaps: [ | |||
// 'https://example.com/my-custom-sitemap-1.xml', | |||
// 'https://example.com/my-custom-sitemap-2.xml', | |||
// 'https://example.com/my-custom-sitemap-3.xml', | |||
// ], | |||
// }, | |||
}; |
@@ -0,0 +1,8 @@ | |||
const withPlugins = require('next-compose-plugins'); | |||
const optimizedImages = require('next-optimized-images'); | |||
const nextConfiguration = { | |||
target: 'serverless', //will output independent pages that don't require a monolithic server. It's only compatible with next start or Serverless deployment platforms (like ZEIT Now) — you cannot use the custom server API. | |||
}; | |||
module.exports = withPlugins([optimizedImages], nextConfiguration); |
@@ -0,0 +1,36 @@ | |||
{ | |||
"name": "@landing/013-next", | |||
"version": "0.0.1", | |||
"private": true, | |||
"scripts": { | |||
"dev": "next dev", | |||
"build": "next build", | |||
"serve": "next start", | |||
"export": "next export", | |||
"postbuild": "next-sitemap" | |||
}, | |||
"dependencies": { | |||
"@material-ui/core": "^4.11.3", | |||
"next": "^10.0.5", | |||
"next-compose-plugins": "^2.2.1", | |||
"next-optimized-images": "^2.6.2", | |||
"polished": "^4.0.5", | |||
"rc-drawer": "^4.2.1", | |||
"rc-tabs": "^11.7.3", | |||
"react": "^17.0.1", | |||
"react-dom": "^17.0.1", | |||
"react-ga": "^3.3.0", | |||
"react-icons": "^4.1.0", | |||
"react-masonry-component": "^6.2.1", | |||
"react-scroll": "^1.8.1", | |||
"react-stickynode": "^3.0.4", | |||
"swiper": "^6.4.5", | |||
"theme-ui": "^0.3.5" | |||
}, | |||
"devDependencies": { | |||
"imagemin-mozjpeg": "^9.0.0", | |||
"imagemin-optipng": "^8.0.0", | |||
"imagemin-svgo": "^8.0.0", | |||
"next-sitemap": "^1.4.5" | |||
} | |||
} |
@@ -0,0 +1,2 @@ | |||
User-agent: * | |||
Sitemap: https://example.io/sitemap.xml |
@@ -0,0 +1,6 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> | |||
<url> | |||
<loc>https://leerob.iosrc//index</loc> | |||
</url> | |||
</urlset> |
@@ -0,0 +1,24 @@ | |||
import ReactGA from 'react-ga'; | |||
export const initGA = () => { | |||
console.log('GA init'); | |||
ReactGA.initialize('UA-xxxxxxxxx-1'); | |||
}; | |||
export const logPageView = () => { | |||
console.log(`Logging pageview for ${window.location.pathname}`); | |||
ReactGA.set({ page: window.location.pathname }); | |||
ReactGA.pageview(window.location.pathname); | |||
}; | |||
export const logEvent = (category = '', action = '') => { | |||
if (category && action) { | |||
ReactGA.event({ category, action }); | |||
} | |||
}; | |||
export const logException = (description = '', fatal = false) => { | |||
if (description) { | |||
ReactGA.exception({ description, fatal }); | |||
} | |||
}; |
@@ -0,0 +1,107 @@ | |||
/** @jsxRuntime classic */ | |||
/** @jsx jsx */ | |||
import { jsx, Box, Flex, Image, Heading, Text } from 'theme-ui'; | |||
import { rgba } from 'polished'; | |||
import { Link } from 'components/link'; | |||
const BlogPost = ({ post }) => { | |||
return ( | |||
<Box | |||
as="article" | |||
sx={styles.post} | |||
className={`${post?.showDescription ? '' : 'no-description'} ${ | |||
!!post?.thumbnail ? '' : 'no-thumbnail' | |||
}`} | |||
> | |||
{!!post?.thumbnail && ( | |||
<Flex as="figure" sx={styles.thumbnail}> | |||
<Image src={post?.thumbnail} alt="post title" /> | |||
</Flex> | |||
)} | |||
<Box className="content"> | |||
<Heading as="h3" sx={styles.title}> | |||
<Link path={post?.slug}>{post?.title}</Link> | |||
</Heading> | |||
{post?.showDescription && ( | |||
<Text as="p" sx={styles.description}> | |||
{post?.description} | |||
</Text> | |||
)} | |||
</Box> | |||
</Box> | |||
); | |||
}; | |||
export default BlogPost; | |||
const styles = { | |||
post: { | |||
m: ['0 0 30px', null, null, '0 15px 30px'], | |||
width: ['100%', null, null, 'calc(50% - 30px)', 'calc(33.33% - 30px)'], | |||
':last-child': { | |||
mb: 0, | |||
}, | |||
'&.no-thumbnail': { | |||
'.content': { | |||
backgroundColor: '#FBF5F1', | |||
padding: '25px 25px 35px', | |||
borderRadius: 5, | |||
}, | |||
}, | |||
'&.no-description:not(.no-thumbnail)': { | |||
figure: { | |||
mb: 0, | |||
}, | |||
'.content': { | |||
position: 'absolute', | |||
left: 0, | |||
top: 0, | |||
right: 0, | |||
bottom: 0, | |||
display: 'flex', | |||
alignItems: 'flex-end', | |||
p: '0 11px 20px 20px', | |||
zIndex: 0, | |||
':before': { | |||
background: | |||
'linear-gradient(180.06deg, rgba(0, 0, 0, 0) 50%, rgba(0, 0, 0, 0.71) 99.95%)', | |||
borderRadius: 5, | |||
content: `''`, | |||
position: 'absolute', | |||
left: 0, | |||
top: 0, | |||
right: 0, | |||
bottom: 0, | |||
zIndex: -1, | |||
opacity: 0.9, | |||
}, | |||
'h3 a': { | |||
color: 'white', | |||
textDecoration: 'none', | |||
}, | |||
}, | |||
}, | |||
}, | |||
thumbnail: { | |||
mb: [4], | |||
img: { | |||
borderRadius: 5, | |||
}, | |||
}, | |||
title: { | |||
fontWeight: 700, | |||
fontSize: [2, null, null, 3, null, 4], | |||
lineHeight: [1.5, null, null, null, null, 1.76], | |||
letterSpacing: '-0.2px', | |||
a: { | |||
color: 'heading', | |||
textDecoration: 'none', | |||
}, | |||
}, | |||
description: { | |||
color: rgba('#0F2137', 0.6), | |||
lineHeight: 1.88, | |||
mt: [2], | |||
}, | |||
}; |
@@ -0,0 +1,53 @@ | |||
/** @jsxRuntime classic */ | |||
/** @jsx jsx */ | |||
import { jsx, Box, Image, Text, Heading } from 'theme-ui'; | |||
import { LearnMore } from 'components/link'; | |||
const Service = ({ item }) => { | |||
return ( | |||
<Box sx={styles.serviceItem}> | |||
<Box as="figure" sx={styles.figure}> | |||
<Image src={item?.icon} alt="icon" /> | |||
</Box> | |||
<Box sx={styles.content}> | |||
<Heading as="h3">{item?.title}</Heading> | |||
<Text as="p">{item?.description}</Text> | |||
{item?.moreLink && <LearnMore path={item?.moreLink} />} | |||
</Box> | |||
</Box> | |||
); | |||
}; | |||
export default Service; | |||
const styles = { | |||
serviceItem: { | |||
display: [null, null, null, null, null, 'flex'], | |||
textAlign: ['center', null, null, null, null, 'left'], | |||
}, | |||
figure: { | |||
minWidth: [88, null, null, null, null, 70, 88], | |||
mr: [null, null, null, null, null, 30], | |||
mb: [2, null, null, null, null, 0], | |||
img: { | |||
maxWidth: [42, null, null, 60, 70, '100%'], | |||
}, | |||
}, | |||
content: { | |||
h3: { | |||
color: 'heading', | |||
fontWeight: 700, | |||
fontFamily: 'body', | |||
fontSize: [2, null, null, 17, 3], | |||
lineHeight: [1.68], | |||
}, | |||
p: { | |||
fontSize: [1, null, null, null, 2], | |||
lineHeight: [1.88], | |||
mt: [2], | |||
}, | |||
a: { | |||
mt: [2, null, null, 3], | |||
}, | |||
}, | |||
}; |
@@ -0,0 +1,70 @@ | |||
/** @jsxRuntime classic */ | |||
/** @jsx jsx */ | |||
import { jsx, Flex, Box, Image, Text, Heading, Link } from 'theme-ui'; | |||
import { FaTwitter, FaGithub, FaDribbble } from 'react-icons/fa'; | |||
const TeamMember = ({ member }) => { | |||
return ( | |||
<Box sx={styles.section}> | |||
<Flex as="figure" sx={styles.avatar}> | |||
<Image src={member?.avatar} alt={member?.name} /> | |||
</Flex> | |||
<Box sx={styles.about}> | |||
<Heading as="h3">{member?.name}</Heading> | |||
<Text as="p">{member?.designation}</Text> | |||
<Box sx={styles.socialLinks}> | |||
{member?.socialLinks?.map((social, index) => ( | |||
<Link href={social?.link} key={index}> | |||
{social?.name === 'twitter' && ( | |||
<FaTwitter size="18px" color="#55ACEE" /> | |||
)} | |||
{social?.name === 'github' && ( | |||
<FaGithub size="18px" color="#161614" /> | |||
)} | |||
{social?.name === 'dribbble' && ( | |||
<FaDribbble | |||
size="18px" | |||
color="#B2215A" | |||
style={{ backgroundColor: '#E74D89', borderRadius: 20 }} | |||
/> | |||
)} | |||
</Link> | |||
))} | |||
</Box> | |||
</Box> | |||
</Box> | |||
); | |||
}; | |||
export default TeamMember; | |||
const styles = { | |||
avatar: { | |||
alignItems: 'center', | |||
justifyContent: 'center', | |||
}, | |||
about: { | |||
mt: [4], | |||
textAlign: ['center', null, null, 'left'], | |||
h3: { | |||
color: 'heading', | |||
fontFamily: 'body', | |||
fontSize: [3, null, 17, null, 4], | |||
}, | |||
p: { | |||
color: '#7589A1', | |||
letterSpacing: '-0.2px', | |||
mt: [2], | |||
}, | |||
}, | |||
socialLinks: { | |||
display: 'flex', | |||
alignItems: 'center', | |||
justifyContent: ['center', null, null, 'left'], | |||
mt: [3], | |||
a: { | |||
display: 'inline-flex', | |||
mr: [2], | |||
}, | |||
}, | |||
}; |
@@ -0,0 +1,64 @@ | |||
/** @jsxRuntime classic */ | |||
/** @jsx jsx */ | |||
import React from 'react'; | |||
import { RiCheckboxBlankFill, RiCheckboxFill } from 'react-icons/ri'; | |||
import { jsx, Flex } from 'theme-ui'; | |||
import { rgba } from 'polished'; | |||
const Checkbox = ({ id, label, onClick, checked, onChange, sx, ...props }) => { | |||
return ( | |||
<Flex sx={styles.checkbox} className={checked ? 'checked' : ''}> | |||
{checked ? ( | |||
<RiCheckboxFill size="24px" /> | |||
) : ( | |||
<RiCheckboxBlankFill size="24px" /> | |||
)} | |||
<input | |||
id={id} | |||
type="checkbox" | |||
checked={checked ?? checked} | |||
onChange={onChange} | |||
{...props} | |||
/> | |||
{label && <label htmlFor={id}>{label}</label>} | |||
</Flex> | |||
); | |||
}; | |||
export default React.memo(Checkbox); | |||
const styles = { | |||
checkbox: { | |||
// backgroundColor: '#EFF3F7', | |||
position: 'relative', | |||
borderRadius: '4px', | |||
alignItems: 'center', | |||
svg: { | |||
position: 'absolute', | |||
borderRadius: 4, | |||
left: 0, | |||
top: '-5px', | |||
path: { | |||
color: '#EFF3F7', | |||
}, | |||
}, | |||
input: { | |||
position: 'absolute', | |||
opacity: 0, | |||
visibility: 'hidden', | |||
}, | |||
label: { | |||
cursor: 'pointer', | |||
fontSize: '14px', | |||
lineHeight: 1, | |||
color: rgba('#9095AD', 0.9), | |||
paddingLeft: 30, | |||
zIndex: 10, | |||
}, | |||
'&.checked': { | |||
'svg path': { | |||
color: 'secondary', | |||
}, | |||
}, | |||
}, | |||
}; |
@@ -0,0 +1,55 @@ | |||
import React, { Fragment } from 'react'; | |||
import { Box } from 'theme-ui'; | |||
import RcDrawer from 'rc-drawer'; | |||
const Drawer = ({ | |||
className, | |||
children, | |||
closeButton, | |||
closeButtonStyle, | |||
drawerHandler, | |||
toggleHandler, | |||
open, | |||
width, | |||
placement, | |||
drawerStyle, | |||
closeBtnStyle, | |||
...props | |||
}) => { | |||
return ( | |||
<Fragment> | |||
<RcDrawer | |||
open={open} | |||
onClose={toggleHandler} | |||
className={`drawer ${className ? className : ''}`.trim()} | |||
width={width} | |||
placement={placement} | |||
handler={false} | |||
level={null} | |||
duration="0.4s" | |||
{...props} | |||
> | |||
{closeButton && ( | |||
<Box as="div" onClick={toggleHandler} sx={closeBtnStyle}> | |||
{closeButton} | |||
</Box> | |||
)} | |||
<Box sx={drawerStyle}>{children}</Box> | |||
</RcDrawer> | |||
<Box | |||
className="drawer__handler" | |||
style={{ display: 'inline-block' }} | |||
onClick={toggleHandler} | |||
> | |||
{drawerHandler} | |||
</Box> | |||
</Fragment> | |||
); | |||
}; | |||
Drawer.defaultProps = { | |||
width: '320px', | |||
placement: 'left', | |||
}; | |||
export default Drawer; |
@@ -0,0 +1,138 @@ | |||
import facebook from 'assets/images/icons/facebook.png'; | |||
import twitter from 'assets/images/icons/twitter.png'; | |||
import github from 'assets/images/icons/github.png'; | |||
import dribbble from 'assets/images/icons/dribbble.png'; | |||
export const menuItems = [ | |||
{ | |||
id: 2, | |||
title: 'About Us', | |||
items: [ | |||
{ | |||
path: '#!', | |||
label: 'Home', | |||
}, | |||
{ | |||
path: '#!', | |||
label: 'Thamrin Founder', | |||
}, | |||
{ | |||
path: '#!', | |||
label: 'Why Us', | |||
}, | |||
{ | |||
path: '#!', | |||
label: 'Blog', | |||
}, | |||
], | |||
}, | |||
{ | |||
id: 3, | |||
title: 'Our Business Partner', | |||
items: [ | |||
{ | |||
path: '#!', | |||
label: 'Thamrin Brothers', | |||
}, | |||
{ | |||
path: '#!', | |||
label: 'Nusa Sarana Citra Bakti', | |||
}, | |||
{ | |||
path: '#!', | |||
label: 'Citra Lestari Mobilindo', | |||
}, | |||
{ | |||
path: '#!', | |||
label: 'Citra Thamrin Motor', | |||
}, | |||
{ | |||
path: '#!', | |||
label: 'Thamrin Citra Abadi', | |||
}, | |||
{ | |||
path: '#!', | |||
label: 'Musi Lestari Indo Makmur', | |||
}, | |||
{ | |||
path: '#!', | |||
label: 'Musi Indah Makmur', | |||
}, | |||
], | |||
}, | |||
{ | |||
id: 4, | |||
title: 'Our Business Partner', | |||
items: [ | |||
{ | |||
path: '#!', | |||
label: 'BPR Berkat Sejati', | |||
}, | |||
{ | |||
path: '#!', | |||
label: 'Citra Nusa Bakti', | |||
}, | |||
{ | |||
path: '#!', | |||
label: 'Regis Institut', | |||
}, | |||
{ | |||
path: '#!', | |||
label: 'Citra Mandiri Asih Sejati', | |||
}, | |||
{ | |||
path: '#!', | |||
label: 'Thamrin Homes', | |||
}, | |||
], | |||
}, | |||
{ | |||
id: 5, | |||
title: 'Connect', | |||
items: [ | |||
{ | |||
path: '#!', | |||
icon: facebook, | |||
label: 'Facebook', | |||
}, | |||
{ | |||
path: '#!', | |||
icon: twitter, | |||
label: 'Twitter', | |||
}, | |||
{ | |||
path: '#!', | |||
icon: github, | |||
label: 'Github', | |||
}, | |||
{ | |||
path: '#!', | |||
icon: dribbble, | |||
label: 'Dribbble', | |||
}, | |||
], | |||
}, | |||
]; | |||
export const footerNav = [ | |||
{ | |||
path: '#!', | |||
label: 'Home', | |||
}, | |||
{ | |||
path: '#!', | |||
label: 'Advertise', | |||
}, | |||
{ | |||
path: '#!', | |||
label: 'Supports', | |||
}, | |||
{ | |||
path: '#!', | |||
label: 'Marketing', | |||
}, | |||
{ | |||
path: '#!', | |||
label: 'FAQ', | |||
}, | |||
]; |
@@ -0,0 +1,102 @@ | |||
/** @jsxRuntime classic */ | |||
/** @jsx jsx */ | |||
import { jsx, Box, Text, Container } from 'theme-ui'; | |||
import Logo from 'components/logo'; | |||
import { Link } from 'components/link'; | |||
import Widget from './widget'; | |||
import { menuItems } from './footer.data'; | |||
import { rgba } from 'polished'; | |||
export default function Footer() { | |||
return ( | |||
<Box as="footer" sx={styles.footer}> | |||
<Container> | |||
<Box sx={styles.footerTopInner}> | |||
<Box sx={styles.about}> | |||
<Box sx={styles.logo}> | |||
<Logo /> | |||
</Box> | |||
<Box sx={styles.terms}> | |||
<Link path="#!">Terms of use</Link> | |||
<Text as="span">|</Text> | |||
<Link path="#!">Privacy</Link> | |||
</Box> | |||
<Text as="p" sx={styles.copyright}> | |||
Copyright by {new Date().getFullYear()} Thamrin Group | |||
</Text> | |||
</Box> | |||
{menuItems.map(({ id, title, items }) => ( | |||
<Widget key={id} title={title} items={items} /> | |||
))} | |||
</Box> | |||
</Container> | |||
</Box> | |||
); | |||
} | |||
const styles = { | |||
footer: { | |||
pt: [8], | |||
pb: [8], | |||
}, | |||
footerTopInner: { | |||
gap: [30, null, 50, '20px 50px', 17, 50], | |||
display: ['grid'], | |||
gridTemplateColumns: [ | |||
'repeat(2, 1fr)', | |||
null, | |||
null, | |||
'repeat(4, 1fr)', | |||
'repeat(5, 1fr)', | |||
], | |||
}, | |||
footerInner: { | |||
borderTop: `1px solid #D9E0E7`, | |||
display: ['block', null, 'flex'], | |||
alignItems: 'center', | |||
justifyContent: 'space-between', | |||
padding: '35px 0 40px', | |||
}, | |||
about: { | |||
display: [null, null, null, 'grid', 'block'], | |||
gridTemplateColumns: '205px 1fr 1fr', | |||
alignItems: ['center'], | |||
gridRow: ['3/4', null, '1/1', '3/4', 'unset'], | |||
gridColumn: ['1/3', null, '1/2', '1/5', 'unset'], | |||
}, | |||
logo: { | |||
display: ['flex'], | |||
justifyContent: ['center', null, null, 'unset'], | |||
gridColumn: '1/2', | |||
}, | |||
terms: { | |||
display: ['flex'], | |||
gridColumn: '3/4', | |||
alignItems: ['center', null, null, null, 'flex-start', 'center'], | |||
flexDirection: ['row', null, null, null, 'column', 'row'], | |||
justifyContent: [ | |||
'center', | |||
null, | |||
'flex-start', | |||
'center', | |||
null, | |||
'flex-start', | |||
], | |||
mt: [4, null, null, 0, 4], | |||
a: { | |||
color: 'heading', | |||
}, | |||
span: { | |||
display: ['inline-flex', null, null, null, 'none', 'inline-flex'], | |||
m: ['0 10px'], | |||
}, | |||
}, | |||
copyright: { | |||
color: rgba('#0F2137', 0.6), | |||
fontSize: ['14px'], | |||
mt: [3, null, null, -31, 3], | |||
mr: [null, null, null, 'auto', 'unset'], | |||
gridColumn: '2/3', | |||
textAlign: ['center', null, 'left', 'center', 'left'], | |||
}, | |||
}; |
@@ -0,0 +1,51 @@ | |||
/** @jsxRuntime classic */ | |||
/** @jsx jsx */ | |||
import { jsx, Box, Heading, Image } from 'theme-ui'; | |||
import { Link } from 'components/link'; | |||
import { rgba } from 'polished'; | |||
const Widget = ({ title, items }) => { | |||
return ( | |||
<Box sx={styles.footerWidget}> | |||
<Heading as="h4">{title}</Heading> | |||
<ul> | |||
{items.map(({ path, label, icon }, i) => ( | |||
<li key={i}> | |||
{icon && <Image src={icon} alt={label} />} | |||
<Link path={path} key={i} label={label} variant="footer" /> | |||
</li> | |||
))} | |||
</ul> | |||
</Box> | |||
); | |||
}; | |||
export default Widget; | |||
const styles = { | |||
footerWidget: { | |||
h4: { | |||
color: 'heading', | |||
fontFamily: 'body', | |||
fontSize: '18px', | |||
fontWeight: 500, | |||
lineHeight: 1.68, | |||
letterSpacing: 'heading', | |||
}, | |||
ul: { | |||
listStyle: 'none', | |||
margin: '28px 0 0', | |||
padding: 0, | |||
li: { | |||
display: 'flex', | |||
alignItems: 'center', | |||
img: { | |||
mr: '15px', | |||
}, | |||
}, | |||
a: { | |||
color: rgba('#02073E', 0.8), | |||
}, | |||
}, | |||
}, | |||
}; |
@@ -0,0 +1,26 @@ | |||
export default [ | |||
{ | |||
path: 'home', | |||
label: 'Home', | |||
}, | |||
{ | |||
path: 'testimonials', | |||
label: 'Business Partner', | |||
}, | |||
{ | |||
path: 'team', | |||
label: 'Team', | |||
}, | |||
{ | |||
path: 'why-us', | |||
label: 'Why Us', | |||
}, | |||
{ | |||
path: 'blog', | |||
label: 'Blog', | |||
}, | |||
{ | |||
path: '', | |||
label: '', | |||
}, | |||
]; |
@@ -0,0 +1,117 @@ | |||
/** @jsxRuntime classic */ | |||
/** @jsx jsx */ | |||
import { jsx, Box, Container, Button } from 'theme-ui'; | |||
import Sticky from 'react-stickynode'; | |||
import Logo from 'components/logo'; | |||
import { NavLink } from 'components/link'; | |||
import { DrawerProvider } from 'contexts/drawer/drawer-provider'; | |||
import NavbarDrawer from './navbar-drawer'; | |||
import menuItems from './header.data'; | |||
import Image from 'assets/images/White.png' | |||
export default function Header() { | |||
return ( | |||
<DrawerProvider> | |||
<Box sx={styles.headerWrapper}> | |||
<Sticky enabled={true} top={0} activeClass="is-sticky" innerZ={100}> | |||
<Box as="header" sx={styles.header}> | |||
<Container> | |||
<Box sx={styles.headerInner}> | |||
<Logo sx={styles.logo} /> | |||
{/* <Image src={Image} /> */} | |||
<Box as="nav" sx={styles.navbar} className="navbar"> | |||
<Box as="ul" sx={styles.navList}> | |||
{menuItems.map(({ path, label }, i) => ( | |||
<li key={i}> | |||
<NavLink path={path} label={label} /> | |||
</li> | |||
))} | |||
</Box> | |||
</Box> | |||
<NavbarDrawer /> | |||
</Box> | |||
</Container> | |||
</Box> | |||
</Sticky> | |||
</Box> | |||
</DrawerProvider> | |||
); | |||
} | |||
const styles = { | |||
headerWrapper: { | |||
backgroundColor: 'transparent', | |||
'.is-sticky': { | |||
header: { | |||
backgroundColor: 'white', | |||
boxShadow: '0 6px 13px rgba(38,78,118,0.1)', | |||
paddingTop: '15px', | |||
paddingBottom: '15px', | |||
}, | |||
}, | |||
}, | |||
header: { | |||
position: 'fixed', | |||
left: 0, | |||
right: 0, | |||
py: 4, | |||
transition: 'all 0.3s ease-in-out 0s', | |||
'&.is-mobile-menu': { | |||
backgroundColor: 'white', | |||
}, | |||
}, | |||
headerInner: { | |||
display: 'flex', | |||
alignItems: 'center', | |||
justifyContent: 'space-between', | |||
}, | |||
logo: { | |||
mr: [null, null, null, null, 6, 12], | |||
}, | |||
navbar: { | |||
display: ['none', null, null, null, 'flex'], | |||
alignItems: 'center', | |||
flexGrow: 1, | |||
// justifyContent: 'center', | |||
}, | |||
navList: { | |||
display: ['flex'], | |||
listStyle: 'none', | |||
// marginLeft: 'auto', | |||
flexGrow: 1, | |||
p: 0, | |||
'li:last-child': { | |||
ml: ['auto'], | |||
}, | |||
'.nav-item': { | |||
cursor: 'pointer', | |||
fontWeight: 400, | |||
padding: 0, | |||
margin: [0, 0, 0, 0, '0 20px'], | |||
}, | |||
'.active': { | |||
color: 'primary', | |||
}, | |||
}, | |||
getStartedDesktop: { | |||
color: 'primary', | |||
display: ['none', 'none', 'none', 'none', 'flex'], | |||
}, | |||
getStartedMobile: { | |||
color: 'primary', | |||
fontSize: [1], | |||
minHeight: 30, | |||
m: ['0 15px 0 auto'], | |||
padding: '0 11px', | |||
display: ['flex', null, null, null, 'none'], | |||
}, | |||
closeButton: { | |||
height: '32px', | |||
padding: '4px', | |||
minHeight: 'auto', | |||
width: '32px', | |||
ml: '3px', | |||
path: { | |||
stroke: 'text', | |||
}, | |||
}, | |||
}; |
@@ -0,0 +1,142 @@ | |||
/** @jsxRuntime classic */ | |||
/** @jsx jsx */ | |||
import { IoMdMenu } from 'react-icons/io'; | |||
import React, { useContext } from 'react'; | |||
import { jsx, Box, Image } from 'theme-ui'; | |||
import { Link } from 'react-scroll'; | |||
import { DrawerContext } from 'contexts/drawer/drawer-context'; | |||
import Drawer from 'components/drawer'; | |||
import Logo from 'components/logo'; | |||
import menuItems from './header.data'; | |||
import close from 'assets/images/icons/close.png'; | |||
const DrawerNav = () => { | |||
const { state, dispatch } = useContext(DrawerContext); | |||
// Toggle drawer | |||
const toggleHandler = React.useCallback(() => { | |||
dispatch({ | |||
type: 'TOGGLE', | |||
}); | |||
}, [dispatch]); | |||
return ( | |||
<Drawer | |||
width="340px" | |||
placement="right" | |||
drawerHandler={ | |||
<Box sx={styles.handler}> | |||
<IoMdMenu size="26px" /> | |||
</Box> | |||
} | |||
open={state?.isOpen} | |||
toggleHandler={toggleHandler} | |||
closeButton={ | |||
<button sx={styles.closeButton}> | |||
<Image src={close} alt="close" /> | |||
</button> | |||
} | |||
maskStyle={styles.mask} | |||
drawerStyle={styles.drawer} | |||
closeBtnStyle={styles.close} | |||
> | |||
<Box sx={styles.wrapper}> | |||
<Logo sx={styles.logo} /> | |||
<Box as="ul" sx={styles.navbar}> | |||
{menuItems.map(({ path, label }, i) => ( | |||
<Box as="li" key={i}> | |||
<Link | |||
activeClass="active" | |||
to={path} | |||
spy={true} | |||
smooth={true} | |||
offset={-70} | |||
duration={500} | |||
> | |||
{label} | |||
</Link> | |||
</Box> | |||
))} | |||
</Box> | |||
</Box> | |||
</Drawer> | |||
); | |||
}; | |||
export default DrawerNav; | |||
const styles = { | |||
handler: { | |||
display: 'flex', | |||
alignItems: 'center', | |||
justifyContent: 'center', | |||
flexShrink: '0', | |||
width: '26px', | |||
cursor: 'pointer', | |||
'@media screen and (min-width: 1024px)': { | |||
display: 'none', | |||
}, | |||
}, | |||
drawer: { | |||
backgroundColor: 'white', | |||
width: '100%', | |||
height: '100%', | |||
outline: 0, | |||
}, | |||
mask: { | |||
opacity: 0.2, | |||
}, | |||
close: { | |||
position: 'absolute', | |||
top: 35, | |||
right: 30, | |||
zIndex: '1', | |||
}, | |||
closeButton: { | |||
alignItems: 'center', | |||
backgroundColor: 'transparent', | |||
border: 0, | |||
cursor: 'pointer', | |||
display: 'flex', | |||
p: 0, | |||
}, | |||
wrapper: { | |||
height: '100%', | |||
paddingTop: 30, | |||
width: '100%', | |||
}, | |||
logo: { | |||
ml: 30, | |||
mb: 45, | |||
}, | |||
navbar: { | |||
listStyle: 'none', | |||
m: 0, | |||
p: 0, | |||
'li > a': { | |||
backgroundColor: 'transparent', | |||
color: 'heading', | |||
display: 'flex', | |||
alignItems: 'center', | |||
minHeight: 44, | |||
paddingLeft: 30, | |||
position: 'relative', | |||
transition: 'all 0.3s ease-in-out 0s', | |||
'::before': { | |||
backgroundColor: 'transparent', | |||
content: `''`, | |||
position: 'absolute', | |||
height: '100%', | |||
left: 0, | |||
top: 0, | |||
width: 2, | |||
transition: 'all 0.3s ease-in-out 0s', | |||
}, | |||
}, | |||
'.active': { | |||
backgroundColor: '#F8F8F8', | |||
'::before': { | |||
backgroundColor: 'primary', | |||
}, | |||
}, | |||
}, | |||
}; |
@@ -0,0 +1,119 @@ | |||
import React from 'react'; | |||
const Logo = ({ white, ...props }) => { | |||
return ( | |||
<svg viewBox="0 0 185.92 36.62" width={185.92} height={36.62} {...props}> | |||
<defs> | |||
<linearGradient | |||
id="prefix__b" | |||
x1={16.08} | |||
y1={-16.52} | |||
x2={10.26} | |||
y2={20.44} | |||
gradientUnits="userSpaceOnUse" | |||
> | |||
<stop offset={0} stopColor="#0096d9" /> | |||
<stop offset={1} stopColor="#00c198" /> | |||
</linearGradient> | |||
<linearGradient | |||
id="prefix__c" | |||
x1={8.95} | |||
y1={13.48} | |||
x2={18.28} | |||
y2={32.02} | |||
gradientUnits="userSpaceOnUse" | |||
> | |||
<stop offset={0} stopColor="#002dd9" /> | |||
<stop offset={1} stopColor="#00b2ab" /> | |||
</linearGradient> | |||
<linearGradient | |||
id="prefix__a" | |||
x1={23.33} | |||
y1={-3.39} | |||
x2={5.66} | |||
y2={37.65} | |||
gradientUnits="userSpaceOnUse" | |||
> | |||
<stop offset={0} stopColor="#3482c0" /> | |||
<stop offset={0.45} stopColor="#96bede" /> | |||
<stop offset={0.83} stopColor="#e1edf6" /> | |||
<stop offset={1} stopColor="#fff" /> | |||
</linearGradient> | |||
<linearGradient | |||
id="prefix__d" | |||
x1={21.64} | |||
y1={1.42} | |||
x2={6.63} | |||
y2={30.44} | |||
xlinkHref="#prefix__a" | |||
/> | |||
<linearGradient | |||
id="prefix__e" | |||
x1={25.15} | |||
y1={3.24} | |||
x2={10.14} | |||
y2={32.25} | |||
gradientUnits="userSpaceOnUse" | |||
> | |||
<stop offset={0} stopColor="#569fa1" /> | |||
<stop offset={0.36} stopColor="#97c4c5" /> | |||
<stop offset={0.8} stopColor="#e2eeef" /> | |||
<stop offset={1} stopColor="#fff" /> | |||
</linearGradient> | |||
<radialGradient | |||
id="prefix__f" | |||
cx={21.16} | |||
cy={32.05} | |||
r={27.25} | |||
gradientUnits="userSpaceOnUse" | |||
> | |||
<stop offset={0} stopColor="#ff0" /> | |||
<stop offset={1} /> | |||
</radialGradient> | |||
</defs> | |||
<g data-name="Layer 2"> | |||
<g data-name="Layer 1"> | |||
<path | |||
d="M39.64 22.9h2.85a1.86 1.86 0 00.9 1.4 3.67 3.67 0 002 .53 3.33 3.33 0 001.9-.5A1.5 1.5 0 0048 23a1.32 1.32 0 00-.54-1.1 4.91 4.91 0 00-1.83-.71l-1.84-.4Q40 20 40 16.9a3.81 3.81 0 011.5-3.13 6.14 6.14 0 013.89-1.19 6.07 6.07 0 013.89 1.16 3.86 3.86 0 011.5 3.08H48a1.77 1.77 0 00-.79-1.4 3 3 0 00-1.82-.52 3 3 0 00-1.77.48 1.49 1.49 0 00-.66 1.26 1.25 1.25 0 00.53 1.05 5.29 5.29 0 001.77.68l1.71.36A6.18 6.18 0 0150 20.14a3.42 3.42 0 011 2.56 3.93 3.93 0 01-1.55 3.3 6.63 6.63 0 01-4.17 1.2 6.65 6.65 0 01-4.06-1.2 3.9 3.9 0 01-1.58-3.1zM53.33 14h2.85v2.42h1.93v2.18h-1.93v5c0 .78.41 1.18 1.23 1.18a4.44 4.44 0 00.69-.05v2.1a6.12 6.12 0 01-1.36.11 4.1 4.1 0 01-2.63-.66 2.74 2.74 0 01-.78-2.2V18.6h-1.48v-2.15h1.48zm10.29 11a2.39 2.39 0 001.6-.55 1.74 1.74 0 00.66-1.39v-.76l-2.2.13a2.3 2.3 0 00-1.24.4 1.09 1.09 0 00-.43.9 1.1 1.1 0 00.44.93 1.83 1.83 0 001.17.34zm-.94 2.06a3.6 3.6 0 01-2.51-.89 2.92 2.92 0 01-1-2.28 2.68 2.68 0 011-2.24 5.43 5.43 0 013-.93l2.63-.15v-.7a1.4 1.4 0 00-.47-1.13 1.91 1.91 0 00-1.28-.41 2.2 2.2 0 00-1.28.35 1.44 1.44 0 00-.6.95h-2.53A3.21 3.21 0 0161 17.17a5.31 5.31 0 013.29-1 5.05 5.05 0 013.23 1 3.09 3.09 0 011.21 2.54v7.2h-2.8v-1.6h-.06a3.08 3.08 0 01-1.3 1.3 3.89 3.89 0 01-1.89.47zm7.85-.16V16.45h2.76v1.88h.06a2.86 2.86 0 01.91-1.52 2.43 2.43 0 011.58-.53 2.88 2.88 0 01.81.11v2.51a2.79 2.79 0 00-1-.17 2.16 2.16 0 00-1.64.62 2.39 2.39 0 00-.59 1.72v5.85zm8-12.89h2.85v2.42h1.94v2.17h-1.89v5c0 .78.41 1.18 1.23 1.18a4.68 4.68 0 00.7-.05v2.1A6.24 6.24 0 0182 27a4.15 4.15 0 01-2.64-.66 2.74 2.74 0 01-.78-2.2V18.6h-1.47v-2.15h1.47zm16 2.42v10.49h-2.69V25h-.06a3.07 3.07 0 01-3.13 2.08 3.71 3.71 0 01-2.75-1 4 4 0 01-1-2.87v-6.76h2.85v6.15a2.28 2.28 0 00.5 1.59 1.86 1.86 0 001.45.55 1.9 1.9 0 001.51-.63 2.4 2.4 0 00.55-1.67v-6zm8-.17a3.79 3.79 0 013.14 1.44 6.14 6.14 0 011.15 4 6.33 6.33 0 01-1.13 4 4.1 4.1 0 01-5.09.92 3.15 3.15 0 01-1.27-1.41h-.03v5.17h-2.85V16.45h2.81v1.82h.06a3.35 3.35 0 011.27-1.46 3.7 3.7 0 011.97-.53zm-1 8.51a2 2 0 001.77-.77 3.71 3.71 0 00.63-2.27 3.67 3.67 0 00-.63-2.26 2 2 0 00-1.69-.85 2 2 0 00-1.68.86 3.6 3.6 0 00-.64 2.25 3.73 3.73 0 00.63 2.27 2 2 0 001.69.79zm22.07-.32v2.45h-9.11V12.82h3v11.65zm5.55.55a2.39 2.39 0 001.6-.55 1.74 1.74 0 00.66-1.39v-.76l-2.2.13a2.3 2.3 0 00-1.24.4 1.09 1.09 0 00-.43.9 1.1 1.1 0 00.44.93 1.83 1.83 0 001.25.34zm-.94 2.06a3.59 3.59 0 01-2.51-.89 2.92 2.92 0 01-1-2.28 2.68 2.68 0 011-2.24 5.43 5.43 0 013-.93l2.63-.15v-.7a1.43 1.43 0 00-.47-1.13 1.91 1.91 0 00-1.28-.41 2.18 2.18 0 00-1.28.35 1.44 1.44 0 00-.6.95h-2.61a3.21 3.21 0 011.32-2.48 5.31 5.31 0 013.29-1 5.07 5.07 0 013.23 1 3.09 3.09 0 011.21 2.54v7.2h-2.76v-1.58h-.06a3.08 3.08 0 01-1.3 1.3 3.89 3.89 0 01-1.73.47zm7.85-.16V16.45h2.76v1.86h.18a3.26 3.26 0 011.25-1.52 3.6 3.6 0 012-.54 3.46 3.46 0 012.68 1 4.12 4.12 0 011 2.88v6.75H143v-6.12a2.31 2.31 0 00-.49-1.59 1.83 1.83 0 00-1.44-.55 2 2 0 00-1.52.63 2.39 2.39 0 00-.57 1.66v6zm15.41.16a3.75 3.75 0 01-3.11-1.45 6.21 6.21 0 01-1.15-4 6.11 6.11 0 011.15-3.93 3.79 3.79 0 013.13-1.45 3.53 3.53 0 012 .54 3.17 3.17 0 011.25 1.42v-5.37h2.86v14.1h-2.82v-1.8h-.05a3.09 3.09 0 01-1.26 1.42 3.67 3.67 0 01-1.92.54zm1-8.51a2 2 0 00-1.7.84 3.75 3.75 0 00-.61 2.27 3.76 3.76 0 00.61 2.28 2.15 2.15 0 003.39 0 3.72 3.72 0 00.63-2.28 3.67 3.67 0 00-.63-2.26 2 2 0 00-1.64-.83zm7.11 8.35V16.45h2.85v10.47zm2.51-12.05a1.52 1.52 0 01-1.09.42 1.49 1.49 0 01-1.08-.42 1.44 1.44 0 01-.44-1 1.38 1.38 0 01.44-1 1.46 1.46 0 011.08-.43 1.49 1.49 0 011.09.43 1.38 1.38 0 01.44 1 1.44 1.44 0 01-.39 1.02zm2.24 12.05V16.45h2.76v1.86h.06a3.26 3.26 0 011.25-1.52 3.6 3.6 0 012-.54 3.44 3.44 0 012.68 1 4.07 4.07 0 01.95 2.88v6.75h-2.85v-6.12a2.31 2.31 0 00-.49-1.59 1.79 1.79 0 00-1.43-.55 2 2 0 00-1.53.63 2.43 2.43 0 00-.56 1.66v6zm16.36-2.23a2.05 2.05 0 001.7-.8 3.48 3.48 0 00.64-2.23 3.6 3.6 0 00-.64-2.25 2 2 0 00-1.7-.84 2 2 0 00-1.68.84 3.69 3.69 0 00-.61 2.25 3.6 3.6 0 00.61 2.23 2 2 0 001.73.82zm-.05 6.17a5.84 5.84 0 01-3.36-.9 3.19 3.19 0 01-1.48-2.3h2.79a1.54 1.54 0 00.74.88 2.8 2.8 0 001.39.34 2.41 2.41 0 001.69-.56 1.85 1.85 0 00.61-1.47V25H183a3 3 0 01-1.24 1.37 3.89 3.89 0 01-2 .51 3.8 3.8 0 01-3.09-1.41 5.88 5.88 0 01-1.15-3.84 6.06 6.06 0 011.15-3.92 3.82 3.82 0 013.14-1.44 3.59 3.59 0 012 .54 3.37 3.37 0 011.27 1.45v-1.81h2.82v10.32a3.58 3.58 0 01-1.44 3 6 6 0 01-3.77 1.09z" | |||
fill={white ? 'white' : '#0f2137'} | |||
/> | |||
<path | |||
d="M19.8.53A15.73 15.73 0 004.65 26.89L22.17 9.37A5.29 5.29 0 0019.8.53z" | |||
fill="url(#prefix__b)" | |||
/> | |||
<path | |||
d="M6.65 36.09A15.73 15.73 0 0021.81 9.73L4.29 27.25a5.28 5.28 0 002.36 8.84z" | |||
fill="url(#prefix__c)" | |||
/> | |||
<path | |||
d="M21.81 9.73L4.29 27.25a5.28 5.28 0 002.36 8.84 15.72 15.72 0 005.75.44c-7.68-7.39 9.41-26.8 9.41-26.8z" | |||
style={{ | |||
mixBlendMode: 'multiply', | |||
}} | |||
fill="url(#prefix__a)" | |||
/> | |||
<g | |||
style={{ | |||
mixBlendMode: 'multiply', | |||
}} | |||
> | |||
<path | |||
d="M6.33 36c-2.49-7.7 12.45-23.21 15.09-25.87L4.29 27.25A5.28 5.28 0 006.33 36z" | |||
fill="url(#prefix__d)" | |||
/> | |||
<path d="M21.75 9.79l.06-.06z" fill="url(#prefix__e)" /> | |||
</g> | |||
<path | |||
d="M23.45 7.29L4.64 26.88 22.17 9.37a5.14 5.14 0 001.28-2.08z" | |||
style={{ | |||
mixBlendMode: 'screen', | |||
}} | |||
fill="url(#prefix__f)" | |||
/> | |||
</g> | |||
</g> | |||
</svg> | |||
); | |||
}; | |||
export default Logo; |
@@ -0,0 +1,6 @@ | |||
import React from 'react'; | |||
import { Image as Img } from 'theme-ui'; | |||
export default function Image({ src, ...rest }) { | |||
return <Img src={src} {...rest} />; | |||
} |
@@ -0,0 +1,26 @@ | |||
/** @jsxRuntime classic */ | |||
/** @jsx jsx */ | |||
import { jsx, Input as InputField } from 'theme-ui'; | |||
import { rgba } from 'polished'; | |||
const Input = ({ ...props }) => { | |||
return <InputField sx={styles.input} {...props} />; | |||
}; | |||
export default Input; | |||
const styles = { | |||
input: { | |||
backgroundColor: '#EFF3F7', | |||
borderRadius: '5px', | |||
fontFamily: 'body', | |||
flexGrow: 1, | |||
p: ['0 24px'], | |||
height: 'auto', | |||
minHeight: '60px', | |||
width: 'auto', | |||
'::placeholder': { | |||
color: rgba('#02073E', 0.4), | |||
}, | |||
}, | |||
}; |
@@ -0,0 +1,27 @@ | |||
/** @jsxRuntime classic */ | |||
/** @jsx jsx */ | |||
import { jsx, Flex } from 'theme-ui'; | |||
import React from 'react'; | |||
import Header from './header/header'; | |||
import Footer from './footer/footer'; | |||
export default function Layout({ children }) { | |||
return ( | |||
<Flex | |||
sx={{ | |||
minHeight: '100vh', | |||
flexDirection: 'column', | |||
justifyContent: 'space-between', | |||
}} | |||
> | |||
<Header /> | |||
<main | |||
sx={{ | |||
variant: 'layout.main', | |||
}} | |||
> | |||
{children} | |||
</main> | |||
<Footer /> | |||
</Flex> | |||
); | |||
} |
@@ -0,0 +1,61 @@ | |||
/** @jsxRuntime classic */ | |||
/** @jsx jsx */ | |||
import NextLink from 'next/link'; | |||
import { jsx, Link as A } from 'theme-ui'; | |||
import { Link as MenuLink } from 'react-scroll'; | |||
import { HiOutlineChevronRight } from 'react-icons/hi'; | |||
export function NavLink({ path, label, children, ...rest }) { | |||
return ( | |||
<MenuLink | |||
to={path} | |||
spy={true} | |||
offset={-70} | |||
smooth={true} | |||
duration={500} | |||
className="nav-item" | |||
activeClass="active" | |||
{...rest} | |||
> | |||
{label} | |||
</MenuLink> | |||
); | |||
} | |||
export function Link({ path, label, children, ...rest }) { | |||
return ( | |||
<NextLink href={path}> | |||
<A {...rest}>{children ? children : label}</A> | |||
</NextLink> | |||
); | |||
} | |||
export function LearnMore({ path, label, children, ...rest }) { | |||
return ( | |||
<NextLink href={path}> | |||
<A sx={styles.learnMore} {...rest}> | |||
{label ?? 'Learn More'} <HiOutlineChevronRight /> | |||
</A> | |||
</NextLink> | |||
); | |||
} | |||
const styles = { | |||
learnMore: { | |||
color: 'link', | |||
cursor: 'pointer', | |||
fontSize: [1, 1, 1, 2], | |||
fontWeight: 500, | |||
display: 'inline-flex', | |||
alignItems: 'center', | |||
svg: { | |||
transition: 'margin-left 0.3s ease-in-out 0s', | |||
ml: '3px', | |||
}, | |||
':hover': { | |||
svg: { | |||
ml: '5px', | |||
}, | |||
}, | |||
}, | |||
}; |
@@ -0,0 +1,24 @@ | |||
/** @jsxRuntime classic */ | |||
/** @jsx jsx */ | |||
import { jsx } from 'theme-ui'; | |||
import { Link } from 'components/link'; | |||
import LogoSvg from 'components/icons/logo'; | |||
export default function Logo({ isSticky, footer, ...props }) { | |||
return ( | |||
<Link path="/" sx={styles.logo} {...props}> | |||
<LogoSvg /> | |||
</Link> | |||
); | |||
} | |||
const styles = { | |||
logo: { | |||
alignItems: 'center', | |||
cursor: 'pointer', | |||
display: 'inline-flex', | |||
svg: { | |||
height: 'auto', | |||
width: [128, null, '100%'], | |||
}, | |||
}, | |||
}; |
@@ -0,0 +1,43 @@ | |||
/** @jsxRuntime classic */ | |||
/** @jsx jsx */ | |||
import { jsx, Box, Heading, Text } from 'theme-ui'; | |||
const SectionHeading = ({ title, description, ...props }) => { | |||
return ( | |||
<Box sx={styles.heading} {...props}> | |||
<Heading sx={styles.title}>{title}</Heading> | |||
<Text as="p" sx={styles.description}> | |||
{description} | |||
</Text> | |||
</Box> | |||
); | |||
}; | |||
export default SectionHeading; | |||
const styles = { | |||
heading: { | |||
textAlign: 'center', | |||
maxWidth: 660, | |||
margin: ['0 auto 60px'], | |||
}, | |||
title: { | |||
fontFamily: 'heading', | |||
fontWeight: 700, | |||
fontSize: [5, null, null, 26, null, 30, 9], | |||
lineHeight: [1.33, 1.33, 1.48], | |||
letterSpacing: ['-0.5px', null, null, null, null, null, '-1px'], | |||
img: { | |||
ml: ['15px'], | |||
position: 'relative', | |||
top: '8px', | |||
}, | |||
}, | |||
description: { | |||
color: 'heading', | |||
fontSize: [1, null, null, 2], | |||
lineHeight: [1.58, 1.58, 1.58, 2.2], | |||
maxWidth: ['none', 'none', 'none', 'none', 490], | |||
margin: '15px auto 0', | |||
}, | |||
}; |
@@ -0,0 +1,58 @@ | |||
import React from 'react'; | |||
import Head from 'next/head'; | |||
export default function SEO({ | |||
description = 'startup landing descriptions', | |||
author = 'RedQ, Inc', | |||
meta, | |||
title = 'startup landing title', | |||
}) { | |||
const metaData = [ | |||
{ | |||
name: `description`, | |||
content: description, | |||
}, | |||
{ | |||
property: `og:title`, | |||
content: title, | |||
}, | |||
{ | |||
property: `og:description`, | |||
content: description, | |||
}, | |||
{ | |||
property: `og:type`, | |||
content: `website`, | |||
}, | |||
{ | |||
name: `twitter:card`, | |||
content: `summary`, | |||
}, | |||
{ | |||
name: `twitter:creator`, | |||
content: author, | |||
}, | |||
{ | |||
name: `twitter:title`, | |||
content: title, | |||
}, | |||
{ | |||
name: `twitter:description`, | |||
content: description, | |||
}, | |||
].concat(meta); | |||
return ( | |||
<Head> | |||
<title>{title}</title> | |||
{metaData.map(({ name, content }, i) => ( | |||
<meta key={i} name={name} content={content} /> | |||
))} | |||
</Head> | |||
); | |||
} | |||
SEO.defaultProps = { | |||
lang: `en`, | |||
meta: [], | |||
description: ``, | |||
}; |
@@ -0,0 +1,3 @@ | |||
import { createContext } from 'react'; | |||
export const DrawerContext = createContext({}); |
@@ -0,0 +1,25 @@ | |||
import React, { useReducer } from 'react'; | |||
import { DrawerContext } from './drawer-context'; | |||
const initialState = { | |||
isOpen: false, | |||
}; | |||
function reducer(state, action) { | |||
switch (action.type) { | |||
case 'TOGGLE': | |||
return { | |||
...state, | |||
isOpen: !state.isOpen, | |||
}; | |||
default: | |||
return state; | |||
} | |||
} | |||
export const DrawerProvider = ({ children }) => { | |||
const [state, dispatch] = useReducer(reducer, initialState); | |||
return ( | |||
<DrawerContext.Provider value={{ state, dispatch }}> | |||
{children} | |||
</DrawerContext.Provider> | |||
); | |||
}; |
@@ -0,0 +1,16 @@ | |||
import { useEffect } from 'react'; | |||
import Router from 'next/router'; | |||
import { initGA, logPageView } from 'analytics'; | |||
import 'rc-tabs/assets/index.css'; | |||
import 'swiper/swiper-bundle.min.css'; | |||
import 'rc-drawer/assets/index.css'; | |||
export default function CustomApp({ Component, pageProps }) { | |||
useEffect(() => { | |||
initGA(); | |||
logPageView(); | |||
Router.events.on('routeChangeComplete', logPageView); | |||
}, []); | |||
return <Component {...pageProps} />; | |||
} |
@@ -0,0 +1,27 @@ | |||
import Document, { Html, Head, Main, NextScript } from 'next/document'; | |||
class CustomDocument extends Document { | |||
static async getInitialProps(ctx) { | |||
const initialProps = await Document.getInitialProps(ctx); | |||
return { ...initialProps }; | |||
} | |||
render() { | |||
return ( | |||
<Html lang="en-US"> | |||
<Head> | |||
<link | |||
rel="stylesheet" | |||
href="https://fonts.googleapis.com/css2?family=B612:ital,wght@0,400;0,700;1,400;1,700&family=DM+Sans:ital,wght@0,400;0,500;0,700;1,400;1,500;1,700&display=swap" | |||
/> | |||
</Head> | |||
<body> | |||
<Main /> | |||
<NextScript /> | |||
</body> | |||
</Html> | |||
); | |||
} | |||
} | |||
export default CustomDocument; |
@@ -0,0 +1,32 @@ | |||
import { ThemeProvider } from 'theme-ui'; | |||
import theme from 'theme'; | |||
import SEO from 'components/seo'; | |||
import Layout from 'components/layout'; | |||
import Banner from 'sections/home'; | |||
import Services from 'sections/services'; | |||
import Testimonials from 'sections/business-partner'; | |||
import OurTeam from 'sections/our-team'; | |||
import OtherServices from 'sections/core-value'; | |||
import WhyUs from 'sections/why-us'; | |||
import SubscribeUs from 'sections/subscribe-us'; | |||
import Blog from 'sections/blog'; | |||
export default function IndexPage() { | |||
return ( | |||
<ThemeProvider theme={theme}> | |||
<Layout> | |||
<SEO | |||
title="Thamrin Group" | |||
/> | |||
<Banner /> | |||
<OtherServices /> | |||
<Testimonials /> | |||
{/* <Services /> */} | |||
<OurTeam /> | |||
<WhyUs /> | |||
<Blog /> | |||
{/* <SubscribeUs /> */} | |||
</Layout> | |||
</ThemeProvider> | |||
); | |||
} |
@@ -0,0 +1,87 @@ | |||
/** @jsxRuntime classic */ | |||
/** @jsx jsx */ | |||
import { jsx, Box, Container } from 'theme-ui'; | |||
import Masonry from 'react-masonry-component'; | |||
import SectionHeading from 'components/section-heading'; | |||
import BlogPost from 'components/cards/blog-post'; | |||
import thumb1 from 'assets/images/blog/1.png'; | |||
import thumb2 from 'assets/images/blog/2.png'; | |||
import thumb3 from 'assets/images/blog/3.png'; | |||
import thumb4 from 'assets/images/blog/4.png'; | |||
const data = [ | |||
{ | |||
id: 1, | |||
slug: '#how-to', | |||
thumbnail: thumb1, | |||
showDescription: true, | |||
title: `How to work with prototype design with adobe xd featuring tools`, | |||
description: `The 2019 Innovation by Design Awards honor the designers and businesses solving the problems of today and tomorrow. It is one of the most sought-after design`, | |||
}, | |||
{ | |||
id: 2, | |||
slug: '#how-to', | |||
thumbnail: null, | |||
showDescription: false, | |||
title: `Anti bias receives honorable gift mention at Fast Company’s most Innovation by Design Awards`, | |||
description: `The 2019 Innovation by Design Awards honor the designers and businesses solving the problems of today and tomorrow. It is one of the most sought-after design`, | |||
}, | |||
{ | |||
id: 3, | |||
slug: '#how-to', | |||
thumbnail: thumb3, | |||
showDescription: false, | |||
title: `Multiple task wireframing with team management perform better`, | |||
description: `The 2019 Innovation by Design Awards honor the designers and businesses solving the problems of today and tomorrow. It is one of the most sought-after design`, | |||
}, | |||
{ | |||
id: 4, | |||
slug: '#how-to', | |||
thumbnail: thumb2, | |||
showDescription: true, | |||
title: `Multiple art board prototype with Figma`, | |||
description: `Beyond launched anti bias, a Chrome extension that replaces LinkedIn profile photos`, | |||
}, | |||
{ | |||
id: 5, | |||
slug: '#how-to', | |||
thumbnail: thumb4, | |||
showDescription: false, | |||
title: `Team presentation with latest user interface & experience reach more`, | |||
description: `The 2019 Innovation by Design Awards honor the designers and businesses solving the problems of today and tomorrow. It is one of the most sought-after design`, | |||
}, | |||
]; | |||
const masonryOptions = { originTop: true }; | |||
const Blog = () => { | |||
return ( | |||
<Box as="section" id="blog" sx={styles.section}> | |||
<Container> | |||
<SectionHeading | |||
sx={styles.heading} | |||
title="Popular blog post we update everyday" | |||
description="Focus only on the meaning, we take care of the design. As soon as the meeting end you can export in one click." | |||
/> | |||
<Masonry options={masonryOptions} sx={styles.postContainer}> | |||
{data?.map((post) => ( | |||
<BlogPost key={post.id} post={post} /> | |||
))} | |||
</Masonry> | |||
</Container> | |||
</Box> | |||
); | |||
}; | |||
export default Blog; | |||
const styles = { | |||
section: { | |||
pt: [8, null, null, 9, null, 11], | |||
pb: [8, null, null, 9, null, 11], | |||
position: 'relative', | |||
}, | |||
heading: { | |||
mb: [6, 6, 7, 11], | |||
}, | |||
}; |
@@ -0,0 +1,124 @@ | |||
/** @jsxRuntime classic */ | |||
/** @jsx jsx */ | |||
import { jsx, Box, Container, Image, Text } from 'theme-ui'; | |||
import SectionHeading from 'components/section-heading'; | |||
import Tabs, { TabPane } from 'rc-tabs'; | |||
import { rgba } from 'polished'; | |||
import quote from 'assets/images/icons/quote.png'; | |||
import yamaha from 'assets/images/logos/yamaha.png'; | |||
import suzuki from 'assets/images/logos/suzuki.png'; | |||
import hino from 'assets/images/logos/hino.png'; | |||
import mercedes from 'assets/images/logos/mercedes.png'; | |||
import dribbble from 'assets/images/logos/dribbble.png'; | |||
import React from 'react'; | |||
import { makeStyles } from '@material-ui/core/styles'; | |||
import Card from '@material-ui/core/Card'; | |||
import CardActionArea from '@material-ui/core/CardActionArea'; | |||
import CardActions from '@material-ui/core/CardActions'; | |||
import CardContent from '@material-ui/core/CardContent'; | |||
import CardMedia from '@material-ui/core/CardMedia'; | |||
import Button from '@material-ui/core/Button'; | |||
import Typography from '@material-ui/core/Typography'; | |||
import Paper from '@material-ui/core/Paper'; | |||
import Grid from '@material-ui/core/Grid'; | |||
const useStyles = makeStyles({ | |||
root: { | |||
maxWidth: 600, | |||
flexGrow: 1, | |||
}, | |||
}); | |||
const Testimonials = () => { | |||
const classes = useStyles(); | |||
return ( | |||
<Box as="section" id="testimonials" sx={styles.section}> | |||
<Container> | |||
<SectionHeading | |||
sx={styles.heading} | |||
title="Our Business Partner" | |||
/> | |||
</Container> | |||
</Box> | |||
); | |||
}; | |||
export default Testimonials; | |||
const styles = { | |||
section: { | |||
backgroundColor: rgba('#FFF5ED', 0.5), | |||
pt: [7, null, null, 9, null, 10, 11], | |||
pb: [9, null, null, 10, 11], | |||
}, | |||
tabs: { | |||
border: 0, | |||
flexDirection: ['column-reverse', null, null, null, null, 'column'], | |||
'.rc-tabs-nav': { | |||
mt: [8, null, null, 9, 11], | |||
}, | |||
'.rc-tabs-nav-wrap': { | |||
borderTop: `1px solid ${rgba('#01070D', 0.1)}`, | |||
justifyContent: 'center', | |||
}, | |||
'.rc-tabs-tab': { | |||
backgroundColor: 'transparent', | |||
// m: ['0 45px'], | |||
}, | |||
'.rc-tabs-tab-btn': { | |||
display: 'flex', | |||
alignItems: 'center', | |||
lineHeight: 1, | |||
outline: 0, | |||
img: { | |||
outline: 0, | |||
maxWidth: [50, 65, null, 110, '80%', '100%'], | |||
m: ['0 auto'], | |||
}, | |||
}, | |||
'.rc-tabs-nav-list': { | |||
flexGrow: 1, | |||
justifyContent: 'space-evenly', | |||
pt: [4, null, null, 7, 9], | |||
}, | |||
'.rc-tabs-tabpane': { | |||
outline: 0, | |||
blockquote: { | |||
fontFamily: 'heading', | |||
fontWeight: 400, | |||
fontSize: [2, null, null, 3, 4, 6], | |||
lineHeight: [1.87, null, null, 2.08], | |||
position: 'relative', | |||
maxWidth: 846, | |||
margin: '0px auto', | |||
pt: ['12px', null, null, '17px', '13px'], | |||
pl: [35, 35, 35, 10, 11], | |||
':before': { | |||
background: `url(${quote}) no-repeat`, | |||
content: `''`, | |||
position: 'absolute', | |||
width: 128, | |||
height: 43, | |||
left: ['-31px', null, null, '-16px', '-7px', 0], | |||
top: ['1px', '1px', '1px', 0], | |||
backgroundSize: ['75%', null, null, '100%'], | |||
}, | |||
}, | |||
span: { | |||
color: '#7E8896', | |||
fontFamily: 'body', | |||
display: 'flex', | |||
fontWeight: 500, | |||
fontSize: [0, 1, 1, 2], | |||
lineHeight: 2.5, | |||
mt: [1, null, null, 3], | |||
}, | |||
}, | |||
'.rc-tabs-ink-bar': { | |||
top: 0, | |||
height: 2, | |||
backgroundColor: '#A17857', | |||
borderRadius: 5, | |||
}, | |||
}, | |||
}; |
@@ -0,0 +1,88 @@ | |||
/** @jsxRuntime classic */ | |||
/** @jsx jsx */ | |||
import { jsx, Box, Container } from 'theme-ui'; | |||
import SectionHeading from 'components/section-heading'; | |||
import Service from 'components/cards/service'; | |||
import core1 from 'assets/images/icons/core1.png'; | |||
import core2 from 'assets/images/icons/core2.png'; | |||
import core3 from 'assets/images/icons/core3.png'; | |||
import core4 from 'assets/images/icons/core4.png'; | |||
import core5 from 'assets/images/icons/core5.png'; | |||
const data = [ | |||
{ | |||
id: 1, | |||
icon: core1, | |||
title: 'INTEGRITY', | |||
description: `Get your info tests delivered at home collect a sample from the your progress tests.`, | |||
}, | |||
{ | |||
id: 2, | |||
icon: core2, | |||
title: 'CUSTOMER FOCUS', | |||
description: `Get your info tests delivered at home collect a sample from the your progress tests.`, | |||
}, | |||
{ | |||
id: 3, | |||
icon: core3, | |||
title: 'COMMUNICATION', | |||
description: `Get your info tests delivered at home collect a sample from the your progress tests.`, | |||
}, | |||
{ | |||
id: 4, | |||
icon: core4, | |||
title: 'CONTINUOUS IMPROVEMENT', | |||
description: `Get your info tests delivered at home collect a sample from the your progress tests.`, | |||
}, | |||
{ | |||
id: 6, | |||
icon: core5, | |||
title: 'TEAMWORK', | |||
description: `Get your info tests delivered at home collect a sample from the your progress tests.`, | |||
}, | |||
]; | |||
const OtherServices = () => { | |||
return ( | |||
<Box as="section" sx={styles.section}> | |||
<Container> | |||
<SectionHeading | |||
sx={styles.heading} | |||
title="Core Value Thamrin Group" | |||
/> | |||
<Box sx={styles.contentWrapper}> | |||
{data?.map((item) => ( | |||
<Service key={item.id} item={item} /> | |||
))} | |||
</Box> | |||
</Container> | |||
</Box> | |||
); | |||
}; | |||
export default OtherServices; | |||
const styles = { | |||
section: { | |||
backgroundColor: '#F9FAFC', | |||
pt: [9, 9, 9, 11], | |||
pb: [9, 9, 9, 12, 12, 14], | |||
}, | |||
heading: { | |||
mb: [6, null, null, 8, 9, null, 13], | |||
p: { | |||
maxWidth: 500, | |||
margin: '10px auto 0', | |||
}, | |||
}, | |||
contentWrapper: { | |||
gap: ['30px 30px', '30px 30px', '30px 30px', '80px 30px'], | |||
display: 'grid', | |||
justifyContent: ['center', 'center', 'center', 'unset'], | |||
gridTemplateColumns: [ | |||
'repeat(1, 285px)', | |||
'repeat(1, 325px)', | |||
'repeat(1, 285px)', | |||
'repeat(3, 1fr)', | |||
], | |||
}, | |||
}; |
@@ -0,0 +1,79 @@ | |||
/** @jsxRuntime classic */ | |||
/** @jsx jsx */ | |||
import { jsx, Box, Container, Button, Image } from 'theme-ui'; | |||
import { rgba } from 'polished'; | |||
import SectionHeading from 'components/section-heading'; | |||
import illustration from 'assets/images/welcome.png'; | |||
const Banner = () => { | |||
return ( | |||
<Box as="section" id="home" sx={styles.section}> | |||
<Container style={{width:"1700px"}}> | |||
<Box sx={styles.contentWrapper}> | |||
<SectionHeading | |||
sx={styles.heading} | |||
title="Selamat Datang di Thamrin Group" | |||
/> | |||
<Box as="figure" sx={styles.illustration}> | |||
<Image src={illustration} alt="illustration"/> | |||
</Box> | |||
</Box> | |||
</Container> | |||
</Box> | |||
); | |||
}; | |||
export default Banner; | |||
const styles = { | |||
section: { | |||
position: 'relative', | |||
pt: [105, null, null, 140, 15, null, 170], | |||
pb: [8, null, null, 0], | |||
zIndex: 0, | |||
':before': { | |||
backgroundColor: rgba('#FFF5ED', 0.5), | |||
content: ['none', null, null, `''`], | |||
position: 'absolute', | |||
left: 0, | |||
right: 0, | |||
bottom: 0, | |||
height: 72, | |||
zIndex: -1, | |||
}, | |||
}, | |||
contentWrapper: { | |||
display: 'flex', | |||
alignItems: 'center', | |||
flexDirection: 'column', | |||
justifyContent: 'flex-end', | |||
}, | |||
heading: { | |||
mb: [30], | |||
maxWidth: [null, null, null, 500, 560, 730], | |||
h2: { | |||
fontSize: [8, null, null, 8, 9, 10, 11], | |||
lineHeight: [1.57], | |||
}, | |||
p: { | |||
fontSize: [1, null, null, 3], | |||
lineHeight: [1.87, null, null, 2.33], | |||
}, | |||
}, | |||
illustration: { | |||
display: ['block', null, null, 'flex'], | |||
position: 'relative', | |||
img: { | |||
display: ['none', null, null, 'block'], | |||
maxWidth: ['90%'], | |||
m: ['0 auto'], | |||
}, | |||
}, | |||
buttonWrapper: { | |||
textAlign: ['center'], | |||
position: ['static', null, null, 'absolute'], | |||
left: '50%', | |||
top: 0, | |||
transform: ['unset', null, null, 'translateX(-50%)'], | |||
}, | |||
}; |
@@ -0,0 +1,322 @@ | |||
/** @jsxRuntime classic */ | |||
/** @jsx jsx */ | |||
import { useRef, useState, useEffect } from 'react'; | |||
import { jsx, Box, Container, Image } from 'theme-ui'; | |||
import SwiperCore, { Navigation, Pagination } from 'swiper'; | |||
import { Swiper, SwiperSlide } from 'swiper/react'; | |||
import SectionHeading from 'components/section-heading'; | |||
import TeamMember from 'components/cards/team-member'; | |||
import avatar1 from 'assets/images/team/member1.png'; | |||
import avatar2 from 'assets/images/team/member2.png'; | |||
import avatar3 from 'assets/images/team/member3.png'; | |||
import avatar4 from 'assets/images/team/member4.png'; | |||
import arrowRight from 'assets/images/icons/arrow-right.png'; | |||
SwiperCore.use([Navigation, Pagination]); | |||
const data = [ | |||
{ | |||
id: 1, | |||
avatar: avatar1, | |||
name: 'Emmalee Mclain', | |||
designation: 'Product Designer', | |||
socialLinks: [ | |||
{ | |||
name: 'twitter', | |||
link: 'http://twitter.com', | |||
}, | |||
{ | |||
name: 'github', | |||
link: 'http://github.com', | |||
}, | |||
{ | |||
name: 'dribbble', | |||
link: 'http://dribbble.com', | |||
}, | |||
], | |||
}, | |||
{ | |||
id: 2, | |||
avatar: avatar2, | |||
name: 'Daisy Morgan', | |||
designation: 'Lead developer', | |||
socialLinks: [ | |||
{ | |||
name: 'twitter', | |||
link: 'http://twitter.com', | |||
}, | |||
{ | |||
name: 'dribbble', | |||
link: 'http://dribbble.com', | |||
}, | |||
], | |||
}, | |||
{ | |||
id: 3, | |||
avatar: avatar3, | |||
name: 'Ariyanna Hicks', | |||
designation: 'Experience Designer', | |||
socialLinks: [ | |||
{ | |||
name: 'twitter', | |||
link: 'http://twitter.com', | |||
}, | |||
{ | |||
name: 'github', | |||
link: 'http://github.com', | |||
}, | |||
], | |||
}, | |||
{ | |||
id: 4, | |||
avatar: avatar4, | |||
name: 'Yamilet Hooker', | |||
designation: 'User interface designer', | |||
socialLinks: [ | |||
{ | |||
name: 'twitter', | |||
link: 'http://twitter.com', | |||
}, | |||
{ | |||
name: 'github', | |||
link: 'http://github.com', | |||
}, | |||
{ | |||
name: 'dribbble', | |||
link: 'http://dribbble.com', | |||
}, | |||
], | |||
}, | |||
{ | |||
id: 5, | |||
avatar: avatar1, | |||
name: 'Emmalee Mclain', | |||
designation: 'Product Designer', | |||
socialLinks: [ | |||
{ | |||
name: 'twitter', | |||
link: 'http://twitter.com', | |||
}, | |||
{ | |||
name: 'github', | |||
link: 'http://github.com', | |||
}, | |||
{ | |||
name: 'dribbble', | |||
link: 'http://dribbble.com', | |||
}, | |||
], | |||
}, | |||
{ | |||
id: 6, | |||
avatar: avatar2, | |||
name: 'Daisy Morgan', | |||
designation: 'Lead developer', | |||
socialLinks: [ | |||
{ | |||
name: 'twitter', | |||
link: 'http://twitter.com', | |||
}, | |||
{ | |||
name: 'dribbble', | |||
link: 'http://dribbble.com', | |||
}, | |||
], | |||
}, | |||
{ | |||
id: 7, | |||
avatar: avatar3, | |||
name: 'Ariyanna Hicks', | |||
designation: 'Experience Designer', | |||
socialLinks: [ | |||
{ | |||
name: 'twitter', | |||
link: 'http://twitter.com', | |||
}, | |||
{ | |||
name: 'github', | |||
link: 'http://github.com', | |||
}, | |||
], | |||
}, | |||
{ | |||
id: 8, | |||
avatar: avatar4, | |||
name: 'Yamilet Hooker', | |||
designation: 'User interface designer', | |||
socialLinks: [ | |||
{ | |||
name: 'twitter', | |||
link: 'http://twitter.com', | |||
}, | |||
{ | |||
name: 'github', | |||
link: 'http://github.com', | |||
}, | |||
{ | |||
name: 'dribbble', | |||
link: 'http://dribbble.com', | |||
}, | |||
], | |||
}, | |||
]; | |||
const OurTeam = () => { | |||
const swiperRef = useRef(null); | |||
const containerRef = useRef(null); | |||
const [currentIndex, setCurrentIndex] = useState(0); | |||
const [containerOffset, setContainerOffset] = useState({ | |||
left: null, | |||
top: null, | |||
}); | |||
const isEnd = swiperRef?.current?.swiper?.isEnd; | |||
const handlePrev = () => { | |||
swiperRef?.current?.swiper?.slidePrev(); | |||
setInterval(() => { | |||
setCurrentIndex(swiperRef?.current?.swiper?.activeIndex); | |||
}, 100); | |||
clearInterval(); | |||
}; | |||
const handleNext = () => { | |||
swiperRef?.current?.swiper?.slideNext(); | |||
setInterval(() => { | |||
setCurrentIndex(swiperRef?.current?.swiper?.activeIndex); | |||
}, 100); | |||
clearInterval(); | |||
}; | |||
useEffect(() => { | |||
setContainerOffset({ | |||
left: containerRef.current.offsetLeft, | |||
top: containerRef.current.offsetTop, | |||
}); | |||
}, [containerRef]); | |||
const breakpoints = { | |||
0: { | |||
slidesPerView: 1, | |||
spaceBetween: 0, | |||
}, | |||
768: { | |||
slidesPerView: 3, | |||
spaceBetween: 30, | |||
}, | |||
1024: { | |||
slidesPerView: 4, | |||
spaceBetween: 30, | |||
}, | |||
1601: { | |||
slidesPerView: 5, | |||
spaceBetween: 30, | |||
}, | |||
}; | |||
return ( | |||
<Box as="section" id="team" sx={styles.section}> | |||
<Container ref={containerRef}> | |||
<SectionHeading | |||
sx={styles.heading} | |||
title="Thamrin Group Founder" | |||
// description="Build an incredible workplace and grow your business with Gusto’s all-in-one platform with amazing contents." | |||
/> | |||
</Container> | |||
<Box | |||
sx={{ | |||
ml: currentIndex === 0 ? containerOffset?.left : 0, | |||
...styles.teamWrapper, | |||
}} | |||
> | |||
{currentIndex !== 0 && ( | |||
<button | |||
onClick={handlePrev} | |||
className="swiper-arrow swiper-arrow-left" | |||
> | |||
<Image src={arrowRight} alt="arrow left" /> | |||
</button> | |||
)} | |||
{!isEnd && ( | |||
<button | |||
className="swiper-arrow swiper-arrow-right" | |||
onClick={handleNext} | |||
> | |||
<Image src={arrowRight} alt="arrow right" /> | |||
</button> | |||
)} | |||
<Swiper | |||
ref={swiperRef} | |||
spaceBetween={30} | |||
watchSlidesVisibility={true} | |||
slidesPerView={5} | |||
breakpoints={breakpoints} | |||
> | |||
{data?.map((item) => ( | |||
<SwiperSlide key={item.id}> | |||
<TeamMember member={item} /> | |||
</SwiperSlide> | |||
))} | |||
</Swiper> | |||
</Box> | |||
</Box> | |||
); | |||
}; | |||
export default OurTeam; | |||
const styles = { | |||
section: { | |||
pt: [11], | |||
pb: [11, null, null, 12, null, 14], | |||
}, | |||
heading: { | |||
p: { | |||
maxWidth: 500, | |||
m: '10px auto 0', | |||
}, | |||
}, | |||
teamWrapper: { | |||
position: 'relative', | |||
pl: [6], | |||
pr: [6, null, null, 0], | |||
transition: '0.3s ease-in-out 0s', | |||
'.swiper-arrow': { | |||
backgroundColor: '#fff', | |||
border: 0, | |||
cursor: 'pointer', | |||
padding: 0, | |||
display: 'flex', | |||
width: [30, null, null, null, 40, 60], | |||
height: [30, null, null, null, 40, 60], | |||
alignItems: 'center', | |||
justifyContent: 'center', | |||
boxShadow: '0px 7px 14px rgba(25, 60, 101, 0.06)', | |||
borderRadius: '50%', | |||
position: 'absolute', | |||
zIndex: 2, | |||
top: 'calc(50% - 40px)', | |||
transform: 'translateY(-50%)', | |||
outline: 0, | |||
img: { | |||
maxWidth: [8, 10, null, null, '100%'], | |||
}, | |||
}, | |||
'.swiper-arrow-left': { | |||
left: [3, null, null, null, 20, 50], | |||
img: { | |||
transform: 'rotate(180deg)', | |||
marginLeft: '-4px', | |||
}, | |||
}, | |||
'.swiper-arrow-right': { | |||
right: [3, null, null, null, 20, 50], | |||
img: { | |||
marginRight: '-4px', | |||
}, | |||
}, | |||
}, | |||
}; |
@@ -0,0 +1,74 @@ | |||
/** @jsxRuntime classic */ | |||
/** @jsx jsx */ | |||
import { jsx, Box, Container } from 'theme-ui'; | |||
import { rgba } from 'polished'; | |||
import SectionHeading from 'components/section-heading'; | |||
import Service from 'components/cards/service'; | |||
import icon1 from 'assets/images/icons/service1.png'; | |||
import icon2 from 'assets/images/icons/service2.png'; | |||
import icon3 from 'assets/images/icons/service3.png'; | |||
const data = [ | |||
{ | |||
id: 1, | |||
icon: icon1, | |||
title: 'Marketing & advertising', | |||
description: `Get your info tests delivered at home collect a sample from the your progress tests.`, | |||
}, | |||
{ | |||
id: 3, | |||
icon: icon2, | |||
title: 'Ultimate development', | |||
description: `Get your info tests delivered at home collect a sample from the your progress tests.`, | |||
}, | |||
{ | |||
id: 4, | |||
icon: icon3, | |||
title: 'Business Enterprise', | |||
description: `Get your info tests delivered at home collect a sample from the your progress tests.`, | |||
}, | |||
]; | |||
const Services = () => { | |||
return ( | |||
<Box as="section" id="services" sx={styles.section}> | |||
<Container> | |||
<SectionHeading | |||
sx={styles.heading} | |||
title="Grow your startup with our Service" | |||
description="Build an incredible workplace and grow your business with Gusto’s all-in-one platform with amazing contents." | |||
/> | |||
<Box sx={styles.contentWrapper}> | |||
{data?.map((item) => ( | |||
<Service key={item.id} item={item} /> | |||
))} | |||
</Box> | |||
</Container> | |||
</Box> | |||
); | |||
}; | |||
export default Services; | |||
const styles = { | |||
section: { | |||
backgroundColor: rgba('#FFF5ED', 0.5), | |||
pt: [11, 11, 11, 12, 12, 12, 14], | |||
pb: [7, 7, 7, 9, 9, 10, 11], | |||
}, | |||
heading: { | |||
maxWidth: [null, null, null, 455, 660], | |||
mb: [6, null, null, 8, null, 9, 13], | |||
}, | |||
contentWrapper: { | |||
gap: 30, | |||
display: 'grid', | |||
justifyContent: ['center', null, null, 'unset'], | |||
gridTemplateColumns: [ | |||
'repeat(1, 285px)', | |||
'repeat(1, 325px)', | |||
'repeat(1, 285px)', | |||
'repeat(3, 1fr)', | |||
], | |||
}, | |||
}; |
@@ -0,0 +1,143 @@ | |||
/** @jsxRuntime classic */ | |||
/** @jsx jsx */ | |||
import { useState, useCallback } from 'react'; | |||
import { jsx, Box, Container, Button, Flex, Checkbox, Label } from 'theme-ui'; | |||
import { rgba } from 'polished'; | |||
import SectionHeading from 'components/section-heading'; | |||
import Input from 'components/input'; | |||
import illustration from 'assets/images/subscribe-bg.png'; | |||
const SubscribeUs = () => { | |||
const [checked, setChecked] = useState(false); | |||
const handleSubmit = (e) => { | |||
e.preventDefault(); | |||
console.log('submitted.'); | |||
}; | |||
const handleCheckbox = useCallback(() => { | |||
setChecked(!checked); | |||
}, [checked]); | |||
return ( | |||
<Box as="section" sx={styles.section} variant="section.subscribe"> | |||
<Container> | |||
<Box sx={styles.contentWrapper}> | |||
<SectionHeading | |||
sx={styles.heading} | |||
title="Like our service? Subscribe us" | |||
description="We have more than thousand of creative entrepreneurs and stat joining our business" | |||
/> | |||
<Box as="form" sx={styles.subscribe} onSubmit={handleSubmit}> | |||
<Flex sx={styles.inputGroup}> | |||
<Label htmlFor="email" variant="styles.srOnly"> | |||
</Label> | |||
<Input | |||
id="email" | |||
type="email" | |||
className="email-input" | |||
placeholder="Enter Email address" | |||
/> | |||
<Button variant="secondary">Subscribe</Button> | |||
</Flex> | |||
<Box sx={styles.checkbox}> | |||
<Label htmlFor="no_spam" className={checked ? 'checked' : ''}> | |||
<Checkbox | |||
id="no_spam" | |||
onChange={handleCheckbox} | |||
defaultChecked={checked} | |||
/> | |||
Don’t provide any promotional message. | |||
</Label> | |||
{/* <Checkbox | |||
id="no_spam" | |||
checked={checked} | |||
onChange={handleCheckbox} | |||
label="Don’t provide any promotional message." | |||
/> */} | |||
</Box> | |||
</Box> | |||
</Box> | |||
</Container> | |||
</Box> | |||
); | |||
}; | |||
export default SubscribeUs; | |||
const styles = { | |||
section: { | |||
background: [ | |||
'none', | |||
null, | |||
null, | |||
`#F8F0EA url(${illustration}) no-repeat center bottom / contain`, | |||
], | |||
pt: [8, null, null, null, 10], | |||
pb: [8, null, null, 9, 11], | |||
}, | |||
contentWrapper: { | |||
backgroundColor: '#fff', | |||
borderRadius: 15, | |||
p: [null, null, null, '40px 110px 50px', '50px 50px', '40px'], | |||
gap: '50px', | |||
display: ['block', null, 'grid', 'block', 'grid'], | |||
alignItems: 'center', | |||
gridTemplateColumns: ['repeat(2, 1fr)'], | |||
}, | |||
heading: { | |||
textAlign: ['center', null, 'left', 'center', 'left'], | |||
mb: ['30px', null, null, null, 0], | |||
ml: 0, | |||
h2: { | |||
fontSize: [6, null, null, null, null, 8, 9], | |||
}, | |||
p: { | |||
lineHeight: 1.87, | |||
marginTop: 1, | |||
ml: ['auto', null, null, null, 0], | |||
mr: ['auto', null, null, null, 0], | |||
maxWidth: 420, | |||
}, | |||
}, | |||
subscribe: { | |||
'.email-input': { | |||
mr: [0, null, null, '15px'], | |||
minHeight: ['50px', '50px', '60px'], | |||
}, | |||
button: { | |||
minHeight: ['50px', '50px', '60px'], | |||
fontSize: ['14px', '14px', '16px'], | |||
mt: ['15px', null, null, 0], | |||
}, | |||
}, | |||
inputGroup: { | |||
flexDirection: ['column', null, null, 'row'], | |||
}, | |||
checkbox: { | |||
mt: ['24px'], | |||
label: { | |||
display: 'flex', | |||
alignItems: 'center', | |||
cursor: 'pointer', | |||
fontSize: '14px', | |||
fontWeight: 400, | |||
lineHeight: 1.14, | |||
color: rgba('#9095AD', 0.9), | |||
zIndex: 10, | |||
svg: { | |||
path: { | |||
fill: '#EFF3F7', | |||
}, | |||
}, | |||
'&.checked': { | |||
svg: { | |||
path: { | |||
fill: 'primary', | |||
}, | |||
}, | |||
}, | |||
}, | |||
}, | |||
}; |
@@ -0,0 +1,191 @@ | |||
/** @jsxRuntime classic */ | |||
/** @jsx jsx */ | |||
import { jsx, Box, Container, Heading, Text, Image } from 'theme-ui'; | |||
import Tabs, { TabPane } from 'rc-tabs'; | |||
import { RiCheckboxCircleFill } from 'react-icons/ri'; | |||
import { rgba } from 'polished'; | |||
import { LearnMore } from 'components/link'; | |||
import tabImage1 from 'assets/images/tab-illustration-1.png'; | |||
const data = [ | |||
{ | |||
id: 1, | |||
tabTitle: 'Why you choose our service?', | |||
title: `We will turn your idea in the successful business model framework`, | |||
description: `Get your tests delivered at let home collect sample from the victory of the managements that supplies best design system guidelines ever.`, | |||
moreLink: '#explore-more', | |||
image: tabImage1, | |||
list: [ | |||
'Medical and vision', | |||
'Life insurance', | |||
'HSAs and FSAs', | |||
'Commuter benefits', | |||
], | |||
}, | |||
{ | |||
id: 2, | |||
tabTitle: 'What’s our business promise?', | |||
title: `We will turn your idea in the successful business model framework`, | |||
description: `Get your tests delivered at let home collect sample from the victory of the managements that supplies best design system guidelines ever.`, | |||
moreLink: '#explore-more', | |||
image: tabImage1, | |||
list: [ | |||
'Medical and vision', | |||
'Life insurance', | |||
'HSAs and FSAs', | |||
'Commuter benefits', | |||
], | |||
}, | |||
{ | |||
id: 3, | |||
tabTitle: 'What’s our role model plan?', | |||
title: `We will turn your idea in the successful business model framework`, | |||
description: `Get your tests delivered at let home collect sample from the victory of the managements that supplies best design system guidelines ever.`, | |||
moreLink: '#explore-more', | |||
image: tabImage1, | |||
list: [ | |||
'Medical and vision', | |||
'Life insurance', | |||
'HSAs and FSAs', | |||
'Commuter benefits', | |||
], | |||
}, | |||
]; | |||
const WhyUs = () => { | |||
return ( | |||
<Box as="section" id="why-us" sx={styles.section}> | |||
<Container> | |||
<Tabs sx={styles.tabs} animated={{ tabPane: true }}> | |||
{data?.map((item) => ( | |||
<TabPane | |||
key={item.id} | |||
tab={<Heading as="h4">{item.tabTitle}</Heading>} | |||
> | |||
<Box> | |||
<Heading>{item.title}</Heading> | |||
<Text as="p" sx={styles.description}> | |||
{item.description} | |||
</Text> | |||
<Box sx={styles.list}> | |||
{item.list.map((item, i) => ( | |||
<Box key={i} className="list-item"> | |||
<RiCheckboxCircleFill | |||
color="#3FDBB1" | |||
size="20px" | |||
sx={{ mr: 2 }} | |||
/> | |||
<span>{item}</span> | |||
</Box> | |||
))} | |||
</Box> | |||
<Box sx={styles.learnMore}> | |||
<LearnMore path={item.moreLink} label="Explore more" /> | |||
</Box> | |||
</Box> | |||
<Box sx={styles.illustration}> | |||
<Image src={item.image} alt="illustration" /> | |||
</Box> | |||
</TabPane> | |||
))} | |||
</Tabs> | |||
</Container> | |||
</Box> | |||
); | |||
}; | |||
export default WhyUs; | |||
const styles = { | |||
section: { | |||
pt: [11, null, null, 12], | |||
pb: [8, null, null, 9, null, 11], | |||
}, | |||
tabs: { | |||
border: 0, | |||
'.rc-tabs-nav': { | |||
mb: [8, null, null, 9, 10, 9, 12], | |||
}, | |||
'.rc-tabs-nav-wrap': { | |||
borderBottom: `1px solid ${rgba('#01070D', 0.1)}`, | |||
justifyContent: 'center', | |||
}, | |||
'.rc-tabs-nav-list': { | |||
flexGrow: 1, | |||
justifyContent: 'space-evenly', | |||
pb: [3, null, null, 5, null, 6], | |||
}, | |||
'.rc-tabs-tab-btn': { | |||
outline: 0, | |||
alignItems: 'center', | |||
img: { | |||
outline: 0, | |||
}, | |||
}, | |||
'.rc-tabs-tab': { | |||
backgroundColor: 'transparent', | |||
// m: ['0 45px'], | |||
h4: { | |||
fontFamily: 'body', | |||
fontSize: [0, null, null, 17, null, null, 4], | |||
fontWeight: 700, | |||
lineHeight: 1.5, | |||
textAlign: ['center', null, null, null, 'left'], | |||
whiteSpace: ['break-spaces', null, null, null, 'unset'], | |||
}, | |||
}, | |||
'.rc-tabs-tabpane': { | |||
display: ['flex', null, null, 'grid'], | |||
flexDirection: ['column-reverse', null, null, 'unset'], | |||
alignItems: 'center', | |||
justifyContent: 'center', | |||
gridTemplateColumns: [null, null, null, '0.9fr 1.1fr'], | |||
outline: 0, | |||
gap: [5, null, null, 11], | |||
h2: { | |||
color: 'heading', | |||
fontSize: [24, null, null, 6, 26, 8, 40], | |||
fontWeight: 700, | |||
lineHeight: [1.45, null, null, 1.5], | |||
letterSpacing: [null, null, null, '0.5px', null, '-1px'], | |||
textAlign: ['center', null, null, 'left'], | |||
}, | |||
p: { | |||
color: 'textSecondary', | |||
fontSize: [1, null, null, 2, 17], | |||
lineHeight: [1.87, null, null, 2, 2.48], | |||
textAlign: ['center', null, null, 'left'], | |||
mt: [4], | |||
}, | |||
'.list-item': { | |||
fontSize: [0, null, null, 1, 2], | |||
fontWeight: 500, | |||
lineHeight: [2.8], | |||
display: 'flex', | |||
alignItems: 'center', | |||
}, | |||
}, | |||
}, | |||
list: { | |||
mt: [5], | |||
display: 'grid', | |||
justifyContent: ['center', null, null, 'unset'], | |||
gridTemplateColumns: ['repeat(2, 164px)', null, null, 'repeat(2, 180px)'], | |||
}, | |||
learnMore: { | |||
mt: [4], | |||
textAlign: ['center', null, null, 'left'], | |||
a: { | |||
fontSize: [null, null, null, 1, 2], | |||
}, | |||
}, | |||
illustration: { | |||
display: ['flex'], | |||
alignItems: 'center', | |||
justifyContent: 'center', | |||
textAlign: [null, null, null, null, null, 'center'], | |||
img: { | |||
maxWidth: ['65%', null, null, '100%', null, '90%', '100%'], | |||
}, | |||
}, | |||
}; |
@@ -0,0 +1,339 @@ | |||
export default { | |||
// example colors with dark mode | |||
colors: { | |||
text: '#343D48', // body color and primary color | |||
textSecondary: '#02073E', // secondary body color | |||
heading: '#0F2137', // primary heading color | |||
headingSecondary: '#343D48', // heading color | |||
background: '#FFFFFF', // body background color | |||
backgroundSecondary: '#F9FBFD', // secondary background color | |||
borderColor: '#F3F4F5', // border color | |||
primary: '#0A8080', // primary button and link color | |||
secondary: '#DB4A87', // secondary color - can be used for hover states | |||
muted: '#7B8188', // muted color | |||
accent: '#609', // a contrast color for emphasizing UI | |||
dark: '#10132D', | |||
link: '#4F96FF', // default link color | |||
// highlight a background color for highlighting text | |||
modes: { | |||
dark: { | |||
text: '#fff', | |||
background: '#000', | |||
primary: '#0cf', | |||
secondary: '#09c', | |||
muted: '#111', | |||
}, | |||
}, | |||
}, | |||
fonts: { | |||
body: 'DM Sans', | |||
// body: | |||
// 'system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", sans-serif', | |||
heading: 'B612, sans-serif', | |||
monospace: 'Menlo, monospace', | |||
}, | |||
fontSizes: [ | |||
12, // 0 | |||
14, // 1 | |||
16, // 2 | |||
18, // 3 | |||
20, // 4 | |||
22, // 5 | |||
24, // 6 | |||
28, // 7 | |||
32, // 8 | |||
36, // 9 | |||
42, // 10 | |||
48, // 11 | |||
52, // 12 | |||
64, //13 | |||
], | |||
fontWeights: { | |||
body: 'normal', | |||
// body: 400, | |||
heading: 500, | |||
// heading: 700, | |||
bold: 700, | |||
}, | |||
lineHeights: { | |||
body: 1.5, | |||
// body: 1.5, | |||
heading: 1.25, | |||
// heading: 1.125, | |||
}, | |||
letterSpacings: { | |||
body: 'normal', | |||
caps: '0.2em', | |||
heading: '-0.5px', | |||
}, | |||
space: [ | |||
0, //0 | |||
5, //1 | |||
10, //2 | |||
15, //3 | |||
20, //4 | |||
25, //5 | |||
30, //6 | |||
40, //7 | |||
50, //8 | |||
60, //9 | |||
70, //10 | |||
80, //11 | |||
100, //12 | |||
120, //13 | |||
130, //14 | |||
150, //15 | |||
], | |||
sizes: {}, | |||
breakpoints: [ | |||
'480px', | |||
'640px', | |||
'768px', | |||
'1024px', | |||
'1200px', | |||
'1367px', | |||
'1440px', | |||
'1600px', | |||
], | |||
// variants can use custom, user-defined names | |||
layout: { | |||
container: { | |||
maxWidth: ['100%', null, null, null, '970px', '1140px', '1260px'], | |||
paddingLeft: [3, 6], | |||
paddingRight: [3, 6], | |||
m: '0 auto', | |||
}, | |||
toolbar: { | |||
display: 'flex', | |||
alignItems: 'center', | |||
// justifyContent: 'space-between', | |||
}, | |||
main: {}, | |||
footer: {}, | |||
}, | |||
section: { | |||
banner: {}, | |||
}, | |||
text: { | |||
heading: { | |||
fontFamily: 'heading', | |||
lineHeight: 'heading', | |||
fontWeight: 'heading', | |||
}, | |||
heroTitle: { | |||
fontSize: [4, null, null, 5, null, 5, 6], | |||
fontWeight: 700, | |||
letterSpacing: 'heading', | |||
lineHeight: [1.4, null, null, null, null, null, 1.57], | |||
}, | |||
}, | |||
links: { | |||
bold: { | |||
fontWeight: 'bold', | |||
}, | |||
logo: { | |||
display: 'inline-flex', | |||
}, | |||
learnMore: { | |||
display: 'inline-flex', | |||
alignItems: 'center', | |||
textDecoration: 'none', | |||
fontWeight: 700, | |||
color: 'primary', | |||
}, | |||
nav: { | |||
display: ['none', null, 'inline-flex'], | |||
p: 2, | |||
}, | |||
footer: { | |||
display: 'flex', | |||
px: 0, | |||
color: 'inherit', | |||
textDecoration: 'none', | |||
fontSize: '14px', | |||
lineHeight: 2.5, | |||
}, | |||
}, | |||
images: { | |||
avatar: { | |||
width: 48, | |||
height: 48, | |||
borderRadius: 99999, | |||
}, | |||
}, | |||
// variants for buttons | |||
buttons: { | |||
menu: { | |||
display: ['block', null, null, null, 'none'], | |||
svg: { | |||
width: '32px', | |||
}, | |||
}, | |||
default: { | |||
backgroundColor: 'transparent', | |||
fontFamily: 'body', | |||
fontWeight: 'bold', | |||
borderRadius: '5px', | |||
cursor: 'pointer', | |||
display: 'inline-flex', | |||
alignItems: 'center', | |||
justifyContent: 'center', | |||
transition: '0.3s ease-in-out 0s', | |||
whiteSpace: 'nowrap', | |||
}, | |||
primary: { | |||
variant: 'buttons.default', | |||
color: 'white', | |||
bg: 'primary', | |||
minHeight: ['50px', null, null, null, null, '60px'], | |||
padding: ['0 25px', null, null, '0 30px'], | |||
'&:hover': { | |||
bg: 'dark', | |||
}, | |||
}, | |||
primaryMd: { | |||
variant: 'buttons.primary', | |||
minHeight: '50px', | |||
px: '25px', | |||
}, | |||
secondary: { | |||
variant: 'buttons.primary', | |||
color: 'white', | |||
bg: 'secondary', | |||
}, | |||
muted: { | |||
variant: 'buttons.default', | |||
backgroundColor: '#EDF0F2', | |||
color: 'text', | |||
':hover': { | |||
backgroundColor: 'primary', | |||
color: '#fff', | |||
}, | |||
}, | |||
white: { | |||
variant: 'buttons.default', | |||
backgroundColor: 'white', | |||
color: '#020718', | |||
}, | |||
text: { | |||
variant: 'buttons.default', | |||
color: 'text', | |||
}, | |||
}, | |||
cards: { | |||
primary: { | |||
padding: 2, | |||
borderRadius: 4, | |||
// boxShadow: '0 0 4px 1px rgba(0, 0, 0, 0.5)', | |||
}, | |||
offer: { | |||
display: 'flex', | |||
flexDirection: 'column', | |||
justifyContent: 'center', | |||
alignItems: 'center', | |||
flex: ['1 1 calc(50% - 16px)', '1 1 20%'], | |||
minHeight: 130, | |||
m: 2, | |||
background: '#FFFFFF', | |||
border: '1px solid #EDEFF6', | |||
borderRadius: 5, | |||
}, | |||
featureCard: { | |||
display: 'flex', | |||
alignItems: ['center', 'flex-start'], | |||
flexDirection: ['column', 'row'], | |||
p: [0, 3], | |||
}, | |||
}, | |||
forms: { | |||
label: { | |||
fontSize: 1, | |||
fontWeight: 'bold', | |||
}, | |||
input: { | |||
borderRadius: 8, | |||
borderColor: 'borderColor', | |||
height: 60, | |||
'&:focus': { | |||
borderColor: 'primary', | |||
boxShadow: (t) => `0 0 0 2px ${t.colors.primary}`, | |||
outline: 'none', | |||
}, | |||
}, | |||
}, | |||
badges: { | |||
primary: { | |||
color: 'background', | |||
bg: '#28A5FF', | |||
borderRadius: 30, | |||
p: '3px 11px', | |||
fontSize: 1, | |||
letterSpacing: '-0.5px', | |||
}, | |||
outline: { | |||
color: 'primary', | |||
bg: 'transparent', | |||
boxShadow: 'inset 0 0 0 1px', | |||
}, | |||
}, | |||
styles: { | |||
// To add base, top-level styles to the <body> element, use theme.styles.root. | |||
root: { | |||
fontFamily: 'body', | |||
lineHeight: 'body', | |||
fontWeight: 'body', | |||
}, | |||
// h1-h6 Heading styles | |||
h1: { | |||
// fontFamily: 'none', | |||
// variant: 'text.heading', | |||
// fontSize: 6, | |||
}, | |||
h2: { | |||
// fontFamily: 'none', | |||
// variant: 'text.heading', | |||
// fontSize: 5, | |||
}, | |||
h3: { | |||
variant: 'text.heading', | |||
fontSize: 4, | |||
}, | |||
h4: { | |||
variant: 'text.heading', | |||
fontSize: 3, | |||
}, | |||
h5: { | |||
variant: 'text.heading', | |||
fontSize: 2, | |||
}, | |||
h6: { | |||
variant: 'text.heading', | |||
fontSize: 1, | |||
}, | |||
// Divider styles | |||
hr: { | |||
border: 0, | |||
borderBottom: '1px solid', | |||
borderColor: '#D9E0E7', | |||
}, | |||
// also you can use other HTML elements style here | |||
ul: { | |||
listStyle: 'none', | |||
}, | |||
srOnly: { | |||
border: '0 !important', | |||
clip: 'rect(1px, 1px, 1px, 1px) !important', | |||
clipPath: 'inset(50%) !important', | |||
height: '1px !important', | |||
margin: '-1px !important', | |||
overflow: 'hidden !important', | |||
padding: '0 !important', | |||
position: 'absolute !important', | |||
width: '1px !important', | |||
whiteSpace: 'nowrap !important', | |||
}, | |||
}, | |||
}; |
@@ -0,0 +1,7 @@ | |||
{ | |||
"build": { | |||
"env": { | |||
} | |||
} | |||
} |