on master help sign in
Add linter pre-commit hook, update readme
948799eGavin Atkinson
.husky/.gitignorenew file+1
@@ -0,0 +1 @@
1+_
.husky/pre-commitnew file+4
@@ -0,0 +1,4 @@
1+#!/bin/sh
2+. "$(dirname "$0")/_/husky.sh"
3+
4+npx pretty-quick --staged
README.md+15−15
@@ -1,22 +1,26 @@
1−This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).
1+The website for Urbit.
2
2
3## Getting Started
3## Getting Started
4
4
5−First, run the development server:
5+First, pull docs as a submodule
6
6
7```bash
7```bash
8−npm run dev
8+git submodule init
9−# or
10−yarn dev
11```
9```
12
10
13−Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
11+```bash
12+git submodule update
13+```
14
14
15−You can start editing the page by modifying `pages/index.js`. The page auto-updates as you edit the file.
15+Then, run the development server:
16
16
17−[API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `pages/api/hello.js`.
17+```bash
18+npm run dev
19+# or
20+yarn dev
21+```
18
22
19−The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages.
23+Finally, open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
20
24
21## Learn More
25## Learn More
22
26
@@ -25,10 +29,6 @@ To learn more about Next.js, take a look at the following resources:
25- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
29- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
26- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
30- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
27
31
28−You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!
32+## Deployment
29−
30−## Deploy on Vercel
31−
32−The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
33
33
34−Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.
34+WIP
archive/_index copy.mddeleted−6
@@ -1,6 +0,0 @@
1−+++
2−title = "Events"
3−sort_by = "date"
4−template = "events/list.html"
5−page_template = "events/event.html"
6−+++
archive/_index.mddeleted−6
@@ -1,6 +0,0 @@
1−+++
2−title = "Blog"
3−sort_by = "date"
4−template = "essays/list.html"
5−page_template = "essays/post.html"
6−+++
components/Header.js+40−32
@@ -1,39 +1,47 @@
1−import Link from 'next/link'
1+import Link from "next/link";
2−import { useRouter } from 'next/router'
2+import { useRouter } from "next/router";
3−import classnames from 'classnames'
3+import classnames from "classnames";
4−import path from 'path'
4+import path from "path";
5
5
6function ActiveLink({ children, href, className }) {
6function ActiveLink({ children, href, className }) {
7− const router = useRouter()
7+ const router = useRouter();
8−
9− const firstCrumb = router.asPath.split('/')[1]
10−
11− const activeClassName = classnames({
12− 'text-black': '/' + firstCrumb === href,
13− 'text-gray': '/' + firstCrumb !== href,
14− })
15
8
16− return (
9+ const firstCrumb = router.asPath.split("/")[1];
17− <Link href={href}><a className={className + ' ' + activeClassName}>
18− {children}
19− </a></Link>
20− )
21− }
22
10
23−export default function Header() {
11+ const activeClassName = classnames({
24− return (
12+ "text-black": "/" + firstCrumb === href,
25− <header className="layout-wide flex justify-between items-center pt-8">
13+ "text-gray": "/" + firstCrumb !== href,
26− <Link href="/"><a className="type-ui">Urbit</a></Link>
27− <nav className="flex items-center">
28− <ActiveLink className="mr-5 type-ui" href="/docs">Docs</ActiveLink>
29− <ActiveLink className="mr-5 type-ui" href="/blog">Blog</ActiveLink>
30− <ActiveLink className="mr-5 type-ui" href="/events">Events</ActiveLink>
31− <button className="mr-5 text-green type-ui">Download Port</button>
32− <button className="button-sm bg-wall text-gray">Search Urbit.org<div className="ml-4 text-lightGray">⌘K</div></button>
33− </nav>
34− </header>
35− )
14+ });
36
15
16+ return (
17+ <Link href={href}>
18+ <a className={className + " " + activeClassName}>{children}</a>
19+ </Link>
20+ );
37}
21}
38
22
39−
23+// This is the header for the index page
24+export default function Header() {
25+ return (
26+ <header className="layout-wide flex justify-between items-center pt-8">
27+ <Link href="/">
28+ <a className="type-ui">Urbit</a>
29+ </Link>
30+ <nav className="flex items-center">
31+ <ActiveLink className="mr-5 type-ui" href="/docs">
32+ Docs
33+ </ActiveLink>
34+ <ActiveLink className="mr-5 type-ui" href="/blog">
35+ Blog
36+ </ActiveLink>
37+ <ActiveLink className="mr-5 type-ui" href="/events">
38+ Events
39+ </ActiveLink>
40+ <button className="mr-5 text-green type-ui">Download Port</button>
41+ <button className="button-sm bg-wall text-gray">
42+ Search Urbit.org<div className="ml-4 text-lightGray">⌘K</div>
43+ </button>
44+ </nav>
45+ </header>
46+ );
47+}
components/Markdown.js+24−29
@@ -1,43 +1,38 @@
1−import markdownStyles from '../styles/markdown.module.css'
1+import markdownStyles from "../styles/markdown.module.css";
2−import unified from 'unified'
2+import unified from "unified";
3−import parse from 'remark-parse'
3+import parse from "remark-parse";
4−import remark2react from 'remark-react'
4+import remark2react from "remark-react";
5
5
6function P({ children }) {
6function P({ children }) {
7− return (
8− <p className='leading-snug'>
7+ return <p className="leading-snug">{children}</p>;
9− {children}
10− </p>
11− )
12}
8}
13
9
10+// img is wrapped in figure so that images can be extra wide in the blog posts
14function Img({ src, children }) {
11function Img({ src, children }) {
15 return (
12 return (
16− <figure>
13+ <figure>
17− <img src={src}>
14+ <img src={src}>{children}</img>
18− {children}
19− </img>
20− </figure>
15+ </figure>
21− )
16+ );
22}
17}
23
18
24const options = {
19const options = {
25 remarkReactComponents: {
20 remarkReactComponents: {
26− img: Img,
21+ img: Img,
27− // p: P,
22+ // p: P,
28− }
23+ },
29−}
24+};
30
25
31// Converts markdown strings into markdown HTML/React components
26// Converts markdown strings into markdown HTML/React components
32export default function Markdown({ post }) {
27export default function Markdown({ post }) {
33 return (
28 return (
34− <div className={markdownStyles['markdown']}>
29+ <div className={markdownStyles["markdown"]}>
35− {
30+ {
36− unified()
31+ unified()
37− .use(parse)
32+ .use(parse)
38− .use(remark2react, options)
33+ .use(remark2react, options)
39− .processSync(post.content).result
34+ .processSync(post.content).result
40− }
35+ }
41− </div>
36+ </div>
42− )
37+ );
43−}
38+}
package-lock.json+254
@@ -214,6 +214,12 @@
214 "@types/unist": "*"
214 "@types/unist": "*"
215 }
215 }
216 },
216 },
217+ "@types/minimatch": {
218+ "version": "3.0.4",
219+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.4.tgz",
220+ "integrity": "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==",
221+ "dev": true
222+ },
217 "@types/node": {
223 "@types/node": {
218 "version": "15.12.0",
224 "version": "15.12.0",
219 "resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.0.tgz",
225 "resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.0.tgz",
@@ -282,6 +288,24 @@
282 "sprintf-js": "~1.0.2"
288 "sprintf-js": "~1.0.2"
283 }
289 }
284 },
290 },
291+ "array-differ": {
292+ "version": "3.0.0",
293+ "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz",
294+ "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==",
295+ "dev": true
296+ },
297+ "array-union": {
298+ "version": "2.1.0",
299+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
300+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
301+ "dev": true
302+ },
303+ "arrify": {
304+ "version": "2.0.1",
305+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
306+ "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==",
307+ "dev": true
308+ },
285 "asn1.js": {
309 "asn1.js": {
286 "version": "5.4.1",
310 "version": "5.4.1",
287 "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz",
311 "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz",
@@ -718,6 +742,17 @@
718 "sha.js": "^2.4.8"
742 "sha.js": "^2.4.8"
719 }
743 }
720 },
744 },
745+ "cross-spawn": {
746+ "version": "7.0.3",
747+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
748+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
749+ "dev": true,
750+ "requires": {
751+ "path-key": "^3.1.0",
752+ "shebang-command": "^2.0.0",
753+ "which": "^2.0.1"
754+ }
755+ },
721 "crypto-browserify": {
756 "crypto-browserify": {
722 "version": "3.12.0",
757 "version": "3.12.0",
723 "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
758 "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
@@ -894,6 +929,15 @@
894 "iconv-lite": "^0.6.2"
929 "iconv-lite": "^0.6.2"
895 }
930 }
896 },
931 },
932+ "end-of-stream": {
933+ "version": "1.4.4",
934+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
935+ "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
936+ "dev": true,
937+ "requires": {
938+ "once": "^1.4.0"
939+ }
940+ },
897 "es-abstract": {
941 "es-abstract": {
898 "version": "1.18.3",
942 "version": "1.18.3",
899 "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz",
943 "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz",
@@ -971,6 +1015,23 @@
971 "safe-buffer": "^5.1.1"
1015 "safe-buffer": "^5.1.1"
972 }
1016 }
973 },
1017 },
1018+ "execa": {
1019+ "version": "4.1.0",
1020+ "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz",
1021+ "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==",
1022+ "dev": true,
1023+ "requires": {
1024+ "cross-spawn": "^7.0.0",
1025+ "get-stream": "^5.0.0",
1026+ "human-signals": "^1.1.1",
1027+ "is-stream": "^2.0.0",
1028+ "merge-stream": "^2.0.0",
1029+ "npm-run-path": "^4.0.0",
1030+ "onetime": "^5.1.0",
1031+ "signal-exit": "^3.0.2",
1032+ "strip-final-newline": "^2.0.0"
1033+ }
1034+ },
974 "extend": {
1035 "extend": {
975 "version": "3.0.2",
1036 "version": "3.0.2",
976 "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
1037 "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
@@ -1092,6 +1153,15 @@
1092 "stream-parser": "^0.3.1"
1153 "stream-parser": "^0.3.1"
1093 }
1154 }
1094 },
1155 },
1156+ "get-stream": {
1157+ "version": "5.2.0",
1158+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
1159+ "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
1160+ "dev": true,
1161+ "requires": {
1162+ "pump": "^3.0.0"
1163+ }
1164+ },
1095 "glob": {
1165 "glob": {
1096 "version": "7.1.7",
1166 "version": "7.1.7",
1097 "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
1167 "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
@@ -1319,6 +1389,12 @@
1319 "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
1389 "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
1320 "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM="
1390 "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM="
1321 },
1391 },
1392+ "human-signals": {
1393+ "version": "1.1.1",
1394+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
1395+ "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==",
1396+ "dev": true
1397+ },
1322 "iconv-lite": {
1398 "iconv-lite": {
1323 "version": "0.6.3",
1399 "version": "0.6.3",
1324 "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
1400 "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
@@ -1332,6 +1408,12 @@
1332 "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
1408 "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
1333 "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
1409 "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
1334 },
1410 },
1411+ "ignore": {
1412+ "version": "5.1.8",
1413+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz",
1414+ "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==",
1415+ "dev": true
1416+ },
1335 "inflight": {
1417 "inflight": {
1336 "version": "1.0.6",
1418 "version": "1.0.6",
1337 "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
1419 "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
@@ -1502,6 +1584,12 @@
1502 "has-symbols": "^1.0.2"
1584 "has-symbols": "^1.0.2"
1503 }
1585 }
1504 },
1586 },
1587+ "is-stream": {
1588+ "version": "2.0.0",
1589+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
1590+ "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==",
1591+ "dev": true
1592+ },
1505 "is-string": {
1593 "is-string": {
1506 "version": "1.0.6",
1594 "version": "1.0.6",
1507 "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz",
1595 "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz",
@@ -1532,6 +1620,12 @@
1532 "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
1620 "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
1533 "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
1621 "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
1534 },
1622 },
1623+ "isexe": {
1624+ "version": "2.0.0",
1625+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
1626+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
1627+ "dev": true
1628+ },
1535 "jest-worker": {
1629 "jest-worker": {
1536 "version": "27.0.0-next.5",
1630 "version": "27.0.0-next.5",
1537 "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.0-next.5.tgz",
1631 "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.0-next.5.tgz",
@@ -1831,6 +1925,12 @@
1831 }
1925 }
1832 }
1926 }
1833 },
1927 },
1928+ "mimic-fn": {
1929+ "version": "2.1.0",
1930+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
1931+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
1932+ "dev": true
1933+ },
1834 "minimalistic-assert": {
1934 "minimalistic-assert": {
1835 "version": "1.0.1",
1935 "version": "1.0.1",
1836 "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
1936 "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
@@ -1861,11 +1961,30 @@
1861 "integrity": "sha512-2lMlY1Yc1+CUy0gw4H95uNN7vjbpoED7NNRSBHE25nWfLBdmMzFCsPshlzbxHz+gYMcBEUN8V4pU16prcdPSgA==",
1961 "integrity": "sha512-2lMlY1Yc1+CUy0gw4H95uNN7vjbpoED7NNRSBHE25nWfLBdmMzFCsPshlzbxHz+gYMcBEUN8V4pU16prcdPSgA==",
1862 "dev": true
1962 "dev": true
1863 },
1963 },
1964+ "mri": {
1965+ "version": "1.1.6",
1966+ "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.6.tgz",
1967+ "integrity": "sha512-oi1b3MfbyGa7FJMP9GmLTttni5JoICpYBRlq+x5V16fZbLsnL9N3wFqqIm/nIG43FjUFkFh9Epzp/kzUGUnJxQ==",
1968+ "dev": true
1969+ },
1864 "ms": {
1970 "ms": {
1865 "version": "2.0.0",
1971 "version": "2.0.0",
1866 "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
1972 "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
1867 "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
1973 "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
1868 },
1974 },
1975+ "multimatch": {
1976+ "version": "4.0.0",
1977+ "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-4.0.0.tgz",
1978+ "integrity": "sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==",
1979+ "dev": true,
1980+ "requires": {
1981+ "@types/minimatch": "^3.0.3",
1982+ "array-differ": "^3.0.0",
1983+ "array-union": "^2.1.0",
1984+ "arrify": "^2.0.1",
1985+ "minimatch": "^3.0.4"
1986+ }
1987+ },
1869 "nanoid": {
1988 "nanoid": {
1870 "version": "3.1.23",
1989 "version": "3.1.23",
1871 "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz",
1990 "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz",
@@ -2147,6 +2266,15 @@
2147 "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=",
2266 "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=",
2148 "dev": true
2267 "dev": true
2149 },
2268 },
2269+ "npm-run-path": {
2270+ "version": "4.0.1",
2271+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
2272+ "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
2273+ "dev": true,
2274+ "requires": {
2275+ "path-key": "^3.0.0"
2276+ }
2277+ },
2150 "object-assign": {
2278 "object-assign": {
2151 "version": "4.1.1",
2279 "version": "4.1.1",
2152 "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
2280 "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
@@ -2197,6 +2325,15 @@
2197 "wrappy": "1"
2325 "wrappy": "1"
2198 }
2326 }
2199 },
2327 },
2328+ "onetime": {
2329+ "version": "5.1.2",
2330+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
2331+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
2332+ "dev": true,
2333+ "requires": {
2334+ "mimic-fn": "^2.1.0"
2335+ }
2336+ },
2200 "os-browserify": {
2337 "os-browserify": {
2201 "version": "0.3.0",
2338 "version": "0.3.0",
2202 "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
2339 "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
@@ -2308,6 +2445,12 @@
2308 "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
2445 "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
2309 "dev": true
2446 "dev": true
2310 },
2447 },
2448+ "path-key": {
2449+ "version": "3.1.1",
2450+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
2451+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
2452+ "dev": true
2453+ },
2311 "path-parse": {
2454 "path-parse": {
2312 "version": "1.0.7",
2455 "version": "1.0.7",
2313 "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
2456 "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
@@ -2435,12 +2578,77 @@
2435 "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==",
2578 "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==",
2436 "dev": true
2579 "dev": true
2437 },
2580 },
2581+ "prettier": {
2582+ "version": "2.3.1",
2583+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.1.tgz",
2584+ "integrity": "sha512-p+vNbgpLjif/+D+DwAZAbndtRrR0md0MwfmOVN9N+2RgyACMT+7tfaRnT+WDPkqnuVwleyuBIG2XBxKDme3hPA==",
2585+ "dev": true
2586+ },
2438 "pretty-hrtime": {
2587 "pretty-hrtime": {
2439 "version": "1.0.3",
2588 "version": "1.0.3",
2440 "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
2589 "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
2441 "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=",
2590 "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=",
2442 "dev": true
2591 "dev": true
2443 },
2592 },
2593+ "pretty-quick": {
2594+ "version": "3.1.0",
2595+ "resolved": "https://registry.npmjs.org/pretty-quick/-/pretty-quick-3.1.0.tgz",
2596+ "integrity": "sha512-DtxIxksaUWCgPFN7E1ZZk4+Aav3CCuRdhrDSFZENb404sYMtuo9Zka823F+Mgeyt8Zt3bUiCjFzzWYE9LYqkmQ==",
2597+ "dev": true,
2598+ "requires": {
2599+ "chalk": "^3.0.0",
2600+ "execa": "^4.0.0",
2601+ "find-up": "^4.1.0",
2602+ "ignore": "^5.1.4",
2603+ "mri": "^1.1.5",
2604+ "multimatch": "^4.0.0"
2605+ },
2606+ "dependencies": {
2607+ "ansi-styles": {
2608+ "version": "4.3.0",
2609+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
2610+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
2611+ "dev": true,
2612+ "requires": {
2613+ "color-convert": "^2.0.1"
2614+ }
2615+ },
2616+ "chalk": {
2617+ "version": "3.0.0",
2618+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
2619+ "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
2620+ "dev": true,
2621+ "requires": {
2622+ "ansi-styles": "^4.1.0",
2623+ "supports-color": "^7.1.0"
2624+ }
2625+ },
2626+ "color-convert": {
2627+ "version": "2.0.1",
2628+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
2629+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
2630+ "dev": true,
2631+ "requires": {
2632+ "color-name": "~1.1.4"
2633+ }
2634+ },
2635+ "color-name": {
2636+ "version": "1.1.4",
2637+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
2638+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
2639+ "dev": true
2640+ },
2641+ "supports-color": {
2642+ "version": "7.2.0",
2643+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
2644+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
2645+ "dev": true,
2646+ "requires": {
2647+ "has-flag": "^4.0.0"
2648+ }
2649+ }
2650+ }
2651+ },
2444 "process": {
2652 "process": {
2445 "version": "0.11.10",
2653 "version": "0.11.10",
2446 "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
2654 "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
@@ -2489,6 +2697,16 @@
2489 }
2697 }
2490 }
2698 }
2491 },
2699 },
2700+ "pump": {
2701+ "version": "3.0.0",
2702+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
2703+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
2704+ "dev": true,
2705+ "requires": {
2706+ "end-of-stream": "^1.1.0",
2707+ "once": "^1.3.1"
2708+ }
2709+ },
2492 "punycode": {
2710 "punycode": {
2493 "version": "2.1.1",
2711 "version": "2.1.1",
2494 "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
2712 "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
@@ -2774,11 +2992,32 @@
2774 "safe-buffer": "^5.0.1"
2992 "safe-buffer": "^5.0.1"
2775 }
2993 }
2776 },
2994 },
2995+ "shebang-command": {
2996+ "version": "2.0.0",
2997+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
2998+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
2999+ "dev": true,
3000+ "requires": {
3001+ "shebang-regex": "^3.0.0"
3002+ }
3003+ },
3004+ "shebang-regex": {
3005+ "version": "3.0.0",
3006+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
3007+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
3008+ "dev": true
3009+ },
2777 "shell-quote": {
3010 "shell-quote": {
2778 "version": "1.7.2",
3011 "version": "1.7.2",
2779 "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz",
3012 "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz",
2780 "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg=="
3013 "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg=="
2781 },
3014 },
3015+ "signal-exit": {
3016+ "version": "3.0.3",
3017+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
3018+ "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==",
3019+ "dev": true
3020+ },
2782 "simple-swizzle": {
3021 "simple-swizzle": {
2783 "version": "0.2.2",
3022 "version": "0.2.2",
2784 "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
3023 "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
@@ -2907,6 +3146,12 @@
2907 "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz",
3146 "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz",
2908 "integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI="
3147 "integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI="
2909 },
3148 },
3149+ "strip-final-newline": {
3150+ "version": "2.0.0",
3151+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
3152+ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
3153+ "dev": true
3154+ },
2910 "style-to-object": {
3155 "style-to-object": {
2911 "version": "0.3.0",
3156 "version": "0.3.0",
2912 "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz",
3157 "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz",
@@ -3286,6 +3531,15 @@
3286 "webidl-conversions": "^4.0.2"
3531 "webidl-conversions": "^4.0.2"
3287 }
3532 }
3288 },
3533 },
3534+ "which": {
3535+ "version": "2.0.2",
3536+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
3537+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
3538+ "dev": true,
3539+ "requires": {
3540+ "isexe": "^2.0.0"
3541+ }
3542+ },
3289 "which-boxed-primitive": {
3543 "which-boxed-primitive": {
3290 "version": "1.0.2",
3544 "version": "1.0.2",
3291 "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
3545 "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
package.json+5−1
@@ -5,7 +5,8 @@
5 "scripts": {
5 "scripts": {
6 "dev": "next dev",
6 "dev": "next dev",
7 "build": "next build",
7 "build": "next build",
8− "start": "next start"
8+ "start": "next start",
9+ "prepare": "husky install"
9 },
10 },
10 "dependencies": {
11 "dependencies": {
11 "@iarna/toml": "^2.2.5",
12 "@iarna/toml": "^2.2.5",
@@ -23,7 +24,10 @@
23 },
24 },
24 "devDependencies": {
25 "devDependencies": {
25 "autoprefixer": "^10.2.6",
26 "autoprefixer": "^10.2.6",
27+ "husky": "^6.0.0",
26 "postcss": "^8.3.0",
28 "postcss": "^8.3.0",
29+ "prettier": "^2.3.1",
30+ "pretty-quick": "^3.1.0",
27 "tailwindcss": "^2.1.4"
31 "tailwindcss": "^2.1.4"
28 }
32 }
29}
33}
pages/blog/[slug].js+126−111
@@ -1,126 +1,141 @@
1−import { useRouter } from 'next/router'
1+import { useRouter } from "next/router";
2−import { getPostBySlug, getAllPosts, getNextPost, getPreviousPost, formatDate } from '../../lib/lib'
3−import Head from 'next/head'
4−import Link from 'next/link'
5−import ErrorPage from '../404'
6−import Container from '../../components/Container'
7−import Markdown from '../../components/Markdown'
8−import Header from '../../components/Header'
9−import Footer from '../../components/Footer'
10−import BackgroundImage from '../../components/BackgroundImage'
11−import SingleColumn from '../../components/SingleColumn'
12−
13import {
2import {
14− name,
3+ getPostBySlug,
4+ getAllPosts,
5+ getNextPost,
6+ getPreviousPost,
7+ formatDate,
8+} from "../../lib/lib";
9+import Head from "next/head";
10+import Link from "next/link";
11+import ErrorPage from "../404";
12+import Container from "../../components/Container";
13+import Markdown from "../../components/Markdown";
14+import Header from "../../components/Header";
15+import Footer from "../../components/Footer";
16+import BackgroundImage from "../../components/BackgroundImage";
17+import SingleColumn from "../../components/SingleColumn";
18+
15−} from '../../lib/constants'
19+import { name } from "../../lib/constants";
16
20
17export default function Post({ post, nextPost, previousPost }) {
21export default function Post({ post, nextPost, previousPost }) {
18− const router = useRouter()
22+ const router = useRouter();
19 if (!router.isFallback && !post?.slug) {
23 if (!router.isFallback && !post?.slug) {
20− return <ErrorPage />
24+ return <ErrorPage />;
21 }
25 }
22−
23− return (
24− <Container>
25− <SingleColumn>
26− <Header />
27− <section className="flex flex-col layout-wide pt-24">
28− <h1>{post.title}</h1>
29−
30− {
31− post.extra.author ? <div className='type-ui text-gray mt-4'>{post.extra.author}</div> : null
32− }
33− {
34− post.extra.ship ? <div className='type-ui text-gray font-mono'>{post.extra.ship}</div> : null
35− }
36−
37− <div className='type-ui text-gray mt-16'>{formatDate(new Date(post.date))}</div>
38
26
27+ return (
28+ <Container>
29+ <SingleColumn>
30+ <Header />
31+ <section className="flex flex-col layout-wide pt-24">
32+ <h1>{post.title}</h1>
33+ {post.extra.author ? (
34+ <div className="type-ui text-gray mt-4">{post.extra.author}</div>
35+ ) : null}
36+ {post.extra.ship ? (
37+ <div className="type-ui text-gray font-mono">{post.extra.ship}</div>
38+ ) : null}
39+ <div className="type-ui text-gray mt-16">
40+ {formatDate(new Date(post.date))}
41+ </div>
39− </section>
42+ </section>
40− <article className="flex justify-center pt-12">
43+ <article className="flex justify-center pt-12">
41− <Markdown post={post} />
44+ <Markdown post={post} />
42− </article>
45+ </article>
43− <section className="layout-wide pt-24 flex">
46+ <section className="layout-wide pt-24 flex">
44−
45− {
46− previousPost === null
47+ {previousPost === null ? (
47− ? <div className={`w-1/2 mr-4`} />
48+ <div className={`w-1/2 mr-4`} />
49+ ) : (
50+ <div
48− : <div className={`cursor-pointer w-1/2 mr-4`} key={previousPost.slug}>
51+ className={`cursor-pointer w-1/2 mr-4`}
52+ key={previousPost.slug}
53+ >
54+ <Link
49− <Link href={'/blog/' + previousPost.slug} key={`post-${previousPost.slug}`}>
55+ href={"/blog/" + previousPost.slug}
56+ key={`post-${previousPost.slug}`}
57+ >
50− <div>
58+ <div>
51− <h3>Previous Post</h3>
59+ <h3>Previous Post</h3>
60+ <BackgroundImage
52− <BackgroundImage className="w-full h-80 rounded-lg" src={previousPost.extra.image || ''} />
61+ className="w-full h-80 rounded-lg"
62+ src={previousPost.extra.image || ""}
63+ />
53− <p className='text-black mt-2'>{previousPost.title || ''}</p>
64+ <p className="text-black mt-2">{previousPost.title || ""}</p>
65+ <p className="text-gray">
54− <p className='text-gray'>{formatDate(new Date(previousPost.date))}</p>
66+ {formatDate(new Date(previousPost.date))}
67+ </p>
55− </div>
68+ </div>
56− </Link>
69+ </Link>
57− </div>
70+ </div>
58− }
71+ )}
59− {
60− nextPost === null
72+ {nextPost === null ? (
61− ? <div className={`w-1/2 ml-4`} />
73+ <div className={`w-1/2 ml-4`} />
74+ ) : (
62− : <div className={`cursor-pointer w-1/2 ml-4`}>
75+ <div className={`cursor-pointer w-1/2 ml-4`}>
76+ <Link
63− <Link href={'/blog/' + nextPost.slug} key={`post-${nextPost.slug}`}>
77+ href={"/blog/" + nextPost.slug}
78+ key={`post-${nextPost.slug}`}
79+ >
64− <div>
80+ <div>
65− <h3>Next Post</h3>
81+ <h3>Next Post</h3>
82+ <BackgroundImage
66− <BackgroundImage className="w-full h-80 rounded-lg" src={nextPost.extra.image || ''} />
83+ className="w-full h-80 rounded-lg"
84+ src={nextPost.extra.image || ""}
85+ />
67− <p className='text-black mt-2'>{nextPost.title || ''}</p>
86+ <p className="text-black mt-2">{nextPost.title || ""}</p>
87+ <p className="text-gray">
68− <p className='text-gray'>{formatDate(new Date(nextPost.date))}</p>
88+ {formatDate(new Date(nextPost.date))}
89+ </p>
69− </div>
90+ </div>
70− </Link>
91+ </Link>
71− </div>
92+ </div>
72− }
93+ )}
73− </section>
94+ </section>
74− </SingleColumn>
95+ </SingleColumn>
75− <Footer />
96+ <Footer />
76− </Container>
97+ </Container>
77− )
98+ );
78}
99}
79
100
80−//
101+//
81export async function getStaticProps({ params }) {
102export async function getStaticProps({ params }) {
82−
83− const nextPost = getNextPost(params.slug, [
103+ const nextPost =
84− 'title',
104+ getNextPost(
85− 'slug',
105+ params.slug,
86− 'date',
87− 'description',
106+ ["title", "slug", "date", "description", "extra"],
88− 'extra',
89− ], 'blog') || null
107+ "blog"
90−
108+ ) || null;
109+
91− const previousPost = getPreviousPost(params.slug, [
110+ const previousPost =
92− 'title',
111+ getPreviousPost(
93− 'slug',
112+ params.slug,
94− 'date',
95− 'description',
113+ ["title", "slug", "date", "description", "extra"],
96− 'extra',
97− ], 'blog') || null
114+ "blog"
98−
115+ ) || null;
99− const post = getPostBySlug(params.slug, [
100− 'title',
101− 'slug',
102− 'date',
103− 'description',
104− 'content',
105− 'extra',
106− ], 'blog')
107
116
117+ const post = getPostBySlug(
118+ params.slug,
119+ ["title", "slug", "date", "description", "content", "extra"],
120+ "blog"
121+ );
122+
108− return {
123+ return {
109− props: { post, nextPost, previousPost },
124+ props: { post, nextPost, previousPost },
110− }
125+ };
111}
126}
112
127
113export async function getStaticPaths() {
128export async function getStaticPaths() {
114− const posts = getAllPosts(['slug', 'date'], 'blog')
129+ const posts = getAllPosts(["slug", "date"], "blog");
115
130
116 return {
131 return {
117− paths: posts.map((post) => {
132+ paths: posts.map((post) => {
118− return {
133+ return {
119− params: {
134+ params: {
120− slug: post.slug,
135+ slug: post.slug,
121− },
136+ },
122− }
137+ };
123− }),
138+ }),
124− fallback: false,
139+ fallback: false,
125− }
140+ };
126−}
141+}
pages/docs.js+37−37
@@ -1,57 +1,57 @@
1−import Head from 'next/head'
1+import Head from "next/head";
2−import Link from 'next/link'
2+import Link from "next/link";
3−import { useState } from 'react';
3+import { useState } from "react";
4−import Container from '../components/Container'
4+import Container from "../components/Container";
5−import Footer from '../components/Footer'
5+import Footer from "../components/Footer";
6−import Header from '../components/Header'
6+import Header from "../components/Header";
7−import SingleColumn from '../components/SingleColumn'
7+import SingleColumn from "../components/SingleColumn";
8−import BackgroundImage from '../components/BackgroundImage'
8+import BackgroundImage from "../components/BackgroundImage";
9−import Lorem from '../components/Lorem'
9+import Lorem from "../components/Lorem";
10−import { getAllPosts, formatDate } from '../lib/lib'
10+import { getAllPosts, formatDate } from "../lib/lib";
11
11
12function Sidebar(props) {
12function Sidebar(props) {
13 return (
13 return (
14 <div className="flex flex-col w-72 bg-wall max-h-screen h-screen">
14 <div className="flex flex-col w-72 bg-wall max-h-screen h-screen">
15− <header className='flex justify-between items-center pl-12 pt-8 pb-8'>
15+ <header className="flex justify-between items-center pl-12 pt-8 pb-8">
16+ <Link href="/">
16− <Link href="/"><a className="type-ui">Urbit</a></Link>
17+ <a className="type-ui">Urbit</a>
18+ </Link>
17 </header>
19 </header>
18 <div className="overflow-y-scroll p-12 pt-16">
20 <div className="overflow-y-scroll p-12 pt-16">
19− { props.children }
21+ {props.children}
20− <div className="pb-32"/>
22+ <div className="pb-32" />
21 </div>
23 </div>
22 </div>
24 </div>
23− )
25+ );
24}
26}
25
27
26function ContentArea(props) {
28function ContentArea(props) {
27 return (
29 return (
28 <div className="w-full">
30 <div className="w-full">
29− <header className='flex justify-between items-center px-24 pt-8 pb-8'>
31+ <header className="flex justify-between items-center px-24 pt-8 pb-8">
30− <div className="type-ui">Install Urbit</div>
32+ <div className="type-ui">Install Urbit</div>
31− </header>
33+ </header>
32− <div className="px-24 pb-24 pt-16 flex flex-col w-full max-h-screen h-screen overflow-y-scroll">
34+ <div className="px-24 pb-24 pt-16 flex flex-col w-full max-h-screen h-screen overflow-y-scroll">
33− <div className="type-ui text-lightGray">Breadcrumbs/go/here</div>
35+ <div className="type-ui text-lightGray">Breadcrumbs/go/here</div>
34− <h2 className="mb-16 mt-4">Getting Started</h2>
36+ <h2 className="mb-16 mt-4">Getting Started</h2>
35− { props.children }
37+ {props.children}
36− <div className="pb-32"/>
38+ <div className="pb-32" />
39+ </div>
37 </div>
40 </div>
38− </div>
39− )
41+ );
40}
42}
41
43
42−
43export default function DocsLayout({ posts }) {
44export default function DocsLayout({ posts }) {
44−
45 return (
45 return (
46− <div className="flex w-screen h-screen min-h-screen w-screen overflow-hidden">
46+ <div className="flex w-screen h-screen min-h-screen w-screen overflow-hidden">
47− <Sidebar>
47+ <Sidebar>
48− <Lorem/>
48+ <Lorem />
49− </Sidebar>
49+ </Sidebar>
50− <ContentArea>
50+ <ContentArea>
51− <Lorem/>
51+ <Lorem />
52− </ContentArea>
52+ </ContentArea>
53− </div>
53+ </div>
54− )
54+ );
55}
55}
56
56
57// export async function getStaticProps() {
57// export async function getStaticProps() {
@@ -62,7 +62,7 @@ export default function DocsLayout({ posts }) {
62// 'description',
62// 'description',
63// 'extra',
63// 'extra',
64// ], 'docs')
64// ], 'docs')
65−//
65+//
66// return {
66// return {
67// props: { posts },
67// props: { posts },
68// }
68// }