├── .prettierignore ├── styles ├── scss │ ├── core │ │ ├── _mixins.scss │ │ ├── variables │ │ │ ├── _brand.scss │ │ │ ├── _bootstrap-material-design-base.scss │ │ │ ├── _shadow.scss │ │ │ └── _functions.scss │ │ ├── _variables.scss │ │ ├── _page-transition.scss │ │ ├── _misc.scss │ │ └── mixins │ │ │ └── _colored-shadows.scss │ ├── nextjs-material-kit.scss │ └── plugins │ │ └── _plugin-react-slick.scss └── jss │ └── nextjs-material-kit │ ├── components │ ├── cardBodyStyle.ts │ ├── cardFooterStyle.ts │ ├── cardHeaderStyle.ts │ ├── cardStyle.ts │ ├── parallaxStyle.ts │ ├── badgeStyle.ts │ ├── typographyStyle.ts │ ├── infoStyle.ts │ ├── footerStyle.ts │ ├── customLinearProgressStyle.ts │ ├── customTabsStyle.ts │ ├── snackbarContentStyle.ts │ ├── customInputStyle.ts │ ├── headerLinksStyle.ts │ ├── navPillsStyle.ts │ ├── headerStyle.ts │ ├── paginationStyle.ts │ └── customDropdownStyle.ts │ ├── pages │ ├── componentsSections │ │ ├── completedStyle.ts │ │ ├── tabsStyle.ts │ │ ├── carouselStyle.ts │ │ ├── pillsStyle.ts │ │ ├── exampleStyle.ts │ │ ├── notificationsStyles.ts │ │ ├── downloadStyle.ts │ │ ├── basicsStyle.ts │ │ ├── javascriptStyles.ts │ │ ├── typographyStyle.ts │ │ ├── loginStyle.ts │ │ └── navbarsStyle.ts │ ├── landingPageSections │ │ ├── productStyle.ts │ │ ├── workStyle.ts │ │ └── teamStyle.ts │ ├── landingPage.ts │ ├── components.ts │ ├── profilePage.ts │ └── loginPage.ts │ ├── tooltipsStyle.ts │ ├── imagesStyles.ts │ ├── modalStyle.ts │ ├── popoverStyles.ts │ └── customCheckboxRadioSwitch.ts ├── public └── img │ ├── bg.jpg │ ├── bg2.jpg │ ├── bg3.jpg │ ├── bg4.jpg │ ├── bg7.jpg │ ├── sign.jpg │ ├── favicon.png │ ├── landing.jpg │ ├── profile.jpg │ ├── apple-icon.png │ ├── faces │ ├── avatar.jpg │ ├── camp.jpg │ ├── marc.jpg │ ├── kendall.jpg │ ├── christian.jpg │ ├── card-profile1-square.jpg │ ├── card-profile2-square.jpg │ ├── card-profile4-square.jpg │ ├── card-profile5-square.jpg │ └── card-profile6-square.jpg │ ├── landing-bg.jpg │ ├── profile-bg.jpg │ ├── nextjs_header.jpg │ └── examples │ ├── studio-1.jpg │ ├── studio-2.jpg │ ├── studio-3.jpg │ ├── studio-4.jpg │ ├── studio-5.jpg │ ├── olu-eletu.jpg │ ├── clem-onojegaw.jpg │ ├── clem-onojeghuo.jpg │ ├── cynthia-del-rio.jpg │ └── mariya-georgieva.jpg ├── Documentation └── assets │ └── img │ ├── mask.png │ ├── cover.jpeg │ ├── favicon.png │ ├── new_logo.png │ ├── apple-icon.png │ ├── faces │ └── marc.jpg │ ├── reactlogo.png │ ├── sidebar-1.jpg │ ├── sidebar-2.jpg │ ├── sidebar-3.jpg │ ├── sidebar-4.jpg │ └── tim_80x80.png ├── next.config.js ├── next-env.d.ts ├── types └── global.d.ts ├── pages ├── 404.tsx ├── index.tsx ├── _error.tsx ├── api │ └── post.ts ├── _document.tsx ├── landing.tsx ├── blog │ ├── [slug].tsx │ └── index.tsx ├── _app.tsx └── components.tsx ├── .gitignore ├── components ├── Clearfix │ └── Clearfix.tsx ├── Typography │ ├── Small.tsx │ ├── Primary.tsx │ ├── Info.tsx │ ├── Muted.tsx │ ├── Success.tsx │ ├── Danger.tsx │ ├── Warning.tsx │ └── Quote.tsx ├── Badge │ └── Badge.tsx ├── Grid │ ├── GridContainer.tsx │ └── GridItem.tsx ├── Card │ ├── CardFooter.tsx │ ├── CardBody.tsx │ ├── Card.tsx │ └── CardHeader.tsx ├── CustomLinearProgress │ └── CustomLinearProgress.tsx ├── PageChange │ └── PageChange.tsx ├── Blog │ └── BlogCard.tsx ├── InfoArea │ └── InfoArea.tsx ├── Pagination │ └── Pagination.tsx ├── CustomButtons │ └── Button.tsx ├── Snackbar │ └── SnackbarContent.tsx ├── Parallax │ └── Parallax.tsx ├── CustomInput │ └── CustomInput.tsx ├── Footer │ └── Footer.tsx ├── CustomTabs │ └── CustomTabs.tsx ├── NavPills │ └── NavPills.tsx └── Header │ ├── HeaderLinks.tsx │ └── Header.tsx ├── blog ├── simple-about.mdx ├── simple-article-2.mdx ├── simple-article-3.mdx ├── simple-article-4.mdx └── react-article.mdx ├── LICENSE.md ├── pages-sections ├── Components-Sections │ ├── SectionCompletedExamples.tsx │ ├── SectionNotifications.tsx │ ├── SectionExamples.tsx │ ├── SectionCarousel.tsx │ ├── SectionDownload.tsx │ └── SectionLogin.tsx └── LandingPage-Sections │ ├── WorkSection.tsx │ └── ProductSection.tsx ├── utils └── markdown.ts ├── package.json ├── tsconfig.json └── CHANGELOG.md /.prettierignore: -------------------------------------------------------------------------------- 1 | Documentation/assets/js 2 | -------------------------------------------------------------------------------- /styles/scss/core/_mixins.scss: -------------------------------------------------------------------------------- 1 | @import "mixins/colored-shadows"; 2 | -------------------------------------------------------------------------------- /public/img/bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/nextjs-material-kit/HEAD/public/img/bg.jpg -------------------------------------------------------------------------------- /public/img/bg2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/nextjs-material-kit/HEAD/public/img/bg2.jpg -------------------------------------------------------------------------------- /public/img/bg3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/nextjs-material-kit/HEAD/public/img/bg3.jpg -------------------------------------------------------------------------------- /public/img/bg4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/nextjs-material-kit/HEAD/public/img/bg4.jpg -------------------------------------------------------------------------------- /public/img/bg7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/nextjs-material-kit/HEAD/public/img/bg7.jpg -------------------------------------------------------------------------------- /public/img/sign.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/nextjs-material-kit/HEAD/public/img/sign.jpg -------------------------------------------------------------------------------- /public/img/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/nextjs-material-kit/HEAD/public/img/favicon.png -------------------------------------------------------------------------------- /public/img/landing.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/nextjs-material-kit/HEAD/public/img/landing.jpg -------------------------------------------------------------------------------- /public/img/profile.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/nextjs-material-kit/HEAD/public/img/profile.jpg -------------------------------------------------------------------------------- /public/img/apple-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/nextjs-material-kit/HEAD/public/img/apple-icon.png -------------------------------------------------------------------------------- /public/img/faces/avatar.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/nextjs-material-kit/HEAD/public/img/faces/avatar.jpg -------------------------------------------------------------------------------- /public/img/faces/camp.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/nextjs-material-kit/HEAD/public/img/faces/camp.jpg -------------------------------------------------------------------------------- /public/img/faces/marc.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/nextjs-material-kit/HEAD/public/img/faces/marc.jpg -------------------------------------------------------------------------------- /public/img/landing-bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/nextjs-material-kit/HEAD/public/img/landing-bg.jpg -------------------------------------------------------------------------------- /public/img/profile-bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/nextjs-material-kit/HEAD/public/img/profile-bg.jpg -------------------------------------------------------------------------------- /public/img/faces/kendall.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/nextjs-material-kit/HEAD/public/img/faces/kendall.jpg -------------------------------------------------------------------------------- /public/img/nextjs_header.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/nextjs-material-kit/HEAD/public/img/nextjs_header.jpg -------------------------------------------------------------------------------- /public/img/examples/studio-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/nextjs-material-kit/HEAD/public/img/examples/studio-1.jpg -------------------------------------------------------------------------------- /public/img/examples/studio-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/nextjs-material-kit/HEAD/public/img/examples/studio-2.jpg -------------------------------------------------------------------------------- /public/img/examples/studio-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/nextjs-material-kit/HEAD/public/img/examples/studio-3.jpg -------------------------------------------------------------------------------- /public/img/examples/studio-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/nextjs-material-kit/HEAD/public/img/examples/studio-4.jpg -------------------------------------------------------------------------------- /public/img/examples/studio-5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/nextjs-material-kit/HEAD/public/img/examples/studio-5.jpg -------------------------------------------------------------------------------- /public/img/faces/christian.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/nextjs-material-kit/HEAD/public/img/faces/christian.jpg -------------------------------------------------------------------------------- /Documentation/assets/img/mask.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/nextjs-material-kit/HEAD/Documentation/assets/img/mask.png -------------------------------------------------------------------------------- /public/img/examples/olu-eletu.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/nextjs-material-kit/HEAD/public/img/examples/olu-eletu.jpg -------------------------------------------------------------------------------- /Documentation/assets/img/cover.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/nextjs-material-kit/HEAD/Documentation/assets/img/cover.jpeg -------------------------------------------------------------------------------- /Documentation/assets/img/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/nextjs-material-kit/HEAD/Documentation/assets/img/favicon.png -------------------------------------------------------------------------------- /Documentation/assets/img/new_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/nextjs-material-kit/HEAD/Documentation/assets/img/new_logo.png -------------------------------------------------------------------------------- /public/img/examples/clem-onojegaw.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/nextjs-material-kit/HEAD/public/img/examples/clem-onojegaw.jpg -------------------------------------------------------------------------------- /Documentation/assets/img/apple-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/nextjs-material-kit/HEAD/Documentation/assets/img/apple-icon.png -------------------------------------------------------------------------------- /Documentation/assets/img/faces/marc.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/nextjs-material-kit/HEAD/Documentation/assets/img/faces/marc.jpg -------------------------------------------------------------------------------- /Documentation/assets/img/reactlogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/nextjs-material-kit/HEAD/Documentation/assets/img/reactlogo.png -------------------------------------------------------------------------------- /Documentation/assets/img/sidebar-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/nextjs-material-kit/HEAD/Documentation/assets/img/sidebar-1.jpg -------------------------------------------------------------------------------- /Documentation/assets/img/sidebar-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/nextjs-material-kit/HEAD/Documentation/assets/img/sidebar-2.jpg -------------------------------------------------------------------------------- /Documentation/assets/img/sidebar-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/nextjs-material-kit/HEAD/Documentation/assets/img/sidebar-3.jpg -------------------------------------------------------------------------------- /Documentation/assets/img/sidebar-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/nextjs-material-kit/HEAD/Documentation/assets/img/sidebar-4.jpg -------------------------------------------------------------------------------- /Documentation/assets/img/tim_80x80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/nextjs-material-kit/HEAD/Documentation/assets/img/tim_80x80.png -------------------------------------------------------------------------------- /public/img/examples/clem-onojeghuo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/nextjs-material-kit/HEAD/public/img/examples/clem-onojeghuo.jpg -------------------------------------------------------------------------------- /public/img/examples/cynthia-del-rio.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/nextjs-material-kit/HEAD/public/img/examples/cynthia-del-rio.jpg -------------------------------------------------------------------------------- /public/img/examples/mariya-georgieva.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/nextjs-material-kit/HEAD/public/img/examples/mariya-georgieva.jpg -------------------------------------------------------------------------------- /public/img/faces/card-profile1-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/nextjs-material-kit/HEAD/public/img/faces/card-profile1-square.jpg -------------------------------------------------------------------------------- /public/img/faces/card-profile2-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/nextjs-material-kit/HEAD/public/img/faces/card-profile2-square.jpg -------------------------------------------------------------------------------- /public/img/faces/card-profile4-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/nextjs-material-kit/HEAD/public/img/faces/card-profile4-square.jpg -------------------------------------------------------------------------------- /public/img/faces/card-profile5-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/nextjs-material-kit/HEAD/public/img/faces/card-profile5-square.jpg -------------------------------------------------------------------------------- /public/img/faces/card-profile6-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/app-generator/nextjs-material-kit/HEAD/public/img/faces/card-profile6-square.jpg -------------------------------------------------------------------------------- /next.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | reactStrictMode: true, 4 | images: { 5 | unoptimized: true, 6 | }, 7 | }; 8 | 9 | module.exports = nextConfig; 10 | -------------------------------------------------------------------------------- /styles/jss/nextjs-material-kit/components/cardBodyStyle.ts: -------------------------------------------------------------------------------- 1 | const cardBodyStyle = { 2 | cardBody: { 3 | padding: "0.9375rem 1.875rem", 4 | flex: "1 1 auto", 5 | }, 6 | }; 7 | 8 | export default cardBodyStyle; 9 | -------------------------------------------------------------------------------- /next-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | 4 | // NOTE: This file should not be edited 5 | // see https://nextjs.org/docs/basic-features/typescript for more information. 6 | -------------------------------------------------------------------------------- /types/global.d.ts: -------------------------------------------------------------------------------- 1 | import { ReactNode } from "react"; 2 | 3 | export interface ReactChildrenProps { 4 | children: ReactNode | ReactNode[]; 5 | } 6 | export interface ReactClassChildrenProps extends ReactChildrenProps { 7 | className?: string; 8 | } 9 | 10 | -------------------------------------------------------------------------------- /styles/scss/core/variables/_brand.scss: -------------------------------------------------------------------------------- 1 | // Bootstrap brand color customization 2 | $brand-primary: $purple !default; 3 | $brand-success: $green !default; 4 | $brand-danger: $red !default; 5 | $brand-warning: $orange !default; 6 | $brand-info: $cyan !default; 7 | $brand-rose: $pink !default; 8 | -------------------------------------------------------------------------------- /pages/404.tsx: -------------------------------------------------------------------------------- 1 | import React, { Component } from "react"; 2 | import Router from "next/router"; 3 | 4 | export default class _error extends Component { 5 | componentDidMount = () => { 6 | Router.push("/components"); 7 | }; 8 | 9 | render() { 10 | return
; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /pages/index.tsx: -------------------------------------------------------------------------------- 1 | import React, { Component } from "react"; 2 | import Router from "next/router"; 3 | 4 | export default class Index extends Component { 5 | componentDidMount = () => { 6 | Router.push("/components"); 7 | }; 8 | 9 | render() { 10 | return
; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /pages/_error.tsx: -------------------------------------------------------------------------------- 1 | import React, { Component } from "react"; 2 | import Router from "next/router"; 3 | 4 | export default class _error extends Component { 5 | componentDidMount = () => { 6 | Router.push("/components"); 7 | }; 8 | 9 | render() { 10 | return
; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /styles/jss/nextjs-material-kit/components/cardFooterStyle.ts: -------------------------------------------------------------------------------- 1 | const cardFooterStyle = { 2 | cardFooter: { 3 | display: "flex", 4 | alignItems: "center", 5 | backgroundColor: "transparent", 6 | padding: "0.9375rem 1.875rem", 7 | }, 8 | }; 9 | 10 | export default cardFooterStyle; 11 | -------------------------------------------------------------------------------- /styles/jss/nextjs-material-kit/pages/componentsSections/completedStyle.ts: -------------------------------------------------------------------------------- 1 | import { container } from "../../../nextjs-material-kit"; 2 | 3 | const completedStyle = { 4 | section: { 5 | padding: "70px 0" 6 | }, 7 | container: { 8 | ...container, 9 | textAlign: "center !important" 10 | } 11 | }; 12 | 13 | export default completedStyle; 14 | -------------------------------------------------------------------------------- /styles/jss/nextjs-material-kit/pages/componentsSections/tabsStyle.ts: -------------------------------------------------------------------------------- 1 | import { container } from "../../../nextjs-material-kit"; 2 | 3 | const tabsStyle = { 4 | section: { 5 | background: "#EEEEEE", 6 | padding: "70px 0" 7 | }, 8 | container, 9 | textCenter: { 10 | textAlign: "center" 11 | } 12 | }; 13 | 14 | export default tabsStyle; 15 | -------------------------------------------------------------------------------- /styles/jss/nextjs-material-kit/pages/componentsSections/carouselStyle.ts: -------------------------------------------------------------------------------- 1 | import { container } from "../../../nextjs-material-kit"; 2 | 3 | const carouselStyle = { 4 | section: { 5 | padding: "70px 0" 6 | }, 7 | container, 8 | marginAuto: { 9 | marginLeft: "auto !important", 10 | marginRight: "auto !important" 11 | } 12 | }; 13 | 14 | export default carouselStyle; 15 | -------------------------------------------------------------------------------- /styles/jss/nextjs-material-kit/pages/componentsSections/pillsStyle.ts: -------------------------------------------------------------------------------- 1 | import { container, title } from "../../../nextjs-material-kit"; 2 | 3 | const pillsStyle = { 4 | section: { 5 | padding: "70px 0" 6 | }, 7 | container, 8 | title: { 9 | ...title, 10 | marginTop: "30px", 11 | minHeight: "32px", 12 | textDecoration: "none" 13 | } 14 | }; 15 | 16 | export default pillsStyle; 17 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/ignore-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | 6 | # testing 7 | /coverage 8 | 9 | # production 10 | /build 11 | /out 12 | 13 | # misc 14 | .DS_Store 15 | .env.local 16 | .env.development.local 17 | .env.test.local 18 | .env.production.local 19 | 20 | package-lock.json 21 | 22 | npm-debug.log* 23 | yarn-debug.log* 24 | yarn-error.log* 25 | 26 | # package 27 | /dist 28 | /.next 29 | pnpm-lock.yaml -------------------------------------------------------------------------------- /styles/jss/nextjs-material-kit/pages/landingPageSections/productStyle.ts: -------------------------------------------------------------------------------- 1 | import { title } from "../../../nextjs-material-kit"; 2 | 3 | const productStyle = { 4 | section: { 5 | padding: "70px 0", 6 | textAlign: "center" 7 | }, 8 | title: { 9 | ...title, 10 | marginBottom: "1rem", 11 | marginTop: "30px", 12 | minHeight: "32px", 13 | textDecoration: "none" 14 | }, 15 | description: { 16 | color: "#999" 17 | } 18 | }; 19 | 20 | export default productStyle; 21 | -------------------------------------------------------------------------------- /styles/jss/nextjs-material-kit/pages/componentsSections/exampleStyle.ts: -------------------------------------------------------------------------------- 1 | import { containerFluid } from "../../../nextjs-material-kit"; 2 | 3 | import imagesStyle from "../../../nextjs-material-kit/imagesStyles"; 4 | 5 | const exampleStyle = { 6 | section: { 7 | padding: "70px 0" 8 | }, 9 | container: { 10 | ...containerFluid, 11 | textAlign: "center !important" 12 | }, 13 | ...imagesStyle, 14 | link: { 15 | textDecoration: "none" 16 | } 17 | }; 18 | 19 | export default exampleStyle; 20 | -------------------------------------------------------------------------------- /styles/jss/nextjs-material-kit/pages/componentsSections/notificationsStyles.ts: -------------------------------------------------------------------------------- 1 | import { container, title } from "../../../nextjs-material-kit"; 2 | 3 | const notificationsStyles = { 4 | section: { 5 | backgroundColor: "#FFFFFF", 6 | display: "block", 7 | width: "100%", 8 | position: "relative", 9 | padding: "0" 10 | }, 11 | title: { 12 | ...title, 13 | marginTop: "30px", 14 | minHeight: "32px", 15 | textDecoration: "none" 16 | }, 17 | container 18 | }; 19 | 20 | export default notificationsStyles; 21 | -------------------------------------------------------------------------------- /components/Clearfix/Clearfix.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | // mterial-ui components 4 | import { makeStyles } from "@material-ui/core/styles"; 5 | 6 | const styles = { 7 | clearfix: { 8 | "&:after,&:before": { 9 | display: "table", 10 | content: '" "', 11 | }, 12 | "&:after": { 13 | clear: "both", 14 | }, 15 | }, 16 | }; 17 | 18 | const useStyles = makeStyles(styles); 19 | 20 | export default function Clearfix() { 21 | const classes = useStyles(); 22 | return
; 23 | } 24 | -------------------------------------------------------------------------------- /styles/scss/core/_variables.scss: -------------------------------------------------------------------------------- 1 | @import "variables/colors"; 2 | @import "variables/shadow"; 3 | 4 | @import "variables/bootstrap-material-design-base"; 5 | 6 | // Customized BS variables 7 | @import "variables/brand"; 8 | 9 | // import their vars after customization for use below 10 | $enable-flex: true; // fully adopt flexbox layouts 11 | $enable-shadows: true; // enable shadows, set to false to turn off shadows 12 | 13 | // // Core Bootstrap Variables 14 | @import "variables/functions"; 15 | @import "variables/variables"; 16 | 17 | @import "variables/bootstrap-material-design"; 18 | -------------------------------------------------------------------------------- /blog/simple-about.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: About me 3 | published: 2022-01-16 4 | description: This is a simple post. 5 | image_url: "/img/examples/studio-1.jpg" 6 | --- 7 | 8 | # About 9 | 10 | Lorem, ipsum dolor sit amet consectetur adipisicing elit. Ea deserunt ab maiores eligendi nemo, ipsa, pariatur blanditiis, ullam exercitationem beatae incidunt deleniti ut sit est accusantium dolorum temporibus ipsam quae. 11 | 12 | Lorem, ipsum dolor sit amet consectetur adipisicing elit. Ea deserunt ab maiores eligendi nemo, ipsa, pariatur blanditiis, ullam exercitationem beatae incidunt deleniti ut sit est accusantium dolorum temporibus ipsam quae. 13 | -------------------------------------------------------------------------------- /styles/jss/nextjs-material-kit/pages/componentsSections/downloadStyle.ts: -------------------------------------------------------------------------------- 1 | import { container } from "../../../nextjs-material-kit"; 2 | 3 | const downloadStyle = { 4 | section: { 5 | padding: "70px 0" 6 | }, 7 | container, 8 | textCenter: { 9 | textAlign: "center" 10 | }, 11 | sharingArea: { 12 | marginTop: "80px" 13 | }, 14 | socials: { 15 | maxWidth: "24px", 16 | marginTop: "0", 17 | width: "100%", 18 | transform: "none", 19 | left: "0", 20 | top: "0", 21 | height: "100%", 22 | fontSize: "20px", 23 | marginRight: "4px" 24 | } 25 | }; 26 | 27 | export default downloadStyle; 28 | -------------------------------------------------------------------------------- /blog/simple-article-2.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: About me 3 | published: 2022-01-16 4 | description: This is a simple post. 5 | image_url: "/img/examples/studio-1.jpg" 6 | --- 7 | 8 | # About 9 | 10 | Lorem, ipsum dolor sit amet consectetur adipisicing elit. Ea deserunt ab maiores eligendi nemo, ipsa, pariatur blanditiis, ullam exercitationem beatae incidunt deleniti ut sit est accusantium dolorum temporibus ipsam quae. 11 | 12 | Lorem, ipsum dolor sit amet consectetur adipisicing elit. Ea deserunt ab maiores eligendi nemo, ipsa, pariatur blanditiis, ullam exercitationem beatae incidunt deleniti ut sit est accusantium dolorum temporibus ipsam quae. 13 | -------------------------------------------------------------------------------- /blog/simple-article-3.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: About me 3 | published: 2022-01-16 4 | description: This is a simple post. 5 | image_url: "/img/examples/studio-1.jpg" 6 | --- 7 | 8 | # About 9 | 10 | Lorem, ipsum dolor sit amet consectetur adipisicing elit. Ea deserunt ab maiores eligendi nemo, ipsa, pariatur blanditiis, ullam exercitationem beatae incidunt deleniti ut sit est accusantium dolorum temporibus ipsam quae. 11 | 12 | Lorem, ipsum dolor sit amet consectetur adipisicing elit. Ea deserunt ab maiores eligendi nemo, ipsa, pariatur blanditiis, ullam exercitationem beatae incidunt deleniti ut sit est accusantium dolorum temporibus ipsam quae. 13 | -------------------------------------------------------------------------------- /blog/simple-article-4.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: About me 3 | published: 2022-01-16 4 | description: This is a simple post. 5 | image_url: "/img/examples/studio-1.jpg" 6 | --- 7 | 8 | # About 9 | 10 | Lorem, ipsum dolor sit amet consectetur adipisicing elit. Ea deserunt ab maiores eligendi nemo, ipsa, pariatur blanditiis, ullam exercitationem beatae incidunt deleniti ut sit est accusantium dolorum temporibus ipsam quae. 11 | 12 | Lorem, ipsum dolor sit amet consectetur adipisicing elit. Ea deserunt ab maiores eligendi nemo, ipsa, pariatur blanditiis, ullam exercitationem beatae incidunt deleniti ut sit est accusantium dolorum temporibus ipsam quae. 13 | -------------------------------------------------------------------------------- /components/Typography/Small.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | // nodejs library to set properties for components 3 | // @material-ui/core components 4 | import { makeStyles } from "@material-ui/core/styles"; 5 | // core components 6 | import styles from "../../styles/jss/nextjs-material-kit/components/typographyStyle"; 7 | 8 | const useStyles = makeStyles(styles); 9 | 10 | export default function Small(props:ReactChildrenProps) { 11 | const classes = useStyles(); 12 | const { children } = props; 13 | return ( 14 |
15 | {children} 16 |
17 | ); 18 | } -------------------------------------------------------------------------------- /components/Typography/Primary.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | // nodejs library to set properties for components 3 | // @material-ui/core components 4 | import { makeStyles } from "@material-ui/core/styles"; 5 | // core components 6 | import styles from "../../styles/jss/nextjs-material-kit/components/typographyStyle"; 7 | 8 | const useStyles = makeStyles(styles); 9 | 10 | export default function Primary(props:ReactChildrenProps) { 11 | const classes = useStyles(); 12 | const { children } = props; 13 | return ( 14 |
15 | {children} 16 |
17 | ); 18 | } 19 | -------------------------------------------------------------------------------- /pages/api/post.ts: -------------------------------------------------------------------------------- 1 | import {getAllArticles} from "../../utils/markdown"; 2 | 3 | export default async function handler(req, res) { 4 | const {page} = req.query; 5 | 6 | const articles = await getAllArticles(page); 7 | 8 | articles 9 | .map((post) => post) 10 | .sort((a, b) => { 11 | if (a.published > b.published) return 1; 12 | if (a.published < b.published) return -1; 13 | 14 | return 0; 15 | }); 16 | 17 | const posts = articles.map((post) => { 18 | return { 19 | ...post, 20 | published: new Date(post.published).toDateString(), 21 | }; 22 | }); 23 | 24 | res.status(200).json(posts); 25 | } 26 | -------------------------------------------------------------------------------- /styles/jss/nextjs-material-kit/pages/landingPageSections/workStyle.ts: -------------------------------------------------------------------------------- 1 | import { title } from "../../../nextjs-material-kit"; 2 | 3 | const workStyle = { 4 | section: { 5 | padding: "70px 0" 6 | }, 7 | title: { 8 | ...title, 9 | marginBottom: "50px", 10 | marginTop: "30px", 11 | minHeight: "32px", 12 | textDecoration: "none", 13 | textAlign: "center" as "center" 14 | }, 15 | description: { 16 | color: "#999", 17 | textAlign: "center" as "center" 18 | }, 19 | textCenter: { 20 | textAlign: "center" as "center" 21 | }, 22 | textArea: { 23 | marginRight: "15px", 24 | marginLeft: "15px" 25 | } 26 | }; 27 | 28 | export default workStyle; 29 | -------------------------------------------------------------------------------- /components/Typography/Info.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | // nodejs library to set properties for components 3 | // @material-ui/core components 4 | import { makeStyles } from "@material-ui/core/styles"; 5 | // core components 6 | import styles from "../../styles/jss/nextjs-material-kit/components/typographyStyle"; 7 | import { ReactChildrenProps } from "../../types/global"; 8 | 9 | const useStyles = makeStyles(styles); 10 | 11 | export default function Info(props: ReactChildrenProps) { 12 | const classes = useStyles(); 13 | const { children } = props; 14 | return ( 15 |
16 | {children} 17 |
18 | ); 19 | } 20 | -------------------------------------------------------------------------------- /components/Typography/Muted.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | // nodejs library to set properties for components 3 | // @material-ui/core components 4 | import { makeStyles } from "@material-ui/core/styles"; 5 | // core components 6 | import styles from "../../styles/jss/nextjs-material-kit/components/typographyStyle"; 7 | import { ReactChildrenProps } from "../../types/global"; 8 | 9 | const useStyles = makeStyles(styles); 10 | 11 | export default function Muted(props: ReactChildrenProps) { 12 | const classes = useStyles(); 13 | const { children } = props; 14 | return ( 15 |
16 | {children} 17 |
18 | ); 19 | } 20 | -------------------------------------------------------------------------------- /components/Typography/Success.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | // nodejs library to set properties for components 3 | // @material-ui/core components 4 | import { makeStyles } from "@material-ui/core/styles"; 5 | // core components 6 | import styles from "../../styles/jss/nextjs-material-kit/components/typographyStyle"; 7 | import { ReactChildrenProps } from "../../types/global"; 8 | 9 | const useStyles = makeStyles(styles); 10 | 11 | export default function Success(props:ReactChildrenProps) { 12 | const classes = useStyles(); 13 | const { children } = props; 14 | return ( 15 |
16 | {children} 17 |
18 | ); 19 | } -------------------------------------------------------------------------------- /components/Typography/Danger.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | // nodejs library to set properties for components 3 | // @material-ui/core components 4 | import { makeStyles } from "@material-ui/core/styles"; 5 | // core components 6 | import styles from "../../styles/jss/nextjs-material-kit/components/typographyStyle"; 7 | import { ReactChildrenProps } from "../../types/global"; 8 | 9 | const useStyles = makeStyles(styles); 10 | 11 | export default function Danger(props: ReactChildrenProps) { 12 | const classes = useStyles(); 13 | const { children } = props; 14 | return ( 15 |
16 | {children} 17 |
18 | ); 19 | } 20 | -------------------------------------------------------------------------------- /styles/jss/nextjs-material-kit/components/cardHeaderStyle.ts: -------------------------------------------------------------------------------- 1 | import { 2 | warningCardHeader, 3 | successCardHeader, 4 | dangerCardHeader, 5 | infoCardHeader, 6 | primaryCardHeader 7 | } from "../../nextjs-material-kit"; 8 | 9 | const cardHeaderStyle = { 10 | cardHeader: { 11 | borderRadius: "3px", 12 | padding: "1rem 15px", 13 | marginLeft: "15px", 14 | marginRight: "15px", 15 | marginTop: "-30px", 16 | border: "0", 17 | marginBottom: "0" 18 | }, 19 | cardHeaderPlain: { 20 | marginLeft: "0px", 21 | marginRight: "0px" 22 | }, 23 | warningCardHeader, 24 | successCardHeader, 25 | dangerCardHeader, 26 | infoCardHeader, 27 | primaryCardHeader 28 | }; 29 | 30 | export default cardHeaderStyle; 31 | -------------------------------------------------------------------------------- /blog/react-article.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: React Buttons 3 | published: 2022-05-16 4 | description: This is a simple post about React. 5 | image_url: "/img/examples/studio-2.jpg" 6 | --- 7 | 8 | import Button from "../components/CustomButtons/Button"; 9 | 10 | ## A Button with MDX 11 | 12 | This is an example of component passed to the MDX. The component is imported following this code: 13 | ```js 14 | import Button from "../components/CustomButtons/Button"; 15 | ``` 16 | 17 | 18 | ## Random Text 19 | Lorem, ipsum dolor sit amet consectetur adipisicing elit. Ea deserunt ab maiores eligendi nemo, ipsa, 20 | pariatur blanditiis, ullam exercitationem beatae incidunt deleniti ut sit est accusantium dolorum temporibus ipsam quae. 21 | -------------------------------------------------------------------------------- /components/Typography/Warning.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | // nodejs library to set properties for components 3 | // @material-ui/core components 4 | import { createStyles, makeStyles, Theme } from "@material-ui/core/styles"; 5 | // core components 6 | import styles from "../../styles/jss/nextjs-material-kit/components/typographyStyle"; 7 | import { ReactChildrenProps } from "../../types/global"; 8 | 9 | const useStyles = makeStyles((theme: Theme) => 10 | createStyles( 11 | styles 12 | ) 13 | ); 14 | 15 | export default function Warning(props: ReactChildrenProps) { 16 | const classes = useStyles(); 17 | const { children } = props; 18 | return ( 19 |
20 | {children} 21 |
22 | ); 23 | } 24 | -------------------------------------------------------------------------------- /styles/jss/nextjs-material-kit/pages/componentsSections/basicsStyle.ts: -------------------------------------------------------------------------------- 1 | import { container, title } from "../../../nextjs-material-kit"; 2 | import customCheckboxRadioSwitch from "../../../nextjs-material-kit/customCheckboxRadioSwitch"; 3 | 4 | const basicsStyle = { 5 | sections: { 6 | padding: "70px 0", 7 | }, 8 | container, 9 | title: { 10 | ...title, 11 | marginTop: "30px", 12 | minHeight: "32px", 13 | textDecoration: "none", 14 | }, 15 | space50: { 16 | height: "50px", 17 | display: "block", 18 | }, 19 | space70: { 20 | height: "70px", 21 | display: "block", 22 | }, 23 | icons: { 24 | width: "17px", 25 | height: "17px", 26 | color: "#FFFFFF", 27 | }, 28 | ...customCheckboxRadioSwitch, 29 | }; 30 | 31 | export default basicsStyle; 32 | -------------------------------------------------------------------------------- /styles/jss/nextjs-material-kit/components/cardStyle.ts: -------------------------------------------------------------------------------- 1 | const cardStyle = { 2 | card: { 3 | border: "0", 4 | marginBottom: "30px", 5 | marginTop: "30px", 6 | borderRadius: "6px", 7 | color: "rgba(0, 0, 0, 0.87)", 8 | background: "#fff", 9 | width: "100%", 10 | boxShadow: 11 | "0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 1px 5px 0 rgba(0, 0, 0, 0.12)", 12 | position: "relative", 13 | display: "flex", 14 | flexDirection: "column", 15 | minWidth: "0", 16 | wordWrap: "break-word", 17 | fontSize: ".875rem", 18 | transition: "all 300ms linear", 19 | }, 20 | cardPlain: { 21 | background: "transparent", 22 | boxShadow: "none", 23 | }, 24 | cardCarousel: { 25 | overflow: "hidden", 26 | }, 27 | }; 28 | 29 | export default cardStyle; 30 | -------------------------------------------------------------------------------- /components/Badge/Badge.tsx: -------------------------------------------------------------------------------- 1 | import React, { ReactNode } from "react"; 2 | // nodejs library to set properties for components 3 | 4 | // @material-ui/core components 5 | import { makeStyles } from "@material-ui/core/styles"; 6 | 7 | import styles from "../../styles/jss/nextjs-material-kit/components/badgeStyle"; 8 | 9 | const useStyles = makeStyles(styles); 10 | 11 | export type BadgeProps = { 12 | color?: 13 | | "primary" 14 | | "warning" 15 | | "danger" 16 | | "success" 17 | | "info" 18 | | "rose" 19 | | "gray"; 20 | children: ReactNode; 21 | }; 22 | export default function Badge(props: BadgeProps) { 23 | const classes = useStyles(); 24 | const { color, children } = props; 25 | return ( 26 | 27 | {children} 28 | 29 | ); 30 | } 31 | -------------------------------------------------------------------------------- /components/Typography/Quote.tsx: -------------------------------------------------------------------------------- 1 | import React, { ReactNode } from "react"; 2 | // nodejs library to set properties for components 3 | // @material-ui/core components 4 | import { makeStyles } from "@material-ui/core/styles"; 5 | // core components 6 | import styles from "../../styles/jss/nextjs-material-kit/components/typographyStyle"; 7 | 8 | const useStyles = makeStyles(styles); 9 | 10 | export default function Quote(props: QuoteProps) { 11 | const { text, author } = props; 12 | const classes = useStyles(); 13 | return ( 14 |
15 |

