From 19742ee2d39ab901e969137e1c6cdbd923bc4506 Mon Sep 17 00:00:00 2001 From: Ben Zhang Date: Wed, 28 Aug 2024 13:36:45 -0700 Subject: [PATCH] Improve website infrastructure (#3057) 1. Upgrade tailwind to [3.4](https://tailwindcss.com/blog/tailwindcss-v3-4) to include additional `max-h-*` classes. 2. Upgrade nextjs to [13.5](https://nextjs.org/blog/next-13-5) to include a fix for null useRef "Invalid hook call. Hooks can only be called inside of the body of a function component." error. This version also includes significant performance improvements to the dev environment. 3. Add react-hooks eslint plugin. 4. Add support for title images in blog posts. This is tested in https://github.com/WATonomous/infra-config/pull/3034 --- .eslintrc.js | 3 +- components/blog-post.tsx | 44 +++++++-- components/blog.tsx | 112 ++++++++++++++--------- components/picture.tsx | 10 ++- package-lock.json | 159 +++++++++++++-------------------- package.json | 5 +- pages/blog/hello-world.mdx | 2 + pages/docs/compute-cluster.mdx | 4 +- 8 files changed, 190 insertions(+), 149 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 45efe38..58b06b5 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -3,7 +3,8 @@ module.exports = { "next/core-web-vitals", "prettier", "plugin:mdx/recommended", - "plugin:react/recommended" + "plugin:react/recommended", + "plugin:react-hooks/recommended", ], "ignorePatterns": [ // imported components from shadcn diff --git a/components/blog-post.tsx b/components/blog-post.tsx index c4584c4..774e901 100644 --- a/components/blog-post.tsx +++ b/components/blog-post.tsx @@ -1,15 +1,19 @@ import { allImages } from '@/build/fixtures/images'; -import { userProfiles } from '@/lib/data'; import CommentSection from '@/components/giscus-comments'; -import { websiteConfig } from '@/lib/data'; +import { + Popover, + PopoverContent, + PopoverTrigger, +} from "@/components/ui/popover"; +import { userProfiles, websiteConfig } from '@/lib/data'; import { cn, dayjsTz } from '@/lib/utils'; +import { GithubIcon, LinkIcon, LinkedinIcon, MailIcon, XIcon } from 'lucide-react'; import { useRouter } from 'next/router'; import { Link, useConfig } from "nextra-theme-docs"; import React from 'react'; +import { SubscribeDialog } from './blog'; import Picture from './picture'; -import { GithubIcon, LinkIcon, LinkedinIcon, MailIcon, XIcon } from 'lucide-react'; import { Separator } from './ui/separator'; -import { SubscribeDialog } from './blog'; // Reference for styling: https://github.com/vercel/turbo/blob/22585c9dcc23eb010ab01f177394358af03210d7/docs/pages/blog/turbo-1-10-0.mdx @@ -41,7 +45,7 @@ export function Avatar({ username }: { username: string }) { return (
- +
Name
@@ -90,8 +94,38 @@ export function BlogPostHeader() { const { locale = websiteConfig.default_locale } = useRouter() const dateObj = date && timezone && dayjsTz(date, timezone).toDate() + let titleImageComponent; + if (frontMatter.title_image) { + const titleImage = allImages[frontMatter.title_image]; + if (!titleImage) { + throw new Error(`No image found for title_image: ${frontMatter.title_image}`); + } + const titleImageAttribution = frontMatter.title_image_attribution; + if (!titleImageAttribution) { + throw new Error(`No attribution found for title_image: ${frontMatter.title_image}`); + } + + titleImageComponent = ( + + + + + +
+ {titleImageAttribution} +
+
+
+ ) + } + return ( <> + {titleImageComponent}

{title}

{/* suppressHydrationWarning is used to prevent warnings due to differing server/client locales */} diff --git a/components/blog.tsx b/components/blog.tsx index baad4ad..5c48b1d 100644 --- a/components/blog.tsx +++ b/components/blog.tsx @@ -1,3 +1,4 @@ +import { allImages } from '@/build/fixtures/images'; import { AlertDialog, AlertDialogAction, @@ -6,31 +7,32 @@ import { AlertDialogFooter, AlertDialogHeader, AlertDialogTitle -} from "@/components/ui/alert-dialog" +} from "@/components/ui/alert-dialog"; import { Form, FormControl, FormField, FormItem, FormMessage -} from "@/components/ui/form" -import { websiteConfig } from '@/lib/data' -import { dayjsTz } from '@/lib/utils' -import { zodResolver } from "@hookform/resolvers/zod" -import { useRouter } from 'next/router' -import { MdxFile } from "nextra" -import { Link } from "nextra-theme-docs" -import { getPagesUnderRoute } from "nextra/context" -import { useState } from "react" -import { useForm } from "react-hook-form" -import { z } from "zod" -import { Button } from "./ui/button" -import { Input } from "./ui/input" +} from "@/components/ui/form"; +import { websiteConfig } from '@/lib/data'; +import { dayjsTz } from '@/lib/utils'; +import { zodResolver } from "@hookform/resolvers/zod"; +import { useRouter } from 'next/router'; +import { MdxFile } from "nextra"; +import { Link } from "nextra-theme-docs"; +import { getPagesUnderRoute } from "nextra/context"; +import { useState } from "react"; +import { useForm } from "react-hook-form"; +import { z } from "zod"; +import Picture from "./picture"; +import { Button } from "./ui/button"; +import { Input } from "./ui/input"; // Header and Index derived from https://github.com/vercel/turbo/blob/66196a70d02cddc8899ed1423684b1f716aa310e/docs/pages/blog.mdx export function BlogHeader() { return ( -
+

Breadcrumbs

@@ -44,37 +46,67 @@ export function BlogHeader() { export function BlogIndex() { const { locale = websiteConfig.default_locale } = useRouter() - return getPagesUnderRoute("/blog").map((page) => { - const frontMatter = (page as MdxFile).frontMatter - const { date, timezone } = frontMatter || {} + const items = getPagesUnderRoute("/blog").map((page) => { + const frontMatter = (page as MdxFile).frontMatter || {} + if (frontMatter.hidden) { + return null + } + + const { date, timezone } = frontMatter const dateObj = date && timezone && dayjsTz(date, timezone).toDate() + let titleImageComponent; + if (frontMatter.title_image) { + const titleImage = allImages[frontMatter.title_image]; + if (!titleImage) { + throw new Error(`No image found for title_image: ${frontMatter.title_image}`); + } + const titleImageAttribution = frontMatter.title_image_attribution; + if (!titleImageAttribution) { + throw new Error(`No attribution found for title_image: ${frontMatter.title_image}`); + } + + titleImageComponent = ( + + ) + } + return ( -
- - {page.meta?.title || frontMatter?.title || page.name} - -

- {frontMatter?.description}{" "} - - {"Read more →"} - -

- {dateObj ? ( -

- {/* suppressHydrationWarning is used to prevent warnings due to differing server/client locales */} - +

+
+ + {page.meta?.title || frontMatter.title || page.name} + +

+ {frontMatter.description}{" "} + + {"Read more →"} +

- ) : null} + {dateObj ? ( +

+ {/* suppressHydrationWarning is used to prevent warnings due to differing server/client locales */} + +

+ ) : null} +
+
{titleImageComponent}
); - }); + }) + + return
{items}
} const subscribeFormSchema = z.object({ diff --git a/components/picture.tsx b/components/picture.tsx index 85d0e8c..c4d9738 100644 --- a/components/picture.tsx +++ b/components/picture.tsx @@ -13,12 +13,14 @@ import { getImageBlurSvg } from "@/lib/image-blur-svg"; export default function Picture({ image, alt, - className = "", + wrapperClassName = "", + imgClassName = "", style = {}, }: { image: WATcloudStaticImage; alt: string; - className?: string; + wrapperClassName?: string; + imgClassName?: string; style?: React.CSSProperties; }) { // The blur logic is derived from https://github.com/vercel/next.js/blob/98be3ba23ea65ac5b581999d79a1093f147b46f0/packages/next/src/shared/lib/get-img-props.ts#L626 @@ -46,7 +48,7 @@ export default function Picture({ }; return ( - + diff --git a/package-lock.json b/package-lock.json index a1b75a8..3e910e3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -39,7 +39,7 @@ "js-base64": "^3.7.7", "js-sha256": "^0.11.0", "lucide-react": "^0.288.0", - "next": "^13.4.19", + "next": "^13.5.6", "nextjs-google-analytics": "^2.3.3", "nextra": "^2.13.2", "nextra-theme-docs": "^2.13.2", @@ -67,12 +67,13 @@ "eslint-config-next": "13.5.6", "eslint-config-prettier": "^9.0.0", "eslint-plugin-mdx": "^2.2.0", + "eslint-plugin-react-hooks": "^4.6.2", "jest": "^29.7.0", "postcss": "^8.4.31", "quicktype": "^23.0.76", "sharp-cli": "^4.2.0", "slugify": "^1.6.6", - "tailwindcss": "^3.3.3", + "tailwindcss": "^3.4.10", "ts-jest": "^29.1.1", "typescript": "^5.2.2" }, @@ -2104,9 +2105,9 @@ } }, "node_modules/@next/env": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/env/-/env-13.4.19.tgz", - "integrity": "sha512-FsAT5x0jF2kkhNkKkukhsyYOrRqtSxrEhfliniIq0bwWbuXLgyt3Gv0Ml+b91XwjwArmuP7NxCiGd++GGKdNMQ==" + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/env/-/env-13.5.6.tgz", + "integrity": "sha512-Yac/bV5sBGkkEXmAX5FWPS9Mmo2rthrOPRQQNfycJPkjUAUclomCPH7QFVCDQ4Mp2k2K1SSM6m0zrxYrOwtFQw==" }, "node_modules/@next/eslint-plugin-next": { "version": "13.5.6", @@ -2138,9 +2139,9 @@ } }, "node_modules/@next/swc-darwin-arm64": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.4.19.tgz", - "integrity": "sha512-vv1qrjXeGbuF2mOkhkdxMDtv9np7W4mcBtaDnHU+yJG+bBwa6rYsYSCI/9Xm5+TuF5SbZbrWO6G1NfTh1TMjvQ==", + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.5.6.tgz", + "integrity": "sha512-5nvXMzKtZfvcu4BhtV0KH1oGv4XEW+B+jOfmBdpFI3C7FrB/MfujRpWYSBBO64+qbW8pkZiSyQv9eiwnn5VIQA==", "cpu": [ "arm64" ], @@ -2153,9 +2154,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.4.19.tgz", - "integrity": "sha512-jyzO6wwYhx6F+7gD8ddZfuqO4TtpJdw3wyOduR4fxTUCm3aLw7YmHGYNjS0xRSYGAkLpBkH1E0RcelyId6lNsw==", + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.5.6.tgz", + "integrity": "sha512-6cgBfxg98oOCSr4BckWjLLgiVwlL3vlLj8hXg2b+nDgm4bC/qVXXLfpLB9FHdoDu4057hzywbxKvmYGmi7yUzA==", "cpu": [ "x64" ], @@ -2168,9 +2169,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.4.19.tgz", - "integrity": "sha512-vdlnIlaAEh6H+G6HrKZB9c2zJKnpPVKnA6LBwjwT2BTjxI7e0Hx30+FoWCgi50e+YO49p6oPOtesP9mXDRiiUg==", + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.5.6.tgz", + "integrity": "sha512-txagBbj1e1w47YQjcKgSU4rRVQ7uF29YpnlHV5xuVUsgCUf2FmyfJ3CPjZUvpIeXCJAoMCFAoGnbtX86BK7+sg==", "cpu": [ "arm64" ], @@ -2183,9 +2184,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.4.19.tgz", - "integrity": "sha512-aU0HkH2XPgxqrbNRBFb3si9Ahu/CpaR5RPmN2s9GiM9qJCiBBlZtRTiEca+DC+xRPyCThTtWYgxjWHgU7ZkyvA==", + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.5.6.tgz", + "integrity": "sha512-cGd+H8amifT86ZldVJtAKDxUqeFyLWW+v2NlBULnLAdWsiuuN8TuhVBt8ZNpCqcAuoruoSWynvMWixTFcroq+Q==", "cpu": [ "arm64" ], @@ -2198,9 +2199,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.4.19.tgz", - "integrity": "sha512-htwOEagMa/CXNykFFeAHHvMJeqZfNQEoQvHfsA4wgg5QqGNqD5soeCer4oGlCol6NGUxknrQO6VEustcv+Md+g==", + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.5.6.tgz", + "integrity": "sha512-Mc2b4xiIWKXIhBy2NBTwOxGD3nHLmq4keFk+d4/WL5fMsB8XdJRdtUlL87SqVCTSaf1BRuQQf1HvXZcy+rq3Nw==", "cpu": [ "x64" ], @@ -2213,9 +2214,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.4.19.tgz", - "integrity": "sha512-4Gj4vvtbK1JH8ApWTT214b3GwUh9EKKQjY41hH/t+u55Knxi/0wesMzwQRhppK6Ddalhu0TEttbiJ+wRcoEj5Q==", + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.5.6.tgz", + "integrity": "sha512-CFHvP9Qz98NruJiUnCe61O6GveKKHpJLloXbDSWRhqhkJdZD2zU5hG+gtVJR//tyW897izuHpM6Gtf6+sNgJPQ==", "cpu": [ "x64" ], @@ -2228,9 +2229,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.4.19.tgz", - "integrity": "sha512-bUfDevQK4NsIAHXs3/JNgnvEY+LRyneDN788W2NYiRIIzmILjba7LaQTfihuFawZDhRtkYCv3JDC3B4TwnmRJw==", + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.5.6.tgz", + "integrity": "sha512-aFv1ejfkbS7PUa1qVPwzDHjQWQtknzAZWGTKYIAaS4NMtBlk3VyA6AYn593pqNanlicewqyl2jUhQAaFV/qXsg==", "cpu": [ "arm64" ], @@ -2243,9 +2244,9 @@ } }, "node_modules/@next/swc-win32-ia32-msvc": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.4.19.tgz", - "integrity": "sha512-Y5kikILFAr81LYIFaw6j/NrOtmiM4Sf3GtOc0pn50ez2GCkr+oejYuKGcwAwq3jiTKuzF6OF4iT2INPoxRycEA==", + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.5.6.tgz", + "integrity": "sha512-XqqpHgEIlBHvzwG8sp/JXMFkLAfGLqkbVsyN+/Ih1mR8INb6YCc2x/Mbwi6hsAgUnqQztz8cvEbHJUbSl7RHDg==", "cpu": [ "ia32" ], @@ -2258,9 +2259,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.4.19.tgz", - "integrity": "sha512-YzA78jBDXMYiINdPdJJwGgPNT3YqBNNGhsthsDoWHL9p24tEJn9ViQf/ZqTbwSpX/RrkPupLfuuTH2sf73JBAw==", + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.5.6.tgz", + "integrity": "sha512-Cqfe1YmOS7k+5mGu92nl5ULkzpKuxJrP3+4AEuPmrpFZ3BHxTY3TnHmU1On3bFmFFs6FbTcdF58CCUProGpIGQ==", "cpu": [ "x64" ], @@ -3878,9 +3879,9 @@ } }, "node_modules/@swc/helpers": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.1.tgz", - "integrity": "sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.2.tgz", + "integrity": "sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==", "dependencies": { "tslib": "^2.4.0" } @@ -8217,9 +8218,9 @@ } }, "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", + "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", "dev": true, "engines": { "node": ">=10" @@ -12637,9 +12638,9 @@ } }, "node_modules/jiti": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.20.0.tgz", - "integrity": "sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==", + "version": "1.21.6", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", + "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", "bin": { "jiti": "bin/jiti.js" } @@ -14825,35 +14826,34 @@ "dev": true }, "node_modules/next": { - "version": "13.4.19", - "resolved": "https://registry.npmjs.org/next/-/next-13.4.19.tgz", - "integrity": "sha512-HuPSzzAbJ1T4BD8e0bs6B9C1kWQ6gv8ykZoRWs5AQoiIuqbGHHdQO7Ljuvg05Q0Z24E2ABozHe6FxDvI6HfyAw==", + "version": "13.5.6", + "resolved": "https://registry.npmjs.org/next/-/next-13.5.6.tgz", + "integrity": "sha512-Y2wTcTbO4WwEsVb4A8VSnOsG1I9ok+h74q0ZdxkwM3EODqrs4pasq7O0iUxbcS9VtWMicG7f3+HAj0r1+NtKSw==", "dependencies": { - "@next/env": "13.4.19", - "@swc/helpers": "0.5.1", + "@next/env": "13.5.6", + "@swc/helpers": "0.5.2", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001406", - "postcss": "8.4.14", + "postcss": "8.4.31", "styled-jsx": "5.1.1", - "watchpack": "2.4.0", - "zod": "3.21.4" + "watchpack": "2.4.0" }, "bin": { "next": "dist/bin/next" }, "engines": { - "node": ">=16.8.0" + "node": ">=16.14.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "13.4.19", - "@next/swc-darwin-x64": "13.4.19", - "@next/swc-linux-arm64-gnu": "13.4.19", - "@next/swc-linux-arm64-musl": "13.4.19", - "@next/swc-linux-x64-gnu": "13.4.19", - "@next/swc-linux-x64-musl": "13.4.19", - "@next/swc-win32-arm64-msvc": "13.4.19", - "@next/swc-win32-ia32-msvc": "13.4.19", - "@next/swc-win32-x64-msvc": "13.4.19" + "@next/swc-darwin-arm64": "13.5.6", + "@next/swc-darwin-x64": "13.5.6", + "@next/swc-linux-arm64-gnu": "13.5.6", + "@next/swc-linux-arm64-musl": "13.5.6", + "@next/swc-linux-x64-gnu": "13.5.6", + "@next/swc-linux-x64-musl": "13.5.6", + "@next/swc-win32-arm64-msvc": "13.5.6", + "@next/swc-win32-ia32-msvc": "13.5.6", + "@next/swc-win32-x64-msvc": "13.5.6" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", @@ -14899,37 +14899,6 @@ "react-dom": ">=16.0.0" } }, - "node_modules/next/node_modules/postcss": { - "version": "8.4.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", - "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - } - ], - "dependencies": { - "nanoid": "^3.3.4", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/next/node_modules/zod": { - "version": "3.21.4", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz", - "integrity": "sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, "node_modules/nextjs-google-analytics": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/nextjs-google-analytics/-/nextjs-google-analytics-2.3.3.tgz", @@ -18104,19 +18073,19 @@ } }, "node_modules/tailwindcss": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.3.tgz", - "integrity": "sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==", + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.10.tgz", + "integrity": "sha512-KWZkVPm7yJRhdu4SRSl9d4AK2wM3a50UsvgHZO7xY77NQr2V+fIrEuoDGQcbvswWvFGbS2f6e+jC/6WJm1Dl0w==", "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", "chokidar": "^3.5.3", "didyoumean": "^1.2.2", "dlv": "^1.1.3", - "fast-glob": "^3.2.12", + "fast-glob": "^3.3.0", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", - "jiti": "^1.18.2", + "jiti": "^1.21.0", "lilconfig": "^2.1.0", "micromatch": "^4.0.5", "normalize-path": "^3.0.0", diff --git a/package.json b/package.json index 28612a3..af39f27 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,7 @@ "js-base64": "^3.7.7", "js-sha256": "^0.11.0", "lucide-react": "^0.288.0", - "next": "^13.4.19", + "next": "^13.5.6", "nextjs-google-analytics": "^2.3.3", "nextra": "^2.13.2", "nextra-theme-docs": "^2.13.2", @@ -85,12 +85,13 @@ "eslint-config-next": "13.5.6", "eslint-config-prettier": "^9.0.0", "eslint-plugin-mdx": "^2.2.0", + "eslint-plugin-react-hooks": "^4.6.2", "jest": "^29.7.0", "postcss": "^8.4.31", "quicktype": "^23.0.76", "sharp-cli": "^4.2.0", "slugify": "^1.6.6", - "tailwindcss": "^3.3.3", + "tailwindcss": "^3.4.10", "ts-jest": "^29.1.1", "typescript": "^5.2.2" }, diff --git a/pages/blog/hello-world.mdx b/pages/blog/hello-world.mdx index 807da44..be3c7f6 100644 --- a/pages/blog/hello-world.mdx +++ b/pages/blog/hello-world.mdx @@ -5,7 +5,9 @@ date: 2023-11-02 timezone: America/Vancouver authors: - ben +reviewers: [] notify_subscribers: false +hidden: false --- import { BlogPostHeader, BlogPostFooter } from '@/components/blog-post' diff --git a/pages/docs/compute-cluster.mdx b/pages/docs/compute-cluster.mdx index 5e2a249..17a358d 100644 --- a/pages/docs/compute-cluster.mdx +++ b/pages/docs/compute-cluster.mdx @@ -11,7 +11,7 @@ and partnering institutions. ## Quick Links import { - CPUIcon, + CpuIcon, CheckSquareIcon, TerminalIcon, BookMarkedIcon, @@ -21,7 +21,7 @@ import { import { Card, Cards } from 'nextra/components' - } title="Machine List" href="/machines" /> + } title="Machine List" href="/machines" /> } title="Getting Access" href="./compute-cluster/getting-access" /> } title="Machine Usage Guide" href="./compute-cluster/machine-usage-guide" /> } title="SSH Guide" href="./compute-cluster/ssh" />