diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 0000000000..46094d7bf1 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1,4 @@ +# https://help.github.com/en/github/creating-cloning-and-archiving-repositories/about-code-owners + + +* @juliusmarminge @nexxeln @TheoBr diff --git a/.github/workflows/lighthouse.yml b/.github/workflows/lighthouse.yml new file mode 100644 index 0000000000..bb3623f09a --- /dev/null +++ b/.github/workflows/lighthouse.yml @@ -0,0 +1,92 @@ +name: Vercel Preview URL Lighthouse Audit + +on: + issue_comment: + types: [created, edited] + +jobs: + generate_lighthouse_audit: + timeout-minutes: 30 + runs-on: ubuntu-latest + steps: + - name: Get Vercel preview URL + id: get_preview_url + uses: actions/github-script@v3 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const comment = context.payload.comment; + const regex = /https:\/\/[a-z0-9-]+\.vercel\.app/g; + const matches = comment.body.match(regex); + let previewUrl = ""; + if (matches && matches.length) { + previewUrl = matches[0]; + console.log('Preview url found:', previewUrl); + } + console.log("No preview url found."); + core.setOutput('vercel_preview_url', previewUrl); + + - name: Add comment to PR + if: ${{ steps.get_preview_url.outputs.vercel_preview_url != '' }} + id: loading_comment_to_pr + uses: marocchino/sticky-pull-request-comment@v1 + with: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + number: ${{ github.event.issue.number }} + header: lighthouse + message: | + Running Lighthouse audit... + + - name: Checkout repository + if: ${{ steps.get_preview_url.outputs.vercel_preview_url != '' }} + uses: actions/checkout@v3 + + - name: Audit preview URL with Lighthouse + if: ${{ steps.get_preview_url.outputs.vercel_preview_url != '' }} + id: lighthouse_audit + uses: treosh/lighthouse-ci-action@v3 + with: + urls: | + ${{ steps.get_preview_url.outputs.vercel_preview_url }} + uploadArtifacts: true + temporaryPublicStorage: true + - name: Format lighthouse score + if: ${{ steps.get_preview_url.outputs.vercel_preview_url != '' }} + id: format_lighthouse_score + uses: actions/github-script@v3 + with: + github-token: ${{secrets.GITHUB_TOKEN}} + script: | + const result = ${{ steps.lighthouse_audit.outputs.manifest }}[0].summary + const links = ${{ steps.lighthouse_audit.outputs.links }} + + const formatResult = (res) => Math.round((res * 100)) + Object.keys(result).forEach(key => result[key] = formatResult(result[key])) + + const score = res => res >= 90 ? '๐ŸŸข' : res >= 50 ? '๐ŸŸ ' : '๐Ÿ”ด' + + const comment = [ + `โšก๏ธ [Lighthouse report](${Object.values(links)[0]}) for the changes in this PR:`, + '| Category | Score |', + '| --- | --- |', + `| ${score(result.performance)} Performance | ${result.performance} |`, + `| ${score(result.accessibility)} Accessibility | ${result.accessibility} |`, + `| ${score(result['best-practices'])} Best practices | ${result['best-practices']} |`, + `| ${score(result.seo)} SEO | ${result.seo} |`, + `| ${score(result.pwa)} PWA | ${result.pwa} |`, + ' ', + `*Lighthouse ran on [${Object.keys(links)[0]}](${Object.keys(links)[0]})*` + ].join('\n') + + core.setOutput("comment", comment); + + - name: Add comment to PR + if: ${{ steps.get_preview_url.outputs.vercel_preview_url != '' }} + id: comment_to_pr + uses: marocchino/sticky-pull-request-comment@v1 + with: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + number: ${{ github.event.issue.number }} + header: lighthouse + message: | + ${{ steps.format_lighthouse_score.outputs.comment }} diff --git a/.gitpod.yml b/.gitpod.yml new file mode 100644 index 0000000000..5bbc9b2f9e --- /dev/null +++ b/.gitpod.yml @@ -0,0 +1,6 @@ +tasks: + - init: pnpm install +vscode: + extensions: + - astro-build.astro-vscode + - bradlc.vscode-tailwindcss \ No newline at end of file diff --git a/.lintstagedrc b/.lintstagedrc index 3c83c1195e..7c22496eef 100644 --- a/.lintstagedrc +++ b/.lintstagedrc @@ -5,5 +5,8 @@ ], "*.{json,md,mdx}": [ "prettier --write" + ], + "www/**/*.astro": [ + "prettier --write" ] } diff --git a/.prettierrc b/.prettierrc index aa89c11489..981c0f132d 100644 --- a/.prettierrc +++ b/.prettierrc @@ -6,5 +6,8 @@ "jsxSingleQuote": false, "semi": true, "trailingComma": "all", - "tabWidth": 2 -} + "tabWidth": 2, + "plugins": [ + "prettier-plugin-astro" + ] +} \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a5b60bfb35..d93cf163b4 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -41,7 +41,7 @@ pnpm install ### Implement your changes -This project is a [Turborepo](https://turborepo.org/) monorepo. The code for the CLI is in the `cli` directory, and the docs is in the `www` directory. Now you're all setup and can start implementing your changes. +This project is a [Turborepo](https://turborepo.org/) monorepo. The code for the CLI is in the `cli` directory, and the docs is in the `www` directory. This project is a [Turborepo](https://turborepo.org/) monorepo. The code for the CLI is in the `cli` directory, and the docs is in the `www` directory. Now you're all setup and can start implementing your changes. Here are some useful scripts for when you are developing: @@ -57,7 +57,11 @@ Here are some useful scripts for when you are developing: | `pnpm lint:fix` | Lints the code and fixes any errors | | `pnpm check` | Checks your code for typeerrors, formatting and linting | -When making commits, make sure to follow the [convential commit](https://www.conventionalcommits.org/en/v1.0.0/) guidelines, i.e. prepending the message with `feat:`, `fix:`, `chore:`, `docs:`, etc... +When making commits, make sure to follow the [convential commit](https://www.conventionalcommits.org/en/v1.0.0/) guidelines, i.e. prepending the message with `feat:`, `fix:`, `chore:`, `docs:`, etc... You can use `git status` to double check which files have not yet been staged for commit: + +```bash +git add && git commit -m "feat/fix/chore/docs: commit message" +``` ### When you're done diff --git a/cli/CHANGELOG.md b/cli/CHANGELOG.md index fd2d57248c..0a89d7afd7 100644 --- a/cli/CHANGELOG.md +++ b/cli/CHANGELOG.md @@ -1,5 +1,27 @@ # Changelog +## 5.12.0 + +### Minor Changes + +- [#446](https://github.com/t3-oss/create-t3-app/pull/446) [`6f63ec6`](https://github.com/t3-oss/create-t3-app/commit/6f63ec65201a077e534ec89c4ef18bfa07a30331) Thanks [@c-ehrlich](https://github.com/c-ehrlich)! - feat: better cli text when scaffolding in '.' + +## 5.11.0 + +### Minor Changes + +- [#430](https://github.com/t3-oss/create-t3-app/pull/430) [`306777a`](https://github.com/t3-oss/create-t3-app/commit/306777a5513c365dfb3525c1484459236734a289) Thanks [@benmarg](https://github.com/benmarg)! - feat: direct developer to add schema from .env to schema.mjs for zod validation + +### Patch Changes + +- [#416](https://github.com/t3-oss/create-t3-app/pull/416) [`14b6d4a`](https://github.com/t3-oss/create-t3-app/commit/14b6d4a0764f57ece45749724c5b12a85544733e) Thanks [@xpressivecode](https://github.com/xpressivecode)! - fix(template): missing ctx when using ssr with trpc + +## 5.10.3 + +### Patch Changes + +- [#419](https://github.com/t3-oss/create-t3-app/pull/419) [`554de8f`](https://github.com/t3-oss/create-t3-app/commit/554de8f2838a8d539d81bcb520f121a7e14e3c84) Thanks [@sor4chi](https://github.com/sor4chi)! - Remove unnecessary singlequote in tailwind classname + ## 5.10.2 ### Patch Changes diff --git a/cli/package.json b/cli/package.json index 0e91d200bf..63c5baf10b 100644 --- a/cli/package.json +++ b/cli/package.json @@ -1,6 +1,6 @@ { "name": "create-t3-app", - "version": "5.10.2", + "version": "5.12.0", "description": "Create web application with the t3 stack", "license": "MIT", "repository": { diff --git a/cli/src/installers/index.ts b/cli/src/installers/index.ts index ba7246a608..33079dabcb 100644 --- a/cli/src/installers/index.ts +++ b/cli/src/installers/index.ts @@ -35,10 +35,14 @@ export const dependencyVersionMap = { postcss: "^8.4.14", // tRPC - "@trpc/client": "10.0.0-proxy-alpha.70", - "@trpc/server": "10.0.0-proxy-alpha.70", - "@trpc/react": "10.0.0-proxy-alpha.70", - "@trpc/next": "10.0.0-proxy-alpha.70", + "@trpc/client": "10.0.0-proxy-alpha.81", + "@trpc/server": "10.0.0-proxy-alpha.81", + "@trpc/react": "10.0.0-proxy-alpha.81", + "@trpc/next": "10.0.0-proxy-alpha.81", + // "@trpc/client": "10.0.0-beta.1", + // "@trpc/server": "10.0.0-beta.1", + // "@trpc/react": "10.0.0-beta.1", + // "@trpc/next": "10.0.0-beta.1", "@tanstack/react-query": "^4.2.3", superjson: "^1.9.1", } as const; diff --git a/cli/template/addons/env/auth-schema.mjs b/cli/template/addons/env/auth-schema.mjs index bd50f57ff8..846f8cd32c 100644 --- a/cli/template/addons/env/auth-schema.mjs +++ b/cli/template/addons/env/auth-schema.mjs @@ -6,6 +6,7 @@ import { z } from "zod"; * This way you can ensure the app isn't built with invalid env vars. */ export const serverSchema = z.object({ + NODE_ENV: z.enum(["development", "test", "production"]), NEXTAUTH_SECRET: z.string(), NEXTAUTH_URL: z.string().url(), DISCORD_CLIENT_ID: z.string(), diff --git a/cli/template/base/.env-example b/cli/template/base/.env-example index bc003984c4..b48d7cb4b5 100644 --- a/cli/template/base/.env-example +++ b/cli/template/base/.env-example @@ -1,4 +1,5 @@ # Note that not all variables here might be in use for your selected configuration +# When adding additional env variables, the schema in /env/schema.mjs should be updated accordingly # Prisma DATABASE_URL=file:./db.sqlite diff --git a/cli/template/base/README.md b/cli/template/base/README.md index dea45cbbe9..d4a33cce66 100644 --- a/cli/template/base/README.md +++ b/cli/template/base/README.md @@ -17,7 +17,14 @@ If you are not familiar with the different technologies used in this project, pl - [Next-Auth.js](https://next-auth.js.org) - [Prisma](https://prisma.io) - [TailwindCSS](https://tailwindcss.com) -- [tRPC](https://trpc.io) (using @next version? [see v10 docs here](https://alpha.trpc.io)) +- [tRPC](https://trpc.io) (using @next version? [see v10 docs here](https://trpc.io/docs/v10/)) + +Also checkout these awesome tutorials on `create-t3-app`. + +- [Build a Blog With the T3 Stack - tRPC, TypeScript, Next.js, Prisma & Zod](https://www.youtube.com/watch?v=syEWlxVFUrY) +- [Build a Live Chat Application with the T3 Stack - TypeScript, Tailwind, tRPC](https://www.youtube.com/watch?v=dXRRY37MPuk) +- [Build a full stack app with create-t3-app](https://www.nexxel.dev/blog/ct3a-guestbook) +- [A first look at create-t3-app](https://dev.to/ajcwebdev/a-first-look-at-create-t3-app-1i8f) Also checkout these awesome tutorials on `create-t3-app`. diff --git a/cli/template/base/src/env/schema.mjs b/cli/template/base/src/env/schema.mjs index 3fedded3d1..c621d13e39 100644 --- a/cli/template/base/src/env/schema.mjs +++ b/cli/template/base/src/env/schema.mjs @@ -6,7 +6,7 @@ import { z } from "zod"; * This way you can ensure the app isn't built with invalid env vars. */ export const serverSchema = z.object({ - // SERVERVAR: z.string(), + NODE_ENV: z.enum(["development", "test", "production"]), }); /** diff --git a/package.json b/package.json index ba14ef0e3f..d1e075d530 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ "eslint": "^8.22.0", "eslint-config-prettier": "^8.5.0", "eslint-config-turbo": "^0.0.3", - "eslint-plugin-astro": "^0.17.1", + "eslint-plugin-astro": "^0.19.0", "eslint-plugin-no-only-tests": "^2.6.0", "eslint-plugin-prettier": "^4.2.1", "eslint-plugin-react": "^7.31.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e9fa61e62d..62e33f9c89 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,7 +14,7 @@ importers: eslint: ^8.22.0 eslint-config-prettier: ^8.5.0 eslint-config-turbo: ^0.0.3 - eslint-plugin-astro: ^0.17.1 + eslint-plugin-astro: ^0.19.0 eslint-plugin-no-only-tests: ^2.6.0 eslint-plugin-prettier: ^4.2.1 eslint-plugin-react: ^7.31.0 @@ -38,7 +38,7 @@ importers: eslint: 8.23.0 eslint-config-prettier: 8.5.0_eslint@8.23.0 eslint-config-turbo: 0.0.3_eslint@8.23.0 - eslint-plugin-astro: 0.17.1_eslint@8.23.0 + eslint-plugin-astro: 0.19.0_eslint@8.23.0 eslint-plugin-no-only-tests: 2.6.0 eslint-plugin-prettier: 4.2.1_tgumt6uwl2md3n6uqnggd6wvce eslint-plugin-react: 7.31.1_eslint@8.23.0 @@ -88,10 +88,12 @@ importers: www: specifiers: '@algolia/client-search': ^4.13.1 - '@astrojs/react': ^1.1.0 - '@astrojs/tailwind': ^1.0.0 + '@astrojs/mdx': ^0.11.1 + '@astrojs/react': ^1.1.3 + '@astrojs/tailwind': ^2.0.1 '@docsearch/css': ^3.2.1 '@docsearch/react': ^3.2.1 + '@fontsource/inter': ^4.5.12 '@nanostores/react': ^0.3.0 '@types/node': ^18.7.13 '@types/react': ^18.0.0 @@ -100,6 +102,7 @@ importers: '@typescript-eslint/parser': ^5.35.1 astro: ^1.1.2 astro-seo: ^0.6.0 + clsx: ^1.2.1 eslint: ^8.22.0 eslint-plugin-astro: ^0.17.1 eslint-plugin-jsx-a11y: ^6.6.1 @@ -107,17 +110,23 @@ importers: react: 18.0.0 react-dom: 18.0.0 react-typist: ^2.0.5 + tailwind-scrollbar: ^2.0.1 + tailwindcss: ^3.1.8 typescript: ^4.8.2 dependencies: '@algolia/client-search': 4.14.2 '@docsearch/css': 3.2.1 '@docsearch/react': 3.2.1_yfbvrhpbhfpiewzab37lntawvq + '@fontsource/inter': 4.5.12 '@nanostores/react': 0.3.0_gwdviqdq472dtrt62dkrmuf3uu astro-seo: 0.6.0 + clsx: 1.2.1 nanostores: 0.6.0 + tailwind-scrollbar: 2.0.1_tailwindcss@3.1.8 devDependencies: - '@astrojs/react': 1.1.0_zpnidt7m3osuk7shl3s4oenomq - '@astrojs/tailwind': 1.0.0 + '@astrojs/mdx': 0.11.1 + '@astrojs/react': 1.1.3_zpnidt7m3osuk7shl3s4oenomq + '@astrojs/tailwind': 2.0.1_tailwindcss@3.1.8 '@types/node': 18.7.13 '@types/react': 18.0.17 '@types/react-dom': 18.0.6 @@ -130,6 +139,7 @@ importers: react: 18.0.0 react-dom: 18.0.0_react@18.0.0 react-typist: 2.0.5_zpnidt7m3osuk7shl3s4oenomq + tailwindcss: 3.1.8 typescript: 4.8.2 packages: @@ -303,6 +313,30 @@ packages: - supports-color dev: true + /@astrojs/mdx/0.11.1: + resolution: {integrity: sha512-L0uUBRlfRZvXhS5rc/VIrQlHldgj7cwrSb81K3cAB2LrzqZ3QgU+GRx/mdMN95Brqkv+8x77cNmsbAwXxijeNA==} + engines: {node: ^14.18.0 || >=16.12.0} + dependencies: + '@astrojs/prism': 1.0.1 + '@mdx-js/mdx': 2.1.3 + '@mdx-js/rollup': 2.1.3 + acorn: 8.8.0 + es-module-lexer: 0.10.5 + github-slugger: 1.4.0 + gray-matter: 4.0.3 + kleur: 4.1.5 + rehype-raw: 6.1.1 + remark-frontmatter: 4.0.1 + remark-gfm: 3.0.1 + remark-smartypants: 2.0.0 + shiki: 0.11.1 + unist-util-visit: 4.1.1 + vfile: 5.3.4 + transitivePeerDependencies: + - rollup + - supports-color + dev: true + /@astrojs/micromark-extension-mdx-jsx/1.0.3: resolution: {integrity: sha512-O15+i2DGG0qb1R/1SYbFXgOKDGbYdV8iJMtuboVb1S9YFQfMOJxaCMco0bhXQI7PmZcQ4pZWIjT5oZ64dXUtRA==} dependencies: @@ -324,8 +358,8 @@ packages: prismjs: 1.29.0 dev: true - /@astrojs/react/1.1.0_zpnidt7m3osuk7shl3s4oenomq: - resolution: {integrity: sha512-T9/mEE/9yO36X3QeqzQjGMFXRH0f3vcBC9Jhxb3oGm5NlKm2m9Sg9GR52fcCtLRVR3ihc8qAElgEmQAAUTZ3KQ==} + /@astrojs/react/1.1.3_zpnidt7m3osuk7shl3s4oenomq: + resolution: {integrity: sha512-awhAEPvJslewJ3Txeapw6LiZtU8RqZrDiequeNDmwQt6iz4Ltn3nJPROKxv4cKesAHEpAZhXWM1q2HhpxWFW0Q==} engines: {node: ^14.18.0 || >=16.12.0} peerDependencies: react: ^17.0.2 || ^18.0.0 @@ -339,15 +373,15 @@ packages: - supports-color dev: true - /@astrojs/tailwind/1.0.0: - resolution: {integrity: sha512-hEpvKBJKCStaxRZt3ENDacQlzUTOvW1D7dfIUyTf7jMUK4O+y8Q7gdTjERf1HBEi/YXrYNX1zhAElwp6lvW5oQ==} + /@astrojs/tailwind/2.0.1_tailwindcss@3.1.8: + resolution: {integrity: sha512-fvruoVEvx0zQsVY2AVRrhvH25zp6xTF8Wb1Lu43KXLoxU7fHIB1fcTTRP+Qhd4f5EvuTmuPKaKwHmbrv8mTV9A==} + peerDependencies: + tailwindcss: ^3.0.24 dependencies: '@proload/core': 0.3.2 autoprefixer: 10.4.8_postcss@8.4.16 postcss: 8.4.16 tailwindcss: 3.1.8 - transitivePeerDependencies: - - ts-node dev: true /@astrojs/telemetry/1.0.0: @@ -900,13 +934,13 @@ packages: '@commitlint/execute-rule': 17.0.0 '@commitlint/resolve-extends': 17.1.0 '@commitlint/types': 17.0.0 - '@types/node': 14.18.26 + '@types/node': 14.18.29 chalk: 4.1.2 cosmiconfig: 7.0.1 - cosmiconfig-typescript-loader: 4.0.0_sojisuq57pai4d4e47xjxa5i7a + cosmiconfig-typescript-loader: 4.1.0_qvmcqoy5rm6uypipzgmkk2b3be lodash: 4.17.21 resolve-from: 5.0.0 - ts-node: 10.9.1_ys5ibmf2vqsgufkwyky27zwkd4 + ts-node: 10.9.1_3ab4cwihvepxekn47i5lvspfzq typescript: 4.8.2 transitivePeerDependencies: - '@swc/core' @@ -1067,6 +1101,10 @@ packages: - supports-color dev: true + /@fontsource/inter/4.5.12: + resolution: {integrity: sha512-bGKk4/8tube/nCk8hav0ZDBVbzJzc7m0Vt4xF5p15IN4YImwGdtKG38Oq5bU8xHNS+VfvbFFCepgQNj7Pr/Lvg==} + dev: false + /@humanwhocodes/config-array/0.10.4: resolution: {integrity: sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==} engines: {node: '>=10.10.0'} @@ -1160,6 +1198,43 @@ packages: read-yaml-file: 1.1.0 dev: true + /@mdx-js/mdx/2.1.3: + resolution: {integrity: sha512-ahbb47HJIJ4xnifaL06tDJiSyLEy1EhFAStO7RZIm3GTa7yGW3NGhZaj+GUCveFgl5oI54pY4BgiLmYm97y+zg==} + dependencies: + '@types/estree-jsx': 1.0.0 + '@types/mdx': 2.0.2 + estree-util-build-jsx: 2.2.0 + estree-util-is-identifier-name: 2.0.1 + estree-util-to-js: 1.1.0 + estree-walker: 3.0.1 + hast-util-to-estree: 2.1.0 + markdown-extensions: 1.1.1 + periscopic: 3.0.4 + remark-mdx: 2.1.3 + remark-parse: 10.0.1 + remark-rehype: 10.1.0 + unified: 10.1.2 + unist-util-position-from-estree: 1.1.1 + unist-util-stringify-position: 3.0.2 + unist-util-visit: 4.1.1 + vfile: 5.3.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@mdx-js/rollup/2.1.3: + resolution: {integrity: sha512-KaX9GcZ63TDaLNH9UYYE94+naZQldV2IUzmMkDVOlPxDtTh8kcEn8l6/4W1P79wxZZbakSOFejTuaYmcstl5sA==} + peerDependencies: + rollup: '>=2' + dependencies: + '@mdx-js/mdx': 2.1.3 + '@rollup/pluginutils': 4.2.1 + source-map: 0.7.4 + vfile: 5.3.4 + transitivePeerDependencies: + - supports-color + dev: true + /@nanostores/react/0.3.0_gwdviqdq472dtrt62dkrmuf3uu: resolution: {integrity: sha512-gf2vRS2kGxLzLAF20BlUeFxMtBVEHaErk2XQ1YYnTAPtuesBD2nB1ndAOOinL2mSS2zxyQ4jtW3uljvbsGNuIQ==} engines: {node: ^14.0.0 || ^16.0.0 || >=18.0.0} @@ -1224,6 +1299,14 @@ packages: tsm: 2.2.2 dev: true + /@rollup/pluginutils/4.2.1: + resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} + engines: {node: '>= 8.0.0'} + dependencies: + estree-walker: 2.0.2 + picomatch: 2.3.1 + dev: true + /@tsconfig/node10/1.0.9: resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} dev: true @@ -1323,6 +1406,10 @@ packages: resolution: {integrity: sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==} dev: true + /@types/mdx/2.0.2: + resolution: {integrity: sha512-mJGfgj4aWpiKb8C0nnJJchs1sHBHn0HugkVfqqyQi7Wn6mBRksLeQsPOFvih/Pu8L1vlDzfe/LidhVHBeUk3aQ==} + dev: true + /@types/minimatch/5.1.0: resolution: {integrity: sha512-0RJHq5FqDWo17kdHe+SMDJLfxmLaqHbWnqZ6gNKzDvStUlrmx/eKIY17+ifLS1yybo7X86aUshQMlittDOVNnw==} dev: false @@ -1345,8 +1432,8 @@ packages: resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} dev: true - /@types/node/14.18.26: - resolution: {integrity: sha512-0b+utRBSYj8L7XAp0d+DX7lI4cSmowNaaTkk6/1SKzbKkG+doLuPusB9EOvzLJ8ahJSk03bTLIL6cWaEd4dBKA==} + /@types/node/14.18.29: + resolution: {integrity: sha512-LhF+9fbIX4iPzhsRLpK5H7iPdvW8L4IwGciXQIOEcuF62+9nw/VQVsOViAOOGxY3OlOKGLFv0sWwJXdwQeTn6A==} dev: true /@types/node/18.7.13: @@ -1569,12 +1656,10 @@ packages: acorn: 7.4.1 acorn-walk: 7.2.0 xtend: 4.0.2 - dev: true /acorn-walk/7.2.0: resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} engines: {node: '>=0.4.0'} - dev: true /acorn-walk/8.2.0: resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} @@ -1585,7 +1670,6 @@ packages: resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} engines: {node: '>=0.4.0'} hasBin: true - dev: true /acorn/8.8.0: resolution: {integrity: sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==} @@ -1699,7 +1783,6 @@ packages: dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 - dev: true /arg/4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} @@ -1707,7 +1790,6 @@ packages: /arg/5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - dev: true /argparse/1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} @@ -1791,6 +1873,11 @@ packages: engines: {node: '>=8'} dev: true + /astring/1.8.3: + resolution: {integrity: sha512-sRpyiNrx2dEYIMmUXprS8nlpRg2Drs8m9ElX9vVEXaCB4XEAJhKfs7IcX0IwShjuOAjLR6wzIrgoptz1n19i1A==} + hasBin: true + dev: true + /astro-eslint-parser/0.5.1: resolution: {integrity: sha512-es63TAA7vjgV8aI5pUOXqoxa9JHelqzFSk1qOVSCGkeoAMayrr7BdFt9waVWyXyIcOjTXJlQa1pM832bEaCS2Q==} engines: {node: ^14.18.0 || >=16.0.0} @@ -1805,6 +1892,20 @@ packages: - supports-color dev: true + /astro-eslint-parser/0.6.1: + resolution: {integrity: sha512-/VXNGeLDulCbBLOW13KHJ/DeRbo8RvreP8k1f2I4tN+/VHFggJcb6oGTkPkN7etzH1V8aKAwAh80yEVdc59/Pw==} + engines: {node: ^14.18.0 || >=16.0.0} + dependencies: + '@astrojs/compiler': 0.23.4 + '@typescript-eslint/types': 5.35.1 + astrojs-compiler-sync: 0.2.3_@astrojs+compiler@0.23.4 + debug: 4.3.4 + eslint-visitor-keys: 3.3.0 + espree: 9.4.0 + transitivePeerDependencies: + - supports-color + dev: true + /astro-seo/0.6.0: resolution: {integrity: sha512-nR+dJlAyQhX6s0oAmbBqPq3KCZax/zVAerFsclGiJQ2znOkS/7L+RGjziS4M9Q3OQxm3FMfqIKHp9Ns73Q81ww==} dev: false @@ -1878,6 +1979,16 @@ packages: - ts-node dev: true + /astrojs-compiler-sync/0.2.3_@astrojs+compiler@0.23.4: + resolution: {integrity: sha512-9zh85DrHieEylj7ir0MBmalyClw420oBhxn/NYGRx7xXoepofNuUR6RjY7V4l1kiolhvJ/uWKfZNZcHm7VsY6g==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + '@astrojs/compiler': '>=0.18.0' + dependencies: + '@astrojs/compiler': 0.23.4 + synckit: 0.8.4 + dev: true + /autoprefixer/10.4.8_postcss@8.4.16: resolution: {integrity: sha512-75Jr6Q/XpTqEf6D2ltS5uMewJIx5irCU1oBYJrWjFenq/m12WRRrz6g15L1EIoYvPLXTbEry7rDOwrcYNj77xw==} engines: {node: ^10 || ^12 || >=14} @@ -1923,7 +2034,6 @@ packages: /binary-extensions/2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} - dev: true /bl/5.0.0: resolution: {integrity: sha512-8vxFNZ0pflFfi0WXA3WQXlj6CaMEwsmh63I1CNp0q+wWv8sD0ARx1KovSQd0l2GkwrMIOyedq0EF1FxI+RCZLQ==} @@ -2016,7 +2126,6 @@ packages: /camelcase-css/2.0.1: resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} engines: {node: '>= 6'} - dev: true /camelcase-keys/6.2.2: resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} @@ -2097,7 +2206,6 @@ packages: readdirp: 3.6.0 optionalDependencies: fsevents: 2.3.2 - dev: true /ci-info/3.3.2: resolution: {integrity: sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==} @@ -2178,6 +2286,11 @@ packages: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} + /clsx/1.2.1: + resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==} + engines: {node: '>=6'} + dev: false + /color-convert/1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: @@ -2269,8 +2382,8 @@ packages: requiresBuild: true dev: true - /cosmiconfig-typescript-loader/4.0.0_sojisuq57pai4d4e47xjxa5i7a: - resolution: {integrity: sha512-cVpucSc2Tf+VPwCCR7SZzmQTQkPbkk4O01yXsYqXBIbjE1bhwqSyAgYQkRK1un4i0OPziTleqFhdkmOc4RQ/9g==} + /cosmiconfig-typescript-loader/4.1.0_qvmcqoy5rm6uypipzgmkk2b3be: + resolution: {integrity: sha512-HbWIuR5O+XO5Oj9SZ5bzgrD4nN+rfhrm2PMb0FVx+t+XIvC45n8F0oTNnztXtspWGw0i2IzHaUWFD5LzV1JB4A==} engines: {node: '>=12', npm: '>=6'} peerDependencies: '@types/node': '*' @@ -2278,9 +2391,9 @@ packages: ts-node: '>=10' typescript: '>=3' dependencies: - '@types/node': 14.18.26 + '@types/node': 14.18.29 cosmiconfig: 7.0.1 - ts-node: 10.9.1_ys5ibmf2vqsgufkwyky27zwkd4 + ts-node: 10.9.1_3ab4cwihvepxekn47i5lvspfzq typescript: 4.8.2 dev: true @@ -2320,7 +2433,6 @@ packages: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} hasBin: true - dev: true /csstype/3.1.0: resolution: {integrity: sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==} @@ -2425,7 +2537,6 @@ packages: /defined/1.0.0: resolution: {integrity: sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==} - dev: true /dequal/2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} @@ -2449,11 +2560,9 @@ packages: acorn-node: 1.8.2 defined: 1.0.0 minimist: 1.2.6 - dev: true /didyoumean/1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} - dev: true /diff/4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} @@ -2473,7 +2582,6 @@ packages: /dlv/1.1.3: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - dev: true /doctrine/2.1.0: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} @@ -3064,6 +3172,23 @@ packages: - supports-color dev: true + /eslint-plugin-astro/0.19.0_eslint@8.23.0: + resolution: {integrity: sha512-XOvTgFlSThgUQwDMjbj9gTu75Sig5IWpseN1hsGputC9tiZ857CrMLK3UimWCwIS6n3hTYYPWIkpcucEU/o0Uw==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '>=7.0.0' + dependencies: + '@typescript-eslint/types': 5.35.1 + astro-eslint-parser: 0.6.1 + eslint: 8.23.0 + eslint-utils: 3.0.0_eslint@8.23.0 + postcss: 8.4.16 + postcss-selector-parser: 6.0.10 + sourcemap-codec: 1.4.8 + transitivePeerDependencies: + - supports-color + dev: true + /eslint-plugin-jsx-a11y/6.6.1_eslint@8.23.0: resolution: {integrity: sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==} engines: {node: '>=4.0'} @@ -3294,10 +3419,32 @@ packages: engines: {node: '>=4.0'} dev: true + /estree-util-attach-comments/2.1.0: + resolution: {integrity: sha512-rJz6I4L0GaXYtHpoMScgDIwM0/Vwbu5shbMeER596rB2D1EWF6+Gj0e0UKzJPZrpoOc87+Q2kgVFHfjAymIqmw==} + dependencies: + '@types/estree': 1.0.0 + dev: true + + /estree-util-build-jsx/2.2.0: + resolution: {integrity: sha512-apsfRxF9uLrqosApvHVtYZjISPvTJ+lBiIydpC+9wE6cF6ssbhnjyQLqaIjgzGxvC2Hbmec1M7g91PoBayYoQQ==} + dependencies: + '@types/estree-jsx': 1.0.0 + estree-util-is-identifier-name: 2.0.1 + estree-walker: 3.0.1 + dev: true + /estree-util-is-identifier-name/2.0.1: resolution: {integrity: sha512-rxZj1GkQhY4x1j/CSnybK9cGuMFQYFPLq0iNyopqf14aOVLFtMv7Esika+ObJWPWiOHuMOAHz3YkWoLYYRnzWQ==} dev: true + /estree-util-to-js/1.1.0: + resolution: {integrity: sha512-490lbfCcpLk+ofK6HCgqDfYs4KAfq6QVvDw3+Bm1YoKRgiOjKiKYGAVQE1uwh7zVxBgWhqp4FDtp5SqunpUk1A==} + dependencies: + '@types/estree-jsx': 1.0.0 + astring: 1.8.3 + source-map: 0.7.4 + dev: true + /estree-util-visit/1.2.0: resolution: {integrity: sha512-wdsoqhWueuJKsh5hqLw3j8lwFqNStm92VcwtAOAny8g/KS/l5Y8RISjR4k5W6skCj3Nirag/WUCMS0Nfy3sgsg==} dependencies: @@ -3305,6 +3452,14 @@ packages: '@types/unist': 2.0.6 dev: true + /estree-walker/2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + dev: true + + /estree-walker/3.0.1: + resolution: {integrity: sha512-woY0RUD87WzMBUiZLx8NsYr23N5BKsOMZHhu2hoNRVh6NXGfoiT1KOL8G3UHlJAnEDGmfa5ubNA/AacfG+Kb0g==} + dev: true + /esutils/2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} @@ -3394,6 +3549,12 @@ packages: dependencies: reusify: 1.0.4 + /fault/2.0.1: + resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==} + dependencies: + format: 0.2.2 + dev: true + /fetch-blob/3.2.0: resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} engines: {node: ^12.20 || >= 14.13} @@ -3458,6 +3619,11 @@ packages: resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} dev: true + /format/0.2.2: + resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} + engines: {node: '>=0.4.x'} + dev: true + /formdata-polyfill/4.0.10: resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} engines: {node: '>=12.20.0'} @@ -3503,12 +3669,10 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] requiresBuild: true - dev: true optional: true /function-bind/1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - dev: true /function.prototype.name/1.1.5: resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} @@ -3590,7 +3754,6 @@ packages: engines: {node: '>=10.13.0'} dependencies: is-glob: 4.0.3 - dev: true /glob/7.1.6: resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} @@ -3738,7 +3901,6 @@ packages: engines: {node: '>= 0.4.0'} dependencies: function-bind: 1.1.1 - dev: true /hast-to-hyperscript/10.0.1: resolution: {integrity: sha512-dhIVGoKCQVewFi+vz3Vt567E4ejMppS1haBRL6TEmeLeJVB1i/FJIIg/e6s1Bwn0g5qtYojHEKvyGA+OZuyifw==} @@ -3794,6 +3956,28 @@ packages: zwitch: 2.0.2 dev: true + /hast-util-to-estree/2.1.0: + resolution: {integrity: sha512-Vwch1etMRmm89xGgz+voWXvVHba2iiMdGMKmaMfYt35rbVtFDq8JNwwAIvi8zHMkO6Gvqo9oTMwJTmzVRfXh4g==} + dependencies: + '@types/estree': 1.0.0 + '@types/estree-jsx': 1.0.0 + '@types/hast': 2.3.4 + '@types/unist': 2.0.6 + comma-separated-tokens: 2.0.2 + estree-util-attach-comments: 2.1.0 + estree-util-is-identifier-name: 2.0.1 + hast-util-whitespace: 2.0.0 + mdast-util-mdx-expression: 1.3.0 + mdast-util-mdxjs-esm: 1.3.0 + property-information: 6.1.1 + space-separated-tokens: 2.0.1 + style-to-object: 0.3.0 + unist-util-position: 4.0.3 + zwitch: 2.0.2 + transitivePeerDependencies: + - supports-color + dev: true + /hast-util-to-html/8.0.3: resolution: {integrity: sha512-/D/E5ymdPYhHpPkuTHOUkSatxr4w1ZKrZsG0Zv/3C2SRVT0JFJG53VS45AMrBtYk0wp5A7ksEhiC8QaOZM95+A==} dependencies: @@ -3981,7 +4165,6 @@ packages: engines: {node: '>=8'} dependencies: binary-extensions: 2.2.0 - dev: true /is-boolean-object/1.1.2: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} @@ -4019,7 +4202,6 @@ packages: resolution: {integrity: sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==} dependencies: has: 1.0.3 - dev: true /is-date-object/1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} @@ -4113,6 +4295,12 @@ packages: engines: {node: '>=12'} dev: true + /is-reference/3.0.0: + resolution: {integrity: sha512-Eo1W3wUoHWoCoVM4GVl/a+K0IgiqE5aIo4kJABFyMum1ZORlPkC+UC357sSQUL5w5QCE5kCC9upl75b7+7CY/Q==} + dependencies: + '@types/estree': 1.0.0 + dev: true + /is-regex/1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} @@ -4317,7 +4505,6 @@ packages: /lilconfig/2.0.6: resolution: {integrity: sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==} engines: {node: '>=10'} - dev: true /lines-and-columns/1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} @@ -4470,6 +4657,11 @@ packages: engines: {node: '>=8'} dev: true + /markdown-extensions/1.1.1: + resolution: {integrity: sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==} + engines: {node: '>=0.10.0'} + dev: true + /markdown-table/3.0.2: resolution: {integrity: sha512-y8j3a5/DkJCmS5x4dMCQL+OR0+2EAq3DOtio1COSHsmW2BGXnNCK3v12hJt1LrUz5iZH5g0LmuYOjDdI+czghA==} dev: true @@ -4509,6 +4701,12 @@ packages: - supports-color dev: true + /mdast-util-frontmatter/1.0.0: + resolution: {integrity: sha512-7itKvp0arEVNpCktOET/eLFAYaZ+0cNjVtFtIPxgQ5tV+3i+D4SDDTjTzPWl44LT59PC+xdx+glNTawBdF98Mw==} + dependencies: + micromark-extension-frontmatter: 1.0.0 + dev: true + /mdast-util-gfm-autolink-literal/1.0.2: resolution: {integrity: sha512-FzopkOd4xTTBeGXhXSBU0OCDDh5lUj2rd+HQqG92Ld+jL4lpUfgX2AT2OHAVP9aEeDKp7G92fuooSZcYJA3cRg==} dependencies: @@ -4589,6 +4787,43 @@ packages: vfile-message: 3.1.2 dev: true + /mdast-util-mdx-jsx/2.1.0: + resolution: {integrity: sha512-KzgzfWMhdteDkrY4mQtyvTU5bc/W4ppxhe9SzelO6QUUiwLAM+Et2Dnjjprik74a336kHdo0zKm7Tp+n6FFeRg==} + dependencies: + '@types/estree-jsx': 1.0.0 + '@types/hast': 2.3.4 + '@types/mdast': 3.0.10 + ccount: 2.0.1 + mdast-util-to-markdown: 1.3.0 + parse-entities: 4.0.0 + stringify-entities: 4.0.3 + unist-util-remove-position: 4.0.1 + unist-util-stringify-position: 3.0.2 + vfile-message: 3.1.2 + dev: true + + /mdast-util-mdx/2.0.0: + resolution: {integrity: sha512-M09lW0CcBT1VrJUaF/PYxemxxHa7SLDHdSn94Q9FhxjCQfuW7nMAWKWimTmA3OyDMSTH981NN1csW1X+HPSluw==} + dependencies: + mdast-util-mdx-expression: 1.3.0 + mdast-util-mdx-jsx: 2.1.0 + mdast-util-mdxjs-esm: 1.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /mdast-util-mdxjs-esm/1.3.0: + resolution: {integrity: sha512-7N5ihsOkAEGjFotIX9p/YPdl4TqUoMxL4ajNz7PbT89BqsdWJuBC9rvgt6wpbwTZqWWR0jKWqQbwsOWDBUZv4g==} + dependencies: + '@types/estree-jsx': 1.0.0 + '@types/hast': 2.3.4 + '@types/mdast': 3.0.10 + mdast-util-from-markdown: 1.2.0 + mdast-util-to-markdown: 1.3.0 + transitivePeerDependencies: + - supports-color + dev: true + /mdast-util-to-hast/12.2.1: resolution: {integrity: sha512-dyindR2P7qOqXO1hQirZeGtVbiX7xlNQbw7gGaAwN4A1dh4+X8xU/JyYmRoyB8Fu1uPXzp7mlL5QwW7k+knvgA==} dependencies: @@ -4688,6 +4923,14 @@ packages: uvu: 0.5.6 dev: true + /micromark-extension-frontmatter/1.0.0: + resolution: {integrity: sha512-EXjmRnupoX6yYuUJSQhrQ9ggK0iQtQlpi6xeJzVD5xscyAI+giqco5fdymayZhJMbIFecjnE2yz85S9NzIgQpg==} + dependencies: + fault: 2.0.1 + micromark-util-character: 1.1.0 + micromark-util-symbol: 1.0.1 + dev: true + /micromark-extension-gfm-autolink-literal/1.0.3: resolution: {integrity: sha512-i3dmvU0htawfWED8aHMMAzAVp/F0Z+0bPh3YrbTPPL1v4YAlCZpy5rBO5p0LPYiZo0zFVkoYh7vDU7yQSiCMjg==} dependencies: @@ -4773,12 +5016,52 @@ packages: uvu: 0.5.6 dev: true + /micromark-extension-mdx-jsx/1.0.3: + resolution: {integrity: sha512-VfA369RdqUISF0qGgv2FfV7gGjHDfn9+Qfiv5hEwpyr1xscRj/CiVRkU7rywGFCO7JwJ5L0e7CJz60lY52+qOA==} + dependencies: + '@types/acorn': 4.0.6 + estree-util-is-identifier-name: 2.0.1 + micromark-factory-mdx-expression: 1.0.6 + micromark-factory-space: 1.0.0 + micromark-util-character: 1.1.0 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + uvu: 0.5.6 + vfile-message: 3.1.2 + dev: true + /micromark-extension-mdx-md/1.0.0: resolution: {integrity: sha512-xaRAMoSkKdqZXDAoSgp20Azm0aRQKGOl0RrS81yGu8Hr/JhMsBmfs4wR7m9kgVUIO36cMUQjNyiyDKPrsv8gOw==} dependencies: micromark-util-types: 1.0.2 dev: true + /micromark-extension-mdxjs-esm/1.0.3: + resolution: {integrity: sha512-2N13ol4KMoxb85rdDwTAC6uzs8lMX0zeqpcyx7FhS7PxXomOnLactu8WI8iBNXW8AVyea3KIJd/1CKnUmwrK9A==} + dependencies: + micromark-core-commonmark: 1.0.6 + micromark-util-character: 1.1.0 + micromark-util-events-to-acorn: 1.2.0 + micromark-util-symbol: 1.0.1 + micromark-util-types: 1.0.2 + unist-util-position-from-estree: 1.1.1 + uvu: 0.5.6 + vfile-message: 3.1.2 + dev: true + + /micromark-extension-mdxjs/1.0.0: + resolution: {integrity: sha512-TZZRZgeHvtgm+IhtgC2+uDMR7h8eTKF0QUX9YsgoL9+bADBpBY6SiLvWqnBlLbCEevITmTqmEuY3FoxMKVs1rQ==} + dependencies: + acorn: 8.8.0 + acorn-jsx: 5.3.2_acorn@8.8.0 + micromark-extension-mdx-expression: 1.0.3 + micromark-extension-mdx-jsx: 1.0.3 + micromark-extension-mdx-md: 1.0.0 + micromark-extension-mdxjs-esm: 1.0.3 + micromark-util-combine-extensions: 1.0.0 + micromark-util-types: 1.0.2 + dev: true + /micromark-factory-destination/1.0.0: resolution: {integrity: sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==} dependencies: @@ -5002,7 +5285,6 @@ packages: /minimist/1.2.6: resolution: {integrity: sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==} - dev: true /mixme/0.5.4: resolution: {integrity: sha512-3KYa4m4Vlqx98GPdOHghxSdNtTvcP8E0kkaJ5Dlh+h2DRzF7zpuVVcA8B0QpKd11YJeP9QQ7ASkKzOeu195Wzw==} @@ -5039,7 +5321,6 @@ packages: resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - dev: true /nanostores/0.6.0: resolution: {integrity: sha512-CQpKE8wtaJAr66hbg32t0MOAeybzLywU6UsLAX18kyQL/bME+xwhjWpmrvJRBp5kueFy6hs2oHlt3HFpNP+JaA==} @@ -5112,7 +5393,6 @@ packages: /normalize-path/3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - dev: true /normalize-range/0.1.2: resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} @@ -5141,7 +5421,6 @@ packages: /object-hash/3.0.0: resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} engines: {node: '>= 6'} - dev: true /object-inspect/1.12.2: resolution: {integrity: sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==} @@ -5391,7 +5670,6 @@ packages: /path-parse/1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: true /path-to-regexp/6.2.1: resolution: {integrity: sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==} @@ -5401,9 +5679,15 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} + /periscopic/3.0.4: + resolution: {integrity: sha512-SFx68DxCv0Iyo6APZuw/AKewkkThGwssmU0QWtTlvov3VAtPX+QJ4CadwSaz8nrT5jPIuxdvJWB4PnD2KNDxQg==} + dependencies: + estree-walker: 3.0.1 + is-reference: 3.0.0 + dev: true + /picocolors/1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - dev: true /picomatch/2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} @@ -5418,7 +5702,6 @@ packages: /pify/2.3.0: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} - dev: true /pify/4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} @@ -5452,7 +5735,6 @@ packages: postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.1 - dev: true /postcss-js/4.0.0_postcss@8.4.16: resolution: {integrity: sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==} @@ -5462,7 +5744,6 @@ packages: dependencies: camelcase-css: 2.0.1 postcss: 8.4.16 - dev: true /postcss-load-config/3.1.4: resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} @@ -5495,7 +5776,6 @@ packages: lilconfig: 2.0.6 postcss: 8.4.16 yaml: 1.10.2 - dev: true /postcss-nested/5.0.6_postcss@8.4.16: resolution: {integrity: sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==} @@ -5505,7 +5785,6 @@ packages: dependencies: postcss: 8.4.16 postcss-selector-parser: 6.0.10 - dev: true /postcss-selector-parser/6.0.10: resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} @@ -5513,11 +5792,9 @@ packages: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 - dev: true /postcss-value-parser/4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - dev: true /postcss/8.4.16: resolution: {integrity: sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==} @@ -5526,7 +5803,6 @@ packages: nanoid: 3.3.4 picocolors: 1.0.0 source-map-js: 1.0.2 - dev: true /preferred-pm/3.0.3: resolution: {integrity: sha512-+wZgbxNES/KlJs9q40F/1sfOd/j7f1O9JaHcW5Dsn3aUUOZg3L2bjpVUcKV2jvtElYfoTuQiNeMfQJ4kwUAhCQ==} @@ -5622,7 +5898,6 @@ packages: /quick-lru/5.1.1: resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} engines: {node: '>=10'} - dev: true /react-dom/18.0.0_react@18.0.0: resolution: {integrity: sha512-XqX7uzmFo0pUceWFCt7Gff6IyIMzFUn7QMZrbrQfGxtaxXZIcGQzoNpRLE3fQLnS4XzLLPMZX2T9TRcSrasicw==} @@ -5658,7 +5933,6 @@ packages: resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} dependencies: pify: 2.3.0 - dev: true /read-pkg-up/7.0.1: resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} @@ -5702,7 +5976,6 @@ packages: engines: {node: '>=8.10.0'} dependencies: picomatch: 2.3.1 - dev: true /recast/0.20.5: resolution: {integrity: sha512-E5qICoPoNL4yU0H0NoBDntNB0Q5oMSNh9usFctYniLBluTthi3RsQVBXIJNbApOlvSwW/RGxIuokPcAc59J5fQ==} @@ -5779,6 +6052,15 @@ packages: unified: 10.1.2 dev: true + /remark-frontmatter/4.0.1: + resolution: {integrity: sha512-38fJrB0KnmD3E33a5jZC/5+gGAC2WKNiPw1/fdXJvijBlhA7RCsvJklrYJakS0HedninvaCYW8lQGf9C918GfA==} + dependencies: + '@types/mdast': 3.0.10 + mdast-util-frontmatter: 1.0.0 + micromark-extension-frontmatter: 1.0.0 + unified: 10.1.2 + dev: true + /remark-gfm/3.0.1: resolution: {integrity: sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==} dependencies: @@ -5790,6 +6072,15 @@ packages: - supports-color dev: true + /remark-mdx/2.1.3: + resolution: {integrity: sha512-3SmtXOy9+jIaVctL8Cs3VAQInjRLGOwNXfrBB9KCT+EpJpKD3PQiy0x8hUNGyjQmdyOs40BqgPU7kYtH9uoR6w==} + dependencies: + mdast-util-mdx: 2.0.0 + micromark-extension-mdxjs: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: true + /remark-parse/10.0.1: resolution: {integrity: sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw==} dependencies: @@ -5856,7 +6147,6 @@ packages: is-core-module: 2.10.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - dev: true /resolve/2.0.0-next.4: resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==} @@ -6154,7 +6444,6 @@ packages: /source-map-js/1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} - dev: true /source-map/0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} @@ -6386,7 +6675,6 @@ packages: /supports-preserve-symlinks-flag/1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - dev: true /synckit/0.7.3: resolution: {integrity: sha512-jNroMv7Juy+mJ/CHW5H6TzsLWpa1qck6sCHbkv8YTur+irSq2PjbvmGnm2gy14BUQ6jF33vyR4DPssHqmqsDQw==} @@ -6404,6 +6692,15 @@ packages: tslib: 2.4.0 dev: true + /tailwind-scrollbar/2.0.1_tailwindcss@3.1.8: + resolution: {integrity: sha512-OcR7qHBbux4k+k6bWqnEQFYFooLK/F4dhkBz6nvswIoaA9ancZ5h20e0tyV7ifSWLDCUBtpG+1NHRA8HMRH/wg==} + engines: {node: '>=12.13.0'} + peerDependencies: + tailwindcss: 3.x + dependencies: + tailwindcss: 3.1.8 + dev: false + /tailwindcss/3.1.8: resolution: {integrity: sha512-YSneUCZSFDYMwk+TGq8qYFdCA3yfBRdBlS7txSq0LUmzyeqRe3a8fBQzbz9M3WS/iFT4BNf/nmw9mEzrnSaC0g==} engines: {node: '>=12.13.0'} @@ -6433,7 +6730,6 @@ packages: resolve: 1.22.1 transitivePeerDependencies: - ts-node - dev: true /term-size/2.2.1: resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} @@ -6543,7 +6839,7 @@ packages: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} dev: true - /ts-node/10.9.1_hwinnrf7y5nyyzygpj45jmvjia: + /ts-node/10.9.1_3ab4cwihvepxekn47i5lvspfzq: resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -6562,7 +6858,7 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.3 - '@types/node': 18.7.13 + '@types/node': 14.18.29 acorn: 8.8.0 acorn-walk: 8.2.0 arg: 4.1.3 @@ -6574,7 +6870,7 @@ packages: yn: 3.1.1 dev: true - /ts-node/10.9.1_ys5ibmf2vqsgufkwyky27zwkd4: + /ts-node/10.9.1_hwinnrf7y5nyyzygpj45jmvjia: resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -6593,7 +6889,7 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.3 - '@types/node': 14.18.26 + '@types/node': 18.7.13 acorn: 8.8.0 acorn-walk: 8.2.0 arg: 4.1.3 @@ -7275,7 +7571,6 @@ packages: /xtend/4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} - dev: true /y18n/4.0.3: resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} @@ -7297,7 +7592,6 @@ packages: /yaml/1.10.2: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} - dev: true /yaml/2.1.1: resolution: {integrity: sha512-o96x3OPo8GjWeSLF+wOAbrPfhFOGY0W00GNaxCDv+9hkcDJEnev1yh8S7pgHF0ik6zc8sQLuL8hjHjJULZp8bw==} diff --git a/www/astro.config.mjs b/www/astro.config.mjs index 132964479c..9c615275dc 100644 --- a/www/astro.config.mjs +++ b/www/astro.config.mjs @@ -1,12 +1,18 @@ import { defineConfig } from "astro/config"; - import react from "@astrojs/react"; import tailwind from "@astrojs/tailwind"; +import mdx from "@astrojs/mdx"; /** * @link https://astro.build/config */ export default defineConfig({ site: `https://create.t3.gg`, - integrations: [react(), tailwind()], + markdown: { + shikiConfig: { + theme: "poimandres", + wrap: true, + }, + }, + integrations: [react(), tailwind(), mdx()], }); diff --git a/www/package.json b/www/package.json index 52045ae198..baca372c71 100644 --- a/www/package.json +++ b/www/package.json @@ -15,13 +15,17 @@ "@algolia/client-search": "^4.13.1", "@docsearch/css": "^3.2.1", "@docsearch/react": "^3.2.1", + "@fontsource/inter": "^4.5.12", "@nanostores/react": "^0.3.0", "astro-seo": "^0.6.0", - "nanostores": "^0.6.0" + "clsx": "^1.2.1", + "nanostores": "^0.6.0", + "tailwind-scrollbar": "^2.0.1" }, "devDependencies": { - "@astrojs/react": "^1.1.0", - "@astrojs/tailwind": "^1.0.0", + "@astrojs/mdx": "^0.11.1", + "@astrojs/react": "^1.1.3", + "@astrojs/tailwind": "^2.0.1", "@types/node": "^18.7.13", "@types/react": "^18.0.0", "@types/react-dom": "^18.0.0", @@ -34,6 +38,7 @@ "react": "18.0.0", "react-dom": "18.0.0", "react-typist": "^2.0.5", + "tailwindcss": "^3.1.8", "typescript": "^4.8.2" } } diff --git a/www/public/images/nextjs_thumbnail.jpg b/www/public/images/nextjs_thumbnail.jpg new file mode 100644 index 0000000000..d9815615a1 Binary files /dev/null and b/www/public/images/nextjs_thumbnail.jpg differ diff --git a/www/public/images/powered-by-vercel.svg b/www/public/images/powered-by-vercel.svg new file mode 100644 index 0000000000..5bcc48ae48 --- /dev/null +++ b/www/public/images/powered-by-vercel.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/www/public/images/ts_thumbnail.jpeg b/www/public/images/ts_thumbnail.jpeg new file mode 100644 index 0000000000..482f6a241a Binary files /dev/null and b/www/public/images/ts_thumbnail.jpeg differ diff --git a/www/src/components/docs/avatarList.astro b/www/src/components/docs/avatarList.astro new file mode 100644 index 0000000000..56714b00fb --- /dev/null +++ b/www/src/components/docs/avatarList.astro @@ -0,0 +1,110 @@ +--- +// fetch all commits for just this page's path +export interface Props { + path: string; +} +const { path } = Astro.props; +const resolvedPath = `www/${path}`; +const url = `https://api.github.com/repos/t3-oss/create-t3-app/commits?path=${resolvedPath}`; +const commitsURL = `https://github.com/t3-oss/create-t3-app/commits/main/${resolvedPath}`; + +type Commit = { + author: { + id: string; + login: string; + }; +}; + +async function getCommits(url: string) { + try { + const token = import.meta.env.PUBLIC_GITHUB_TOKEN; + if (!token) { + throw new Error( + 'Cannot find "PUBLIC_GITHUB_TOKEN" used for escaping rate-limiting.', + ); + } + + const auth = `Basic ${Buffer.from(token, "binary").toString("base64")}`; + + const res = await fetch(url, { + method: "GET", + headers: { + Authorization: auth, + "User-Agent": "@ct3a-www/1.0", + }, + }); + + const data = await res.json(); + + if (!res.ok) { + throw new Error( + `Request to fetch commits failed. Reason: ${res.statusText} + Message: ${data.message}`, + ); + } + + return data as Commit[]; + } catch (e) { + console.warn(`[error] /src/components/AvatarList.astro + ${(e as any)?.message ?? e}`); + return [] as Commit[]; + } +} + +function removeDups(arr: Commit[]) { + const map = new Map(); + + for (let item of arr) { + const author = item.author; + // Deduplicate based on author.id + map.set(author.id, { login: author.login, id: author.id }); + } + + return [...map.values()]; +} + +const data = await getCommits(url); +const unique = removeDups(data); +const recentContributors = unique.slice(0, 3); // only show avatars for the 3 most recent contributors +const additionalContributors = unique.length - recentContributors.length; // list the rest of them as # of extra contributors +--- + +
+ Recent Contributors To This Page +
    + { + recentContributors.map((item) => ( +
  • + + {`Contributor + +
  • + )) + } +
+ { + additionalContributors > 0 && ( + + {`and ${additionalContributors} additional contributor${ + additionalContributors > 1 ? "s" : "" + }.`} + + ) + } + { + unique.length === 0 && ( + + Contributors + + ) + } +
diff --git a/www/src/components/docs/pageContent.astro b/www/src/components/docs/pageContent.astro new file mode 100644 index 0000000000..2232c31b5c --- /dev/null +++ b/www/src/components/docs/pageContent.astro @@ -0,0 +1,103 @@ +--- +import type { Frontmatter } from "../../config"; +import TableOfContents from "../navigation/TableOfContents"; +import type { MarkdownHeading } from "astro"; + +export interface Props { + frontmatter: Frontmatter; + headings: MarkdownHeading[]; +} + +const { frontmatter, headings } = Astro.props; +const title = frontmatter.title; +--- + +
+
+

+ {title} +

+ +
+ +
+
+
+ + diff --git a/www/src/components/footer/footer.astro b/www/src/components/footer/footer.astro index 02944d2674..e2ce9ad1e0 100644 --- a/www/src/components/footer/footer.astro +++ b/www/src/components/footer/footer.astro @@ -1,5 +1,6 @@ --- -import AvatarList from "../blog/avatarList.astro"; +import clsx from "clsx"; +import AvatarList from "../docs/avatarList.astro"; export interface Props { path: string; isBlog: boolean; @@ -8,63 +9,30 @@ const { path, isBlog } = Astro.props; --- diff --git a/www/src/components/headCommon.astro b/www/src/components/headCommon.astro index 0cc77f525b..34b820ff88 100644 --- a/www/src/components/headCommon.astro +++ b/www/src/components/headCommon.astro @@ -1,8 +1,3 @@ ---- -import "../styles/theme.css"; -import "../styles/index.css"; ---- - @@ -10,39 +5,34 @@ import "../styles/index.css"; - - - - - - - + - - - diff --git a/www/src/components/headSeo.astro b/www/src/components/headSeo.astro index 23b2562c71..0fa5d03780 100644 --- a/www/src/components/headSeo.astro +++ b/www/src/components/headSeo.astro @@ -20,27 +20,17 @@ const imageAlt = frontmatter.image?.alt ?? OPEN_GRAPH.image.alt; - + - + - + diff --git a/www/src/components/landingPage/about.astro b/www/src/components/landingPage/about.astro index 0d626f9f9c..3f8167bfa3 100644 --- a/www/src/components/landingPage/about.astro +++ b/www/src/components/landingPage/about.astro @@ -2,16 +2,14 @@ import CliPreview from "./cli"; --- -
-
-

+
+
+

What is this? Some kinda template?

-
-
-
-
-

- What is this? Some kinda template? -

- - Kind of. We love all of the technologies that create-t3-app includes - - check out init.tips - for even more info on topics such as state management and deployment - - but we do not believe these are needed on every project. - - - So we made create-t3-app to do one thing: Simplify complex boilerplate - around the core T3 Stack tech without compromising the pieces - modularity. This is NOT an all-inclusive template and we expect you to - bring your own libraries as well. - -
-
-
- -
+
+
diff --git a/www/src/components/landingPage/banner.astro b/www/src/components/landingPage/banner.astro index acf56829f8..40e41d0d1a 100644 --- a/www/src/components/landingPage/banner.astro +++ b/www/src/components/landingPage/banner.astro @@ -1,6 +1,3 @@ ---- ---- -
@@ -19,16 +16,15 @@

- The best way to setup an + + The best way to setup an
+ opinionated, full-stack, typesafe Next.js project
@@ -42,20 +38,24 @@ > Documentation @@ -63,16 +63,16 @@ href="https://github.com/t3-oss/create-t3-app" target="_blank" rel="noopener noreferrer" - class="inline-flex items-center text-white rounded-full p-1 pr-2 sm:text-base lg:text-sm xl:text-base cursor-pointer bg-white/10 hover:bg-white/20" + class="inline-flex items-center rounded-full p-1 pr-2 sm:text-base lg:text-sm xl:text-base cursor-pointer bg-white/10 hover:bg-white/20 hover:no-underline" > Github

- npx create-t3-app@latest - - -
- - - - Copied - -
+ npx create-t3-app@latest + + + +
@@ -124,21 +128,42 @@
+ + diff --git a/www/src/components/landingPage/cli.tsx b/www/src/components/landingPage/cli.tsx index 693d939c84..1a1bebaddc 100644 --- a/www/src/components/landingPage/cli.tsx +++ b/www/src/components/landingPage/cli.tsx @@ -3,10 +3,10 @@ import Typist from "react-typist"; export default function CodeCard() { return ( -
+
diff --git a/www/src/components/landingPage/community/communityCard.astro b/www/src/components/landingPage/community/communityCard.astro index 4f028d7b84..6bbc26b02d 100644 --- a/www/src/components/landingPage/community/communityCard.astro +++ b/www/src/components/landingPage/community/communityCard.astro @@ -12,7 +12,7 @@ const { text, title, href } = Astro.props; href={href} target="_blank" rel="noopener noreferrer" - class="py-8 flex flex-col items-center justify-center rounded-lg p-3 space-y-3 h-60 hover:bg-white/20 bg-white/10 transition-colors cursor-pointer w-full" + class="py-8 flex flex-col items-center justify-center rounded-lg p-3 space-y-3 h-60 hover:bg-white/20 bg-white/10 transition-colors cursor-pointer w-full hover:no-underline" >

{title}

diff --git a/www/src/components/landingPage/stack/card.astro b/www/src/components/landingPage/stack/card.astro index 584bf88b53..d35e36caf0 100644 --- a/www/src/components/landingPage/stack/card.astro +++ b/www/src/components/landingPage/stack/card.astro @@ -8,7 +8,11 @@ const { title, href } = Astro.props; ---
-
diff --git a/www/src/components/landingPage/stack/stack.astro b/www/src/components/landingPage/stack/stack.astro index ce3e3e617d..f1997efe37 100644 --- a/www/src/components/landingPage/stack/stack.astro +++ b/www/src/components/landingPage/stack/stack.astro @@ -115,7 +115,14 @@ import NextAuthIcon from "./nextauth.png"; - + NextAuth.js When you need a flexible, secure, and scalable authentication solution, NextAuth.js is the go-to. It ties into your existing diff --git a/www/src/components/landingPage/tweets/tweet.astro b/www/src/components/landingPage/tweets/tweet.astro index d76bf5fc89..c4eee69dbc 100644 --- a/www/src/components/landingPage/tweets/tweet.astro +++ b/www/src/components/landingPage/tweets/tweet.astro @@ -28,7 +28,7 @@ const { @@ -88,13 +89,15 @@ const {

{text}

-
+ -
+ -
+
= ({ href, title, external = false }) => ( + + {title} + +); + export default function MobileMenu() { const $isMobileMenuOpen = useStore(MobileMenuState); return ( <>
-
- Docs - - - FAQ - - + + - Github - - - T3 Stack - + title="GitHub" + external + /> +
); diff --git a/www/src/components/navigation/MobileMenuButton.tsx b/www/src/components/navigation/MobileMenuButton.tsx index 0a6023c09d..7e1d60c096 100644 --- a/www/src/components/navigation/MobileMenuButton.tsx +++ b/www/src/components/navigation/MobileMenuButton.tsx @@ -9,7 +9,6 @@ export default function MobileMenuButton() { diff --git a/www/src/components/navigation/SidebarToggle.tsx b/www/src/components/navigation/SidebarToggle.tsx index e8784fc791..e1810f362a 100644 --- a/www/src/components/navigation/SidebarToggle.tsx +++ b/www/src/components/navigation/SidebarToggle.tsx @@ -1,42 +1,41 @@ /** @jsxImportSource react */ -import { useState, useEffect } from "react"; +import clsx from "clsx"; +import { useRef } from "react"; export default function SidebarToggle({ currentPage, }: { currentPage: string; }) { - const [sidebarShown, setSidebarShown] = useState(false); + const ref = useRef(null); + const isLanding = currentPage === "/"; - useEffect(() => { - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + const handleClick = () => { const body = document.querySelector("body")!; - if (sidebarShown) { - body.classList.add("mobile-sidebar-toggle"); - } else { + if (body.classList.contains("mobile-sidebar-toggle")) { + ref.current?.setAttribute("aria-pressed", "false"); body.classList.remove("mobile-sidebar-toggle"); + } else { + ref.current?.setAttribute("aria-pressed", "true"); + body.classList.add("mobile-sidebar-toggle"); } - }, [sidebarShown]); + }; return (