{text}

16 | {author} 17 |
18 | ); 19 | } 20 | 21 | export interface QuoteProps { 22 | text: ReactNode, 23 | author: ReactNode 24 | }; 25 | -------------------------------------------------------------------------------- /styles/scss/core/_page-transition.scss: -------------------------------------------------------------------------------- 1 | .body-page-transition{ 2 | overflow: hidden; 3 | #page-transition { 4 | position: fixed; 5 | z-index: 9999; 6 | width: 100%; 7 | display: flex; 8 | height: 100%; 9 | justify-content: center; 10 | align-items: center; 11 | } 12 | 13 | #page-transition > div{ 14 | &:after{ 15 | content: ""; 16 | background-image: url("/img/bg7.jpg"); 17 | background-size: cover; 18 | position: fixed; 19 | z-index: 9998; 20 | width: 100%; 21 | height: 100%; 22 | top: 0; 23 | left: 0; 24 | } 25 | &:before { 26 | top: 0; 27 | left: 0; 28 | width: 100%; 29 | height: 100%; 30 | content: ''; 31 | display: block; 32 | z-index: 9999; 33 | position: absolute; 34 | background: rgba(0, 0, 0, 0.5); 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /styles/jss/nextjs-material-kit/tooltipsStyle.ts: -------------------------------------------------------------------------------- 1 | const tooltipsStyle = { 2 | tooltip: { 3 | padding: "10px 15px", 4 | minWidth: "130px", 5 | color: "#555555", 6 | lineHeight: "1.7em", 7 | background: "#FFFFFF", 8 | border: "none", 9 | borderRadius: "3px", 10 | boxShadow: 11 | "0 8px 10px 1px rgba(0, 0, 0, 0.14), 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.2)", 12 | maxWidth: "200px", 13 | textAlign: "center", 14 | fontFamily: '"Helvetica Neue",Helvetica,Arial,sans-serif', 15 | fontSize: "0.875em", 16 | fontStyle: "normal", 17 | fontWeight: "400", 18 | textShadow: "none", 19 | textTransform: "none", 20 | letterSpacing: "normal", 21 | wordBreak: "normal", 22 | wordSpacing: "normal", 23 | wordWrap: "normal", 24 | whiteSpace: "normal", 25 | lineBreak: "auto", 26 | }, 27 | }; 28 | 29 | export default tooltipsStyle; 30 | -------------------------------------------------------------------------------- /components/Grid/GridContainer.tsx: -------------------------------------------------------------------------------- 1 | import React, { ElementType, ReactNode } from "react"; 2 | // nodejs library to set properties for components 3 | 4 | // @material-ui/core components 5 | import { makeStyles } from "@material-ui/core/styles"; 6 | import Grid, { GridTypeMap } from "@material-ui/core/Grid"; 7 | 8 | const styles = { 9 | grid: { 10 | marginRight: "-15px", 11 | marginLeft: "-15px", 12 | width: "auto", 13 | }, 14 | }; 15 | 16 | export interface GridContainerProps { 17 | children: JSX.Element | JSX.Element[]; 18 | className?: string; 19 | }; 20 | 21 | const useStyles = makeStyles(styles); 22 | 23 | export default function GridContainer(props: GridContainerProps) { 24 | const classes = useStyles(); 25 | const { children, className, ...rest } = props; 26 | return ( 27 | 28 | {children} 29 | 30 | ); 31 | } 32 | -------------------------------------------------------------------------------- /styles/jss/nextjs-material-kit/pages/landingPage.ts: -------------------------------------------------------------------------------- 1 | import { container, title } from "../../nextjs-material-kit"; 2 | 3 | const landingPageStyle = { 4 | container: { 5 | zIndex: "12", 6 | color: "#FFFFFF", 7 | ...container 8 | }, 9 | title: { 10 | ...title, 11 | display: "inline-block", 12 | position: "relative", 13 | marginTop: "30px", 14 | minHeight: "32px", 15 | color: "#FFFFFF", 16 | textDecoration: "none" 17 | }, 18 | subtitle: { 19 | fontSize: "1.313rem", 20 | maxWidth: "500px", 21 | margin: "10px auto 0" 22 | }, 23 | main: { 24 | background: "#FFFFFF", 25 | position: "relative", 26 | zIndex: "3" 27 | }, 28 | mainRaised: { 29 | margin: "-60px 30px 0px", 30 | borderRadius: "6px", 31 | boxShadow: 32 | "0 16px 24px 2px rgba(0, 0, 0, 0.14), 0 6px 30px 5px rgba(0, 0, 0, 0.12), 0 8px 10px -5px rgba(0, 0, 0, 0.2)" 33 | } 34 | }; 35 | 36 | export default landingPageStyle; 37 | -------------------------------------------------------------------------------- /components/Grid/GridItem.tsx: -------------------------------------------------------------------------------- 1 | import React, { ReactElement, ReactNode } from "react"; 2 | // nodejs library to set properties for components 3 | // @material-ui/core components 4 | import { makeStyles } from "@material-ui/core/styles"; 5 | import Grid, { GridTypeMap } from "@material-ui/core/Grid"; 6 | 7 | const styles = { 8 | grid: { 9 | position: "relative", 10 | width: "100%", 11 | minHeight: "1px", 12 | paddingRight: "15px", 13 | paddingLeft: "15px", 14 | flexBasis: "auto", 15 | }, 16 | }; 17 | 18 | const useStyles = makeStyles(styles); 19 | 20 | export interface GridItemProps { 21 | children: JSX.Element | JSX.Element[]; 22 | className?: string; 23 | 24 | } 25 | export default function GridItem(props: GridItemProps) { 26 | const classes = useStyles(); 27 | const { children, className, ...rest } = props; 28 | return ( 29 | 30 | {children} 31 | 32 | ); 33 | } 34 | -------------------------------------------------------------------------------- /styles/jss/nextjs-material-kit/components/parallaxStyle.ts: -------------------------------------------------------------------------------- 1 | const parallaxStyle = (theme) => ({ 2 | parallax: { 3 | height: "90vh", 4 | maxHeight: "1000px", 5 | overflow: "hidden", 6 | position: "relative", 7 | backgroundPosition: "center top", 8 | backgroundSize: "cover", 9 | margin: "0", 10 | padding: "0", 11 | border: "0", 12 | display: "flex", 13 | alignItems: "center", 14 | }, 15 | filter: { 16 | "&:before": { 17 | background: "rgba(0, 0, 0, 0.5)", 18 | }, 19 | "&:after,&:before": { 20 | position: "absolute", 21 | zIndex: "1", 22 | width: "100%", 23 | height: "100%", 24 | display: "block", 25 | left: "0", 26 | top: "0", 27 | content: "''", 28 | }, 29 | }, 30 | small: { 31 | height: "380px", 32 | }, 33 | parallaxResponsive: { 34 | [theme.breakpoints.down("md")]: { 35 | minHeight: "660px", 36 | }, 37 | }, 38 | }); 39 | 40 | export default parallaxStyle; 41 | -------------------------------------------------------------------------------- /components/Card/CardFooter.tsx: -------------------------------------------------------------------------------- 1 | import React, { ReactNode } from "react"; 2 | // nodejs library that concatenates classes 3 | import classNames from "classnames"; 4 | // nodejs library to set properties for components 5 | // @material-ui/core components 6 | import { makeStyles } from "@material-ui/core/styles"; 7 | // @material-ui/icons 8 | 9 | // core components 10 | import styles from "../../styles/jss/nextjs-material-kit/components/cardFooterStyle"; 11 | 12 | const useStyles = makeStyles(styles); 13 | 14 | export default function CardFooter(props: CardFooterProps) { 15 | const classes = useStyles(); 16 | const { className, children, ...rest } = props; 17 | const cardFooterClasses = classNames({ 18 | [classes.cardFooter]: true, 19 | [className]: className !== undefined 20 | }); 21 | return ( 22 |
23 | {children} 24 |
25 | ); 26 | } 27 | 28 | export interface CardFooterProps { 29 | className?: string; 30 | children: ReactNode; 31 | }; 32 | -------------------------------------------------------------------------------- /components/Card/CardBody.tsx: -------------------------------------------------------------------------------- 1 | import React, { ReactElement, ReactNode } from "react"; 2 | // nodejs library that concatenates classes 3 | import classNames from "classnames"; 4 | // nodejs library to set properties for components 5 | // @material-ui/core components 6 | import { makeStyles } from "@material-ui/core/styles"; 7 | // @material-ui/icons 8 | 9 | // core components 10 | import styles from "../../styles/jss/nextjs-material-kit/components/cardBodyStyle"; 11 | 12 | const useStyles = makeStyles(styles); 13 | 14 | export default function CardBody(props: CardBodyProps) { 15 | const classes = useStyles(); 16 | const { className, children, ...rest } = props; 17 | const cardBodyClasses = classNames({ 18 | [classes.cardBody]: true, 19 | [className]: className !== undefined 20 | }); 21 | return ( 22 |
23 | {children} 24 |
25 | ); 26 | } 27 | 28 | export interface CardBodyProps { 29 | className?: string; 30 | children: ReactElement | ReactElement[]; 31 | }; 32 | -------------------------------------------------------------------------------- /styles/jss/nextjs-material-kit/pages/components.ts: -------------------------------------------------------------------------------- 1 | import { container } from "../../nextjs-material-kit"; 2 | 3 | const componentsStyle = { 4 | container, 5 | brand: { 6 | color: "#FFFFFF", 7 | textAlign: "left" 8 | }, 9 | title: { 10 | fontSize: "4.2rem", 11 | fontWeight: "600", 12 | display: "inline-block", 13 | position: "relative" 14 | }, 15 | subtitle: { 16 | fontSize: "1.313rem", 17 | maxWidth: "510px", 18 | margin: "10px 0 0" 19 | }, 20 | main: { 21 | background: "#FFFFFF", 22 | position: "relative", 23 | zIndex: "3" 24 | }, 25 | mainRaised: { 26 | margin: "-60px 30px 0px", 27 | borderRadius: "6px", 28 | boxShadow: 29 | "0 16px 24px 2px rgba(0, 0, 0, 0.14), 0 6px 30px 5px rgba(0, 0, 0, 0.12), 0 8px 10px -5px rgba(0, 0, 0, 0.2)", 30 | "@media (max-width: 830px)": { 31 | marginLeft: "10px", 32 | marginRight: "10px" 33 | } 34 | }, 35 | link: { 36 | textDecoration: "none" 37 | }, 38 | textCenter: { 39 | textAlign: "center" 40 | } 41 | }; 42 | 43 | export default componentsStyle; 44 | -------------------------------------------------------------------------------- /styles/jss/nextjs-material-kit/components/badgeStyle.ts: -------------------------------------------------------------------------------- 1 | import { 2 | primaryColor, 3 | warningColor, 4 | dangerColor, 5 | successColor, 6 | infoColor, 7 | roseColor 8 | } from "../../nextjs-material-kit"; 9 | 10 | const badgeStyle = { 11 | badge: { 12 | marginRight: "3px", 13 | borderRadius: "12px", 14 | padding: "5px 12px", 15 | textTransform: "uppercase", 16 | fontSize: "10px", 17 | fontWeight: "500", 18 | lineHeight: "1", 19 | color: "#fff", 20 | textAlign: "center", 21 | whiteSpace: "nowrap", 22 | verticalAlign: "baseline", 23 | display: "inline-block" 24 | }, 25 | primary: { 26 | backgroundColor: primaryColor 27 | }, 28 | warning: { 29 | backgroundColor: warningColor 30 | }, 31 | danger: { 32 | backgroundColor: dangerColor 33 | }, 34 | success: { 35 | backgroundColor: successColor 36 | }, 37 | info: { 38 | backgroundColor: infoColor 39 | }, 40 | rose: { 41 | backgroundColor: roseColor 42 | }, 43 | gray: { 44 | backgroundColor: "#6c757d" 45 | } 46 | }; 47 | 48 | export default badgeStyle; 49 | -------------------------------------------------------------------------------- /components/CustomLinearProgress/CustomLinearProgress.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | // nodejs library to set properties for components 3 | 4 | // @material-ui/core components 5 | import { makeStyles } from "@material-ui/core/styles"; 6 | import LinearProgress from "@material-ui/core/LinearProgress"; 7 | // core components 8 | import styles from "../../styles/jss/nextjs-material-kit/components/customLinearProgressStyle"; 9 | 10 | const useStyles = makeStyles(styles); 11 | 12 | export default function CustomLinearProgress(props: CustomLinearProgressProps) { 13 | const classes = useStyles(); 14 | const { color, ...rest } = props; 15 | return ( 16 | 23 | ); 24 | } 25 | 26 | export interface CustomLinearProgressProps { 27 | color: 28 | | "primary" 29 | | "warning" 30 | | "danger" 31 | | "success" 32 | | "info" 33 | | "rose" 34 | | "gray"; 35 | } 36 | -------------------------------------------------------------------------------- /styles/jss/nextjs-material-kit/pages/landingPageSections/teamStyle.ts: -------------------------------------------------------------------------------- 1 | import { cardTitle, title } from "../../../nextjs-material-kit"; 2 | import imagesStyle from "../../../nextjs-material-kit/imagesStyles"; 3 | 4 | const teamStyle = { 5 | section: { 6 | padding: "70px 0", 7 | textAlign: "center" 8 | }, 9 | title: { 10 | ...title, 11 | marginBottom: "1rem", 12 | marginTop: "30px", 13 | minHeight: "32px", 14 | textDecoration: "none" 15 | }, 16 | ...imagesStyle, 17 | itemGrid: { 18 | marginLeft: "auto", 19 | marginRight: "auto" 20 | }, 21 | cardTitle, 22 | smallTitle: { 23 | color: "#6c757d" 24 | }, 25 | description: { 26 | color: "#999" 27 | }, 28 | justifyCenter: { 29 | justifyContent: "center !important" 30 | }, 31 | socials: { 32 | marginTop: "0", 33 | width: "100%", 34 | transform: "none", 35 | left: "0", 36 | top: "0", 37 | height: "100%", 38 | lineHeight: "41px", 39 | fontSize: "20px", 40 | color: "#999" 41 | }, 42 | margin5: { 43 | margin: "5px" 44 | } 45 | }; 46 | 47 | export default teamStyle; 48 | -------------------------------------------------------------------------------- /styles/jss/nextjs-material-kit/pages/componentsSections/javascriptStyles.ts: -------------------------------------------------------------------------------- 1 | import { container, title } from "../../../nextjs-material-kit"; 2 | 3 | import modalStyle from "../../../nextjs-material-kit/modalStyle"; 4 | import tooltipsStyle from "../../../nextjs-material-kit/tooltipsStyle"; 5 | import popoverStyles from "../../../nextjs-material-kit/popoverStyles"; 6 | 7 | const javascriptStyles = { 8 | section: { 9 | padding: "70px 0 0" 10 | }, 11 | container, 12 | title: { 13 | ...title, 14 | marginTop: "30px", 15 | minHeight: "32px", 16 | textDecoration: "none" 17 | }, 18 | icon: { 19 | width: "17px", 20 | height: "17px", 21 | marginRight: "4px" 22 | }, 23 | ...modalStyle, 24 | label: { 25 | color: "rgba(0, 0, 0, 0.26)", 26 | cursor: "pointer", 27 | display: "inline-flex", 28 | fontSize: "14px", 29 | transition: "0.3s ease all", 30 | lineHeight: "1.428571429", 31 | fontWeight: "400", 32 | paddingLeft: "0", 33 | letterSpacing: "normal" 34 | }, 35 | ...tooltipsStyle, 36 | ...popoverStyles 37 | }; 38 | 39 | export default javascriptStyles; 40 | -------------------------------------------------------------------------------- /styles/jss/nextjs-material-kit/pages/componentsSections/typographyStyle.ts: -------------------------------------------------------------------------------- 1 | import { container, title } from "../../../nextjs-material-kit"; 2 | 3 | import imagesStyles from "../../imagesStyles"; 4 | 5 | const typographyStyle = { 6 | section: { 7 | padding: "70px 0" 8 | }, 9 | container, 10 | space50: { 11 | height: "50px", 12 | display: "block" 13 | }, 14 | title: { 15 | ...title, 16 | marginTop: "30px", 17 | minHeight: "32px", 18 | textDecoration: "none" 19 | }, 20 | typo: { 21 | paddingLeft: "25%", 22 | marginBottom: "40px", 23 | position: "relative", 24 | width: "100%" 25 | }, 26 | note: { 27 | fontFamily: '"Roboto", "Helvetica", "Arial", sans-serif', 28 | bottom: "10px", 29 | color: "#c0c1c2", 30 | display: "block", 31 | fontWeight: "400", 32 | fontSize: "13px", 33 | lineHeight: "13px", 34 | left: "0", 35 | marginLeft: "20px", 36 | position: "absolute", 37 | width: "260px" 38 | }, 39 | marginLeft: { 40 | marginLeft: "auto !important" 41 | }, 42 | ...imagesStyles 43 | }; 44 | 45 | export default typographyStyle; 46 | -------------------------------------------------------------------------------- /styles/jss/nextjs-material-kit/imagesStyles.ts: -------------------------------------------------------------------------------- 1 | const imagesStyles = { 2 | imgFluid: { 3 | maxWidth: "100%", 4 | height: "auto", 5 | }, 6 | imgRounded: { 7 | borderRadius: "6px !important", 8 | }, 9 | imgRoundedCircle: { 10 | borderRadius: "50% !important", 11 | }, 12 | imgRaised: { 13 | boxShadow: 14 | "0 5px 15px -8px rgba(0, 0, 0, 0.24), 0 8px 10px -5px rgba(0, 0, 0, 0.2)", 15 | }, 16 | imgGallery: { 17 | width: "100%", 18 | marginBottom: "2.142rem", 19 | }, 20 | imgCardTop: { 21 | width: "100%", 22 | borderTopLeftRadius: "calc(.25rem - 1px)", 23 | borderTopRightRadius: "calc(.25rem - 1px)", 24 | }, 25 | imgCardBottom: { 26 | width: "100%", 27 | borderBottomLeftRadius: "calc(.25rem - 1px)", 28 | borderBottomRightRadius: "calc(.25rem - 1px)", 29 | }, 30 | imgCard: { 31 | width: "100%", 32 | borderRadius: "calc(.25rem - 1px)", 33 | }, 34 | imgCardOverlay: { 35 | position: "absolute", 36 | top: "0", 37 | right: "0", 38 | bottom: "0", 39 | left: "0", 40 | padding: "1.25rem", 41 | }, 42 | }; 43 | 44 | export default imagesStyles; 45 | -------------------------------------------------------------------------------- /styles/scss/nextjs-material-kit.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | 3 | ========================================================= 4 | * NextJS Material Kit v1.2.1 based on Material Kit Free - v2.0.2 (Bootstrap 4.0.0 Final Edition) and Material Kit React v1.8.0 5 | ========================================================= 6 | 7 | * Product Page: https://www.creative-tim.com/product/nextjs-material-kit 8 | * Copyright 2022 Creative Tim (https://www.creative-tim.com) 9 | * Licensed under MIT (https://github.com/creativetimofficial/nextjs-material-kit/blob/main/LICENSE.md) 10 | 11 | * Coded by Creative Tim 12 | 13 | ========================================================= 14 | 15 | * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 16 | 17 | */ 18 | @import "core/variables"; 19 | @import "core/mixins"; 20 | 21 | // Core Components 22 | @import "core/misc"; 23 | @import "core/page-transition"; 24 | 25 | // Core Plugins 26 | 27 | // @import "plugins/plugin-datetime-picker"; 28 | @import "plugins/plugin-nouislider"; 29 | @import "plugins/plugin-react-datetime"; 30 | @import "plugins/plugin-react-slick"; 31 | -------------------------------------------------------------------------------- /components/Card/Card.tsx: -------------------------------------------------------------------------------- 1 | import React, { ReactNode } from "react"; 2 | // nodejs library that concatenates classes 3 | import classNames from "classnames"; 4 | // nodejs library to set properties for components 5 | // @material-ui/core components 6 | import { makeStyles } from "@material-ui/core/styles"; 7 | // @material-ui/icons 8 | 9 | // core components 10 | import styles from "../../styles/jss/nextjs-material-kit/components/cardStyle"; 11 | 12 | const useStyles = makeStyles(styles); 13 | 14 | export default function Card(props: CardProps) { 15 | const classes = useStyles(); 16 | const { className, children, plain, carousel, ...rest } = props; 17 | const cardClasses = classNames({ 18 | [classes.card]: true, 19 | [classes.cardPlain]: plain, 20 | [classes.cardCarousel]: carousel, 21 | }); 22 | if(className !== undefined) { 23 | cardClasses.concat(" " + className) 24 | } 25 | return ( 26 |
27 | {children} 28 |
29 | ); 30 | } 31 | 32 | export interface CardProps { 33 | className?: string; 34 | plain?: boolean; 35 | carousel?: boolean; 36 | children: ReactNode; 37 | }; -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 - present App Generator 4 | 5 | > Note: Initially coded by Creative Tim (https://bit.ly/3fKQZaL) 6 | 7 | Permission is hereby granted, free of charge, to any person obtaining a copy 8 | of this software and associated documentation files (the "Software"), to deal 9 | in the Software without restriction, including without limitation the rights 10 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | copies of the Software, and to permit persons to whom the Software is 12 | furnished to do so, subject to the following conditions: 13 | 14 | The above copyright notice and this permission notice shall be included in all 15 | copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 23 | SOFTWARE. 24 | -------------------------------------------------------------------------------- /components/PageChange/PageChange.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | // @material-ui/core components 4 | import { makeStyles } from "@material-ui/core/styles"; 5 | import CircularProgress from "@material-ui/core/CircularProgress"; 6 | 7 | // core components 8 | import { infoColor, title } from "../../styles/jss/nextjs-material-kit"; 9 | 10 | const useStyles = makeStyles({ 11 | progress: { 12 | color: infoColor, 13 | width: "6rem !important", 14 | height: "6rem !important" 15 | }, 16 | wrapperDiv: { 17 | margin: "100px auto", 18 | padding: "0px", 19 | maxWidth: "360px", 20 | textAlign: "center", 21 | position: "relative", 22 | zIndex: 9999, 23 | top: "0" 24 | }, 25 | iconWrapper: { 26 | display: "block" 27 | }, 28 | title: { 29 | ...title, 30 | color: "#FFFFFF" 31 | } 32 | }); 33 | 34 | export default function PageChange(props) { 35 | const classes = useStyles(); 36 | return ( 37 |
38 |
39 |
40 | 41 |
42 |

43 | Loading page contents for: {props.path} 44 |

45 |
46 |
47 | ); 48 | } 49 | -------------------------------------------------------------------------------- /pages-sections/Components-Sections/SectionCompletedExamples.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | // @material-ui/core components 3 | import { makeStyles } from "@material-ui/core/styles"; 4 | // @material-ui/icons 5 | 6 | // core components 7 | import GridContainer from "../../components/Grid/GridContainer"; 8 | import GridItem from "../../components/Grid/GridItem"; 9 | 10 | import styles from "../../styles/jss/nextjs-material-kit/pages/componentsSections/completedStyle"; 11 | 12 | const useStyles = makeStyles(styles); 13 | 14 | export default function SectionCompletedExamples() { 15 | const classes = useStyles(); 16 | return ( 17 |
18 |
19 | 20 | 21 |

