starter
This commit is contained in:
commit
3184c30208
21 changed files with 13769 additions and 0 deletions
69
.gitignore
vendored
Normal file
69
.gitignore
vendored
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
# Logs
|
||||||
|
logs
|
||||||
|
*.log
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
|
||||||
|
# Runtime data
|
||||||
|
pids
|
||||||
|
*.pid
|
||||||
|
*.seed
|
||||||
|
*.pid.lock
|
||||||
|
|
||||||
|
# Directory for instrumented libs generated by jscoverage/JSCover
|
||||||
|
lib-cov
|
||||||
|
|
||||||
|
# Coverage directory used by tools like istanbul
|
||||||
|
coverage
|
||||||
|
|
||||||
|
# nyc test coverage
|
||||||
|
.nyc_output
|
||||||
|
|
||||||
|
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
|
||||||
|
.grunt
|
||||||
|
|
||||||
|
# Bower dependency directory (https://bower.io/)
|
||||||
|
bower_components
|
||||||
|
|
||||||
|
# node-waf configuration
|
||||||
|
.lock-wscript
|
||||||
|
|
||||||
|
# Compiled binary addons (http://nodejs.org/api/addons.html)
|
||||||
|
build/Release
|
||||||
|
|
||||||
|
# Dependency directories
|
||||||
|
node_modules/
|
||||||
|
jspm_packages/
|
||||||
|
|
||||||
|
# Typescript v1 declaration files
|
||||||
|
typings/
|
||||||
|
|
||||||
|
# Optional npm cache directory
|
||||||
|
.npm
|
||||||
|
|
||||||
|
# Optional eslint cache
|
||||||
|
.eslintcache
|
||||||
|
|
||||||
|
# Optional REPL history
|
||||||
|
.node_repl_history
|
||||||
|
|
||||||
|
# Output of 'npm pack'
|
||||||
|
*.tgz
|
||||||
|
|
||||||
|
# dotenv environment variable files
|
||||||
|
.env*
|
||||||
|
|
||||||
|
# gatsby files
|
||||||
|
.cache/
|
||||||
|
public
|
||||||
|
|
||||||
|
# Mac files
|
||||||
|
.DS_Store
|
||||||
|
|
||||||
|
# Yarn
|
||||||
|
yarn-error.log
|
||||||
|
.pnp/
|
||||||
|
.pnp.js
|
||||||
|
# Yarn Integrity file
|
||||||
|
.yarn-integrity
|
4
.prettierignore
Normal file
4
.prettierignore
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
.cache
|
||||||
|
package.json
|
||||||
|
package-lock.json
|
||||||
|
public
|
7
.prettierrc
Normal file
7
.prettierrc
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
"endOfLine": "lf",
|
||||||
|
"semi": false,
|
||||||
|
"singleQuote": false,
|
||||||
|
"tabWidth": 2,
|
||||||
|
"trailingComma": "es5"
|
||||||
|
}
|
55
README.md
Normal file
55
README.md
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
## 🧐 What's inside?
|
||||||
|
|
||||||
|
A quick look at the top-level files and directories you'll see in a Gatsby project.
|
||||||
|
|
||||||
|
.
|
||||||
|
├── node_modules
|
||||||
|
├── src
|
||||||
|
├── .gitignore
|
||||||
|
├── .prettierrc
|
||||||
|
├── gatsby-browser.js
|
||||||
|
├── gatsby-config.js
|
||||||
|
├── gatsby-node.js
|
||||||
|
├── gatsby-ssr.js
|
||||||
|
├── LICENSE
|
||||||
|
├── package-lock.json
|
||||||
|
├── package.json
|
||||||
|
└── README.md
|
||||||
|
|
||||||
|
1. **`/node_modules`**: This directory contains all of the modules of code that your project depends on (npm packages) are automatically installed.
|
||||||
|
|
||||||
|
2. **`/src`**: This directory will contain all of the code related to what you will see on the front-end of your site (what you see in the browser) such as your site header or a page template. `src` is a convention for “source code”.
|
||||||
|
|
||||||
|
3. **`.gitignore`**: This file tells git which files it should not track / not maintain a version history for.
|
||||||
|
|
||||||
|
4. **`.prettierrc`**: This is a configuration file for [Prettier](https://prettier.io/). Prettier is a tool to help keep the formatting of your code consistent.
|
||||||
|
|
||||||
|
5. **`gatsby-browser.js`**: This file is where Gatsby expects to find any usage of the [Gatsby browser APIs](https://www.gatsbyjs.org/docs/browser-apis/) (if any). These allow customization/extension of default Gatsby settings affecting the browser.
|
||||||
|
|
||||||
|
6. **`gatsby-config.js`**: This is the main configuration file for a Gatsby site. This is where you can specify information about your site (metadata) like the site title and description, which Gatsby plugins you’d like to include, etc. (Check out the [config docs](https://www.gatsbyjs.org/docs/gatsby-config/) for more detail).
|
||||||
|
|
||||||
|
7. **`gatsby-node.js`**: This file is where Gatsby expects to find any usage of the [Gatsby Node APIs](https://www.gatsbyjs.org/docs/node-apis/) (if any). These allow customization/extension of default Gatsby settings affecting pieces of the site build process.
|
||||||
|
|
||||||
|
8. **`gatsby-ssr.js`**: This file is where Gatsby expects to find any usage of the [Gatsby server-side rendering APIs](https://www.gatsbyjs.org/docs/ssr-apis/) (if any). These allow customization of default Gatsby settings affecting server-side rendering.
|
||||||
|
|
||||||
|
9. **`LICENSE`**: Gatsby is licensed under the MIT license.
|
||||||
|
|
||||||
|
10. **`package-lock.json`** (See `package.json` below, first). This is an automatically generated file based on the exact versions of your npm dependencies that were installed for your project. **(You won’t change this file directly).**
|
||||||
|
|
||||||
|
11. **`package.json`**: A manifest file for Node.js projects, which includes things like metadata (the project’s name, author, etc). This manifest is how npm knows which packages to install for your project.
|
||||||
|
|
||||||
|
12. **`README.md`**: A text file containing useful reference information about your project.
|
||||||
|
|
||||||
|
## 🎓 Learning Gatsby
|
||||||
|
|
||||||
|
Looking for more guidance? Full documentation for Gatsby lives [on the website](https://www.gatsbyjs.org/). Here are some places to start:
|
||||||
|
|
||||||
|
- **For most developers, we recommend starting with our [in-depth tutorial for creating a site with Gatsby](https://www.gatsbyjs.org/tutorial/).** It starts with zero assumptions about your level of ability and walks through every step of the process.
|
||||||
|
|
||||||
|
- **To dive straight into code samples, head [to our documentation](https://www.gatsbyjs.org/docs/).** In particular, check out the _Guides_, _API Reference_, and _Advanced Tutorials_ sections in the sidebar.
|
||||||
|
|
||||||
|
## 💫 Deploy
|
||||||
|
|
||||||
|
[![Deploy to Netlify](https://www.netlify.com/img/deploy/button.svg)](https://app.netlify.com/start/deploy?repository=https://github.com/gatsbyjs/gatsby-starter-default)
|
||||||
|
|
||||||
|
<!-- AUTO-GENERATED-CONTENT:END -->
|
7
gatsby-browser.js
Normal file
7
gatsby-browser.js
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
/**
|
||||||
|
* Implement Gatsby's Browser APIs in this file.
|
||||||
|
*
|
||||||
|
* See: https://www.gatsbyjs.org/docs/browser-apis/
|
||||||
|
*/
|
||||||
|
|
||||||
|
// You can delete this file if you're not using it
|
33
gatsby-config.js
Normal file
33
gatsby-config.js
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
module.exports = {
|
||||||
|
siteMetadata: {
|
||||||
|
title: `faulty equipment`,
|
||||||
|
description: `notso secret lair`,
|
||||||
|
author: `Alessandro Gatti`,
|
||||||
|
},
|
||||||
|
plugins: [
|
||||||
|
`gatsby-plugin-react-helmet`,
|
||||||
|
{
|
||||||
|
resolve: `gatsby-source-filesystem`,
|
||||||
|
options: {
|
||||||
|
name: `images`,
|
||||||
|
path: `${__dirname}/src/images`,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
`gatsby-transformer-sharp`,
|
||||||
|
`gatsby-plugin-sharp`,
|
||||||
|
{
|
||||||
|
resolve: `gatsby-plugin-manifest`,
|
||||||
|
options: {
|
||||||
|
name: `gatsby-starter-default`,
|
||||||
|
short_name: `starter`,
|
||||||
|
start_url: `/`,
|
||||||
|
background_color: `#663399`,
|
||||||
|
theme_color: `#663399`,
|
||||||
|
display: `minimal-ui`,
|
||||||
|
icon: `src/images/gatsby-icon.png`,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
`gatsby-plugin-typescript`,
|
||||||
|
`gatsby-plugin-sass`,
|
||||||
|
],
|
||||||
|
}
|
7
gatsby-node.js
Normal file
7
gatsby-node.js
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
/**
|
||||||
|
* Implement Gatsby's Node APIs in this file.
|
||||||
|
*
|
||||||
|
* See: https://www.gatsbyjs.org/docs/node-apis/
|
||||||
|
*/
|
||||||
|
|
||||||
|
// You can delete this file if you're not using it
|
7
gatsby-ssr.js
Normal file
7
gatsby-ssr.js
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
/**
|
||||||
|
* Implement Gatsby's SSR (Server Side Rendering) APIs in this file.
|
||||||
|
*
|
||||||
|
* See: https://www.gatsbyjs.org/docs/ssr-apis/
|
||||||
|
*/
|
||||||
|
|
||||||
|
// You can delete this file if you're not using it
|
49
package.json
Normal file
49
package.json
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
{
|
||||||
|
"name": "gatsby-starter-default",
|
||||||
|
"private": true,
|
||||||
|
"description": "A simple starter to get up and developing quickly with Gatsby",
|
||||||
|
"version": "0.1.0",
|
||||||
|
"author": "Kyle Mathews <mathews.kyle@gmail.com>",
|
||||||
|
"dependencies": {
|
||||||
|
"gatsby": "^2.18.12",
|
||||||
|
"gatsby-image": "^2.2.34",
|
||||||
|
"gatsby-plugin-manifest": "^2.2.31",
|
||||||
|
"gatsby-plugin-offline": "^3.0.27",
|
||||||
|
"gatsby-plugin-react-helmet": "^3.1.16",
|
||||||
|
"gatsby-plugin-sass": "^2.1.27",
|
||||||
|
"gatsby-plugin-sharp": "^2.3.5",
|
||||||
|
"gatsby-plugin-typescript": "^2.1.26",
|
||||||
|
"gatsby-source-filesystem": "^2.1.40",
|
||||||
|
"gatsby-transformer-sharp": "^2.3.7",
|
||||||
|
"node-sass": "^4.13.1",
|
||||||
|
"prop-types": "^15.7.2",
|
||||||
|
"react": "^16.12.0",
|
||||||
|
"react-dom": "^16.12.0",
|
||||||
|
"react-helmet": "^5.2.1"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@types/react": "^16.9.19",
|
||||||
|
"@types/react-helmet": "^5.0.15",
|
||||||
|
"prettier": "^1.19.1"
|
||||||
|
},
|
||||||
|
"keywords": [
|
||||||
|
"gatsby"
|
||||||
|
],
|
||||||
|
"license": "ISC",
|
||||||
|
"scripts": {
|
||||||
|
"build": "gatsby build",
|
||||||
|
"develop": "gatsby develop",
|
||||||
|
"format": "prettier --write \"**/*.{js,jsx,json,md}\"",
|
||||||
|
"start": "npm run develop",
|
||||||
|
"serve": "gatsby serve",
|
||||||
|
"clean": "gatsby clean",
|
||||||
|
"test": "echo \"Write tests! -> https://gatsby.dev/unit-testing\" && exit 1"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/gatsbyjs/gatsby-starter-default"
|
||||||
|
},
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/gatsbyjs/gatsby/issues"
|
||||||
|
}
|
||||||
|
}
|
42
src/components/header.tsx
Normal file
42
src/components/header.tsx
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
import { Link } from "gatsby"
|
||||||
|
import PropTypes from "prop-types"
|
||||||
|
import React from "react"
|
||||||
|
|
||||||
|
const Header = ({ siteTitle }) => (
|
||||||
|
<header
|
||||||
|
style={{
|
||||||
|
background: `rebeccapurple`,
|
||||||
|
marginBottom: `1.45rem`,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
style={{
|
||||||
|
margin: `0 auto`,
|
||||||
|
maxWidth: 960,
|
||||||
|
padding: `1.45rem 1.0875rem`,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<h1 style={{ margin: 0 }}>
|
||||||
|
<Link
|
||||||
|
to="/"
|
||||||
|
style={{
|
||||||
|
color: `white`,
|
||||||
|
textDecoration: `none`,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{siteTitle}
|
||||||
|
</Link>
|
||||||
|
</h1>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
)
|
||||||
|
|
||||||
|
Header.propTypes = {
|
||||||
|
siteTitle: PropTypes.string,
|
||||||
|
}
|
||||||
|
|
||||||
|
Header.defaultProps = {
|
||||||
|
siteTitle: ``,
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Header
|
32
src/components/image.tsx
Normal file
32
src/components/image.tsx
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
import React from "react"
|
||||||
|
import { useStaticQuery, graphql } from "gatsby"
|
||||||
|
import Img from "gatsby-image"
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This component is built using `gatsby-image` to automatically serve optimized
|
||||||
|
* images with lazy loading and reduced file sizes. The image is loaded using a
|
||||||
|
* `useStaticQuery`, which allows us to load the image from directly within this
|
||||||
|
* component, rather than having to pass the image data down from pages.
|
||||||
|
*
|
||||||
|
* For more information, see the docs:
|
||||||
|
* - `gatsby-image`: https://gatsby.dev/gatsby-image
|
||||||
|
* - `useStaticQuery`: https://www.gatsbyjs.org/docs/use-static-query/
|
||||||
|
*/
|
||||||
|
|
||||||
|
const Image = () => {
|
||||||
|
const data = useStaticQuery(graphql`
|
||||||
|
query {
|
||||||
|
placeholderImage: file(relativePath: { eq: "gatsby-astronaut.png" }) {
|
||||||
|
childImageSharp {
|
||||||
|
fluid(maxWidth: 300) {
|
||||||
|
...GatsbyImageSharpFluid
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`)
|
||||||
|
|
||||||
|
return <Img fluid={data.placeholderImage.childImageSharp.fluid} />
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Image
|
1
src/components/layout.scss
Normal file
1
src/components/layout.scss
Normal file
|
@ -0,0 +1 @@
|
||||||
|
@import "./normalize.scss";
|
51
src/components/layout.tsx
Normal file
51
src/components/layout.tsx
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
/**
|
||||||
|
* Layout component that queries for data
|
||||||
|
* with Gatsby's useStaticQuery component
|
||||||
|
*
|
||||||
|
* See: https://www.gatsbyjs.org/docs/use-static-query/
|
||||||
|
*/
|
||||||
|
|
||||||
|
import React from "react"
|
||||||
|
import PropTypes from "prop-types"
|
||||||
|
import { useStaticQuery, graphql } from "gatsby"
|
||||||
|
|
||||||
|
import Header from "./header"
|
||||||
|
import "./layout.scss"
|
||||||
|
|
||||||
|
const Layout = ({ children }) => {
|
||||||
|
const data = useStaticQuery(graphql`
|
||||||
|
query SiteTitleQuery {
|
||||||
|
site {
|
||||||
|
siteMetadata {
|
||||||
|
title
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`)
|
||||||
|
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<Header siteTitle={data.site.siteMetadata.title} />
|
||||||
|
<div
|
||||||
|
style={{
|
||||||
|
margin: `0 auto`,
|
||||||
|
maxWidth: 960,
|
||||||
|
padding: `0 1.0875rem 1.45rem`,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<main>{children}</main>
|
||||||
|
<footer>
|
||||||
|
© {new Date().getFullYear()}, Built with
|
||||||
|
{` `}
|
||||||
|
<a href="https://www.gatsbyjs.org">Gatsby</a>
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
</>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
Layout.propTypes = {
|
||||||
|
children: PropTypes.node.isRequired,
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Layout
|
510
src/components/normalize.scss
vendored
Normal file
510
src/components/normalize.scss
vendored
Normal file
|
@ -0,0 +1,510 @@
|
||||||
|
$font-sans-os: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
|
||||||
|
Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
|
||||||
|
|
||||||
|
@mixin nospace {
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
margin-top: 0;
|
||||||
|
padding-bottom: 0;
|
||||||
|
padding-left: 0;
|
||||||
|
padding-right: 0;
|
||||||
|
padding-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
html {
|
||||||
|
font-family: $font-sans-os;
|
||||||
|
-ms-text-size-adjust: 100%;
|
||||||
|
-webkit-text-size-adjust: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
-moz-osx-font-smoothing: grayscale;
|
||||||
|
}
|
||||||
|
|
||||||
|
article,
|
||||||
|
aside,
|
||||||
|
details,
|
||||||
|
figcaption,
|
||||||
|
figure,
|
||||||
|
footer,
|
||||||
|
header,
|
||||||
|
main,
|
||||||
|
menu,
|
||||||
|
nav,
|
||||||
|
section,
|
||||||
|
summary {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
audio,
|
||||||
|
canvas,
|
||||||
|
progress,
|
||||||
|
video {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
audio:not([controls]) {
|
||||||
|
display: none;
|
||||||
|
height: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
progress {
|
||||||
|
vertical-align: baseline;
|
||||||
|
}
|
||||||
|
|
||||||
|
[hidden],
|
||||||
|
template {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
background-color: transparent;
|
||||||
|
-webkit-text-decoration-skip: objects;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:active,
|
||||||
|
a:hover {
|
||||||
|
outline-width: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
abbr[title] {
|
||||||
|
border-bottom: none;
|
||||||
|
text-decoration: underline;
|
||||||
|
text-decoration: underline dotted;
|
||||||
|
}
|
||||||
|
|
||||||
|
b,
|
||||||
|
strong {
|
||||||
|
font-weight: inherit;
|
||||||
|
font-weight: bolder;
|
||||||
|
}
|
||||||
|
|
||||||
|
dfn {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-size: 2em;
|
||||||
|
margin: 0.67em 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
mark {
|
||||||
|
background-color: #ff0;
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
|
||||||
|
small {
|
||||||
|
font-size: 80%;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub,
|
||||||
|
sup {
|
||||||
|
font-size: 75%;
|
||||||
|
line-height: 0;
|
||||||
|
position: relative;
|
||||||
|
vertical-align: baseline;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub {
|
||||||
|
bottom: -0.25em;
|
||||||
|
}
|
||||||
|
|
||||||
|
sup {
|
||||||
|
top: -0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
border-style: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
svg:not(:root) {
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
code,
|
||||||
|
kbd,
|
||||||
|
pre,
|
||||||
|
samp {
|
||||||
|
font-family: monospace, monospace;
|
||||||
|
font-size: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
figure {
|
||||||
|
margin: 1em 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
hr {
|
||||||
|
box-sizing: content-box;
|
||||||
|
height: 0;
|
||||||
|
overflow: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
button,
|
||||||
|
input,
|
||||||
|
optgroup,
|
||||||
|
select,
|
||||||
|
textarea {
|
||||||
|
font: inherit;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
optgroup {
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
|
||||||
|
button,
|
||||||
|
input {
|
||||||
|
overflow: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
button,
|
||||||
|
select {
|
||||||
|
text-transform: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
[type="reset"],
|
||||||
|
[type="submit"],
|
||||||
|
button,
|
||||||
|
html [type="button"] {
|
||||||
|
-webkit-appearance: button;
|
||||||
|
}
|
||||||
|
|
||||||
|
[type="button"]::-moz-focus-inner,
|
||||||
|
[type="reset"]::-moz-focus-inner,
|
||||||
|
[type="submit"]::-moz-focus-inner,
|
||||||
|
button::-moz-focus-inner {
|
||||||
|
border-style: none;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
[type="button"]:-moz-focusring,
|
||||||
|
[type="reset"]:-moz-focusring,
|
||||||
|
[type="submit"]:-moz-focusring,
|
||||||
|
button:-moz-focusring {
|
||||||
|
outline: 1px dotted ButtonText;
|
||||||
|
}
|
||||||
|
|
||||||
|
fieldset {
|
||||||
|
border: 1px solid silver;
|
||||||
|
margin: 0 2px;
|
||||||
|
padding: 0.35em 0.625em 0.75em;
|
||||||
|
}
|
||||||
|
|
||||||
|
legend {
|
||||||
|
box-sizing: border-box;
|
||||||
|
color: inherit;
|
||||||
|
display: table;
|
||||||
|
max-width: 100%;
|
||||||
|
padding: 0;
|
||||||
|
white-space: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
textarea {
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
[type="checkbox"],
|
||||||
|
[type="radio"] {
|
||||||
|
box-sizing: border-box;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
[type="number"]::-webkit-inner-spin-button,
|
||||||
|
[type="number"]::-webkit-outer-spin-button {
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
[type="search"] {
|
||||||
|
-webkit-appearance: textfield;
|
||||||
|
outline-offset: -2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
[type="search"]::-webkit-search-cancel-button,
|
||||||
|
[type="search"]::-webkit-search-decoration {
|
||||||
|
-webkit-appearance: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
::-webkit-input-placeholder {
|
||||||
|
color: inherit;
|
||||||
|
opacity: 0.54;
|
||||||
|
}
|
||||||
|
|
||||||
|
::-webkit-file-upload-button {
|
||||||
|
-webkit-appearance: button;
|
||||||
|
font: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
html {
|
||||||
|
font: 112.5%/1.45em georgia, serif;
|
||||||
|
box-sizing: border-box;
|
||||||
|
overflow-y: scroll;
|
||||||
|
}
|
||||||
|
|
||||||
|
* {
|
||||||
|
box-sizing: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
*:before {
|
||||||
|
box-sizing: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
*:after {
|
||||||
|
box-sizing: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
color: hsla(0, 0%, 0%, 0.8);
|
||||||
|
font-family: $font-sans-os;
|
||||||
|
font-weight: normal;
|
||||||
|
word-wrap: break-word;
|
||||||
|
font-kerning: normal;
|
||||||
|
-moz-font-feature-settings: "kern", "liga", "clig", "calt";
|
||||||
|
-ms-font-feature-settings: "kern", "liga", "clig", "calt";
|
||||||
|
-webkit-font-feature-settings: "kern", "liga", "clig", "calt";
|
||||||
|
font-feature-settings: "kern", "liga", "clig", "calt";
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
max-width: 100%;
|
||||||
|
@include nospace;
|
||||||
|
margin-bottom: 1.45rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
@mixin heading {
|
||||||
|
@include nospace;
|
||||||
|
margin-bottom: 1.45rem;
|
||||||
|
color: inherit;
|
||||||
|
font-family: $font-sans-os;
|
||||||
|
font-weight: bold;
|
||||||
|
text-rendering: optimizeLegibility;
|
||||||
|
line-height: 1.1;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
@include heading;
|
||||||
|
font-size: 2.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
@include heading;
|
||||||
|
font-size: 1.62671rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
@include heading;
|
||||||
|
font-size: 1.38316rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
h4 {
|
||||||
|
@include heading;
|
||||||
|
font-size: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
h5 {
|
||||||
|
@include heading;
|
||||||
|
font-size: 0.85028rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
h6 {
|
||||||
|
@include heading;
|
||||||
|
font-size: 0.78405rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
hgroup {
|
||||||
|
@include nospace;
|
||||||
|
margin-bottom: 1.45rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul,
|
||||||
|
ol {
|
||||||
|
@include nospace;
|
||||||
|
margin-left: 1.45rem;
|
||||||
|
margin-bottom: 1.45rem;
|
||||||
|
list-style-position: outside;
|
||||||
|
list-style-image: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
dl,
|
||||||
|
dd,
|
||||||
|
p,
|
||||||
|
figure {
|
||||||
|
@include nospace;
|
||||||
|
margin-bottom: 1.45rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
margin-left: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 1.45rem;
|
||||||
|
font-size: 0.85rem;
|
||||||
|
line-height: 1.42;
|
||||||
|
background: hsla(0, 0%, 0%, 0.04);
|
||||||
|
border-radius: 3px;
|
||||||
|
overflow: auto;
|
||||||
|
word-wrap: normal;
|
||||||
|
padding: 1.45rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
@include nospace;
|
||||||
|
margin-bottom: 1.45rem;
|
||||||
|
font-size: 1rem;
|
||||||
|
line-height: 1.45rem;
|
||||||
|
border-collapse: collapse;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
fieldset {
|
||||||
|
@include nospace;
|
||||||
|
margin-bottom: 1.45rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
blockquote {
|
||||||
|
@include nospace;
|
||||||
|
margin-left: 1.45rem;
|
||||||
|
margin-right: 1.45rem;
|
||||||
|
margin-bottom: 1.45rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
form {
|
||||||
|
@include nospace;
|
||||||
|
margin-bottom: 1.45rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
noscript {
|
||||||
|
@include nospace;
|
||||||
|
margin-bottom: 1.45rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
iframe {
|
||||||
|
@include nospace;
|
||||||
|
margin-bottom: 1.45rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
hr {
|
||||||
|
@include nospace;
|
||||||
|
margin-bottom: calc(1.45rem - 1px);
|
||||||
|
background: hsla(0, 0%, 0%, 0.2);
|
||||||
|
border: none;
|
||||||
|
height: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
address {
|
||||||
|
@include nospace;
|
||||||
|
margin-bottom: 1.45rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
b,
|
||||||
|
strong,
|
||||||
|
dt,
|
||||||
|
th {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
li {
|
||||||
|
margin-bottom: calc(1.45rem / 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
ol li,
|
||||||
|
ul li {
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
li > ol,
|
||||||
|
li > ul {
|
||||||
|
margin-left: 1.45rem;
|
||||||
|
margin-bottom: calc(1.45rem / 2);
|
||||||
|
margin-top: calc(1.45rem / 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
blockquote *:last-child,
|
||||||
|
li *:last-child,
|
||||||
|
p *:last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
li > p {
|
||||||
|
margin-bottom: calc(1.45rem / 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
code,
|
||||||
|
kbd,
|
||||||
|
samp {
|
||||||
|
font-size: 0.85rem;
|
||||||
|
line-height: 1.45rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
abbr,
|
||||||
|
acronym {
|
||||||
|
border-bottom: 1px dotted hsla(0, 0%, 0%, 0.5);
|
||||||
|
cursor: help;
|
||||||
|
|
||||||
|
&[title] {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
thead {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
td,
|
||||||
|
th {
|
||||||
|
text-align: left;
|
||||||
|
border-bottom: 1px solid hsla(0, 0%, 0%, 0.12);
|
||||||
|
font-feature-settings: "tnum";
|
||||||
|
-moz-font-feature-settings: "tnum";
|
||||||
|
-ms-font-feature-settings: "tnum";
|
||||||
|
-webkit-font-feature-settings: "tnum";
|
||||||
|
padding-left: 0.96667rem;
|
||||||
|
padding-right: 0.96667rem;
|
||||||
|
padding-top: 0.725rem;
|
||||||
|
padding-bottom: calc(0.725rem - 1px);
|
||||||
|
}
|
||||||
|
|
||||||
|
th:first-child,
|
||||||
|
td:first-child,
|
||||||
|
th:last-child,
|
||||||
|
td:last-child {
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
tt,
|
||||||
|
code {
|
||||||
|
background-color: hsla(0, 0%, 0%, 0.04);
|
||||||
|
border-radius: 3px;
|
||||||
|
font-family: "SFMono-Regular", Consolas, "Roboto Mono", "Droid Sans Mono",
|
||||||
|
"Liberation Mono", Menlo, Courier, monospace;
|
||||||
|
padding: 0;
|
||||||
|
padding-top: 0.2em;
|
||||||
|
padding-bottom: 0.2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre code {
|
||||||
|
background: none;
|
||||||
|
line-height: 1.42;
|
||||||
|
}
|
||||||
|
|
||||||
|
code:before,
|
||||||
|
code:after,
|
||||||
|
tt:before,
|
||||||
|
tt:after {
|
||||||
|
letter-spacing: -0.2em;
|
||||||
|
content: " ";
|
||||||
|
}
|
||||||
|
|
||||||
|
pre code:before,
|
||||||
|
pre code:after,
|
||||||
|
pre tt:before,
|
||||||
|
pre tt:after {
|
||||||
|
content: "";
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (max-width: 480px) {
|
||||||
|
html {
|
||||||
|
font-size: 100%;
|
||||||
|
}
|
||||||
|
}
|
88
src/components/seo.tsx
Normal file
88
src/components/seo.tsx
Normal file
|
@ -0,0 +1,88 @@
|
||||||
|
/**
|
||||||
|
* SEO component that queries for data with
|
||||||
|
* Gatsby's useStaticQuery React hook
|
||||||
|
*
|
||||||
|
* See: https://www.gatsbyjs.org/docs/use-static-query/
|
||||||
|
*/
|
||||||
|
|
||||||
|
import React from "react"
|
||||||
|
import PropTypes from "prop-types"
|
||||||
|
import Helmet from "react-helmet"
|
||||||
|
import { useStaticQuery, graphql } from "gatsby"
|
||||||
|
|
||||||
|
function SEO({ description, lang, meta, title }) {
|
||||||
|
const { site } = useStaticQuery(
|
||||||
|
graphql`
|
||||||
|
query {
|
||||||
|
site {
|
||||||
|
siteMetadata {
|
||||||
|
title
|
||||||
|
description
|
||||||
|
author
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`
|
||||||
|
)
|
||||||
|
|
||||||
|
const metaDescription = description || site.siteMetadata.description
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Helmet
|
||||||
|
htmlAttributes={{
|
||||||
|
lang,
|
||||||
|
}}
|
||||||
|
title={title}
|
||||||
|
titleTemplate={`%s | ${site.siteMetadata.title}`}
|
||||||
|
meta={[
|
||||||
|
{
|
||||||
|
name: `description`,
|
||||||
|
content: metaDescription,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
property: `og:title`,
|
||||||
|
content: title,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
property: `og:description`,
|
||||||
|
content: metaDescription,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
property: `og:type`,
|
||||||
|
content: `website`,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: `twitter:card`,
|
||||||
|
content: `summary`,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: `twitter:creator`,
|
||||||
|
content: site.siteMetadata.author,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: `twitter:title`,
|
||||||
|
content: title,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: `twitter:description`,
|
||||||
|
content: metaDescription,
|
||||||
|
},
|
||||||
|
].concat(meta)}
|
||||||
|
/>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
SEO.defaultProps = {
|
||||||
|
lang: `en`,
|
||||||
|
meta: [],
|
||||||
|
description: ``,
|
||||||
|
}
|
||||||
|
|
||||||
|
SEO.propTypes = {
|
||||||
|
description: PropTypes.string,
|
||||||
|
lang: PropTypes.string,
|
||||||
|
meta: PropTypes.arrayOf(PropTypes.object),
|
||||||
|
title: PropTypes.string.isRequired,
|
||||||
|
}
|
||||||
|
|
||||||
|
export default SEO
|
BIN
src/images/gatsby-astronaut.png
Normal file
BIN
src/images/gatsby-astronaut.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 163 KiB |
BIN
src/images/gatsby-icon.png
Normal file
BIN
src/images/gatsby-icon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 21 KiB |
14
src/pages/404.tsx
Normal file
14
src/pages/404.tsx
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
import React from "react"
|
||||||
|
|
||||||
|
import Layout from "../components/layout"
|
||||||
|
import SEO from "../components/seo"
|
||||||
|
|
||||||
|
const NotFoundPage = () => (
|
||||||
|
<Layout>
|
||||||
|
<SEO title="404: Not found" />
|
||||||
|
<h1>NOT FOUND</h1>
|
||||||
|
<p>You just hit a route that doesn't exist... the sadness.</p>
|
||||||
|
</Layout>
|
||||||
|
)
|
||||||
|
|
||||||
|
export default NotFoundPage
|
21
src/pages/index.tsx
Normal file
21
src/pages/index.tsx
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
import React from "react"
|
||||||
|
import { Link } from "gatsby"
|
||||||
|
|
||||||
|
import Layout from "../components/layout"
|
||||||
|
import Image from "../components/image"
|
||||||
|
import SEO from "../components/seo"
|
||||||
|
|
||||||
|
const IndexPage = () => (
|
||||||
|
<Layout>
|
||||||
|
<SEO title="Home" />
|
||||||
|
<h1>Hi people</h1>
|
||||||
|
<p>Welcome to your new Gatsby site.</p>
|
||||||
|
<p>Now go build something great.</p>
|
||||||
|
<div style={{ maxWidth: `300px`, marginBottom: `1.45rem` }}>
|
||||||
|
<Image />
|
||||||
|
</div>
|
||||||
|
<Link to="/page-2/">Go to page 2</Link>
|
||||||
|
</Layout>
|
||||||
|
)
|
||||||
|
|
||||||
|
export default IndexPage
|
16
src/pages/page-2.tsx
Normal file
16
src/pages/page-2.tsx
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
import React from "react"
|
||||||
|
import { Link } from "gatsby"
|
||||||
|
|
||||||
|
import Layout from "../components/layout"
|
||||||
|
import SEO from "../components/seo"
|
||||||
|
|
||||||
|
const SecondPage = () => (
|
||||||
|
<Layout>
|
||||||
|
<SEO title="Page two" />
|
||||||
|
<h1>Hi from the second page</h1>
|
||||||
|
<p>Welcome to page 2</p>
|
||||||
|
<Link to="/">Go back to the homepage</Link>
|
||||||
|
</Layout>
|
||||||
|
)
|
||||||
|
|
||||||
|
export default SecondPage
|
Loading…
Reference in a new issue