Completed with examples

22 |

23 | The kit comes with three pre-built pages to help you get started 24 | faster. You can change the text and images and you{"'"}re good to 25 | go. More importantly, looking at them will give you a picture of 26 | what you can build with this powerful kit. 27 |

28 |
29 |
30 |
31 |
32 | ); 33 | } 34 | -------------------------------------------------------------------------------- /styles/jss/nextjs-material-kit/modalStyle.ts: -------------------------------------------------------------------------------- 1 | const modalStyle = { 2 | modal: { 3 | borderRadius: "6px", 4 | }, 5 | modalHeader: { 6 | borderBottom: "none", 7 | paddingTop: "24px", 8 | paddingRight: "24px", 9 | paddingBottom: "0", 10 | paddingLeft: "24px", 11 | minHeight: "16.43px", 12 | }, 13 | modalTitle: { 14 | margin: "0", 15 | lineHeight: "1.42857143", 16 | }, 17 | modalCloseButton: { 18 | color: "#999999", 19 | marginTop: "-12px", 20 | WebkitAppearance: "none", 21 | padding: "0", 22 | cursor: "pointer", 23 | background: "0 0", 24 | border: "0", 25 | fontSize: "inherit", 26 | opacity: ".9", 27 | textShadow: "none", 28 | fontWeight: "700", 29 | lineHeight: "1", 30 | float: "right", 31 | }, 32 | modalClose: { 33 | width: "16px", 34 | height: "16px", 35 | }, 36 | modalBody: { 37 | paddingTop: "24px", 38 | paddingRight: "24px", 39 | paddingBottom: "16px", 40 | paddingLeft: "24px", 41 | position: "relative", 42 | }, 43 | modalFooter: { 44 | padding: "15px", 45 | textAlign: "right", 46 | paddingTop: "0", 47 | margin: "0", 48 | }, 49 | modalFooterCenter: { 50 | marginLeft: "auto", 51 | marginRight: "auto", 52 | }, 53 | }; 54 | 55 | export default modalStyle; 56 | -------------------------------------------------------------------------------- /components/Card/CardHeader.tsx: -------------------------------------------------------------------------------- 1 | import React, { ReactNode } from "react"; 2 | // nodejs library that concatenates classes 3 | import classNames from "classnames"; 4 | // nodejs library to set properties for components 5 | // @material-ui/core components 6 | import { makeStyles } from "@material-ui/core/styles"; 7 | // @material-ui/icons 8 | 9 | // core components 10 | import styles from "../../styles/jss/nextjs-material-kit/components/cardHeaderStyle"; 11 | import { CardHeaderTypeMap } from "@material-ui/core"; 12 | 13 | const useStyles = makeStyles(styles); 14 | 15 | export default function CardHeader(props: CardHeaderProps) { 16 | const classes = useStyles(); 17 | const { className, children, color, plain, ...rest } = props; 18 | const cardHeaderClasses = classNames({ 19 | [classes.cardHeader]: true, 20 | [classes[color + "CardHeader"]]: color, 21 | [classes.cardHeaderPlain]: plain, 22 | }); 23 | if(className !== undefined) 24 | cardHeaderClasses.concat(" " + className); 25 | return ( 26 |
27 | {children} 28 |
29 | ); 30 | } 31 | 32 | export interface CardHeaderProps { 33 | className?: string; 34 | color: "warning" | "success" | "danger" | "info" | "primary" | "rose"; 35 | plain?: boolean; 36 | children: ReactNode; 37 | } 38 | -------------------------------------------------------------------------------- /utils/markdown.ts: -------------------------------------------------------------------------------- 1 | import * as path from "path"; 2 | import * as fs from "fs"; 3 | import matter from "gray-matter"; 4 | 5 | export async function getAllArticles(pageIndex = 1) { 6 | const articles = fs.readdirSync(path.join(process.cwd(), "blog")); 7 | 8 | const totalArticles = articles.reduce((allArticles, articleSlug) => { 9 | // get parsed data from markdown files in the "blog" dir 10 | const source = fs.readFileSync( 11 | path.join(process.cwd(), "blog", articleSlug), 12 | "utf-8" 13 | ); 14 | const { data } = matter(source); 15 | 16 | return [ 17 | { 18 | ...data, 19 | slug: articleSlug.replace(".mdx", ""), 20 | published: data.published.toString(), 21 | }, 22 | ...allArticles, 23 | ]; 24 | }, []); 25 | 26 | return filterPostsByPageIndex(totalArticles, pageIndex); 27 | } 28 | 29 | export const filterPostsByPageIndex = (posts: [], pageIndex: number) => { 30 | const postPerPage = 5; 31 | // get the total posts from page 1 to current page 32 | const totalPagePosts = +pageIndex * postPerPage; 33 | 34 | // get the total posts from page 1 to previous page 35 | const prevPagePosts = totalPagePosts - postPerPage; 36 | 37 | return posts.filter( 38 | (post, index) => index < totalPagePosts && index >= prevPagePosts 39 | ); 40 | }; 41 | -------------------------------------------------------------------------------- /styles/jss/nextjs-material-kit/components/typographyStyle.ts: -------------------------------------------------------------------------------- 1 | import { 2 | defaultFont, 3 | primaryColor, 4 | infoColor, 5 | successColor, 6 | warningColor, 7 | dangerColor 8 | } from "../../nextjs-material-kit"; 9 | 10 | const typographyStyle = { 11 | defaultFontStyle: { 12 | ...defaultFont, 13 | fontSize: "14px" 14 | }, 15 | defaultHeaderMargins: { 16 | marginTop: "20px", 17 | marginBottom: "10px" 18 | }, 19 | quote: { 20 | padding: "10px 20px", 21 | margin: "0 0 20px", 22 | fontSize: "17.5px", 23 | borderLeft: "5px solid #eee" 24 | }, 25 | quoteText: { 26 | margin: "0 0 10px", 27 | fontStyle: "italic" 28 | }, 29 | quoteAuthor: { 30 | display: "block", 31 | fontSize: "80%", 32 | lineHeight: "1.42857143", 33 | color: "#777" 34 | }, 35 | mutedText: { 36 | color: "#777" 37 | }, 38 | primaryText: { 39 | color: primaryColor 40 | }, 41 | infoText: { 42 | color: infoColor 43 | }, 44 | successText: { 45 | color: successColor 46 | }, 47 | warningText: { 48 | color: warningColor 49 | }, 50 | dangerText: { 51 | color: dangerColor 52 | }, 53 | smallText: { 54 | fontSize: "65%", 55 | fontWeight: "400", 56 | lineHeight: "1", 57 | color: "#777" 58 | } 59 | }; 60 | 61 | export default typographyStyle; 62 | -------------------------------------------------------------------------------- /styles/jss/nextjs-material-kit/components/infoStyle.ts: -------------------------------------------------------------------------------- 1 | import { 2 | primaryColor, 3 | warningColor, 4 | dangerColor, 5 | successColor, 6 | infoColor, 7 | roseColor, 8 | grayColor, 9 | title 10 | } from "../../nextjs-material-kit"; 11 | 12 | const infoStyle = { 13 | infoArea: { 14 | maxWidth: "360px", 15 | margin: "0 auto", 16 | padding: "0px" 17 | }, 18 | iconWrapper: { 19 | float: "left", 20 | marginTop: "24px", 21 | marginRight: "10px" 22 | }, 23 | primary: { 24 | color: primaryColor 25 | }, 26 | warning: { 27 | color: warningColor 28 | }, 29 | danger: { 30 | color: dangerColor 31 | }, 32 | success: { 33 | color: successColor 34 | }, 35 | info: { 36 | color: infoColor 37 | }, 38 | rose: { 39 | color: roseColor 40 | }, 41 | gray: { 42 | color: grayColor 43 | }, 44 | icon: { 45 | width: "36px", 46 | height: "36px" 47 | }, 48 | descriptionWrapper: { 49 | color: grayColor, 50 | overflow: "hidden" 51 | }, 52 | title, 53 | description: { 54 | color: grayColor, 55 | overflow: "hidden", 56 | marginTop: "0px", 57 | fontSize: "14px" 58 | }, 59 | iconWrapperVertical: { 60 | float: "none" 61 | }, 62 | iconVertical: { 63 | width: "61px", 64 | height: "61px" 65 | } 66 | }; 67 | 68 | export default infoStyle; 69 | -------------------------------------------------------------------------------- /styles/jss/nextjs-material-kit/popoverStyles.ts: -------------------------------------------------------------------------------- 1 | const popoverStyles = { 2 | popover: { 3 | padding: "0", 4 | boxShadow: 5 | "0 16px 24px 2px rgba(0, 0, 0, 0.14), 0 6px 30px 5px rgba(0, 0, 0, 0.12), 0 8px 10px -5px rgba(0, 0, 0, 0.2)", 6 | lineHeight: "1.5em", 7 | background: "#fff", 8 | border: "none", 9 | borderRadius: "3px", 10 | display: "block", 11 | maxWidth: "276px", 12 | fontFamily: '"Roboto", "Helvetica", "Arial", sans-serif', 13 | fontStyle: "normal", 14 | fontWeight: "400", 15 | textAlign: "start", 16 | textDecoration: "none", 17 | textShadow: "none", 18 | textTransform: "none", 19 | letterSpacing: "normal", 20 | wordBreak: "normal", 21 | wordSpacing: "normal", 22 | whiteSpace: "normal", 23 | lineBreak: "auto", 24 | fontSize: "0.875rem", 25 | wordWrap: "break-word", 26 | }, 27 | popoverBottom: { 28 | marginTop: "5px", 29 | }, 30 | popoverHeader: { 31 | backgroundColor: "#fff", 32 | border: "none", 33 | padding: "15px 15px 5px", 34 | fontSize: "1.125rem", 35 | margin: "0", 36 | color: "#555", 37 | borderTopLeftRadius: "calc(0.3rem - 1px)", 38 | borderTopRightRadius: "calc(0.3rem - 1px)", 39 | }, 40 | popoverBody: { 41 | padding: "10px 15px 15px", 42 | lineHeight: "1.4", 43 | color: "#555", 44 | }, 45 | }; 46 | 47 | export default popoverStyles; 48 | -------------------------------------------------------------------------------- /styles/jss/nextjs-material-kit/components/footerStyle.ts: -------------------------------------------------------------------------------- 1 | import { container, primaryColor } from "../../nextjs-material-kit"; 2 | 3 | const footerStyle = { 4 | block: { 5 | color: "inherit", 6 | padding: "0.9375rem", 7 | fontWeight: "500", 8 | fontSize: "12px", 9 | textTransform: "uppercase", 10 | borderRadius: "3px", 11 | textDecoration: "none", 12 | position: "relative", 13 | display: "block", 14 | }, 15 | left: { 16 | float: "left!important", 17 | display: "block", 18 | }, 19 | right: { 20 | padding: "15px 0", 21 | margin: "0", 22 | float: "right!important", 23 | }, 24 | footer: { 25 | padding: "0.9375rem 0", 26 | textAlign: "center", 27 | display: "flex", 28 | zIndex: "2", 29 | position: "relative", 30 | }, 31 | a: { 32 | color: primaryColor, 33 | textDecoration: "none", 34 | backgroundColor: "transparent", 35 | }, 36 | footerWhiteFont: { 37 | "&,&:hover,&:focus": { 38 | color: "#FFFFFF", 39 | }, 40 | }, 41 | container, 42 | list: { 43 | marginBottom: "0", 44 | padding: "0", 45 | marginTop: "0", 46 | }, 47 | inlineBlock: { 48 | display: "inline-block", 49 | padding: "0px", 50 | width: "auto", 51 | }, 52 | icon: { 53 | width: "18px", 54 | height: "18px", 55 | position: "relative", 56 | top: "3px", 57 | }, 58 | }; 59 | export default footerStyle; 60 | -------------------------------------------------------------------------------- /components/Blog/BlogCard.tsx: -------------------------------------------------------------------------------- 1 | import { 2 | Card, 3 | CardActionArea, 4 | CardActions, 5 | CardContent, 6 | CardMedia, 7 | Typography, 8 | } from "@material-ui/core"; 9 | import Link from "next/link"; 10 | import Button from "../CustomButtons/Button"; 11 | import React from "react"; 12 | 13 | type PostType = { 14 | title: string; 15 | description: string; 16 | published: string; 17 | image_url: string; 18 | slug: string; 19 | }; 20 | 21 | export default function BlogCard(props: { post: PostType }) { 22 | const { post } = props; 23 | return ( 24 | 25 | 26 | 32 | 33 | 34 | {post.title} 35 | 36 | Published on {post.published} 37 | 38 | {post.description} 39 | 40 | 41 | 42 | 43 | 44 | 47 | 48 | 49 | 50 | ); 51 | } 52 | -------------------------------------------------------------------------------- /styles/jss/nextjs-material-kit/components/customLinearProgressStyle.ts: -------------------------------------------------------------------------------- 1 | import { 2 | primaryColor, 3 | warningColor, 4 | dangerColor, 5 | successColor, 6 | infoColor, 7 | roseColor, 8 | grayColor 9 | } from "../../nextjs-material-kit"; 10 | 11 | const customLinearProgressStyle = { 12 | root: { 13 | height: "4px", 14 | marginBottom: "20px", 15 | overflow: "hidden" 16 | }, 17 | bar: { 18 | height: "4px" 19 | }, 20 | primary: { 21 | backgroundColor: primaryColor 22 | }, 23 | warning: { 24 | backgroundColor: warningColor 25 | }, 26 | danger: { 27 | backgroundColor: dangerColor 28 | }, 29 | success: { 30 | backgroundColor: successColor 31 | }, 32 | info: { 33 | backgroundColor: infoColor 34 | }, 35 | rose: { 36 | backgroundColor: roseColor 37 | }, 38 | gray: { 39 | backgroundColor: grayColor 40 | }, 41 | primaryBackground: { 42 | background: "rgba(156, 39, 176, 0.2)" 43 | }, 44 | warningBackground: { 45 | background: "rgba(255, 152, 0, 0.2)" 46 | }, 47 | dangerBackground: { 48 | background: "rgba(244, 67, 54, 0.2)" 49 | }, 50 | successBackground: { 51 | background: "rgba(76, 175, 80, 0.2)" 52 | }, 53 | infoBackground: { 54 | background: "rgba(0, 188, 212, 0.2)" 55 | }, 56 | roseBackground: { 57 | background: "rgba(233, 30, 99, 0.2)" 58 | }, 59 | grayBackground: { 60 | background: "rgba(221, 221, 221, 0.2)" 61 | } 62 | }; 63 | 64 | export default customLinearProgressStyle; 65 | -------------------------------------------------------------------------------- /styles/jss/nextjs-material-kit/pages/componentsSections/loginStyle.ts: -------------------------------------------------------------------------------- 1 | import { container } from "../../../nextjs-material-kit"; 2 | 3 | const loginStyle = { 4 | section: { 5 | minHeight: "110vh", 6 | maxHeight: "1600px", 7 | overflow: "hidden", 8 | padding: "70px 0", 9 | backgroundPosition: "top center", 10 | backgroundSize: "cover", 11 | margin: "0", 12 | border: "0", 13 | display: "flex", 14 | alignItems: "center", 15 | backgroundImage: "url('/img/sign.jpg')" 16 | }, 17 | container, 18 | form: { 19 | margin: "0" 20 | }, 21 | cardHeader: { 22 | width: "auto", 23 | textAlign: "center", 24 | marginLeft: "20px", 25 | marginRight: "20px", 26 | marginTop: "-40px", 27 | padding: "20px 0", 28 | marginBottom: "15px" 29 | }, 30 | socialIcons: { 31 | maxWidth: "24px", 32 | marginTop: "0", 33 | width: "100%", 34 | transform: "none", 35 | left: "0", 36 | top: "0", 37 | height: "100%", 38 | lineHeight: "41px", 39 | fontSize: "20px" 40 | }, 41 | divider: { 42 | marginTop: "30px", 43 | marginBottom: "0px", 44 | textAlign: "center" 45 | }, 46 | cardFooter: { 47 | paddingTop: "0rem", 48 | border: "0", 49 | borderRadius: "6px", 50 | justifyContent: "center !important" 51 | }, 52 | socialLine: { 53 | marginTop: "1rem", 54 | textAlign: "center", 55 | padding: "0" 56 | }, 57 | inputIconsColor: { 58 | color: "#495057" 59 | } 60 | }; 61 | 62 | export default loginStyle; 63 | -------------------------------------------------------------------------------- /components/InfoArea/InfoArea.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | // nodejs library to set properties for components 3 | // nodejs library that concatenates classes 4 | import classNames from "classnames"; 5 | // @material-ui/core components 6 | import { makeStyles } from "@material-ui/core/styles"; 7 | 8 | import styles from "../../styles/jss/nextjs-material-kit/components/infoStyle"; 9 | 10 | const useStyles = makeStyles(styles); 11 | 12 | export default function InfoArea(props: InfoAreaProps) { 13 | const classes = useStyles(); 14 | const { title, description, iconColor, vertical } = props; 15 | const iconWrapper = classNames({ 16 | [classes.iconWrapper]: true, 17 | [classes[iconColor || "gray"]]: true, 18 | [classes.iconWrapperVertical]: vertical 19 | }); 20 | const iconClasses = classNames({ 21 | [classes.icon]: true, 22 | [classes.iconVertical]: vertical 23 | }); 24 | return ( 25 |
26 |
27 | 28 |
29 |
30 |

{title}

31 |

{description}

32 |
33 |
34 | ); 35 | } 36 | 37 | export interface InfoAreaProps { 38 | icon: any; 39 | title: any; 40 | description: string; 41 | iconColor?: 42 | | "primary" 43 | | "warning" 44 | | "danger" 45 | | "success" 46 | | "info" 47 | | "rose" 48 | | "gray" 49 | vertical: boolean; 50 | }; 51 | -------------------------------------------------------------------------------- /styles/jss/nextjs-material-kit/pages/profilePage.ts: -------------------------------------------------------------------------------- 1 | import { container, title } from "../../nextjs-material-kit"; 2 | 3 | import imagesStyle from "../../nextjs-material-kit/imagesStyles"; 4 | 5 | const profilePageStyle = { 6 | container, 7 | profile: { 8 | textAlign: "center", 9 | "& img": { 10 | maxWidth: "160px", 11 | width: "100%", 12 | margin: "0 auto", 13 | transform: "translate3d(0, -50%, 0)" 14 | } 15 | }, 16 | description: { 17 | margin: "1.071rem auto 0", 18 | maxWidth: "600px", 19 | color: "#999", 20 | textAlign: "center !important" 21 | }, 22 | name: { 23 | marginTop: "-80px" 24 | }, 25 | ...imagesStyle, 26 | main: { 27 | background: "#FFFFFF", 28 | position: "relative", 29 | zIndex: "3" 30 | }, 31 | mainRaised: { 32 | margin: "-60px 30px 0px", 33 | borderRadius: "6px", 34 | boxShadow: 35 | "0 16px 24px 2px rgba(0, 0, 0, 0.14), 0 6px 30px 5px rgba(0, 0, 0, 0.12), 0 8px 10px -5px rgba(0, 0, 0, 0.2)" 36 | }, 37 | title: { 38 | ...title, 39 | display: "inline-block", 40 | position: "relative", 41 | marginTop: "30px", 42 | minHeight: "32px", 43 | textDecoration: "none" 44 | }, 45 | socials: { 46 | marginTop: "0", 47 | width: "100%", 48 | transform: "none", 49 | left: "0", 50 | top: "0", 51 | height: "100%", 52 | lineHeight: "41px", 53 | fontSize: "20px", 54 | color: "#999" 55 | }, 56 | navWrapper: { 57 | margin: "20px auto 50px auto", 58 | textAlign: "center" 59 | } 60 | }; 61 | 62 | export default profilePageStyle; 63 | -------------------------------------------------------------------------------- /styles/scss/core/variables/_bootstrap-material-design-base.scss: -------------------------------------------------------------------------------- 1 | $gray-lighter: rgba($black, 0.12) !default; 2 | $gray-light: #999 !default; 3 | $gray-alpha: 0.54 !default; 4 | $gray: #555 !default; // spec color 5 | $gray-dark: rgba( 6 | $black, 7 | 0.87 8 | ) !default; // used for text color - others use grey-600 which is considerably lighter 9 | 10 | $bmd-font-weight-base: 400; 11 | 12 | // wondering if any of these could still be refactored out, but are definitely in use. 13 | $bmd-inverse: rgba($white, 1) !default; 14 | $bmd-inverse-light: rgba($white, 0.84) !default; 15 | $bmd-inverse-lighter: rgba($white, 0.54) !default; 16 | 17 | $bmd-label-color: $gray-color !default; 18 | $bmd-label-color-inner-focus: $gray !default; // e.g. radio label or text-muted not a control-label which is primary 19 | 20 | $border-radius-base: 3px !default; 21 | $border-radius-small: 2px !default; 22 | $border-radius-large: 6px !default; 23 | $border-radius-huge: 10px !default; 24 | $border-radius-label: 12px !default; 25 | $border-radius-extreme: 30px !default; 26 | 27 | // Typography elements 28 | $mdb-font-family: "Roboto", "Helvetica", "Arial", sans-serif !default; 29 | $mdb-text-color-light: $white !default; 30 | $mdb-text-color-light-hex: $white !default; // for contrast function in inverse 31 | $mdb-text-color-primary: unquote("rgba(#{$rgb-black}, 0.87)") !default; 32 | $mdb-text-color-primary-hex: $black !default; // for contrast function in inverse 33 | $icon-color: rgba(0, 0, 0, 0.5) !default; 34 | 35 | $mdb-label-color: unquote("rgba(#{$rgb-black}, 0.26)") !default; 36 | $mdb-label-color-toggle-focus: unquote("rgba(#{$rgb-black}, .54)") !default; 37 | -------------------------------------------------------------------------------- /styles/jss/nextjs-material-kit/components/customTabsStyle.ts: -------------------------------------------------------------------------------- 1 | const customTabsStyle = { 2 | cardTitle: { 3 | float: "left", 4 | padding: "10px 10px 10px 0px", 5 | lineHeight: "24px", 6 | }, 7 | cardTitleRTL: { 8 | float: "right", 9 | padding: "10px 0px 10px 10px !important", 10 | }, 11 | displayNone: { 12 | display: "none !important", 13 | }, 14 | tabsRoot: { 15 | minHeight: "unset !important", 16 | }, 17 | tabRootButton: { 18 | minHeight: "unset !important", 19 | minWidth: "unset !important", 20 | width: "unset !important", 21 | height: "unset !important", 22 | maxWidth: "unset !important", 23 | maxHeight: "unset !important", 24 | padding: "10px 15px", 25 | borderRadius: "3px", 26 | lineHeight: "24px", 27 | border: "0 !important", 28 | color: "#fff !important", 29 | marginLeft: "4px", 30 | fontWeight: "500", 31 | fontSize: "12px", 32 | "&:last-child": { 33 | marginLeft: "0px", 34 | }, 35 | }, 36 | tabSelected: { 37 | backgroundColor: "rgba(255, 255, 255, 0.2)", 38 | transition: "0.2s background-color 0.1s", 39 | }, 40 | tabWrapper: { 41 | display: "inline-block", 42 | minHeight: "unset !important", 43 | minWidth: "unset !important", 44 | width: "unset !important", 45 | height: "unset !important", 46 | maxWidth: "unset !important", 47 | maxHeight: "unset !important", 48 | "& > svg": { 49 | verticalAlign: "middle", 50 | margin: "-1.55px 5px 0 0 !important", 51 | }, 52 | "&,& *": { 53 | letterSpacing: "normal !important", 54 | }, 55 | }, 56 | }; 57 | 58 | export default customTabsStyle; 59 | -------------------------------------------------------------------------------- /styles/jss/nextjs-material-kit/pages/componentsSections/navbarsStyle.ts: -------------------------------------------------------------------------------- 1 | import { 2 | container, 3 | title, 4 | grayColor 5 | } from "../../../nextjs-material-kit"; 6 | import headerLinksStyle from "../../components/headerLinksStyle"; 7 | 8 | const navbarsStyle = (theme) => ({ 9 | section: { 10 | padding: "70px 0", 11 | paddingTop: "0" 12 | }, 13 | container, 14 | title: { 15 | ...title, 16 | marginTop: "30px", 17 | minHeight: "32px", 18 | textDecoration: "none" 19 | }, 20 | navbar: { 21 | marginBottom: "-20px", 22 | zIndex: "100", 23 | position: "relative", 24 | overflow: "hidden", 25 | "& header": { 26 | borderRadius: "0" 27 | } 28 | }, 29 | navigation: { 30 | backgroundPosition: "center center", 31 | backgroundSize: "cover", 32 | marginTop: "0", 33 | minHeight: "740px" 34 | }, 35 | formControl: { 36 | [theme.breakpoints.down("md")]: { 37 | margin: "10px 0 0 15px !important", 38 | color: grayColor 39 | }, 40 | margin: "10px 0 0 0 !important", 41 | paddingTop: "0" 42 | }, 43 | inputRootCustomClasses: { 44 | margin: "0!important" 45 | }, 46 | searchIcon: { 47 | width: "20px", 48 | height: "20px", 49 | color: "inherit" 50 | }, 51 | ...headerLinksStyle(theme), 52 | img: { 53 | width: "40px", 54 | height: "40px", 55 | borderRadius: "50%" 56 | }, 57 | imageDropdownButton: { 58 | [theme.breakpoints.down("md")]: { 59 | top: "0", 60 | margin: "5px 15px" 61 | }, 62 | padding: "0px", 63 | top: "4px", 64 | borderRadius: "50%", 65 | marginLeft: "5px" 66 | } 67 | }); 68 | 69 | export default navbarsStyle; 70 | -------------------------------------------------------------------------------- /components/Pagination/Pagination.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | // nodejs library to set properties for components 3 | // nodejs library that concatenates classes 4 | import classNames from "classnames"; 5 | 6 | // @material-ui/core components 7 | import { makeStyles } from "@material-ui/core/styles"; 8 | import Button from "@material-ui/core/Button"; 9 | 10 | import styles from "../../styles/jss/nextjs-material-kit/components/paginationStyle"; 11 | 12 | const useStyles = makeStyles(styles); 13 | 14 | export default function Pagination(props: PaginationProps) { 15 | const classes = useStyles(); 16 | const { pages, color } = props; 17 | return ( 18 |
    19 | {pages.map((prop, key) => { 20 | const paginationLink = classNames({ 21 | [classes.paginationLink]: true, 22 | [classes[color || "primary"]]: prop.active, 23 | [classes.disabled]: prop.disabled, 24 | }); 25 | return ( 26 |
  • 27 | {prop.onClick ? ( 28 | 31 | ) : ( 32 | 38 | )} 39 |
  • 40 | ); 41 | })} 42 |
43 | ); 44 | } 45 | export interface PaginationProps { 46 | pages: { 47 | active: boolean; 48 | disabled: boolean; 49 | text: number | "PREV" | "NEXT" | "..."; 50 | onClick?: any; 51 | }[]; 52 | color: "primary" | "info" | "success" | "warning" | "danger"; 53 | } 54 | -------------------------------------------------------------------------------- /styles/scss/core/variables/_shadow.scss: -------------------------------------------------------------------------------- 1 | // Shadows (originally from mdl http://www.getmdl.io/) 2 | $bmd-shadow-umbra-opacity: 0.2 !default; 3 | $bmd-shadow-penumbra-opacity: 0.14 !default; 4 | $bmd-shadow-ambient-opacity: 0.12 !default; 5 | 6 | // Declare the following for reuse with both mixins and the bootstrap variables 7 | $bmd-shadow-focus: 0 0 8px rgba($black, 0.18), 0 8px 16px rgba($black, 0.36); 8 | 9 | $bmd-shadow-2dp: 0 2px 2px 0 rgba($black, $bmd-shadow-penumbra-opacity), 10 | 0 3px 1px -2px rgba($black, $bmd-shadow-umbra-opacity), 11 | 0 1px 5px 0 rgba($black, $bmd-shadow-ambient-opacity); 12 | 13 | $bmd-shadow-3dp: 0 3px 4px 0 rgba($black, $bmd-shadow-penumbra-opacity), 14 | 0 3px 3px -2px rgba($black, $bmd-shadow-umbra-opacity), 15 | 0 1px 8px 0 rgba($black, $bmd-shadow-ambient-opacity); 16 | 17 | $bmd-shadow-4dp: 0 4px 5px 0 rgba($black, $bmd-shadow-penumbra-opacity), 18 | 0 1px 10px 0 rgba($black, $bmd-shadow-ambient-opacity), 19 | 0 2px 4px -1px rgba($black, $bmd-shadow-umbra-opacity); 20 | 21 | $bmd-shadow-6dp: 0 6px 10px 0 rgba($black, $bmd-shadow-penumbra-opacity), 22 | 0 1px 18px 0 rgba($black, $bmd-shadow-ambient-opacity), 23 | 0 3px 5px -1px rgba($black, $bmd-shadow-umbra-opacity); 24 | 25 | $bmd-shadow-8dp: 0 8px 10px 1px rgba($black, $bmd-shadow-penumbra-opacity), 26 | 0 3px 14px 2px rgba($black, $bmd-shadow-ambient-opacity), 27 | 0 5px 5px -3px rgba($black, $bmd-shadow-umbra-opacity); 28 | 29 | $bmd-shadow-16dp: 0 16px 24px 2px rgba($black, $bmd-shadow-penumbra-opacity), 30 | 0 6px 30px 5px rgba($black, $bmd-shadow-ambient-opacity), 31 | 0 8px 10px -5px rgba($black, $bmd-shadow-umbra-opacity); 32 | 33 | $bmd-shadow-24dp: 0 9px 46px 8px rgba($black, $bmd-shadow-penumbra-opacity), 34 | 0 11px 15px -7px rgba($black, $bmd-shadow-ambient-opacity), 35 | 0 24px 38px 3px rgba($black, $bmd-shadow-umbra-opacity); 36 | -------------------------------------------------------------------------------- /styles/jss/nextjs-material-kit/components/snackbarContentStyle.ts: -------------------------------------------------------------------------------- 1 | import { 2 | defaultFont, 3 | primaryBoxShadow, 4 | infoBoxShadow, 5 | successBoxShadow, 6 | warningBoxShadow, 7 | dangerBoxShadow, 8 | container 9 | } from "../../nextjs-material-kit"; 10 | 11 | const snackbarContentStyle = { 12 | root: { 13 | ...defaultFont, 14 | position: "relative", 15 | padding: "20px 15px", 16 | lineHeight: "20px", 17 | marginBottom: "20px", 18 | fontSize: "14px", 19 | backgroundColor: "white", 20 | color: "#555555", 21 | borderRadius: "0px", 22 | maxWidth: "100%", 23 | minWidth: "auto", 24 | boxShadow: 25 | "0 12px 20px -10px rgba(255, 255, 255, 0.28), 0 4px 20px 0px rgba(0, 0, 0, 0.12), 0 7px 8px -5px rgba(255, 255, 255, 0.2)" 26 | }, 27 | info: { 28 | backgroundColor: "#00d3ee", 29 | color: "#ffffff", 30 | ...infoBoxShadow 31 | }, 32 | success: { 33 | backgroundColor: "#5cb860", 34 | color: "#ffffff", 35 | ...successBoxShadow 36 | }, 37 | warning: { 38 | backgroundColor: "#ffa21a", 39 | color: "#ffffff", 40 | ...warningBoxShadow 41 | }, 42 | danger: { 43 | backgroundColor: "#f55a4e", 44 | color: "#ffffff", 45 | ...dangerBoxShadow 46 | }, 47 | primary: { 48 | backgroundColor: "#af2cc5", 49 | color: "#ffffff", 50 | ...primaryBoxShadow 51 | }, 52 | message: { 53 | padding: "0", 54 | display: "block", 55 | maxWidth: "89%", 56 | "&,& *": { 57 | letterSpacing: "normal" 58 | } 59 | }, 60 | close: { 61 | width: "14px", 62 | height: "14px" 63 | }, 64 | iconButton: { 65 | width: "24px", 66 | height: "24px", 67 | float: "right", 68 | fontSize: "1.5rem", 69 | fontWeight: "500", 70 | lineHeight: "1", 71 | position: "absolute", 72 | right: "-4px", 73 | top: "0", 74 | padding: "0" 75 | }, 76 | icon: { 77 | display: "block", 78 | float: "left", 79 | marginRight: "1.071rem" 80 | }, 81 | container: { 82 | ...container, 83 | position: "relative" 84 | } 85 | }; 86 | 87 | export default snackbarContentStyle; 88 | -------------------------------------------------------------------------------- /components/CustomButtons/Button.tsx: -------------------------------------------------------------------------------- 1 | import React, { ReactNode } from "react"; 2 | // nodejs library to set properties for components 3 | // nodejs library that concatenates classes 4 | import classNames from "classnames"; 5 | 6 | // @material-ui/core components 7 | import makeStyles from "@material-ui/core/styles/makeStyles"; 8 | import Button, { ButtonTypeMap } from "@material-ui/core/Button"; 9 | 10 | // core components 11 | 12 | import buttonStyle from "../../styles/jss/nextjs-material-kit/components/buttonStyle"; 13 | 14 | const makeComponentStyles = makeStyles(() => ({ 15 | ...buttonStyle, 16 | })); 17 | 18 | const RegularButton = React.forwardRef((props: RegularButtonProp, ref: any) => { 19 | const { 20 | color, 21 | round, 22 | children, 23 | fullWidth, 24 | disabled, 25 | simple, 26 | size, 27 | block, 28 | link, 29 | justIcon, 30 | className, 31 | ...rest 32 | } = props; 33 | 34 | const classes = makeComponentStyles(); 35 | 36 | const btnClasses = classNames({ 37 | [classes.button]: true, 38 | [classes[size]]: size, 39 | [classes[color]]: color, 40 | [classes.round]: round, 41 | [classes.fullWidth]: fullWidth, 42 | [classes.disabled]: disabled, 43 | [classes.simple]: simple, 44 | [classes.block]: block, 45 | [classes.link]: link, 46 | [classes.justIcon]: justIcon, 47 | [className]: className, 48 | }); 49 | return ( 50 | 53 | ); 54 | }); 55 | 56 | export interface RegularButtonProp { 57 | color: 58 | | "primary" 59 | | "info" 60 | | "success" 61 | | "warning" 62 | | "danger" 63 | | "rose" 64 | | "white" 65 | | "facebook" 66 | | "twitter" 67 | | "google" 68 | | "github" 69 | | "transparent"; 70 | size?: "sm" | "lg"; 71 | simple?: boolean; 72 | round?: boolean; 73 | fullWidth?: boolean; 74 | disabled?: boolean; 75 | block?: boolean; 76 | link?: boolean; 77 | justIcon?: boolean; 78 | children: ReactNode; 79 | className?: string; 80 | } 81 | 82 | export default RegularButton; 83 | -------------------------------------------------------------------------------- /components/Snackbar/SnackbarContent.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | // nodejs library to set properties for components 3 | // @material-ui/core components 4 | import { makeStyles } from "@material-ui/core/styles"; 5 | import Snack from "@material-ui/core/SnackbarContent"; 6 | import IconButton from "@material-ui/core/IconButton"; 7 | import Icon from "@material-ui/core/Icon"; 8 | // @material-ui/icons 9 | import Close from "@material-ui/icons/Close"; 10 | // core components 11 | 12 | import styles from "../../styles/jss/nextjs-material-kit/components/snackbarContentStyle"; 13 | 14 | const useStyles = makeStyles(styles); 15 | 16 | export default function SnackbarContent(props: SnackbarContentProps) { 17 | const { message, color, close, icon } = props; 18 | const classes = useStyles(); 19 | var action:JSX.Element[] = []; 20 | const closeAlert = () => { 21 | setAlert(null); 22 | }; 23 | if (close !== undefined) { 24 | action = [ 25 | 32 | 33 | , 34 | ]; 35 | } 36 | let snackIcon: JSX.Element|null = null; 37 | if(icon) { 38 | if(typeof icon === 'string') { 39 | snackIcon = {props.icon}; 40 | } else { 41 | snackIcon = ; 42 | } 43 | } 44 | const [alert, setAlert] = React.useState( 45 | 48 | {snackIcon} 49 | {message} 50 | {close !== undefined ? action : null} 51 |
52 | } 53 | classes={{ 54 | root: classes.root + " " + classes[color], 55 | message: classes.message + " " + classes.container, 56 | }} 57 | /> 58 | ); 59 | return alert; 60 | } 61 | 62 | export interface SnackbarContentProps { 63 | message: Element | Element[]; 64 | color: "info" | "success" | "warning" | "danger" | "primary"; 65 | close: boolean; 66 | icon?: string | Element; 67 | } 68 | -------------------------------------------------------------------------------- /styles/jss/nextjs-material-kit/components/customInputStyle.ts: -------------------------------------------------------------------------------- 1 | import { 2 | primaryColor, 3 | dangerColor, 4 | successColor, 5 | defaultFont 6 | } from "../../nextjs-material-kit"; 7 | 8 | const customInputStyle = { 9 | disabled: { 10 | "&:before": { 11 | borderColor: "transparent !important" 12 | } 13 | }, 14 | underline: { 15 | "&:hover:not($disabled):before,&:before": { 16 | borderColor: "#D2D2D2 !important", 17 | borderWidth: "1px !important" 18 | }, 19 | "&:after": { 20 | borderColor: primaryColor 21 | } 22 | }, 23 | underlineError: { 24 | "&:after": { 25 | borderColor: dangerColor 26 | } 27 | }, 28 | underlineSuccess: { 29 | "&:after": { 30 | borderColor: successColor 31 | } 32 | }, 33 | whiteUnderline: { 34 | "&:hover:not($disabled):before,&:before": { 35 | borderColor: "#FFFFFF" 36 | }, 37 | "&:after": { 38 | borderColor: "#FFFFFF" 39 | } 40 | }, 41 | labelRoot: { 42 | ...defaultFont, 43 | color: "#AAAAAA !important", 44 | fontWeight: "400", 45 | fontSize: "14px", 46 | lineHeight: "1.42857", 47 | top: "10px", 48 | letterSpacing: "unset", 49 | "& + $underline": { 50 | marginTop: "0px" 51 | } 52 | }, 53 | labelRootError: { 54 | color: dangerColor + " !important" 55 | }, 56 | labelRootSuccess: { 57 | color: successColor + " !important" 58 | }, 59 | formControl: { 60 | margin: "0 0 17px 0", 61 | paddingTop: "27px", 62 | position: "relative", 63 | "& svg,& .fab,& .far,& .fal,& .fas,& .material-icons": { 64 | color: "#495057" 65 | } 66 | }, 67 | input: { 68 | color: "#495057", 69 | height: "unset", 70 | "&,&::placeholder": { 71 | fontSize: "14px", 72 | fontFamily: '"Roboto", "Helvetica", "Arial", sans-serif', 73 | fontWeight: "400", 74 | lineHeight: "1.42857", 75 | opacity: "1" 76 | }, 77 | "&::placeholder": { 78 | color: "#AAAAAA" 79 | } 80 | }, 81 | whiteInput: { 82 | "&,&::placeholder": { 83 | color: "#FFFFFF", 84 | opacity: "1" 85 | } 86 | } 87 | }; 88 | 89 | export default customInputStyle; 90 | -------------------------------------------------------------------------------- /components/Parallax/Parallax.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | // nodejs library that concatenates classes 3 | import classNames from "classnames"; 4 | // nodejs library to set properties for components 5 | // @material-ui/core components 6 | import { makeStyles } from "@material-ui/core/styles"; 7 | 8 | // core components 9 | import styles from "../../styles/jss/nextjs-material-kit/components/parallaxStyle"; 10 | 11 | const useStyles = makeStyles(styles); 12 | 13 | export default function Parallax(props) { 14 | let windowScrollTop; 15 | // if (window.innerWidth >= 768) { 16 | // windowScrollTop = window.pageYOffset / 3; 17 | // } else { 18 | // windowScrollTop = 0; 19 | // } 20 | const [transform, setTransform] = React.useState("translate3d(0,0px,0)"); 21 | React.useEffect(() => { 22 | if (window.innerWidth >= 768) { 23 | window.addEventListener("scroll", resetTransform); 24 | } 25 | return function cleanup() { 26 | if (window.innerWidth >= 768) { 27 | window.removeEventListener("scroll", resetTransform); 28 | } 29 | }; 30 | }); 31 | const resetTransform = () => { 32 | var windowScrollTop = window.pageYOffset / 3; 33 | setTransform("translate3d(0," + windowScrollTop + "px,0)"); 34 | }; 35 | const { filter, className, children, style, image, small, responsive } = 36 | props; 37 | const classes = useStyles(); 38 | const parallaxClasses = classNames({ 39 | [classes.parallax]: true, 40 | [classes.filter]: filter, 41 | [classes.small]: small, 42 | [classes.parallaxResponsive]: responsive, 43 | [className]: className !== undefined 44 | }); 45 | return ( 46 |
54 | {children} 55 |
56 | ); 57 | } 58 | 59 | export interface ParallaxProps { 60 | className: string, 61 | filter: boolean, 62 | children: Element|Element[], 63 | style: string, 64 | image: string, 65 | small: boolean, 66 | // this will add a min-height of 660px on small screens 67 | responsive: boolean 68 | }; 69 | -------------------------------------------------------------------------------- /styles/jss/nextjs-material-kit/pages/loginPage.ts: -------------------------------------------------------------------------------- 1 | import { container } from "../../nextjs-material-kit"; 2 | 3 | const signupPageStyle = { 4 | container: { 5 | ...container, 6 | zIndex: "2", 7 | position: "relative", 8 | paddingTop: "20vh", 9 | color: "#FFFFFF", 10 | paddingBottom: "200px" 11 | }, 12 | cardHidden: { 13 | opacity: "0", 14 | transform: "translate3d(0, -60px, 0)" 15 | }, 16 | pageHeader: { 17 | minHeight: "100vh", 18 | height: "auto", 19 | display: "inherit", 20 | position: "relative", 21 | margin: "0", 22 | padding: "0", 23 | border: "0", 24 | alignItems: "center", 25 | "&:before": { 26 | background: "rgba(0, 0, 0, 0.5)" 27 | }, 28 | "&:before,&:after": { 29 | position: "absolute", 30 | zIndex: "1", 31 | width: "100%", 32 | height: "100%", 33 | display: "block", 34 | left: "0", 35 | top: "0", 36 | content: '""' 37 | }, 38 | "& footer li a,& footer li a:hover,& footer li a:active": { 39 | color: "#FFFFFF" 40 | }, 41 | "& footer": { 42 | position: "absolute", 43 | bottom: "0", 44 | width: "100%" 45 | } 46 | }, 47 | form: { 48 | margin: "0" 49 | }, 50 | cardHeader: { 51 | width: "auto", 52 | textAlign: "center", 53 | marginLeft: "20px", 54 | marginRight: "20px", 55 | marginTop: "-40px", 56 | padding: "20px 0", 57 | marginBottom: "15px" 58 | }, 59 | socialIcons: { 60 | maxWidth: "24px", 61 | marginTop: "0", 62 | width: "100%", 63 | transform: "none", 64 | left: "0", 65 | top: "0", 66 | height: "100%", 67 | lineHeight: "41px", 68 | fontSize: "20px" 69 | }, 70 | divider: { 71 | marginTop: "30px", 72 | marginBottom: "0px", 73 | textAlign: "center" 74 | }, 75 | cardFooter: { 76 | paddingTop: "0rem", 77 | border: "0", 78 | borderRadius: "6px", 79 | justifyContent: "center !important" 80 | }, 81 | socialLine: { 82 | marginTop: "1rem", 83 | textAlign: "center", 84 | padding: "0" 85 | }, 86 | inputIconsColor: { 87 | color: "#495057" 88 | } 89 | }; 90 | 91 | export default signupPageStyle; 92 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "next-material-kit", 3 | "version": "1.2.1", 4 | "description": "NextJS Version of Material Kit React by Creative Tim (https://creative-tim.com)", 5 | "scripts": { 6 | "test": "echo \"Error: no test specified\" && exit 1", 7 | "dev": "next dev", 8 | "build": "next build", 9 | "start": "next start", 10 | "export": "next export", 11 | "install:clean": "rm -rf node_modules/ && rm -rf package-lock.json && rm -rf .next/ && npm install && npm run dev" 12 | }, 13 | "repository": { 14 | "type": "git", 15 | "url": "git+https://github.com/creativetimofficial/nextjs-material-kit.git" 16 | }, 17 | "keywords": [ 18 | "next", 19 | "nextjs", 20 | "react", 21 | "reactjs", 22 | "npx", 23 | "material", 24 | "material-design", 25 | "material-kit", 26 | "material-kit-react", 27 | "next-material-kit" 28 | ], 29 | "author": "Creative Tim", 30 | "license": "MIT", 31 | "bugs": { 32 | "url": "https://github.com/creativetimofficial/nextjs-material-kit/issues" 33 | }, 34 | "homepage": "https://demos.creative-tim.com/nextjs-material-kit", 35 | "dependencies": { 36 | "@material-ui/core": "^4.12.4", 37 | "@material-ui/icons": "^4.11.3", 38 | "@mdx-js/loader": "^2.0.0-rc.2", 39 | "@mdx-js/react": "^2.0.0-rc.2", 40 | "@reach/disclosure": "^0.17.0", 41 | "@reach/tooltip": "^0.17.0", 42 | "@types/glob": "^8.0.0", 43 | "classnames": "^2.3.2", 44 | "glob": "^8.0.3", 45 | "gray-matter": "^4.0.3", 46 | "moment": "^2.29.4", 47 | "next": "^12.3.0", 48 | "next-mdx-remote": "^4.1.0", 49 | "nouislider": "^15.6.1", 50 | "react": "^18.2.0", 51 | "react-datetime": "^3.1.1", 52 | "react-dom": "^18.2.0", 53 | "react-slick": "^0.29.0", 54 | "rehype-highlight": "^5.0.2", 55 | "remark-frontmatter": "^4.0.1", 56 | "sass": "^1.54.9", 57 | "styled-components": "^5.3.5", 58 | "webpack": "^5.74.0" 59 | }, 60 | "peerDependencies": { 61 | "react": ">=16.0.0", 62 | "react-dom": ">=16.0.0" 63 | }, 64 | "devDependencies": { 65 | "@types/node": "^18.7.17", 66 | "@types/react": "^18.0.19", 67 | "prettier": "^2.7.1", 68 | "typescript": "^4.8.3" 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /pages-sections/Components-Sections/SectionNotifications.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | // @material-ui/core components 3 | import { makeStyles } from "@material-ui/core/styles"; 4 | // @material-ui/icons 5 | import Check from "@material-ui/icons/Check"; 6 | import Warning from "@material-ui/icons/Warning"; 7 | // core components 8 | import SnackbarContent from "../../components/Snackbar/SnackbarContent"; 9 | import Clearfix from "../../components/Clearfix/Clearfix"; 10 | 11 | import styles from "../../styles/jss/nextjs-material-kit/pages/componentsSections/notificationsStyles"; 12 | 13 | const useStyles = makeStyles(styles); 14 | 15 | export default function SectionNotifications() { 16 | const classes = useStyles(); 17 | return ( 18 |
19 |
20 |
21 |

Notifications

22 |
23 |
24 | 27 | INFO ALERT: You{"'"}ve got some friends nearby, stop looking 28 | at your phone and find them... 29 | 30 | } 31 | close 32 | color="info" 33 | icon="info_outline" 34 | /> 35 | 38 | SUCCESS ALERT: You{"'"}ve got some friends nearby, stop 39 | looking at your phone and find them... 40 | 41 | } 42 | close 43 | color="success" 44 | icon={Check} 45 | /> 46 | 49 | WARNING ALERT: You{"'"}ve got some friends nearby, stop 50 | looking at your phone and find them... 51 | 52 | } 53 | close 54 | color="warning" 55 | icon={Warning} 56 | /> 57 | 60 | DANGER ALERT: You{"'"}ve got some friends nearby, stop 61 | looking at your phone and find them... 62 | 63 | } 64 | close 65 | color="danger" 66 | icon="info_outline" 67 | /> 68 | 69 |
70 | ); 71 | } 72 | -------------------------------------------------------------------------------- /pages-sections/Components-Sections/SectionExamples.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | // react components for routing our app without refresh 3 | import Link from "next/link"; 4 | // @material-ui/core components 5 | import { makeStyles } from "@material-ui/core/styles"; 6 | // @material-ui/icons 7 | 8 | // core components 9 | import GridContainer from "../../components/Grid/GridContainer"; 10 | import GridItem from "../../components/Grid/GridItem"; 11 | import Button from "../../components/CustomButtons/Button"; 12 | 13 | import styles from "../../styles/jss/nextjs-material-kit/pages/componentsSections/exampleStyle"; 14 | 15 | const useStyles = makeStyles(styles); 16 | 17 | export default function SectionExamples() { 18 | const classes = useStyles(); 19 | return ( 20 |
21 |
22 | 23 | 24 | 25 | 26 | ... 37 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | ... 57 | 60 | 61 | 62 | 63 | 64 |
65 |
66 | ); 67 | } 68 | -------------------------------------------------------------------------------- /styles/scss/core/_misc.scss: -------------------------------------------------------------------------------- 1 | html * { 2 | -webkit-font-smoothing: antialiased; 3 | -moz-osx-font-smoothing: grayscale; 4 | } 5 | body { 6 | font-size: 1rem; 7 | } 8 | body, 9 | h1, 10 | h2, 11 | h3, 12 | h4, 13 | h5, 14 | h6 { 15 | font-family: "Roboto", "Helvetica", "Arial", sans-serif; 16 | font-weight: 300; 17 | line-height: 1.5em; 18 | } 19 | h1, 20 | h2, 21 | h3, 22 | h4, 23 | h5, 24 | h6 { 25 | color: inherit; 26 | } 27 | h1, 28 | h2, 29 | h3 { 30 | margin-top: 20px; 31 | margin-bottom: 10px; 32 | } 33 | h4, 34 | h5, 35 | h6 { 36 | margin-top: 10px; 37 | margin-bottom: 10px; 38 | } 39 | h1 { 40 | font-size: 3.3125rem; 41 | line-height: 1.15em; 42 | } 43 | h2 { 44 | font-size: 2.25rem; 45 | line-height: 1.5em; 46 | } 47 | h3 { 48 | font-size: 1.5625rem; 49 | line-height: 1.4em; 50 | } 51 | h4 { 52 | font-size: 1.125rem; 53 | line-height: 1.5em; 54 | } 55 | h5 { 56 | font-size: 1.0625rem; 57 | line-height: 1.55em; 58 | } 59 | h6 { 60 | font-size: 0.75rem; 61 | text-transform: uppercase; 62 | font-weight: 500; 63 | } 64 | p { 65 | font-size: 14px; 66 | margin: 0 0 10px; 67 | } 68 | html { 69 | font-family: sans-serif; 70 | line-height: 1.15; 71 | -webkit-text-size-adjust: 100%; 72 | -ms-text-size-adjust: 100%; 73 | -ms-overflow-style: scrollbar; 74 | -webkit-tap-highlight-color: transparent; 75 | } 76 | body { 77 | background-color: #e5e5e5; 78 | color: $black-color; 79 | margin: 0; 80 | font-size: 1rem; 81 | text-align: left; 82 | } 83 | 84 | legend { 85 | border-bottom: 0; 86 | } 87 | 88 | // Prevent highlight on mobile 89 | * { 90 | -webkit-tap-highlight-color: rgba(255, 255, 255, 0); 91 | -webkit-tap-highlight-color: transparent; 92 | box-sizing: border-box; 93 | &:focus { 94 | outline: 0; 95 | } 96 | } 97 | 98 | a { 99 | color: $link-color; 100 | text-decoration: none; 101 | background-color: transparent; 102 | &:hover, 103 | &:focus { 104 | color: darken($link-color, 5%); 105 | text-decoration: none; 106 | } 107 | } 108 | 109 | label { 110 | font-size: 14px; 111 | line-height: 1.42857; 112 | color: $checkboxes-text-color; 113 | font-weight: 400; 114 | } 115 | small { 116 | font-size: 75%; 117 | color: #777; 118 | font-weight: 400; 119 | } 120 | img { 121 | vertical-align: middle; 122 | border-style: none; 123 | } 124 | form { 125 | margin-bottom: 1.125rem; 126 | } 127 | -------------------------------------------------------------------------------- /pages/_document.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import Document, { Html, Head, Main, NextScript } from "next/document"; 3 | import { ServerStyleSheets } from "@material-ui/styles"; 4 | 5 | class MyDocument extends Document { 6 | render() { 7 | return ( 8 | 9 | 10 | 11 | 12 | 13 | 18 | {/* Fonts and icons */} 19 | 24 | 28 | 29 | 30 |
31 |
32 | 33 | 34 | 35 | ); 36 | } 37 | } 38 | 39 | MyDocument.getInitialProps = async (ctx) => { 40 | // Resolution order 41 | // 42 | // On the server: 43 | // 1. app.getInitialProps 44 | // 2. page.getInitialProps 45 | // 3. document.getInitialProps 46 | // 4. app.render 47 | // 5. page.render 48 | // 6. document.render 49 | // 50 | // On the server with error: 51 | // 1. document.getInitialProps 52 | // 2. app.render 53 | // 3. page.render 54 | // 4. document.render 55 | // 56 | // On the client 57 | // 1. app.getInitialProps 58 | // 2. page.getInitialProps 59 | // 3. app.render 60 | // 4. page.render 61 | 62 | // Render app and page and get the context of the page with collected side effects. 63 | const sheets = new ServerStyleSheets(); 64 | const originalRenderPage = ctx.renderPage; 65 | 66 | ctx.renderPage = () => 67 | originalRenderPage({ 68 | enhanceApp: (App) => (props) => sheets.collect(), 69 | }); 70 | 71 | const initialProps = await Document.getInitialProps(ctx); 72 | 73 | return { 74 | ...initialProps, 75 | // Styles fragment is rendered after the app and page rendering finish. 76 | styles: [ 77 | 78 | {initialProps.styles} 79 | {sheets.getStyleElement()} 80 | , 81 | ], 82 | }; 83 | }; 84 | 85 | export default MyDocument; 86 | -------------------------------------------------------------------------------- /pages-sections/LandingPage-Sections/WorkSection.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | // @material-ui/core components 3 | import { makeStyles } from "@material-ui/core/styles"; 4 | 5 | // @material-ui/icons 6 | 7 | // core components 8 | import GridContainer from "../../components/Grid/GridContainer"; 9 | import GridItem from "../../components/Grid/GridItem"; 10 | import CustomInput from "../../components/CustomInput/CustomInput"; 11 | import Button from "../../components/CustomButtons/Button"; 12 | 13 | import styles from "../../styles/jss/nextjs-material-kit/pages/landingPageSections/workStyle"; 14 | 15 | const useStyles = makeStyles(styles); 16 | 17 | export default function WorkSection() { 18 | const classes = useStyles(); 19 | return ( 20 |
21 | 22 | 23 |

Work with us

24 |

25 | Divide details about your product or agency work into parts. Write a 26 | few lines about each one and contact us about any further 27 | collaboration. We will responde get back to you in a couple of 28 | hours. 29 |

30 |
31 | 32 | 33 | 40 | 41 | 42 | 49 | 50 | 62 | 63 | 64 | 65 | 66 |
67 |
68 |
69 |
70 | ); 71 | } 72 | -------------------------------------------------------------------------------- /components/CustomInput/CustomInput.tsx: -------------------------------------------------------------------------------- 1 | import React, { ReactNode } from "react"; 2 | // nodejs library to set properties for components 3 | // nodejs library that concatenates classes 4 | import classNames from "classnames"; 5 | // @material-ui/core components 6 | import { makeStyles } from "@material-ui/core/styles"; 7 | import FormControl from "@material-ui/core/FormControl"; 8 | import InputLabel from "@material-ui/core/InputLabel"; 9 | import Input from "@material-ui/core/Input"; 10 | 11 | import styles from "../../styles/jss/nextjs-material-kit/components/customInputStyle"; 12 | 13 | const useStyles = makeStyles(styles); 14 | 15 | export default function CustomInput(props: CustomInputProps) { 16 | const classes = useStyles(); 17 | const { 18 | formControlProps, 19 | labelText, 20 | id, 21 | labelProps, 22 | inputProps, 23 | error, 24 | white, 25 | inputRootCustomClasses, 26 | success 27 | } = props; 28 | 29 | const labelClasses = classNames({ 30 | [" " + classes.labelRootError]: error, 31 | [" " + classes.labelRootSuccess]: success && !error 32 | }); 33 | const underlineClasses = classNames({ 34 | [classes.underlineError]: error, 35 | [classes.underlineSuccess]: success && !error, 36 | [classes.underline]: true, 37 | [classes.whiteUnderline]: white 38 | }); 39 | const marginTop = classNames({ 40 | [inputRootCustomClasses]: inputRootCustomClasses !== undefined 41 | }); 42 | const inputClasses = classNames({ 43 | [classes.input]: true, 44 | [classes.whiteInput]: white 45 | }); 46 | var formControlClasses; 47 | if (formControlProps !== undefined) { 48 | formControlClasses = classNames( 49 | formControlProps.className, 50 | classes.formControl 51 | ); 52 | } else { 53 | formControlClasses = classes.formControl; 54 | } 55 | return ( 56 | 57 | {labelText !== undefined ? ( 58 | 63 | {labelText} 64 | 65 | ) : null} 66 | 76 | 77 | ); 78 | } 79 | 80 | export interface CustomInputProps { 81 | labelText?: string; 82 | labelProps?: any; 83 | id?: string; 84 | inputProps?: any; 85 | formControlProps?: any; 86 | inputRootCustomClasses?: string; 87 | error?: boolean; 88 | success?: boolean; 89 | white?: boolean; 90 | }; 91 | -------------------------------------------------------------------------------- /pages-sections/LandingPage-Sections/ProductSection.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | // @material-ui/core components 3 | import { makeStyles } from "@material-ui/core/styles"; 4 | 5 | // @material-ui/icons 6 | import Chat from "@material-ui/icons/Chat"; 7 | import VerifiedUser from "@material-ui/icons/VerifiedUser"; 8 | import Fingerprint from "@material-ui/icons/Fingerprint"; 9 | // core components 10 | import GridContainer from "../../components/Grid/GridContainer"; 11 | import GridItem from "../../components/Grid/GridItem"; 12 | import InfoArea from "../../components/InfoArea/InfoArea"; 13 | 14 | import styles from "../../styles/jss/nextjs-material-kit/pages/landingPageSections/productStyle"; 15 | 16 | const useStyles = makeStyles(styles); 17 | 18 | export default function ProductSection() { 19 | const classes = useStyles(); 20 | return ( 21 |
22 | 23 | 24 |

Let{"'"}s talk product

25 |
26 | This is the paragraph where you can write more details about your 27 | product. Keep you user engaged by providing meaningful information. 28 | Remember that by this time, the user is curious, otherwise he wouldn 29 | {"'"}t scroll to get here. Add a button if you want the user to see 30 | more. 31 |
32 |
33 |
34 |
35 | 36 | 37 | 44 | 45 | 46 | 53 | 54 | 55 | 62 | 63 | 64 |
65 |
66 | ); 67 | } 68 | -------------------------------------------------------------------------------- /pages-sections/Components-Sections/SectionCarousel.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | // react component for creating beautiful carousel 3 | import Carousel from "react-slick"; 4 | // @material-ui/core components 5 | import { makeStyles } from "@material-ui/core/styles"; 6 | // @material-ui/icons 7 | import LocationOn from "@material-ui/icons/LocationOn"; 8 | // core components 9 | import GridContainer from "../../components/Grid/GridContainer"; 10 | import GridItem from "../../components/Grid/GridItem"; 11 | import Card from "../../components/Card/Card"; 12 | 13 | import styles from "../../styles/jss/nextjs-material-kit/pages/componentsSections/carouselStyle"; 14 | 15 | const useStyles = makeStyles(styles); 16 | 17 | export default function SectionCarousel() { 18 | const classes = useStyles(); 19 | const settings = { 20 | dots: true, 21 | infinite: true, 22 | speed: 500, 23 | slidesToShow: 1, 24 | slidesToScroll: 1, 25 | autoplay: false 26 | }; 27 | return ( 28 |
29 |
30 | 31 | 32 | 33 | 34 |
35 | First slide 40 |
41 |

42 | 43 | Yellowstone National Park, United States 44 |

45 |
46 |
47 |
48 | Second slide 53 |
54 |

55 | 56 | Somewhere Beyond, United States 57 |

58 |
59 |
60 |
61 | Third slide 66 |
67 |

68 | 69 | Yellowstone National Park, United States 70 |

71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 | ); 80 | } 81 | -------------------------------------------------------------------------------- /pages/landing.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | // nodejs library that concatenates classes 3 | import classNames from "classnames"; 4 | // @material-ui/core components 5 | import { makeStyles } from "@material-ui/core/styles"; 6 | 7 | // @material-ui/icons 8 | 9 | // core components 10 | import Header from "../components/Header/Header"; 11 | import Footer from "../components/Footer/Footer"; 12 | import GridContainer from "../components/Grid/GridContainer"; 13 | import GridItem from "../components/Grid/GridItem"; 14 | import Button from "../components/CustomButtons/Button"; 15 | import HeaderLinks from "../components/Header/HeaderLinks"; 16 | import Parallax from "../components/Parallax/Parallax"; 17 | 18 | import styles from "../styles/jss/nextjs-material-kit/pages/landingPage"; 19 | 20 | // Sections for this page 21 | import ProductSection from "../pages-sections/LandingPage-Sections/ProductSection"; 22 | import TeamSection from "../pages-sections/LandingPage-Sections/TeamSection"; 23 | import WorkSection from "../pages-sections/LandingPage-Sections/WorkSection"; 24 | 25 | const dashboardRoutes = []; 26 | 27 | const useStyles = makeStyles(styles); 28 | 29 | export default function LandingPage(props) { 30 | const classes = useStyles(); 31 | const { ...rest } = props; 32 | return ( 33 |
34 |
} 39 | fixed 40 | changeColorOnScroll={{ 41 | height: 400, 42 | color: "white" 43 | }} 44 | {...rest} 45 | /> 46 | 47 |
48 | 49 | 50 |

Your Story Starts With Us.

51 |

52 | Every landing page needs a small description after the big bold 53 | title, that{"'"}s why we added this text here. Add here all the 54 | information that can make you or your product create the first 55 | impression. 56 |

57 |
58 | 68 |
69 |
70 |
71 |
72 |
73 |
74 | 75 | 76 | 77 |
78 |
79 |
80 |
81 | ); 82 | } 83 | -------------------------------------------------------------------------------- /styles/scss/core/variables/_functions.scss: -------------------------------------------------------------------------------- 1 | // Bootstrap functions 2 | // 3 | // Utility mixins and functions for evalutating source code across our variables, maps, and mixins. 4 | 5 | // Ascending 6 | // Used to evaluate Sass maps like our grid breakpoints. 7 | @mixin _assert-ascending($map, $map-name) { 8 | $prev-key: null; 9 | $prev-num: null; 10 | @each $key, $num in $map { 11 | @if $prev-num == null { 12 | // Do nothing 13 | } @else if not comparable($prev-num, $num) { 14 | @warn "Potentially invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} whose unit makes it incomparable to #{$prev-num}, the value of the previous key '#{$prev-key}' !"; 15 | } @else if $prev-num >= $num { 16 | @warn "Invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} which isn't greater than #{$prev-num}, the value of the previous key '#{$prev-key}' !"; 17 | } 18 | $prev-key: $key; 19 | $prev-num: $num; 20 | } 21 | } 22 | 23 | // Starts at zero 24 | // Another grid mixin that ensures the min-width of the lowest breakpoint starts at 0. 25 | @mixin _assert-starts-at-zero($map) { 26 | $values: map-values($map); 27 | $first-value: nth($values, 1); 28 | @if $first-value != 0 { 29 | @warn "First breakpoint in `$grid-breakpoints` must start at 0, but starts at #{$first-value}."; 30 | } 31 | } 32 | 33 | // Replace `$search` with `$replace` in `$string` 34 | // Used on our SVG icon backgrounds for custom forms. 35 | // 36 | // @author Hugo Giraudel 37 | // @param {String} $string - Initial string 38 | // @param {String} $search - Substring to replace 39 | // @param {String} $replace ('') - New value 40 | // @return {String} - Updated string 41 | @function str-replace($string, $search, $replace: "") { 42 | $index: str-index($string, $search); 43 | 44 | @if $index { 45 | @return str-slice($string, 1, $index - 1) + $replace + 46 | str-replace( 47 | str-slice($string, $index + str-length($search)), 48 | $search, 49 | $replace 50 | ); 51 | } 52 | 53 | @return $string; 54 | } 55 | 56 | // Color contrast 57 | @function color-yiq($color) { 58 | $r: red($color); 59 | $g: green($color); 60 | $b: blue($color); 61 | 62 | $yiq: (($r * 299) + ($g * 587) + ($b * 114)) / 1000; 63 | 64 | @if ($yiq >= $yiq-contrasted-threshold) { 65 | @return $yiq-text-dark; 66 | } @else { 67 | @return $yiq-text-light; 68 | } 69 | } 70 | 71 | // Retrieve color Sass maps 72 | @function color($key: "blue") { 73 | @return map-get($colors, $key); 74 | } 75 | 76 | @function theme-color($key: "primary") { 77 | @return map-get($theme-colors, $key); 78 | } 79 | 80 | @function gray($key: "100") { 81 | @return map-get($grays, $key); 82 | } 83 | 84 | // Request a theme color level 85 | @function theme-color-level($color-name: "primary", $level: 0) { 86 | $color: theme-color($color-name); 87 | $color-base: if($level > 0, #000, #fff); 88 | $level: abs($level); 89 | 90 | @return mix($color-base, $color, $level * $theme-color-interval); 91 | } 92 | -------------------------------------------------------------------------------- /components/Footer/Footer.tsx: -------------------------------------------------------------------------------- 1 | /*eslint-disable*/ 2 | import React from "react"; 3 | // nodejs library to set properties for components 4 | // nodejs library that concatenates classes 5 | import classNames from "classnames"; 6 | // material-ui core components 7 | import { List, ListItem } from "@material-ui/core"; 8 | import { makeStyles } from "@material-ui/core/styles"; 9 | 10 | // @material-ui/icons 11 | import Favorite from "@material-ui/icons/Favorite"; 12 | 13 | import styles from "../../styles/jss/nextjs-material-kit/components/footerStyle"; 14 | 15 | const useStyles = makeStyles(styles); 16 | 17 | export default function Footer(props: FooterProps) { 18 | const classes = useStyles(); 19 | const { whiteFont } = props; 20 | const footerClasses = classNames({ 21 | [classes.footer]: true, 22 | [classes.footerWhiteFont]: whiteFont 23 | }); 24 | const aClasses = classNames({ 25 | [classes.a]: true, 26 | [classes.footerWhiteFont]: whiteFont 27 | }); 28 | return ( 29 | 85 | ); 86 | } 87 | 88 | export interface FooterProps { 89 | whiteFont?: boolean 90 | }; 91 | -------------------------------------------------------------------------------- /components/CustomTabs/CustomTabs.tsx: -------------------------------------------------------------------------------- 1 | import React, { ReactNode } from "react"; 2 | // nodejs library that concatenates classes 3 | import classNames from "classnames"; 4 | // nodejs library to set properties for components 5 | 6 | // material-ui components 7 | import { makeStyles } from "@material-ui/core/styles"; 8 | import Tabs from "@material-ui/core/Tabs"; 9 | import Tab from "@material-ui/core/Tab"; 10 | import Icon from "@material-ui/core/Icon"; 11 | // core components 12 | import Card from "../Card/Card"; 13 | import CardBody from "../Card/CardBody"; 14 | import CardHeader from "../Card/CardHeader"; 15 | 16 | import styles from "../../styles/jss/nextjs-material-kit/components/customTabsStyle"; 17 | 18 | const useStyles = makeStyles(styles); 19 | 20 | export default function CustomTabs(props: CustomTabsProps) { 21 | const [value, setValue] = React.useState(0); 22 | 23 | const handleChange = (event, value) => { 24 | setValue(value); 25 | }; 26 | const classes = useStyles(); 27 | const { headerColor, plainTabs, tabs, title, rtlActive } = props; 28 | const cardTitle = classNames({ 29 | [classes.cardTitle]: true, 30 | [classes.cardTitleRTL]: rtlActive, 31 | }); 32 | return ( 33 | 34 | 35 | {title !== undefined ?
{title}
: null} 36 | 44 | {tabs.map((prop, key) => { 45 | var icon = {}; 46 | if (prop.tabIcon) { 47 | icon = { 48 | icon: 49 | typeof prop.tabIcon === "string" ? ( 50 | {prop.tabIcon} 51 | ) : ( 52 | 53 | ), 54 | }; 55 | } 56 | return ( 57 | 68 | ); 69 | })} 70 | 71 |
72 | 73 | <> 74 | {tabs.map((prop, key) => { 75 | if (key === value) { 76 | return
{prop.tabContent}
; 77 | } 78 | return null; 79 | })} 80 | 81 |
82 |
83 | ); 84 | } 85 | 86 | export interface CustomTabsProps { 87 | headerColor: "warning" | "success" | "danger" | "info" | "primary" | "rose"; 88 | 89 | title: string; 90 | tabs: { 91 | tabName: string; 92 | tabIcon: any; 93 | tabContent: JSX.Element; 94 | }[]; 95 | rtlActive: boolean; 96 | plainTabs: boolean; 97 | } 98 | -------------------------------------------------------------------------------- /pages/blog/[slug].tsx: -------------------------------------------------------------------------------- 1 | import * as fs from "fs"; 2 | import * as path from "path"; 3 | import matter from "gray-matter"; 4 | import React from "react"; 5 | import { MDXRemote } from "next-mdx-remote"; 6 | import Image from "next/image"; 7 | import { Box, Typography } from "@material-ui/core"; 8 | import { serialize } from "next-mdx-remote/serialize"; 9 | import Button from "../../components/CustomButtons/Button"; 10 | import Parallax from "../../components/Parallax/Parallax"; 11 | import { makeStyles } from "@material-ui/core/styles"; 12 | import styles from "../../styles/jss/nextjs-material-kit/pages/components"; 13 | import GridItem from "../../components/Grid/GridItem"; 14 | import GridContainer from "../../components/Grid/GridContainer"; 15 | import classNames from "classnames"; 16 | import Header from "../../components/Header/Header"; 17 | import HeaderLinks from "../../components/Header/HeaderLinks"; 18 | 19 | const useStyles = makeStyles(styles); 20 | 21 | export const PostPage = (props: { frontMatter; mdxSource }) => { 22 | const { frontMatter, mdxSource } = props; 23 | const classes = useStyles(); 24 | 25 | return ( 26 |
27 |
} 30 | fixed 31 | color="white" 32 | /> 33 | 34 |
35 | 36 | 37 |
38 |

{frontMatter.title}

39 | {frontMatter.published} 40 | 41 | {frontMatter.description} 42 | 43 |
44 |
45 |
46 |
47 |
48 |
49 | 54 |
55 | 59 |
60 |
61 |
62 |
63 | ); 64 | }; 65 | 66 | const getStaticPaths = async () => { 67 | const files = fs.readdirSync(path.join("blog")); 68 | const paths = files.map((filename) => ({ 69 | params: { 70 | slug: filename.replace(".mdx", ""), 71 | }, 72 | })); 73 | return { 74 | paths, 75 | fallback: false, 76 | }; 77 | }; 78 | 79 | const getStaticProps = async ({ params: { slug } }) => { 80 | const markdownWithMeta = fs.readFileSync( 81 | path.join("blog/", slug + ".mdx"), 82 | "utf-8" 83 | ); 84 | 85 | const { data: frontMatter, content } = matter(markdownWithMeta); 86 | const mdxSource = await serialize(content); 87 | 88 | return { 89 | props: { 90 | mdxSource, 91 | frontMatter: { 92 | ...frontMatter, 93 | published: new Date(frontMatter.published).toDateString(), 94 | }, 95 | }, 96 | }; 97 | }; 98 | 99 | export { getStaticProps, getStaticPaths }; 100 | export default PostPage; 101 | -------------------------------------------------------------------------------- /styles/jss/nextjs-material-kit/components/headerLinksStyle.ts: -------------------------------------------------------------------------------- 1 | import { defaultFont 2 | } from "../../nextjs-material-kit"; 3 | 4 | import tooltip from "../../nextjs-material-kit/tooltipsStyle"; 5 | 6 | const headerLinksStyle = (theme) => ({ 7 | list: { 8 | ...defaultFont, 9 | fontSize: "14px", 10 | margin: 0, 11 | paddingLeft: "0", 12 | listStyle: "none", 13 | paddingTop: "0", 14 | paddingBottom: "0", 15 | color: "inherit" 16 | }, 17 | listItem: { 18 | float: "left", 19 | color: "inherit", 20 | position: "relative", 21 | display: "block", 22 | width: "auto", 23 | margin: "0", 24 | padding: "0", 25 | [theme.breakpoints.down("sm")]: { 26 | width: "100%", 27 | "&:after": { 28 | width: "calc(100% - 30px)", 29 | content: '""', 30 | display: "block", 31 | height: "1px", 32 | marginLeft: "15px", 33 | backgroundColor: "#e5e5e5" 34 | } 35 | } 36 | }, 37 | listItemText: { 38 | padding: "0 !important" 39 | }, 40 | navLink: { 41 | color: "inherit", 42 | position: "relative", 43 | padding: "0.9375rem", 44 | fontWeight: "400", 45 | fontSize: "12px", 46 | textTransform: "uppercase", 47 | borderRadius: "3px", 48 | lineHeight: "20px", 49 | textDecoration: "none", 50 | margin: "0px", 51 | display: "inline-flex", 52 | "&:hover,&:focus": { 53 | color: "inherit", 54 | background: "rgba(200, 200, 200, 0.2)" 55 | }, 56 | [theme.breakpoints.down("sm")]: { 57 | width: "calc(100% - 30px)", 58 | marginLeft: "15px", 59 | marginBottom: "8px", 60 | marginTop: "8px", 61 | textAlign: "left", 62 | "& > span:first-child": { 63 | justifyContent: "flex-start" 64 | } 65 | } 66 | }, 67 | notificationNavLink: { 68 | [theme.breakpoints.down("md")]: { 69 | top: "0", 70 | margin: "5px 15px" 71 | }, 72 | color: "#FFF", 73 | padding: "0.9375rem", 74 | fontWeight: "400", 75 | fontSize: "12px", 76 | textTransform: "uppercase", 77 | lineHeight: "20px", 78 | textDecoration: "none", 79 | margin: "0px", 80 | display: "inline-flex", 81 | top: "4px" 82 | }, 83 | registerNavLink: { 84 | [theme.breakpoints.down("md")]: { 85 | top: "0", 86 | margin: "5px 15px" 87 | }, 88 | top: "3px", 89 | position: "relative", 90 | fontWeight: "400", 91 | fontSize: "12px", 92 | textTransform: "uppercase", 93 | lineHeight: "20px", 94 | textDecoration: "none", 95 | margin: "0px", 96 | display: "inline-flex" 97 | }, 98 | navLinkActive: { 99 | color: "inherit", 100 | backgroundColor: "rgba(255, 255, 255, 0.1)" 101 | }, 102 | icons: { 103 | width: "20px", 104 | height: "20px", 105 | marginRight: "3px" 106 | }, 107 | socialIcons: { 108 | position: "relative", 109 | fontSize: "20px !important", 110 | marginRight: "4px" 111 | }, 112 | dropdownLink: { 113 | "&,&:hover,&:focus": { 114 | color: "inherit", 115 | textDecoration: "none", 116 | display: "block", 117 | padding: "10px 20px" 118 | } 119 | }, 120 | ...tooltip, 121 | marginRight5: { 122 | marginRight: "5px" 123 | } 124 | }); 125 | 126 | export default headerLinksStyle; 127 | -------------------------------------------------------------------------------- /pages/_app.tsx: -------------------------------------------------------------------------------- 1 | /*! 2 | 3 | ========================================================= 4 | * NextJS Material Kit v1.2.1 based on Material Kit Free - v2.0.2 (Bootstrap 4.0.0 Final Edition) and Material Kit React v1.8.0 5 | ========================================================= 6 | 7 | * Product Page: https://www.creative-tim.com/product/nextjs-material-kit 8 | * Copyright 2022 Creative Tim (https://www.creative-tim.com) 9 | * Licensed under MIT (https://github.com/creativetimofficial/nextjs-material-kit/blob/main/LICENSE.md) 10 | 11 | * Coded by Creative Tim 12 | 13 | ========================================================= 14 | 15 | * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 16 | 17 | */ 18 | import React from "react"; 19 | import ReactDOM from "react-dom"; 20 | import App from "next/app"; 21 | import Head from "next/head"; 22 | import Router from "next/router"; 23 | 24 | import PageChange from "../components/PageChange/PageChange"; 25 | 26 | import "/styles/scss/nextjs-material-kit.scss?v=1.2.0"; 27 | 28 | Router.events.on("routeChangeStart", (url) => { 29 | console.log(`Loading: ${url}`); 30 | document.body.classList.add("body-page-transition"); 31 | ReactDOM.render( 32 | , 33 | document.getElementById("page-transition") 34 | ); 35 | }); 36 | Router.events.on("routeChangeComplete", () => { 37 | ReactDOM.unmountComponentAtNode(document.getElementById("page-transition")); 38 | document.body.classList.remove("body-page-transition"); 39 | }); 40 | Router.events.on("routeChangeError", () => { 41 | ReactDOM.unmountComponentAtNode(document.getElementById("page-transition")); 42 | document.body.classList.remove("body-page-transition"); 43 | }); 44 | 45 | export default class MyApp extends App { 46 | componentDidMount() { 47 | let comment = document.createComment(` 48 | 49 | ========================================================= 50 | * NextJS Material Kit v1.2.1 based on Material Kit Free - v2.0.2 (Bootstrap 4.0.0 Final Edition) and Material Kit React v1.8.0 51 | ========================================================= 52 | 53 | * Product Page: https://www.creative-tim.com/product/nextjs-material-kit 54 | * Copyright 2022 Creative Tim (https://www.creative-tim.com) 55 | * Licensed under MIT (https://github.com/creativetimofficial/nextjs-material-kit/blob/main/LICENSE.md) 56 | 57 | * Coded by Creative Tim 58 | 59 | ========================================================= 60 | 61 | * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 62 | 63 | `); 64 | document.insertBefore(comment, document.documentElement); 65 | } 66 | static async getInitialProps({ Component, router, ctx }) { 67 | let pageProps = {}; 68 | 69 | if (Component.getInitialProps) { 70 | pageProps = await Component.getInitialProps(ctx); 71 | } 72 | 73 | return { pageProps }; 74 | } 75 | render() { 76 | const { Component, pageProps } = this.props; 77 | 78 | return ( 79 | 80 | 81 | 85 | NextJS Material Kit by Creative Tim 86 | 87 | 88 | 89 | ); 90 | } 91 | } 92 | -------------------------------------------------------------------------------- /pages/blog/index.tsx: -------------------------------------------------------------------------------- 1 | import React, { useState } from "react"; 2 | import { getAllArticles } from "../../utils/markdown"; 3 | import Header from "../../components/Header/Header"; 4 | import HeaderLinks from "../../components/Header/HeaderLinks"; 5 | import Parallax from "../../components/Parallax/Parallax"; 6 | import GridContainer from "../../components/Grid/GridContainer"; 7 | import GridItem from "../../components/Grid/GridItem"; 8 | import { makeStyles } from "@material-ui/core/styles"; 9 | import styles from "../../styles/jss/nextjs-material-kit/pages/components"; 10 | import Footer from "../../components/Footer/Footer"; 11 | import classNames from "classnames"; 12 | import BlogCard from "../../components/Blog/BlogCard"; 13 | import Button from "../../components/CustomButtons/Button"; 14 | 15 | const useStyles = makeStyles(styles); 16 | 17 | type PostType = { 18 | title: string; 19 | description: string; 20 | published: string; 21 | image_url: string; 22 | slug: string; 23 | }; 24 | 25 | export default function BlogPage(props: { posts: PostType[] }) { 26 | const classes = useStyles(); 27 | 28 | const { posts } = props; 29 | 30 | const [filteredPosts, setFilteredPosts] = useState(posts); 31 | const [currentPageIndex, setCurrentPageIndex] = useState(1); 32 | 33 | const loadMorePosts = async () => { 34 | const res = await fetch(`/api/post?page=${currentPageIndex + 1}`); // absolute url is supported here 35 | const posts = await res.json(); 36 | 37 | setFilteredPosts((_posts) => [..._posts, ...posts]); 38 | setCurrentPageIndex((_pageIndex) => _pageIndex + 1); 39 | }; 40 | 41 | return ( 42 |
43 |
} 46 | fixed 47 | color="transparent" 48 | changeColorOnScroll={{ 49 | height: 400, 50 | color: "white", 51 | }} 52 | /> 53 | 54 |
55 | 56 | 57 |
58 |

NextJS Blog.

59 |
60 |
61 |
62 |
63 |
64 |
65 | 66 | 67 |
68 | {filteredPosts.map((post, index) => ( 69 | 70 | ))} 71 |
72 | 75 |
76 |
77 |
78 |
79 |
80 | ); 81 | } 82 | 83 | export const getStaticProps = async () => { 84 | const articles: PostType[] = await getAllArticles(); 85 | 86 | articles 87 | .map((post) => post) 88 | .sort((a, b) => { 89 | if (a.published > b.published) return 1; 90 | if (a.published < b.published) return -1; 91 | 92 | return 0; 93 | }); 94 | 95 | const posts = articles.map((post) => { 96 | return { 97 | ...post, 98 | published: new Date(post.published).toDateString(), 99 | }; 100 | }); 101 | 102 | return { 103 | props: { 104 | posts, 105 | }, 106 | }; 107 | }; 108 | -------------------------------------------------------------------------------- /components/NavPills/NavPills.tsx: -------------------------------------------------------------------------------- 1 | import React, { ReactNode } from "react"; 2 | // nodejs library that concatenates classes 3 | import classNames from "classnames"; 4 | // nodejs library to set properties for components 5 | 6 | // @material-ui/core components 7 | import { makeStyles } from "@material-ui/core/styles"; 8 | import Tabs from "@material-ui/core/Tabs"; 9 | import Tab from "@material-ui/core/Tab"; 10 | 11 | // core components 12 | import GridContainer from "../Grid/GridContainer"; 13 | import GridItem from "../Grid/GridItem"; 14 | 15 | import styles from "../../styles/jss/nextjs-material-kit/components/navPillsStyle"; 16 | 17 | const useStyles = makeStyles(styles); 18 | 19 | export default function NavPills(props: NavPillsProps) { 20 | const [active, setActive] = React.useState(props.active || 0); 21 | const handleChange = (event, active: number) => { 22 | setActive(active); 23 | }; 24 | const handleChangeIndex = (index: number) => { 25 | setActive(index); 26 | }; 27 | const classes = useStyles(); 28 | const { tabs, color, horizontal, alignCenter } = props; 29 | const flexContainerClasses = classNames({ 30 | [classes.flexContainer]: true, 31 | [classes.horizontalDisplay]: horizontal !== undefined 32 | }); 33 | const tabButtons = ( 34 | 45 | {tabs.map((prop, key) => { 46 | var icon = {}; 47 | if (prop.tabIcon !== undefined) { 48 | icon["icon"] = ; 49 | } 50 | const pillsClasses = classNames({ 51 | [classes.pills]: true, 52 | [classes.horizontalPills]: horizontal !== undefined, 53 | [classes.pillsWithIcons]: prop.tabIcon !== undefined 54 | }); 55 | return ( 56 | 66 | ); 67 | })} 68 | 69 | ); 70 | const tabContent = ( 71 |
72 | {tabs.map((prop, key) => { 73 | if (key !== active) { 74 | return null; 75 | } else { 76 | return ( 77 |
78 | {prop.tabContent} 79 |
80 | ); 81 | } 82 | })} 83 |
84 | ); 85 | return horizontal !== undefined ? ( 86 | 87 | {tabButtons} 88 | {tabContent} 89 | 90 | ) : ( 91 |
92 | {tabButtons} 93 | {tabContent} 94 |
95 | ); 96 | } 97 | 98 | export interface NavPillsProps { 99 | // index of the default active pill 100 | active?: number; 101 | tabs: { 102 | tabButton: string; 103 | tabIcon: any; 104 | tabContent: ReactNode; 105 | }[]; 106 | color?: 107 | | "primary" 108 | | "warning" 109 | | "danger" 110 | | "success" 111 | | "info" 112 | | "rose"; 113 | horizontal?: { 114 | tabsGrid: any; 115 | contentGrid: any; 116 | }, 117 | alignCenter?: boolean 118 | }; 119 | -------------------------------------------------------------------------------- /pages/components.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | // nodejs library that concatenates classes 3 | import classNames from "classnames"; 4 | // react components for routing our app without refresh 5 | import Link from "next/link"; 6 | // @material-ui/core components 7 | import { makeStyles } from "@material-ui/core/styles"; 8 | // @material-ui/icons 9 | // core components 10 | import Header from "../components/Header/Header"; 11 | import HeaderLinks from "../components/Header/HeaderLinks"; 12 | import Footer from "../components/Footer/Footer"; 13 | import GridContainer from "../components/Grid/GridContainer"; 14 | import GridItem from "../components/Grid/GridItem"; 15 | import Button from "../components/CustomButtons/Button"; 16 | import Parallax from "../components/Parallax/Parallax"; 17 | // sections for this page 18 | import SectionNavbars from "../pages-sections/Components-Sections/SectionNavbars"; 19 | import SectionBasics from "../pages-sections/Components-Sections/SectionBasics"; 20 | import SectionTabs from "../pages-sections/Components-Sections/SectionTabs"; 21 | import SectionPills from "../pages-sections/Components-Sections/SectionPills"; 22 | import SectionNotifications from "../pages-sections/Components-Sections/SectionNotifications"; 23 | import SectionTypography from "../pages-sections/Components-Sections/SectionTypography"; 24 | import SectionJavascript from "../pages-sections/Components-Sections/SectionJavascript"; 25 | import SectionCarousel from "../pages-sections/Components-Sections/SectionCarousel"; 26 | import SectionCompletedExamples from "../pages-sections/Components-Sections/SectionCompletedExamples"; 27 | import SectionLogin from "../pages-sections/Components-Sections/SectionLogin"; 28 | import SectionExamples from "../pages-sections/Components-Sections/SectionExamples"; 29 | import SectionDownload from "../pages-sections/Components-Sections/SectionDownload"; 30 | 31 | import styles from "../styles/jss/nextjs-material-kit/pages/components"; 32 | 33 | const useStyles = makeStyles(styles); 34 | 35 | export default function Components(props) { 36 | const classes = useStyles(); 37 | const { ...rest } = props; 38 | return ( 39 |
40 |
} 43 | fixed 44 | color="transparent" 45 | changeColorOnScroll={{ 46 | height: 400, 47 | color: "white", 48 | }} 49 | {...rest} 50 | /> 51 | 52 |
53 | 54 | 55 |
56 |

NextJS Material Kit.

57 |

58 | A Badass Material Kit based on Material-UI and NextJS. 59 |

60 |
61 |
62 |
63 |
64 |
65 | 66 |
67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 83 | 84 | 85 | 86 | 87 | 88 |
89 |
90 |
91 | ); 92 | } 93 | -------------------------------------------------------------------------------- /styles/jss/nextjs-material-kit/components/navPillsStyle.ts: -------------------------------------------------------------------------------- 1 | import { 2 | hexToRGBAlpha, 3 | roseColor, 4 | primaryColor, 5 | infoColor, 6 | successColor, 7 | warningColor, 8 | dangerColor 9 | } from "../../nextjs-material-kit"; 10 | 11 | const navPillsStyle = (theme) => ({ 12 | root: { 13 | marginTop: "20px", 14 | paddingLeft: "0", 15 | marginBottom: "0", 16 | overflow: "visible !important", 17 | lineHeight: "24px", 18 | textTransform: "uppercase", 19 | fontSize: "12px", 20 | fontWeight: "500", 21 | position: "relative", 22 | display: "block", 23 | color: "inherit" 24 | }, 25 | flexContainer: { 26 | [theme.breakpoints.down("xs")]: { 27 | display: "flex", 28 | flexWrap: "wrap" 29 | } 30 | }, 31 | displayNone: { 32 | display: "none !important" 33 | }, 34 | fixed: { 35 | overflow: "visible !important" 36 | }, 37 | horizontalDisplay: { 38 | display: "block" 39 | }, 40 | pills: { 41 | float: "left", 42 | position: "relative", 43 | display: "block", 44 | borderRadius: "30px", 45 | minWidth: "100px", 46 | textAlign: "center", 47 | transition: "all .3s", 48 | padding: "10px 15px", 49 | color: "#555555", 50 | height: "auto", 51 | opacity: "1", 52 | maxWidth: "100%", 53 | margin: "0 5px" 54 | }, 55 | pillsWithIcons: { 56 | borderRadius: "4px" 57 | }, 58 | tabIcon: { 59 | width: "30px", 60 | height: "30px", 61 | display: "block", 62 | margin: "15px 0 !important", 63 | "&, & *": { 64 | letterSpacing: "normal !important" 65 | } 66 | }, 67 | horizontalPills: { 68 | width: "100%", 69 | float: "none !important", 70 | "& + button": { 71 | margin: "10px 0" 72 | } 73 | }, 74 | contentWrapper: { 75 | marginTop: "20px" 76 | }, 77 | primary: { 78 | "&,&:hover": { 79 | color: "#FFFFFF", 80 | backgroundColor: primaryColor, 81 | boxShadow: `0 4px 20px 0px rgba(0, 0, 0, 0.14), 0 7px 10px -5px ${hexToRGBAlpha( 82 | primaryColor, 83 | 0.4 84 | )}` 85 | } 86 | }, 87 | info: { 88 | "&,&:hover": { 89 | color: "#FFFFFF", 90 | backgroundColor: infoColor, 91 | boxShadow: `0 4px 20px 0px rgba(0, 0, 0, 0.14), 0 7px 10px -5px ${hexToRGBAlpha( 92 | infoColor, 93 | 0.4 94 | )}` 95 | } 96 | }, 97 | success: { 98 | "&,&:hover": { 99 | color: "#FFFFFF", 100 | backgroundColor: successColor, 101 | boxShadow: `0 2px 2px 0 ${hexToRGBAlpha( 102 | successColor, 103 | 0.14 104 | )}, 0 3px 1px -2px ${hexToRGBAlpha( 105 | successColor, 106 | 0.2 107 | )}, 0 1px 5px 0 ${hexToRGBAlpha(successColor, 0.12)}` 108 | } 109 | }, 110 | warning: { 111 | "&,&:hover": { 112 | color: "#FFFFFF", 113 | backgroundColor: warningColor, 114 | boxShadow: `0 4px 20px 0px rgba(0, 0, 0, 0.14), 0 7px 10px -5px ${hexToRGBAlpha( 115 | warningColor, 116 | 0.4 117 | )}` 118 | } 119 | }, 120 | danger: { 121 | "&,&:hover": { 122 | color: "#FFFFFF", 123 | backgroundColor: dangerColor, 124 | boxShadow: `0 4px 20px 0px rgba(0, 0, 0, 0.14), 0 7px 10px -5px ${hexToRGBAlpha( 125 | dangerColor, 126 | 0.4 127 | )}` 128 | } 129 | }, 130 | rose: { 131 | "&,&:hover": { 132 | color: "#FFFFFF", 133 | backgroundColor: roseColor, 134 | boxShadow: `0 4px 20px 0px rgba(0, 0, 0, 0.14), 0 7px 10px -5px ${hexToRGBAlpha( 135 | roseColor, 136 | 0.4 137 | )}` 138 | } 139 | }, 140 | alignCenter: { 141 | alignItems: "center", 142 | justifyContent: "center" 143 | }, 144 | tabWrapper: { 145 | color: "inherit", 146 | position: "relative", 147 | fontSize: "12px", 148 | lineHeight: "24px", 149 | fontWeight: "500", 150 | textTransform: "uppercase", 151 | "&,& *": { 152 | letterSpacing: "normal" 153 | } 154 | } 155 | }); 156 | 157 | export default navPillsStyle; 158 | -------------------------------------------------------------------------------- /pages-sections/Components-Sections/SectionDownload.tsx: -------------------------------------------------------------------------------- 1 | /*eslint-disable*/ 2 | import React from "react"; 3 | // @material-ui/core components 4 | import { makeStyles } from "@material-ui/core/styles"; 5 | // @material-ui/icons 6 | import GridContainer from "../../components/Grid/GridContainer"; 7 | import GridItem from "../../components/Grid/GridItem"; 8 | import Button from "../../components/CustomButtons/Button"; 9 | // core components 10 | import styles from "../../styles/jss/nextjs-material-kit/pages/componentsSections/downloadStyle"; 11 | 12 | const useStyles = makeStyles(styles); 13 | 14 | export default function SectionDownload() { 15 | const classes = useStyles(); 16 | return ( 17 |
18 |
19 | 20 | 21 |

Do you love this UI Kit?

22 |

23 | Cause if you do, it can be yours for FREE. Hit the buttons below 24 | to navigate to our website where you can find the kit. We also 25 | have the Bootstrap 4 version on plain HTML. Start a new project or 26 | give an old Bootstrap project a new look! 27 |

28 |
29 | 30 | 38 | 46 | 47 |
48 |
49 |
50 | 51 | 52 |

Want more?

53 |

54 | We've just launched{" "} 55 | e.preventDefault()}> 56 | NextJS Material Kit PRO{" "} 57 | 58 | .It has a huge number of components, sections and example pages. 59 | Start Your Development With A Badass Material-UI and NexJS Kit 60 | inspired by Material Design. 61 |

62 |
63 | 64 | 72 | 80 | 81 |
82 |
83 | 84 |

Thank you for supporting us!

85 |
86 | 89 | 92 | 96 | 99 |
100 |
101 |
102 | ); 103 | } 104 | -------------------------------------------------------------------------------- /styles/jss/nextjs-material-kit/components/headerStyle.ts: -------------------------------------------------------------------------------- 1 | import { 2 | container, 3 | hexToRGBAlpha, 4 | defaultFont, 5 | primaryColor, 6 | infoColor, 7 | successColor, 8 | warningColor, 9 | dangerColor, 10 | roseColor, 11 | transition, 12 | boxShadow, 13 | drawerWidth 14 | } from "../../nextjs-material-kit"; 15 | 16 | const headerStyle = { 17 | appBar: { 18 | display: "flex", 19 | border: "0", 20 | borderRadius: "3px", 21 | padding: "0.625rem 0", 22 | marginBottom: "20px", 23 | color: "#555", 24 | width: "100%", 25 | backgroundColor: "#fff", 26 | boxShadow: 27 | "0 4px 18px 0px rgba(0, 0, 0, 0.12), 0 7px 10px -5px rgba(0, 0, 0, 0.15)", 28 | transition: "all 150ms ease 0s", 29 | alignItems: "center", 30 | flexFlow: "row nowrap", 31 | justifyContent: "flex-start", 32 | position: "relative", 33 | zIndex: "unset" 34 | }, 35 | absolute: { 36 | position: "absolute", 37 | zIndex: 1100 38 | }, 39 | fixed: { 40 | position: "fixed", 41 | zIndex: 1100 42 | }, 43 | container: { 44 | ...container, 45 | minHeight: "50px", 46 | flex: "1", 47 | alignItems: "center", 48 | justifyContent: "space-between", 49 | display: "flex", 50 | flexWrap: "nowrap" 51 | }, 52 | flex: { 53 | flex: 1 54 | }, 55 | title: { 56 | ...defaultFont, 57 | lineHeight: "30px", 58 | fontSize: "18px", 59 | borderRadius: "3px", 60 | textTransform: "none", 61 | color: "inherit", 62 | padding: "8px 16px", 63 | letterSpacing: "unset", 64 | "&:hover,&:focus": { 65 | color: "inherit", 66 | background: "transparent" 67 | } 68 | }, 69 | appResponsive: { 70 | margin: "20px 10px" 71 | }, 72 | primary: { 73 | backgroundColor: primaryColor, 74 | color: "#FFFFFF", 75 | boxShadow: `0 4px 20px 0px rgba(0, 0, 0, 0.14), 0 7px 12px -5px ${hexToRGBAlpha( 76 | primaryColor, 77 | 0.46 78 | )}` 79 | }, 80 | info: { 81 | backgroundColor: infoColor, 82 | color: "#FFFFFF", 83 | boxShadow: `0 4px 20px 0px rgba(0, 0, 0, 0.14), 0 7px 12px -5px ${hexToRGBAlpha( 84 | infoColor, 85 | 0.46 86 | )}` 87 | }, 88 | success: { 89 | backgroundColor: successColor, 90 | color: "#FFFFFF", 91 | boxShadow: `0 4px 20px 0px rgba(0, 0, 0, 0.14), 0 7px 12px -5px ${hexToRGBAlpha( 92 | successColor, 93 | 0.46 94 | )}` 95 | }, 96 | warning: { 97 | backgroundColor: warningColor, 98 | color: "#FFFFFF", 99 | boxShadow: `0 4px 20px 0px rgba(0, 0, 0, 0.14), 0 7px 12px -5px ${hexToRGBAlpha( 100 | warningColor, 101 | 0.46 102 | )}` 103 | }, 104 | danger: { 105 | backgroundColor: dangerColor, 106 | color: "#FFFFFF", 107 | boxShadow: `0 4px 20px 0px rgba(0, 0, 0, 0.14), 0 7px 12px -5px ${hexToRGBAlpha( 108 | dangerColor, 109 | 0.46 110 | )}` 111 | }, 112 | rose: { 113 | backgroundColor: roseColor, 114 | color: "#FFFFFF", 115 | boxShadow: `0 4px 20px 0px rgba(0, 0, 0, 0.14), 0 7px 12px -5px ${hexToRGBAlpha( 116 | roseColor, 117 | 0.46 118 | )}` 119 | }, 120 | transparent: { 121 | backgroundColor: "transparent !important", 122 | boxShadow: "none", 123 | paddingTop: "25px", 124 | color: "#FFFFFF" 125 | }, 126 | dark: { 127 | color: "#FFFFFF", 128 | backgroundColor: "#212121 !important", 129 | boxShadow: 130 | "0 4px 20px 0px rgba(0, 0, 0, 0.14), 0 7px 12px -5px rgba(33, 33, 33, 0.46)" 131 | }, 132 | white: { 133 | border: "0", 134 | padding: "0.625rem 0", 135 | marginBottom: "20px", 136 | color: "#555", 137 | backgroundColor: "#fff !important", 138 | boxShadow: 139 | "0 4px 18px 0px rgba(0, 0, 0, 0.12), 0 7px 10px -5px rgba(0, 0, 0, 0.15)" 140 | }, 141 | drawerPaper: { 142 | border: "none", 143 | bottom: "0", 144 | transitionProperty: "top, bottom, width", 145 | transitionDuration: ".2s, .2s, .35s", 146 | transitionTimingFunction: "linear, linear, ease", 147 | width: drawerWidth, 148 | ...boxShadow, 149 | position: "fixed", 150 | display: "block", 151 | top: "0", 152 | height: "100vh", 153 | right: "0", 154 | left: "auto", 155 | visibility: "visible", 156 | overflowY: "visible", 157 | borderTop: "none", 158 | textAlign: "left", 159 | paddingRight: "0px", 160 | paddingLeft: "0", 161 | ...transition 162 | } 163 | }; 164 | 165 | export default headerStyle; 166 | -------------------------------------------------------------------------------- /components/Header/HeaderLinks.tsx: -------------------------------------------------------------------------------- 1 | /*eslint-disable*/ 2 | import React from "react"; 3 | import Link from "next/link"; 4 | 5 | // @material-ui/core components 6 | import { makeStyles } from "@material-ui/core/styles"; 7 | import List from "@material-ui/core/List"; 8 | import ListItem from "@material-ui/core/ListItem"; 9 | import Tooltip from "@material-ui/core/Tooltip"; 10 | import Icon from "@material-ui/core/Icon"; 11 | 12 | // @material-ui/icons 13 | import { Apps, CloudDownload } from "@material-ui/icons"; 14 | import DeleteIcon from "@material-ui/icons/Delete"; 15 | import IconButton from "@material-ui/core/IconButton"; 16 | 17 | // core components 18 | import CustomDropdown from "../CustomDropdown/CustomDropdown"; 19 | import Button from "../CustomButtons/Button"; 20 | 21 | import styles from "../../styles/jss/nextjs-material-kit/components/headerLinksStyle"; 22 | 23 | const useStyles = makeStyles(styles); 24 | 25 | export default function HeaderLinks(props) { 26 | const classes = useStyles(); 27 | return ( 28 | 29 | 30 | 41 | All components 42 | , 43 | 48 | Documentation 49 | 50 | ]} 51 | /> 52 | 53 | 54 | 61 | 62 | 63 | 71 | 72 | 73 | {/* 74 | 75 | 76 | 77 | */} 78 | 84 | 92 | 93 | 94 | 95 | 101 | 109 | 110 | 111 | 112 | 118 | 126 | 127 | 128 | 129 | ); 130 | } 131 | -------------------------------------------------------------------------------- /styles/jss/nextjs-material-kit/customCheckboxRadioSwitch.ts: -------------------------------------------------------------------------------- 1 | import { 2 | primaryColor, 3 | dangerColor, 4 | roseColor, 5 | grayColor, 6 | hexToRGBAlpha 7 | } from "../nextjs-material-kit"; 8 | 9 | const customCheckboxRadioSwitch = { 10 | checkRoot: { 11 | padding: "12px", 12 | "&:hover": { 13 | backgroundColor: hexToRGBAlpha(primaryColor, 0.04) + "!important" 14 | } 15 | }, 16 | radioRoot: { 17 | padding: "12px", 18 | "&:hover": { 19 | backgroundColor: hexToRGBAlpha(primaryColor, 0.04) + "!important" 20 | } 21 | }, 22 | labelRoot: { 23 | marginLeft: "-14px" 24 | }, 25 | checkboxAndRadio: { 26 | position: "relative", 27 | display: "block", 28 | marginTop: "10px", 29 | marginBottom: "10px" 30 | }, 31 | checkboxAndRadioHorizontal: { 32 | position: "relative", 33 | display: "block", 34 | "&:first-child": { 35 | marginTop: "10px" 36 | }, 37 | "&:not(:first-child)": { 38 | marginTop: "-14px" 39 | }, 40 | marginTop: "0", 41 | marginBottom: "0" 42 | }, 43 | checked: { 44 | color: primaryColor + "!important" 45 | }, 46 | checkedIcon: { 47 | width: "20px", 48 | height: "20px", 49 | border: "1px solid rgba(0, 0, 0, .54)", 50 | borderRadius: "3px" 51 | }, 52 | uncheckedIcon: { 53 | width: "0px", 54 | height: "0px", 55 | padding: "9px", 56 | border: "1px solid rgba(0, 0, 0, .54)", 57 | borderRadius: "3px" 58 | }, 59 | disabledCheckboxAndRadio: { 60 | opacity: "0.45" 61 | }, 62 | label: { 63 | cursor: "pointer", 64 | paddingLeft: "0", 65 | color: "rgba(0, 0, 0, 0.26)", 66 | fontSize: "14px", 67 | lineHeight: "1.428571429", 68 | fontWeight: "400", 69 | display: "inline-flex", 70 | transition: "0.3s ease all", 71 | letterSpacing: "unset" 72 | }, 73 | labelHorizontal: { 74 | color: "rgba(0, 0, 0, 0.26)", 75 | cursor: "pointer", 76 | display: "inline-flex", 77 | fontSize: "14px", 78 | lineHeight: "1.428571429", 79 | fontWeight: "400", 80 | paddingTop: "39px", 81 | marginRight: "0", 82 | "@media (min-width: 992px)": { 83 | float: "right" 84 | } 85 | }, 86 | labelHorizontalRadioCheckbox: { 87 | paddingTop: "22px" 88 | }, 89 | labelLeftHorizontal: { 90 | color: "rgba(0, 0, 0, 0.26)", 91 | cursor: "pointer", 92 | display: "inline-flex", 93 | fontSize: "14px", 94 | lineHeight: "1.428571429", 95 | fontWeight: "400", 96 | paddingTop: "22px", 97 | marginRight: "0" 98 | }, 99 | labelError: { 100 | color: dangerColor 101 | }, 102 | radio: { 103 | color: primaryColor + "!important" 104 | }, 105 | radioChecked: { 106 | width: "16px", 107 | height: "16px", 108 | border: "1px solid " + primaryColor, 109 | borderRadius: "50%" 110 | }, 111 | radioUnchecked: { 112 | width: "0px", 113 | height: "0px", 114 | padding: "7px", 115 | border: "1px solid rgba(0, 0, 0, .54)", 116 | borderRadius: "50%" 117 | }, 118 | inlineChecks: { 119 | marginTop: "8px" 120 | }, 121 | iconCheckbox: { 122 | height: "116px", 123 | width: "116px", 124 | color: grayColor, 125 | "& > span:first-child": { 126 | borderWidth: "4px", 127 | borderStyle: "solid", 128 | borderColor: "#CCCCCC", 129 | textAlign: "center", 130 | verticalAlign: "middle", 131 | borderRadius: "50%", 132 | color: "inherit", 133 | margin: "0 auto 20px", 134 | transition: "all 0.2s" 135 | }, 136 | "&:hover": { 137 | color: roseColor, 138 | "& > span:first-child": { 139 | borderColor: roseColor 140 | } 141 | } 142 | }, 143 | iconCheckboxChecked: { 144 | color: roseColor, 145 | "& > span:first-child": { 146 | borderColor: roseColor 147 | } 148 | }, 149 | iconCheckboxIcon: { 150 | fontSize: "40px", 151 | lineHeight: "111px" 152 | }, 153 | switchBase: { 154 | color: primaryColor + "!important" 155 | }, 156 | switchIcon: { 157 | boxShadow: "0 1px 3px 1px rgba(0, 0, 0, 0.4)", 158 | color: "#FFFFFF !important", 159 | border: "1px solid rgba(0, 0, 0, .54)" 160 | }, 161 | switchBar: { 162 | width: "30px", 163 | height: "15px", 164 | backgroundColor: "rgb(80, 80, 80)", 165 | borderRadius: "15px", 166 | opacity: "0.7!important" 167 | }, 168 | switchChecked: { 169 | "& + $switchBar": { 170 | backgroundColor: "rgba(156, 39, 176, 1) !important" 171 | }, 172 | "& $switchIcon": { 173 | borderColor: "#9c27b0" 174 | } 175 | }, 176 | switchRoot: { 177 | height: "48px" 178 | } 179 | }; 180 | 181 | export default customCheckboxRadioSwitch; 182 | -------------------------------------------------------------------------------- /styles/jss/nextjs-material-kit/components/paginationStyle.ts: -------------------------------------------------------------------------------- 1 | import { 2 | hexToRGBAlpha, 3 | grayColor, 4 | primaryColor, 5 | infoColor, 6 | successColor, 7 | warningColor, 8 | dangerColor, 9 | roseColor 10 | } from "../../nextjs-material-kit"; 11 | 12 | const paginationStyle = { 13 | pagination: { 14 | display: "inline-block", 15 | paddingLeft: "0", 16 | margin: "0 0 20px 0", 17 | borderRadius: "4px" 18 | }, 19 | paginationItem: { 20 | display: "inline" 21 | }, 22 | paginationLink: { 23 | ":first-of-type": { 24 | marginleft: "0" 25 | }, 26 | letterSpacing: "unset", 27 | border: "0", 28 | borderRadius: "30px !important", 29 | transition: "all .3s", 30 | padding: "0px 11px", 31 | margin: "0 3px", 32 | minWidth: "30px", 33 | height: "30px", 34 | minHeight: "auto", 35 | lineHeight: "30px", 36 | fontWeight: "400", 37 | fontSize: "12px", 38 | textTransform: "uppercase", 39 | background: "transparent", 40 | position: "relative", 41 | float: "left", 42 | textDecoration: "none", 43 | boxSizing: "border-box", 44 | "&,&:hover,&:focus": { 45 | color: grayColor 46 | }, 47 | "&:hover,&:focus": { 48 | zIndex: "3", 49 | backgroundColor: "#eee", 50 | borderColor: "#ddd" 51 | }, 52 | "&:hover": { 53 | cursor: "pointer" 54 | } 55 | }, 56 | primary: { 57 | "&,&:hover,&:focus": { 58 | backgroundColor: primaryColor, 59 | borderColor: primaryColor, 60 | color: "#FFFFFF", 61 | boxShadow: `0 4px 5px 0 ${hexToRGBAlpha( 62 | primaryColor, 63 | 0.14 64 | )}, 0 1px 10px 0 ${hexToRGBAlpha( 65 | primaryColor, 66 | 0.12 67 | )}, 0 2px 4px -1px ${hexToRGBAlpha(primaryColor, 0.2)}` 68 | }, 69 | "&:hover,&:focus": { 70 | zIndex: "2", 71 | cursor: "default" 72 | } 73 | }, 74 | info: { 75 | "&,&:hover,&:focus": { 76 | backgroundColor: infoColor, 77 | borderColor: infoColor, 78 | color: "#FFFFFF", 79 | boxShadow: `0 4px 5px 0 ${hexToRGBAlpha( 80 | infoColor, 81 | 0.14 82 | )}, 0 1px 10px 0 ${hexToRGBAlpha( 83 | infoColor, 84 | 0.12 85 | )}, 0 2px 4px -1px ${hexToRGBAlpha(infoColor, 0.2)}` 86 | }, 87 | "&:hover,&:focus": { 88 | zIndex: "2", 89 | cursor: "default" 90 | } 91 | }, 92 | success: { 93 | "&,&:hover,&:focus": { 94 | backgroundColor: successColor, 95 | borderColor: successColor, 96 | color: "#FFFFFF", 97 | boxShadow: `0 4px 5px 0 ${hexToRGBAlpha( 98 | successColor, 99 | 0.14 100 | )}, 0 1px 10px 0 ${hexToRGBAlpha( 101 | successColor, 102 | 0.12 103 | )}, 0 2px 4px -1px ${hexToRGBAlpha(successColor, 0.2)}` 104 | }, 105 | "&:hover,&:focus": { 106 | zIndex: "2", 107 | cursor: "default" 108 | } 109 | }, 110 | warning: { 111 | "&,&:hover,&:focus": { 112 | backgroundColor: warningColor, 113 | borderColor: warningColor, 114 | color: "#FFFFFF", 115 | boxShadow: `0 4px 5px 0 ${hexToRGBAlpha( 116 | warningColor, 117 | 0.14 118 | )}, 0 1px 10px 0 ${hexToRGBAlpha( 119 | warningColor, 120 | 0.12 121 | )}, 0 2px 4px -1px ${hexToRGBAlpha(warningColor, 0.2)}` 122 | }, 123 | "&:hover,&:focus": { 124 | zIndex: "2", 125 | cursor: "default" 126 | } 127 | }, 128 | danger: { 129 | "&,&:hover,&:focus": { 130 | backgroundColor: dangerColor, 131 | borderColor: dangerColor, 132 | color: "#FFFFFF", 133 | boxShadow: `0 4px 5px 0 ${hexToRGBAlpha( 134 | dangerColor, 135 | 0.14 136 | )}, 0 1px 10px 0 ${hexToRGBAlpha( 137 | dangerColor, 138 | 0.12 139 | )}, 0 2px 4px -1px ${hexToRGBAlpha(dangerColor, 0.2)}` 140 | }, 141 | "&:hover,&:focus": { 142 | zIndex: "2", 143 | cursor: "default" 144 | } 145 | }, 146 | rose: { 147 | "&,&:hover,&:focus": { 148 | backgroundColor: roseColor, 149 | borderColor: roseColor, 150 | color: "#FFFFFF", 151 | boxShadow: `0 4px 5px 0 ${hexToRGBAlpha( 152 | roseColor, 153 | 0.14 154 | )}, 0 1px 10px 0 ${hexToRGBAlpha( 155 | roseColor, 156 | 0.12 157 | )}, 0 2px 4px -1px ${hexToRGBAlpha(roseColor, 0.2)}` 158 | }, 159 | "&:hover,&:focus": { 160 | zIndex: "2", 161 | cursor: "default" 162 | } 163 | }, 164 | disabled: { 165 | "&,&:hover,&:focus": { 166 | color: "#777", 167 | cursor: "not-allowed", 168 | backgroundColor: "#fff", 169 | borderColor: "#ddd" 170 | } 171 | } 172 | }; 173 | 174 | export default paginationStyle; 175 | -------------------------------------------------------------------------------- /components/Header/Header.tsx: -------------------------------------------------------------------------------- 1 | import React, { ReactElement } from "react"; 2 | import Link from "next/link"; 3 | // nodejs library that concatenates classes 4 | import classNames from "classnames"; 5 | // nodejs library to set properties for components 6 | // @material-ui/core components 7 | import { makeStyles } from "@material-ui/core/styles"; 8 | import AppBar from "@material-ui/core/AppBar"; 9 | import Toolbar from "@material-ui/core/Toolbar"; 10 | import IconButton from "@material-ui/core/IconButton"; 11 | import Button from "@material-ui/core/Button"; 12 | import Hidden from "@material-ui/core/Hidden"; 13 | import Drawer from "@material-ui/core/Drawer"; 14 | // @material-ui/icons 15 | import Menu from "@material-ui/icons/Menu"; 16 | // core components 17 | import styles from "../../styles/jss/nextjs-material-kit/components/headerStyle"; 18 | 19 | const useStyles = makeStyles(styles); 20 | 21 | export default function Header(props: HeaderProps) { 22 | const classes = useStyles(); 23 | const [mobileOpen, setMobileOpen] = React.useState(false); 24 | React.useEffect(() => { 25 | if (props.changeColorOnScroll) { 26 | window.addEventListener("scroll", headerColorChange); 27 | } 28 | return function cleanup() { 29 | if (props.changeColorOnScroll) { 30 | window.removeEventListener("scroll", headerColorChange); 31 | } 32 | }; 33 | }); 34 | const handleDrawerToggle = () => { 35 | setMobileOpen(!mobileOpen); 36 | }; 37 | const headerColorChange = () => { 38 | const { color, changeColorOnScroll } = props; 39 | const windowsScrollTop = window.pageYOffset; 40 | if (changeColorOnScroll) { 41 | if (windowsScrollTop > changeColorOnScroll.height) { 42 | document.body 43 | .getElementsByTagName("header")[0] 44 | .classList.remove(classes[color || "primary"]); 45 | document.body 46 | .getElementsByTagName("header")[0] 47 | .classList.add(classes[changeColorOnScroll.color]); 48 | } else { 49 | document.body 50 | .getElementsByTagName("header")[0] 51 | .classList.add(classes[color || "primary"]); 52 | document.body 53 | .getElementsByTagName("header")[0] 54 | .classList.remove(classes[changeColorOnScroll.color]); 55 | } 56 | } 57 | }; 58 | const { color, rightLinks, leftLinks, brand, fixed, absolute } = props; 59 | const appBarClasses = classNames({ 60 | [classes.appBar]: true, 61 | [classes[color || "primary"]]: color, 62 | [classes.absolute]: absolute, 63 | [classes.fixed]: fixed, 64 | }); 65 | const brandComponent = ( 66 | 67 | 68 | 69 | ); 70 | return ( 71 | 72 | 73 | {leftLinks !== undefined ? brandComponent : null} 74 |
75 | {leftLinks !== undefined ? ( 76 | 77 | {leftLinks} 78 | 79 | ) : ( 80 | brandComponent 81 | )} 82 |
83 | 84 | {rightLinks} 85 | 86 | 87 | 92 | 93 | 94 | 95 | 96 | 97 | 106 |
107 | {leftLinks} 108 | {rightLinks} 109 |
110 |
111 |
112 | 113 | ); 114 | } 115 | 116 | export interface HeaderProps { 117 | color?: 118 | | "primary" 119 | | "info" 120 | | "success" 121 | | "warning" 122 | | "danger" 123 | | "transparent" 124 | | "white" 125 | | "rose" 126 | | "dark"; 127 | rightLinks?: ReactElement; 128 | leftLinks?: ReactElement; 129 | brand: string; 130 | fixed?: boolean; 131 | absolute?: boolean; 132 | changeColorOnScroll?: { 133 | height: number; 134 | color: 135 | | "primary" 136 | | "info" 137 | | "success" 138 | | "warning" 139 | | "danger" 140 | | "transparent" 141 | | "white" 142 | | "rose" 143 | | "dark"; 144 | }; 145 | } 146 | -------------------------------------------------------------------------------- /styles/scss/core/mixins/_colored-shadows.scss: -------------------------------------------------------------------------------- 1 | @mixin shadow-big() { 2 | box-shadow: 0 16px 38px -12px rgba(0, 0, 0, $bmd-shadow-penumbra-opacity * 4), 3 | 0 4px 25px 0px rgba(0, 0, 0, $bmd-shadow-ambient-opacity), 4 | 0 8px 10px -5px rgba(0, 0, 0, $bmd-shadow-umbra-opacity); 5 | } 6 | 7 | @mixin shadow-big-image() { 8 | // new box shadow optimized for Tables and Phones 9 | box-shadow: 0 5px 15px -8px rgba(0, 0, 0, $bmd-shadow-ambient-opacity * 2), 10 | 0 8px 10px -5px rgba(0, 0, 0, $bmd-shadow-umbra-opacity); 11 | } 12 | 13 | @mixin shadow-big-navbar() { 14 | box-shadow: 0 10px 20px -12px rgba(0, 0, 0, $bmd-shadow-penumbra-opacity * 3), 15 | 0 3px 20px 0px rgba(0, 0, 0, $bmd-shadow-ambient-opacity), 16 | 0 8px 10px -5px rgba(0, 0, 0, $bmd-shadow-umbra-opacity); 17 | } 18 | 19 | @mixin shadow-big-color($color) { 20 | // new box shadow optimized for Tables and Phones 21 | box-shadow: 0 5px 20px 0px rgba(0, 0, 0, 0.2), 22 | 0 13px 24px -11px rgba($color, 0.6); 23 | } 24 | 25 | @mixin shadow-small-color($color) { 26 | // new box shadow optimized for Tablets and Phones 27 | box-shadow: 0 4px 20px 0px rgba(0, 0, 0, 0.14), 28 | 0 7px 10px -5px rgba($color, 0.4); 29 | } 30 | 31 | @mixin shadow-navbar-color($color) { 32 | // new box shadow optimized for Tablets and Phones 33 | 34 | @if ($color == $white-color) { 35 | box-shadow: 0 4px 18px 0px rgba(0, 0, 0, 0.12), 36 | 0 7px 10px -5px rgba(0, 0, 0, 0.15); 37 | } @else { 38 | box-shadow: 0 4px 20px 0px rgba(0, 0, 0, 0.14), 39 | 0 7px 12px -5px rgba($color, 0.46); 40 | } 41 | } 42 | 43 | @mixin shadow-2dp() { 44 | box-shadow: 0 2px 2px 0 rgba(0, 0, 0, $bmd-shadow-penumbra-opacity), 45 | 0 3px 1px -2px rgba(0, 0, 0, $bmd-shadow-ambient-opacity), 46 | 0 1px 5px 0 rgba(0, 0, 0, $bmd-shadow-umbra-opacity); 47 | } 48 | 49 | @mixin shadow-4dp() { 50 | box-shadow: 0 4px 5px 0 rgba(0, 0, 0, $bmd-shadow-penumbra-opacity), 51 | 0 1px 10px 0 rgba(0, 0, 0, $bmd-shadow-ambient-opacity), 52 | 0 2px 4px -1px rgba(0, 0, 0, $bmd-shadow-umbra-opacity); 53 | } 54 | 55 | @mixin shadow-6dp() { 56 | box-shadow: 0 6px 10px 0 rgba(0, 0, 0, $bmd-shadow-penumbra-opacity), 57 | 0 1px 18px 0 rgba(0, 0, 0, $bmd-shadow-ambient-opacity), 58 | 0 3px 5px -1px rgba(0, 0, 0, $bmd-shadow-umbra-opacity); 59 | } 60 | 61 | @mixin shadow-8dp() { 62 | box-shadow: 0 8px 10px 1px rgba(0, 0, 0, $bmd-shadow-penumbra-opacity), 63 | 0 3px 14px 2px rgba(0, 0, 0, $bmd-shadow-ambient-opacity), 64 | 0 5px 5px -3px rgba(0, 0, 0, $bmd-shadow-umbra-opacity); 65 | } 66 | 67 | @mixin shadow-16dp() { 68 | box-shadow: 0 16px 24px 2px rgba(0, 0, 0, $bmd-shadow-penumbra-opacity), 69 | 0 6px 30px 5px rgba(0, 0, 0, $bmd-shadow-ambient-opacity), 70 | 0 8px 10px -5px rgba(0, 0, 0, $bmd-shadow-umbra-opacity); 71 | } 72 | 73 | @mixin shadow-2dp-color($color) { 74 | box-shadow: 0 2px 2px 0 rgba($color, $bmd-shadow-penumbra-opacity), 75 | 0 3px 1px -2px rgba($color, $bmd-shadow-umbra-opacity), 76 | 0 1px 5px 0 rgba($color, $bmd-shadow-ambient-opacity); 77 | } 78 | 79 | @mixin shadow-4dp-color($color) { 80 | box-shadow: 0 4px 5px 0 rgba($color, $bmd-shadow-penumbra-opacity), 81 | 0 1px 10px 0 rgba($color, $bmd-shadow-ambient-opacity), 82 | 0 2px 4px -1px rgba($color, $bmd-shadow-umbra-opacity); 83 | } 84 | 85 | @mixin shadow-8dp-color($color) { 86 | box-shadow: 0 8px 10px 1px rgba($color, $bmd-shadow-penumbra-opacity), 87 | 0 3px 14px 2px rgba(0, 0, 0, $bmd-shadow-ambient-opacity), 88 | 0 5px 5px -3px rgba($color, $bmd-shadow-umbra-opacity); 89 | } 90 | 91 | @mixin shadow-16dp-color($color) { 92 | box-shadow: 0 16px 24px 2px rgba($color, $bmd-shadow-penumbra-opacity), 93 | 0 6px 30px 5px rgba(0, 0, 0, $bmd-shadow-ambient-opacity), 94 | 0 8px 10px -5px rgba($color, $bmd-shadow-umbra-opacity); 95 | } 96 | 97 | @mixin button-shadow-color($color) { 98 | box-shadow: 0 14px 26px -12px rgba($color, $bmd-shadow-penumbra-opacity * 3), 99 | 0 4px 23px 0px rgba(0, 0, 0, $bmd-shadow-ambient-opacity), 100 | 0 8px 10px -5px rgba($color, $bmd-shadow-umbra-opacity); 101 | } 102 | 103 | @mixin shadow-z-1() { 104 | box-shadow: 0 1px 6px 0 rgba(0, 0, 0, 0.12), 0 1px 6px 0 rgba(0, 0, 0, 0.12); 105 | } 106 | 107 | @mixin shadow-z-1-hover() { 108 | box-shadow: 0 5px 11px 0 rgba(0, 0, 0, 0.18), 0 4px 15px 0 rgba(0, 0, 0, 0.15); 109 | } 110 | 111 | @mixin shadow-z-2() { 112 | box-shadow: 0 8px 17px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); 113 | } 114 | 115 | @mixin shadow-z-3() { 116 | box-shadow: 0 12px 15px 0 rgba(0, 0, 0, 0.24), 117 | 0 17px 50px 0 rgba(0, 0, 0, 0.19); 118 | } 119 | 120 | @mixin shadow-z-4() { 121 | box-shadow: 0 16px 28px 0 rgba(0, 0, 0, 0.22), 122 | 0 25px 55px 0 rgba(0, 0, 0, 0.21); 123 | } 124 | 125 | @mixin shadow-z-5() { 126 | box-shadow: 0 27px 24px 0 rgba(0, 0, 0, 0.2), 127 | 0 40px 77px 0 rgba(0, 0, 0, 0.22); 128 | } 129 | -------------------------------------------------------------------------------- /styles/jss/nextjs-material-kit/components/customDropdownStyle.ts: -------------------------------------------------------------------------------- 1 | import { 2 | defaultFont, 3 | primaryColor, 4 | primaryBoxShadow, 5 | infoColor, 6 | infoBoxShadow, 7 | successColor, 8 | successBoxShadow, 9 | warningColor, 10 | warningBoxShadow, 11 | dangerColor, 12 | dangerBoxShadow, 13 | roseColor, 14 | roseBoxShadow 15 | } from "../../nextjs-material-kit"; 16 | 17 | const customDropdownStyle = (theme) => ({ 18 | popperClose: { 19 | pointerEvents: "none" 20 | }, 21 | pooperNav: { 22 | [theme.breakpoints.down("sm")]: { 23 | position: "static !important", 24 | left: "unset !important", 25 | top: "unset !important", 26 | transform: "none !important", 27 | willChange: "none !important", 28 | "& > div": { 29 | boxShadow: "none !important", 30 | marginLeft: "1.5rem", 31 | marginRight: "1.5rem", 32 | transition: "none !important", 33 | marginTop: "0px !important", 34 | marginBottom: "5px !important", 35 | padding: "0px !important" 36 | } 37 | } 38 | }, 39 | dropdown: { 40 | borderRadius: "3px", 41 | border: "0", 42 | boxShadow: "0 2px 5px 0 rgba(0, 0, 0, 0.26)", 43 | top: "100%", 44 | zIndex: "1000", 45 | minWidth: "160px", 46 | padding: "5px 0", 47 | margin: "2px 0 0", 48 | fontSize: "14px", 49 | textAlign: "left", 50 | listStyle: "none", 51 | backgroundColor: "#fff", 52 | backgroundClip: "padding-box" 53 | }, 54 | menuList: { 55 | padding: "0" 56 | }, 57 | popperResponsive: { 58 | zIndex: "1200", 59 | position: "absolute !important", 60 | [theme.breakpoints.down("sm")]: { 61 | zIndex: "1640", 62 | position: "static !important", 63 | float: "none", 64 | width: "auto", 65 | marginTop: "0", 66 | backgroundColor: "transparent", 67 | border: "0", 68 | boxShadow: "none", 69 | color: "black" 70 | } 71 | }, 72 | dropdownItem: { 73 | ...defaultFont, 74 | fontSize: "13px", 75 | padding: "10px 20px", 76 | margin: "0 5px", 77 | borderRadius: "2px", 78 | position: "relative", 79 | transition: "all 150ms linear", 80 | display: "block", 81 | clear: "both", 82 | fontWeight: "400", 83 | height: "fit-content", 84 | color: "#333", 85 | whiteSpace: "nowrap", 86 | minHeight: "unset" 87 | }, 88 | blackHover: { 89 | "&:hover": { 90 | boxShadow: 91 | "0 4px 20px 0px rgba(0, 0, 0, 0.14), 0 7px 10px -5px rgba(33, 33, 33, 0.4)", 92 | backgroundColor: "#212121", 93 | color: "#fff" 94 | } 95 | }, 96 | primaryHover: { 97 | "&:hover": { 98 | backgroundColor: primaryColor, 99 | color: "#FFFFFF", 100 | ...primaryBoxShadow 101 | } 102 | }, 103 | infoHover: { 104 | "&:hover": { 105 | backgroundColor: infoColor, 106 | color: "#FFFFFF", 107 | ...infoBoxShadow 108 | } 109 | }, 110 | successHover: { 111 | "&:hover": { 112 | backgroundColor: successColor, 113 | color: "#FFFFFF", 114 | ...successBoxShadow 115 | } 116 | }, 117 | warningHover: { 118 | "&:hover": { 119 | backgroundColor: warningColor, 120 | color: "#FFFFFF", 121 | ...warningBoxShadow 122 | } 123 | }, 124 | dangerHover: { 125 | "&:hover": { 126 | backgroundColor: dangerColor, 127 | color: "#FFFFFF", 128 | ...dangerBoxShadow 129 | } 130 | }, 131 | roseHover: { 132 | "&:hover": { 133 | backgroundColor: roseColor, 134 | color: "#FFFFFF", 135 | ...roseBoxShadow 136 | } 137 | }, 138 | dropdownItemRTL: { 139 | textAlign: "right" 140 | }, 141 | dropdownDividerItem: { 142 | margin: "5px 0", 143 | backgroundColor: "rgba(0, 0, 0, 0.12)", 144 | height: "1px", 145 | overflow: "hidden" 146 | }, 147 | buttonIcon: { 148 | width: "20px", 149 | height: "20px" 150 | }, 151 | caret: { 152 | transition: "all 150ms ease-in", 153 | display: "inline-block", 154 | width: "0", 155 | height: "0", 156 | marginLeft: "4px", 157 | verticalAlign: "middle", 158 | borderTop: "4px solid", 159 | borderRight: "4px solid transparent", 160 | borderLeft: "4px solid transparent" 161 | }, 162 | caretActive: { 163 | transform: "rotate(180deg)" 164 | }, 165 | caretRTL: { 166 | marginRight: "4px" 167 | }, 168 | dropdownHeader: { 169 | display: "block", 170 | padding: "0.1875rem 1.25rem", 171 | fontSize: "0.75rem", 172 | lineHeight: "1.428571", 173 | color: "#777", 174 | whiteSpace: "nowrap", 175 | fontWeight: "inherit", 176 | marginTop: "10px", 177 | minHeight: "unset", 178 | "&:hover,&:focus": { 179 | backgroundColor: "transparent", 180 | cursor: "auto" 181 | } 182 | }, 183 | noLiPadding: { 184 | padding: "0" 185 | } 186 | }); 187 | 188 | export default customDropdownStyle; 189 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Basic Options */ 4 | "target": "esnext", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'. */ 5 | "module": "esnext", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ 6 | "lib": [ /* Specify library files to be included in the compilation. */ 7 | "es6", 8 | "es7", 9 | "esnext", 10 | "dom" 11 | ], 12 | "allowJs": false, /* Allow javascript files to be compiled. */// "checkJs": true, /* Report errors in .js files. */ 13 | "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */// "declaration": true, /* Generates corresponding '.d.ts' file. */ 14 | // "sourceMap": true, /* Generates corresponding '.map' file. */ 15 | // "outFile": "./", /* Concatenate and emit output to single file. */ 16 | // "outDir": "./", /* Redirect output structure to the directory. */ 17 | // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ 18 | "removeComments": false, /* Do not emit comments to output. */// "noEmit": true, /* Do not emit outputs. */ 19 | // "importHelpers": true, /* Import emit helpers from 'tslib'. */ 20 | // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ 21 | // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ 22 | /* Strict Type-Checking Options */ 23 | "strict": false, /* Enable all strict type-checking options. */ 24 | "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ 25 | "strictNullChecks": true, /* Enable strict null checks. */ 26 | "strictFunctionTypes": true, /* Enable strict checking of function types. */ 27 | "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ 28 | "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ 29 | "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. *//* Additional Checks */ 30 | "noUnusedLocals": true, /* Report errors on unused locals. */ 31 | "noUnusedParameters": true, /* Report errors on unused parameters. */ 32 | "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ 33 | "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. *//* Module Resolution Options */ 34 | "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ 35 | "baseUrl": ".", /* Base directory to resolve non-absolute module names. */// "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ 36 | // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ 37 | // "typeRoots": [], /* List of folders to include type definitions from. */ 38 | // "types": [], /* Type declaration files to be included in compilation. */ 39 | "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ 40 | "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */// "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ 41 | /* Source Map Options */ 42 | // "sourceRoot": "./", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ 43 | // "mapRoot": "./", /* Specify the location where debugger should locate map files instead of generated locations. */ 44 | "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ 45 | "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ 46 | "skipLibCheck": true, 47 | "forceConsistentCasingInFileNames": true, 48 | "noEmit": true, 49 | "incremental": true, 50 | "resolveJsonModule": true, 51 | "isolatedModules": true 52 | /* Experimental Options */ 53 | // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ 54 | // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ 55 | }, 56 | "include": [ 57 | "src" 58 | ], 59 | "exclude": [ 60 | "node_modules" 61 | ] 62 | } 63 | -------------------------------------------------------------------------------- /pages-sections/Components-Sections/SectionLogin.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | // @material-ui/core components 3 | import { makeStyles } from "@material-ui/core/styles"; 4 | import InputAdornment from "@material-ui/core/InputAdornment"; 5 | import Icon from "@material-ui/core/Icon"; 6 | // @material-ui/icons 7 | import People from "@material-ui/icons/People"; 8 | import Email from "@material-ui/icons/Email"; 9 | // core components 10 | import GridContainer from "../../components/Grid/GridContainer"; 11 | import GridItem from "../../components/Grid/GridItem"; 12 | import Card from "../../components/Card/Card"; 13 | import CardHeader from "../../components/Card/CardHeader"; 14 | import CardBody from "../../components/Card/CardBody"; 15 | import CardFooter from "../../components/Card/CardFooter"; 16 | import Button from "../../components/CustomButtons/Button"; 17 | import CustomInput from "../../components/CustomInput/CustomInput"; 18 | 19 | import styles from "../../styles/jss/nextjs-material-kit/pages/componentsSections/loginStyle"; 20 | 21 | const useStyles = makeStyles(styles); 22 | 23 | export default function SectionLogin() { 24 | const classes = useStyles(); 25 | return ( 26 |
27 |
28 | 29 | 30 | 31 |
32 | 33 |

Login

34 |
35 | 44 | 53 | 66 |
67 |
68 |

Or Be Classical

69 | 70 | 80 | 81 | 82 | ) 83 | }} 84 | /> 85 | 95 | 96 | 97 | ) 98 | }} 99 | /> 100 | 110 | 111 | lock_outline 112 | 113 | 114 | ), 115 | autoComplete: "off" 116 | }} 117 | /> 118 | 119 | 120 | 123 | 124 | 125 |
126 |
127 |
128 |
129 |
130 | ); 131 | } 132 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | 3 | ## [1.2.3] 2022-10-0 4 | ### Improvements 5 | 6 | - Added Blog Section 7 | - Mardown, MDX translation 8 | 9 | ## [1.2.2] 2022-09-15 10 | ### Improvements 11 | 12 | - `TypeScript` Migration 13 | - `Update Dependencies` 14 | - `Added Deploy` buttons 15 | - Vercel, Netlify 16 | 17 | ## [1.2.1] 2022-08-15 18 | 19 | - Fixed the issues 20 | - Updated dependencies 21 | - Migration to React 18 22 | - Migration to sass from node-sass 23 | 24 | ## [1.2.0] 2021-05-14 25 | 26 | ### Bug fixing 27 | 28 | - Moved all images inside `public` folder (i.e. moved from `assets/img` to `public/img`) 29 | 30 | ### Major style changes 31 | 32 | - Moved all of the styles inside `styles` folder (i.e. moved from `assets/scss`, `assets/css`, `assets/jss` to `styles/scss`, `styles/css` and `styles/jss`) 33 | 34 | ### Deleted components 35 | 36 | ### Added components 37 | 38 | ### Deleted dependencies 39 | 40 | - `@zeit/next-sass` (SCSS will not be imported with the built-in support of NextJS) 41 | - `react-swipeable-views` (not event Material-UI use it anymore) 42 | 43 | ### Added dependencies 44 | 45 | ### Updated dependencies 46 | 47 | ``` 48 | @material-ui/core 4.9.13 → 4.11.4 49 | @material-ui/icons 4.9.1 → 4.11.2 50 | classnames 2.2.6 → 2.3.1 51 | moment 2.25.3 → 2.29.1 52 | next 9.3.6 → 10.2.0 53 | next-compose-plugins 2.2.0 → 2.2.1 54 | next-images 1.3.1 → 1.7.0 55 | nextjs-redirect 2.0.2 → 5.0.2 56 | node-sass 4.14.1 → 5.0.0 57 | nouislider 14.4.0 → 15.1.0 58 | react 16.13.1 → 17.0.2 59 | react-datetime 2.16.3 → 3.0.4 60 | react-dom 16.13.1 → 17.0.2 61 | react-slick 0.25.2 → 0.28.1 62 | styled-components 5.1.0 → 5.3.0 63 | webpack 4.43.0 → 4.46.0 64 | ``` 65 | 66 | ### Warning 67 | 68 | _We could not update webpack past version 4 and node-sass past version 5 due to some warnings from NextJS._ 69 | _The following warnings come from some of our dependencies, however they do not affect the UI or the functionality of the product - we are thinking of dropping their usage and replace with other dependencies:_ 70 | 71 | ``` 72 | npm WARN react-datetime@3.0.4 requires a peer of react@^16.5.0 but none is installed. You must install peer dependencies yourself. 73 | ``` 74 | 75 | ## [1.1.0] 2020-05-08 76 | 77 | ### Bug fixing 78 | 79 | - `https://github.com/creativetimofficial/nextjs-material-kit/issues/10` (changed the `title`, from simple `string` to `node`, so now, you can pass a title like so `title={Free Chat}` if you want to have link functionality - NOTE: the `node` that you pass to the `InfoArea` component will have to be styled) 80 | - `https://github.com/creativetimofficial/nextjs-material-kit/issues/6` (check `https://github.com/creativetimofficial/nextjs-material-kit/pull/7` for more info) 81 | - `https://github.com/creativetimofficial/nextjs-material-kit/issues/5` 82 | - `https://github.com/creativetimofficial/nextjs-material-kit/issues/4` 83 | - `https://github.com/creativetimofficial/nextjs-material-kit/issues/2` 84 | 85 | ### Major style changes 86 | 87 | - `assets/jss/nextjs-material-kit.js` 88 | - `assets/jss/nextjs-material-kit/components/buttonStyle.js` 89 | - `assets/jss/nextjs-material-kit/components/headerStyle.js` 90 | - `assets/jss/nextjs-material-kit/components/navPillsStyle.js` 91 | - `assets/jss/nextjs-material-kit/components/paginationStyle.js` 92 | - `assets/jss/nextjs-material-kit/components/paginationStyle.js` 93 | 94 | ### Deleted components 95 | 96 | ### Added components 97 | 98 | ### Deleted dependencies 99 | 100 | ### Added dependencies 101 | 102 | ### Updated dependencies 103 | 104 | ``` 105 | @material-ui/core 4.3.2 → 4.9.13 106 | @material-ui/icons 4.2.1 → 4.9.1 107 | moment 2.24.0 → 2.25.3 108 | next 9.0.5 → 9.3.6 109 | next-images 1.1.2 → 1.3.1 110 | nextjs-redirect 1.0.2 → 2.0.2 111 | node-sass 4.12.0 → 4.14.1 112 | nouislider 14.0.2 → 14.4.0 113 | react 16.9.0 → 16.13.1 114 | react-dom 16.9.0 → 16.13.1 115 | react-swipeable-views 0.13.3 → 0.13.9 116 | styled-components 4.3.2 → 5.1.0 117 | webpack 4.39.3 → 4.43.0 118 | ``` 119 | 120 | ### Warning 121 | 122 | _The following warnings come from some of our dependencies, however they do not affect the UI or the functionality of the product - if the issues will persist and will change into errors in the next version of React (v17), we will drop their usage and replace with other dependencies:_ 123 | 124 | ``` 125 | npm WARN deprecated popper.js@1.16.1: Popper changed home, find its new releases at @popperjs/core 126 | npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142 127 | npm WARN deprecated mkdirp@0.5.3: Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.) 128 | ``` 129 | 130 | _The following dependencies raise warnings (of deprecation or renamed) in development mode: DateTime, ReactSwipableView. If the warnings will persist, and will become errors in React 17, we will drop their usage and replace them with other plugins._ 131 | 132 | ## [1.0.0] 2019-09-13 133 | 134 | ### Original Release 135 | 136 | - Started project with NextJS 137 | - Added Material-UI as base framework 138 | - Added design from Material Kit by Creative Tim 139 | - Added components from Material Kit React by Creative Tim 140 | -------------------------------------------------------------------------------- /styles/scss/plugins/_plugin-react-slick.scss: -------------------------------------------------------------------------------- 1 | /* Slider */ 2 | .slick-slider { 3 | position: relative; 4 | 5 | display: block; 6 | box-sizing: border-box; 7 | 8 | -webkit-user-select: none; 9 | -moz-user-select: none; 10 | -ms-user-select: none; 11 | user-select: none; 12 | 13 | -webkit-touch-callout: none; 14 | -khtml-user-select: none; 15 | -ms-touch-action: pan-y; 16 | touch-action: pan-y; 17 | -webkit-tap-highlight-color: transparent; 18 | 19 | @media (min-width: 768px) { 20 | .slick-caption { 21 | display: block !important; 22 | } 23 | } 24 | 25 | .slick-caption { 26 | padding-bottom: 45px; 27 | position: absolute; 28 | right: 15%; 29 | bottom: 20px; 30 | left: 15%; 31 | z-index: 10; 32 | padding-top: 20px; 33 | color: #ffffff; 34 | text-align: center; 35 | z-index: 3; 36 | display: none; 37 | } 38 | .slick-slide { 39 | > div:first-child { 40 | position: relative; 41 | } 42 | } 43 | .slick-icons { 44 | position: relative; 45 | top: 5px; 46 | } 47 | .slick-image { 48 | width: 100% !important; 49 | display: inline-flex !important; 50 | } 51 | } 52 | 53 | .slick-list { 54 | position: relative; 55 | 56 | display: block; 57 | overflow: hidden; 58 | 59 | margin: 0; 60 | padding: 0; 61 | } 62 | .slick-list:focus { 63 | outline: none; 64 | } 65 | .slick-list.dragging { 66 | cursor: pointer; 67 | cursor: hand; 68 | } 69 | 70 | .slick-slider .slick-track, 71 | .slick-slider .slick-list { 72 | -webkit-transform: translate3d(0, 0, 0); 73 | -moz-transform: translate3d(0, 0, 0); 74 | -ms-transform: translate3d(0, 0, 0); 75 | -o-transform: translate3d(0, 0, 0); 76 | transform: translate3d(0, 0, 0); 77 | } 78 | 79 | .slick-track { 80 | position: relative; 81 | top: 0; 82 | left: 0; 83 | 84 | display: block; 85 | margin-left: auto; 86 | margin-right: auto; 87 | } 88 | .slick-track:before, 89 | .slick-track:after { 90 | display: table; 91 | 92 | content: ""; 93 | } 94 | .slick-track:after { 95 | clear: both; 96 | } 97 | .slick-loading .slick-track { 98 | visibility: hidden; 99 | } 100 | 101 | .slick-slide { 102 | display: none; 103 | float: left; 104 | 105 | height: 100%; 106 | min-height: 1px; 107 | } 108 | [dir="rtl"] .slick-slide { 109 | float: right; 110 | } 111 | .slick-slide img { 112 | display: block; 113 | } 114 | .slick-slide.slick-loading img { 115 | display: none; 116 | } 117 | .slick-slide.dragging img { 118 | pointer-events: none; 119 | } 120 | .slick-initialized .slick-slide { 121 | display: block; 122 | } 123 | .slick-loading .slick-slide { 124 | visibility: hidden; 125 | } 126 | .slick-vertical .slick-slide { 127 | display: block; 128 | 129 | height: auto; 130 | 131 | border: 1px solid transparent; 132 | } 133 | .slick-arrow.slick-hidden { 134 | display: none; 135 | } 136 | button.slick-arrow.slick-prev, 137 | button.slick-arrow.slick-next { 138 | font-size: 0; 139 | line-height: 0; 140 | position: absolute; 141 | top: 50%; 142 | display: block; 143 | // width: 20px; 144 | height: 100%; 145 | padding: 0; 146 | -ms-transform: translateY(-50%); 147 | transform: translateY(-50%); 148 | cursor: pointer; 149 | border: none; 150 | color: transparent; 151 | outline: none; 152 | background: transparent; 153 | width: 15%; 154 | z-index: 2; 155 | opacity: 0.5; 156 | } 157 | .slick-prev { 158 | left: 0; 159 | &::before { 160 | content: "\f053"; 161 | font-weight: 600; 162 | font-family: Font Awesome\ 5 Free; 163 | -moz-osx-font-smoothing: grayscale; 164 | -webkit-font-smoothing: antialiased; 165 | display: inline-block; 166 | font-style: normal; 167 | font-variant: normal; 168 | text-rendering: auto; 169 | line-height: 1; 170 | color: white; 171 | font-size: 30px; 172 | width: 100%; 173 | } 174 | } 175 | .slick-next { 176 | right: 0; 177 | &::before { 178 | content: "\f054"; 179 | font-weight: 600; 180 | font-family: Font Awesome\ 5 Free; 181 | -moz-osx-font-smoothing: grayscale; 182 | -webkit-font-smoothing: antialiased; 183 | display: inline-block; 184 | font-style: normal; 185 | font-variant: normal; 186 | text-rendering: auto; 187 | line-height: 1; 188 | color: #fff; 189 | font-size: 30px; 190 | width: 100%; 191 | } 192 | } 193 | .slick-list { 194 | z-index: 1; 195 | } 196 | .slick-dots { 197 | margin-top: 0; 198 | margin-bottom: 1rem; 199 | position: absolute; 200 | bottom: 5px; 201 | // margin-right: 15%; 202 | // margin-left: 15%; 203 | width: 100%; 204 | padding: 0; 205 | list-style: none; 206 | text-align: center; 207 | z-index: 3; 208 | } 209 | .slick-dots li, 210 | .slick-dots li button { 211 | width: 20px; 212 | height: 20px; 213 | cursor: pointer; 214 | } 215 | .slick-dots li { 216 | position: relative; 217 | display: inline-block; 218 | margin: 0 5px; 219 | padding: 0; 220 | } 221 | .slick-dots li button { 222 | font-size: 0; 223 | line-height: 0; 224 | display: block; 225 | padding: 5px; 226 | color: transparent; 227 | border: 0; 228 | outline: none; 229 | background: transparent; 230 | &::before { 231 | position: absolute; 232 | top: 0; 233 | left: 0; 234 | width: 10px; 235 | height: 10px; 236 | content: "\2022"; 237 | text-align: center; 238 | opacity: 1; 239 | background-color: #fff; 240 | -webkit-font-smoothing: antialiased; 241 | -moz-osx-font-smoothing: grayscale; 242 | box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 243 | 0 3px 1px -2px rgba(0, 0, 0, 0.12), 0 1px 5px 0 rgba(0, 0, 0, 0.2); 244 | border-radius: 2px; 245 | transition: all 300ms linear; 246 | } 247 | } 248 | .slick-dots li.slick-active button:before { 249 | width: 15px; 250 | height: 15px; 251 | box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12), 252 | 0 2px 4px -1px rgba(0, 0, 0, 0.2); 253 | top: -3px; 254 | } 255 | --------------------------------------------------------------------------------