From 7251a4847b804c705c3c51230bb4824d127307c4 Mon Sep 17 00:00:00 2001 From: Eva Decker Date: Tue, 25 Jun 2024 22:33:22 -0400 Subject: [PATCH] chore: Upgrade Astro deps, improve accessibility CI tests (#471) --- .github/workflows/links.yml | 2 +- .vscode/extensions.json | 3 +- README.md | 16 +- package.json | 17 +- pnpm-lock.yaml | 365 ++++++------------- src/components/Notecard/NotecardComposer.tsx | 4 +- src/components/Webring.astro | 4 +- src/content/pages/colophon/index.md | 2 +- src/pages/guestbook.astro | 1 + src/styles/base.css | 10 + tests/accessibility.spec.ts | 33 ++ 11 files changed, 191 insertions(+), 266 deletions(-) create mode 100644 tests/accessibility.spec.ts diff --git a/.github/workflows/links.yml b/.github/workflows/links.yml index 77c0b70e..be4c1680 100644 --- a/.github/workflows/links.yml +++ b/.github/workflows/links.yml @@ -1,4 +1,4 @@ -name: Links +name: Valid Links on: repository_dispatch: diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 349a4069..b5bc8c76 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -4,7 +4,8 @@ "yzhang.markdown-all-in-one", "jsynowiec.vscode-insertdatestring", "esbenp.prettier-vscode", - "vunguyentuan.vscode-css-variables" + "vunguyentuan.vscode-css-variables", + "deque-systems.vscode-axe-linter" ], "unwantedRecommendations": [] } diff --git a/README.md b/README.md index bd72e0b6..bfc7ef8b 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@
-![Vercel](https://vercelbadge.vercel.app/api/evadecker/eva.town) [![Playwright](https://github.com/evadecker/eva.town/actions/workflows/playwright.yml/badge.svg)](https://github.com/evadecker/eva.town/actions/workflows/playwright.yml) [![HTML5 Validation](https://github.com/evadecker/eva.town/actions/workflows/w3c.yml/badge.svg)](https://github.com/evadecker/eva.town/actions/workflows/w3c.yml) [![Check Links](https://github.com/evadecker/eva.town/actions/workflows/links.yml/badge.svg)](https://github.com/evadecker/eva.town/actions/workflows/links.yml) ![GitHub](https://img.shields.io/github/license/evadecker/eva.town) [![RSS](https://img.shields.io/badge/RSS-gray?logo=rss&logoColor=white&labelColor=eb7817)](https://eva.town/rss.xml) +![Vercel](https://vercelbadge.vercel.app/api/evadecker/eva.town) ![GitHub](https://img.shields.io/github/license/evadecker/eva.town) [![RSS](https://img.shields.io/badge/RSS-gray?logo=rss&logoColor=white&labelColor=eb7817)](https://eva.town/rss.xml)
@@ -26,6 +26,20 @@ If it's the first time running the repo you may need to run `pnpm i` to install Other scripts in `package.json` can also be run with `pnpm`. +## Link Checking + +[![Check Links](https://github.com/evadecker/eva.town/actions/workflows/links.yml/badge.svg)](https://github.com/evadecker/eva.town/actions/workflows/links.yml) + +A weekly [GitHub workflow](https://github.com/evadecker/eva.town/actions/workflows/links.yml) scans the site for broken links and will open an issue if one is found. + +## Accessibility + +[![CI](https://github.com/evadecker/eva.town/actions/workflows/ci.yml/badge.svg)](https://github.com/evadecker/eva.town/actions/workflows/ci.yml) + +Every pull request is tested for automatically-detectable accessibility issues and HTML5 compliance. + +This site aims to conform to the Level AA accessibility standards outlined in the [WCAG 2.2 specification](https://www.w3.org/TR/WCAG22/). If you experience an issue with accessing any part of this site, please [file an issue](https://github.com/evadecker/eva.town/issues) and I’ll do my best to correct it. + ## Notes To Self Some shortcuts and workflows to remember. diff --git a/package.json b/package.json index ce27615e..4c4ad953 100644 --- a/package.json +++ b/package.json @@ -22,18 +22,18 @@ }, "dependencies": { "@astrojs/check": "^0.7.0", - "@astrojs/db": "^0.11.4", - "@astrojs/markdown-remark": "^5.1.0", - "@astrojs/mdx": "^3.0.0", - "@astrojs/react": "^3.5.0", - "@astrojs/rss": "^4.0.6", - "@astrojs/sitemap": "^3.1.5", - "@astrojs/vercel": "^7.7.0", + "@astrojs/db": "^0.11.6", + "@astrojs/markdown-remark": "^5.1.1", + "@astrojs/mdx": "^3.1.2", + "@astrojs/react": "^3.6.0", + "@astrojs/rss": "^4.0.7", + "@astrojs/sitemap": "^3.1.6", + "@astrojs/vercel": "^7.7.2", "@nanostores/react": "^0.7.2", "@react-spring/web": "^9.7.3", "@types/react": "^18.3.3", "@types/react-dom": "^18.2.19", - "astro": "^4.10.2", + "astro": "^4.11.1", "astro-expressive-code": "^0.35.3", "astro-font": "^0.0.81", "astro-loading-indicator": "^0.5.0", @@ -59,6 +59,7 @@ "simplex-noise": "^4.0.1" }, "devDependencies": { + "@axe-core/playwright": "^4.9.1", "@playwright/test": "^1.44.1", "@radix-ui/colors": "^3.0.0", "@types/howler": "^2.2.11", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 01cd598c..8aa117fe 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,26 +9,26 @@ dependencies: specifier: ^0.7.0 version: 0.7.0(prettier-plugin-astro@0.14.0)(prettier@3.3.1)(typescript@5.3.3) '@astrojs/db': - specifier: ^0.11.4 - version: 0.11.4(@types/react@18.3.3)(react@18.3.1) + specifier: ^0.11.6 + version: 0.11.6(@types/react@18.3.3)(react@18.3.1) '@astrojs/markdown-remark': - specifier: ^5.1.0 - version: 5.1.0 + specifier: ^5.1.1 + version: 5.1.1 '@astrojs/mdx': - specifier: ^3.0.0 - version: 3.0.0(astro@4.11.0) + specifier: ^3.1.2 + version: 3.1.2(astro@4.11.1) '@astrojs/react': - specifier: ^3.5.0 + specifier: ^3.6.0 version: 3.6.0(@types/react-dom@18.2.19)(@types/react@18.3.3)(react-dom@18.2.0)(react@18.3.1)(vite@5.3.1) '@astrojs/rss': - specifier: ^4.0.6 - version: 4.0.6 + specifier: ^4.0.7 + version: 4.0.7 '@astrojs/sitemap': - specifier: ^3.1.5 - version: 3.1.5 + specifier: ^3.1.6 + version: 3.1.6 '@astrojs/vercel': - specifier: ^7.7.0 - version: 7.7.1(astro@4.11.0)(react@18.3.1) + specifier: ^7.7.2 + version: 7.7.2(astro@4.11.1)(react@18.3.1) '@nanostores/react': specifier: ^0.7.2 version: 0.7.2(nanostores@0.9.5)(react@18.3.1) @@ -42,17 +42,17 @@ dependencies: specifier: ^18.2.19 version: 18.2.19 astro: - specifier: ^4.10.2 - version: 4.11.0(@types/node@18.19.17)(sass@1.77.4)(typescript@5.3.3) + specifier: ^4.11.1 + version: 4.11.1(@types/node@18.19.17)(sass@1.77.4)(typescript@5.3.3) astro-expressive-code: specifier: ^0.35.3 - version: 0.35.3(astro@4.11.0) + version: 0.35.3(astro@4.11.1) astro-font: specifier: ^0.0.81 version: 0.0.81 astro-loading-indicator: specifier: ^0.5.0 - version: 0.5.0(astro@4.11.0) + version: 0.5.0(astro@4.11.1) autoprefixer: specifier: ^10.4.19 version: 10.4.19(postcss@8.4.38) @@ -115,6 +115,9 @@ dependencies: version: 4.0.1 devDependencies: + '@axe-core/playwright': + specifier: ^4.9.1 + version: 4.9.1(playwright-core@1.44.1) '@playwright/test': specifier: ^1.44.1 version: 1.44.1 @@ -239,15 +242,19 @@ packages: resolution: {integrity: sha512-yrpD1WRGqsJwANaDIdtHo+YVjvIOFAjC83lu5qENIgrafwZcJgSXDuwVMXOgok4tFzpeKLsFQ6c3FoUdloLWBQ==} dev: false - /@astrojs/db@0.11.4(@types/react@18.3.3)(react@18.3.1): - resolution: {integrity: sha512-PuVej9DNu5ZzlRGS0NUl3iH/5BRo/eG3XRywXbHIQvA0sdI7UZSFisbpUQYJU9iKK9Bxow/FWrqfw2jwqXaC8Q==} + /@astrojs/compiler@2.8.1: + resolution: {integrity: sha512-NGfPAgU/9rvDEwsXu82RI1AxiivaxtEYBK9saW1f+2fTHUUqCJQ27HYtb2akG2QxCmFikgZ9zk26BEWgiHho1Q==} + dev: false + + /@astrojs/db@0.11.6(@types/react@18.3.3)(react@18.3.1): + resolution: {integrity: sha512-uDypExJu9szjieIKvoSpu57NCwQI0q9cW71jEuFND22T7TM+hnBshWnmYSb783Z8a5mdv5CF/krLlC7+jeAJ+Q==} dependencies: '@astrojs/studio': 0.1.0 - '@libsql/client': 0.6.0 + '@libsql/client': 0.6.2 async-listen: 3.0.1 ci-info: 4.0.0 deep-diff: 1.0.2 - drizzle-orm: 0.30.10(@libsql/client@0.6.0)(@types/react@18.3.3)(react@18.3.1) + drizzle-orm: 0.31.2(@libsql/client@0.6.2)(@types/react@18.3.3)(react@18.3.1) github-slugger: 2.0.0 kleur: 4.1.5 nanoid: 5.0.7 @@ -265,6 +272,7 @@ packages: - '@op-engineering/op-sqlite' - '@opentelemetry/api' - '@planetscale/database' + - '@tidbcloud/serverless' - '@types/better-sqlite3' - '@types/pg' - '@types/react' @@ -286,8 +294,8 @@ packages: - utf-8-validate dev: false - /@astrojs/internal-helpers@0.4.0: - resolution: {integrity: sha512-6B13lz5n6BrbTqCTwhXjJXuR1sqiX/H6rTxzlXx+lN1NnV4jgnq/KJldCQaUWJzPL5SiWahQyinxAbxQtwgPHA==} + /@astrojs/internal-helpers@0.4.1: + resolution: {integrity: sha512-bMf9jFihO8YP940uD70SI/RDzIhUHJAolWVcO1v5PUivxGKvfLZTLTVVxEYzGYyPsA3ivdLNqMnL5VgmQySa+g==} dev: false /@astrojs/language-server@2.10.0(prettier-plugin-astro@0.14.0)(prettier@3.3.1)(typescript@5.3.3): @@ -324,23 +332,23 @@ packages: - typescript dev: false - /@astrojs/markdown-remark@5.1.0: - resolution: {integrity: sha512-S6Z3K2hOB7MfjeDoHsotnP/q2UsnEDB8NlNAaCjMDsGBZfTUbWxyLW3CaphEWw08f6KLZi2ibK9yC3BaMhh2NQ==} + /@astrojs/markdown-remark@5.1.1: + resolution: {integrity: sha512-rkWWjR9jVo0LAMxQ2+T19RKbQUa7NwBGhFj03bAz3hGf3blqeBIXs1NSPpizshO5kZzcOqKe8OlG6XpYO8esHg==} dependencies: '@astrojs/prism': 3.1.0 github-slugger: 2.0.0 hast-util-from-html: 2.0.1 hast-util-to-text: 4.0.2 - import-meta-resolve: 4.0.0 + import-meta-resolve: 4.1.0 mdast-util-definitions: 6.0.0 rehype-raw: 7.0.0 rehype-stringify: 10.0.0 remark-gfm: 4.0.0 remark-parse: 11.0.0 remark-rehype: 11.1.0 - remark-smartypants: 2.1.0 - shiki: 1.5.2 - unified: 11.0.4 + remark-smartypants: 3.0.1 + shiki: 1.9.0 + unified: 11.0.5 unist-util-remove-position: 5.0.0 unist-util-visit: 5.0.0 unist-util-visit-parents: 6.0.1 @@ -349,17 +357,17 @@ packages: - supports-color dev: false - /@astrojs/mdx@3.0.0(astro@4.11.0): - resolution: {integrity: sha512-t1x+fmRA7w/AUWEhvWsMjw8op29mkzkpLN+AfsrtIAnGCf5y3NhcDwamKBvHDUTw/SdM3dn0JMi+JGaGnocDmw==} + /@astrojs/mdx@3.1.2(astro@4.11.1): + resolution: {integrity: sha512-0EizCWhUi0wdYPm31kNOHsOrGmn8pEJy+YEGQlHWt4Flg2NYfV7nWZuYG8KxoRSK/W397vPhyHYrITCYo7JMYw==} engines: {node: ^18.17.1 || ^20.3.0 || >=21.0.0} peerDependencies: astro: ^4.8.0 dependencies: - '@astrojs/markdown-remark': 5.1.0 + '@astrojs/markdown-remark': 5.1.1 '@mdx-js/mdx': 3.0.1 - acorn: 8.11.3 - astro: 4.11.0(@types/node@18.19.17)(sass@1.77.4)(typescript@5.3.3) - es-module-lexer: 1.5.3 + acorn: 8.12.0 + astro: 4.11.1(@types/node@18.19.17)(sass@1.77.4)(typescript@5.3.3) + es-module-lexer: 1.5.4 estree-util-visit: 2.0.0 github-slugger: 2.0.0 gray-matter: 4.0.3 @@ -402,17 +410,17 @@ packages: - vite dev: false - /@astrojs/rss@4.0.6: - resolution: {integrity: sha512-hpfHz6OZVD4ME1ZmpNQim0yV0AOetVFUHv0vmL8+Bw4GNcmL0ibGkGtMv+PY72HLJUVfDtizrBjfN5HHg+LScA==} + /@astrojs/rss@4.0.7: + resolution: {integrity: sha512-ZEG55XFB19l+DplUvBISmz04UbjDtKliRO4Y5+ERRhAMjgCVVobEBNE6ZwWG1h6orWUocy4nfPihKXDyB73x9g==} dependencies: fast-xml-parser: 4.4.0 kleur: 4.1.5 dev: false - /@astrojs/sitemap@3.1.5: - resolution: {integrity: sha512-GLdzJ01387Uzb8RKYpsYLlg/GzoPnGbmDeQNkarSE11i2+l9Qp8Nj/WoTEy9nkTS25fxxy0kxDfJmreeVleCqg==} + /@astrojs/sitemap@3.1.6: + resolution: {integrity: sha512-1Qp2NvAzVImqA6y+LubKi1DVhve/hXXgFvB0szxiipzh7BvtuKe4oJJ9dXSqaubaTkt4nMa6dv6RCCAYeB6xaQ==} dependencies: - sitemap: 7.1.1 + sitemap: 7.1.2 stream-replace-string: 2.0.0 zod: 3.23.8 dev: false @@ -440,16 +448,16 @@ packages: - supports-color dev: false - /@astrojs/vercel@7.7.1(astro@4.11.0)(react@18.3.1): - resolution: {integrity: sha512-FXh2IxLQ7GOl5w+1uUuSO5AO0fwlZWDjwEZ5NdEOAoWfFW0QeOR+LILbccjIuWKdugEJknAT4XxwQvsmVMh+8A==} + /@astrojs/vercel@7.7.2(astro@4.11.1)(react@18.3.1): + resolution: {integrity: sha512-mwnXz4OHE+X20kyQfrxAoLCe+uIhZ1w+G7fJnERSua9/DgX+j0Gvfku3D33bNyxaIwLQB5BOGAu2eZoi+gna4Q==} peerDependencies: astro: ^4.2.0 dependencies: - '@astrojs/internal-helpers': 0.4.0 + '@astrojs/internal-helpers': 0.4.1 '@vercel/analytics': 1.3.1(react@18.3.1) '@vercel/edge': 1.1.1 '@vercel/nft': 0.27.2 - astro: 4.11.0(@types/node@18.19.17)(sass@1.77.4)(typescript@5.3.3) + astro: 4.11.1(@types/node@18.19.17)(sass@1.77.4)(typescript@5.3.3) esbuild: 0.21.5 fast-glob: 3.3.2 set-cookie-parser: 2.6.0 @@ -461,6 +469,15 @@ packages: - supports-color dev: false + /@axe-core/playwright@4.9.1(playwright-core@1.44.1): + resolution: {integrity: sha512-8m4WZbZq7/aq7ZY5IG8GqV+ZdvtGn/iJdom+wBg+iv/3BAOBIfNQtIu697a41438DzEEyptXWmC3Xl5Kx/o9/g==} + peerDependencies: + playwright-core: '>= 1.0.0' + dependencies: + axe-core: 4.9.1 + playwright-core: 1.44.1 + dev: true + /@babel/code-frame@7.24.2: resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} engines: {node: '>=6.9.0'} @@ -1273,7 +1290,7 @@ packages: resolution: {integrity: sha512-aFQBPepv0zhVXqJFAvfQ4vXYv/meJKiqmEEKSxdjAfwXllIV49PDlnGEXmbGYjR4hUQQjbfDgzAbrbfePc3YVQ==} dependencies: '@expressive-code/core': 0.35.3 - shiki: 1.5.2 + shiki: 1.9.0 dev: false /@expressive-code/plugin-text-markers@0.35.3: @@ -1549,10 +1566,10 @@ packages: '@jridgewell/sourcemap-codec': 1.4.15 dev: false - /@libsql/client@0.6.0: - resolution: {integrity: sha512-qhQzTG/y2IEVbL3+9PULDvlQFWJ/RnjFXECr/Nc3nRngGiiMysDaOV5VUzYk7DulUX98EA4wi+z3FspKrUplUA==} + /@libsql/client@0.6.2: + resolution: {integrity: sha512-xRNfRLv/dOCbV4qd+M0baQwGmvuZpMd2wG2UAPs8XmcdaPvu5ErkcaeITkxlm3hDEJVabQM1cFhMBxsugWW9fQ==} dependencies: - '@libsql/core': 0.6.0 + '@libsql/core': 0.6.2 '@libsql/hrana-client': 0.6.0 js-base64: 3.7.7 libsql: 0.3.18 @@ -1561,8 +1578,8 @@ packages: - utf-8-validate dev: false - /@libsql/core@0.6.0: - resolution: {integrity: sha512-affAB8vSqQwqI9NBDJ5uJCVaHoOAS2pOpbv1kWConh1SBbmJBnHHd4KG73RAJ2sgd2+NbT9WA+XJBqxgp28YSw==} + /@libsql/core@0.6.2: + resolution: {integrity: sha512-c2P4M+4u/4b2L02A0KjggO3UW51rGkhxr/7fzJO0fEAqsqrWGxuNj2YtRkina/oxfYvAof6xjp8RucNoIV/Odw==} dependencies: js-base64: 3.7.7 dev: false @@ -1930,10 +1947,6 @@ packages: dev: false optional: true - /@shikijs/core@1.5.2: - resolution: {integrity: sha512-wSAOgaz48GmhILFElMCeQypSZmj6Ru6DttOOtl3KNkdJ17ApQuGNCfzpk4cClasVrnIu45++2DBwG4LNMQAfaA==} - dev: false - /@shikijs/core@1.9.0: resolution: {integrity: sha512-cbSoY8P/jgGByG8UOl3jnP/CWg/Qk+1q+eAKWtcrU3pNoILF8wTsLB0jT44qUBV8Ce1SvA9uqcM9Xf+u3fJFBw==} dev: false @@ -2057,12 +2070,6 @@ packages: resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} dev: false - /@types/nlcst@1.0.4: - resolution: {integrity: sha512-ABoYdNQ/kBSsLvZAekMhIPMQ3YUZvavStpKYs7BjLLuKVmIMA0LUgZ7b54zzuWJRbHF80v1cNf4r90Vd6eMQDg==} - dependencies: - '@types/unist': 2.0.10 - dev: false - /@types/nlcst@2.0.3: resolution: {integrity: sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==} dependencies: @@ -2446,12 +2453,6 @@ packages: dependencies: acorn: 8.12.0 - /acorn@8.11.3: - resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: false - /acorn@8.12.0: resolution: {integrity: sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==} engines: {node: '>=0.4.0'} @@ -2680,12 +2681,12 @@ packages: - supports-color dev: true - /astro-expressive-code@0.35.3(astro@4.11.0): + /astro-expressive-code@0.35.3(astro@4.11.1): resolution: {integrity: sha512-f1L1m3J3EzZHDEox6TXmuKo5fTSbaNxE/HU0S0UQmvlCowtOKnU/LOsoDwsbQSYGKz+fdLRPsCjFMiKqEoyfcw==} peerDependencies: astro: ^4.0.0-beta || ^3.3.0 dependencies: - astro: 4.11.0(@types/node@18.19.17)(sass@1.77.4)(typescript@5.3.3) + astro: 4.11.1(@types/node@18.19.17)(sass@1.77.4)(typescript@5.3.3) rehype-expressive-code: 0.35.3 dev: false @@ -2693,22 +2694,22 @@ packages: resolution: {integrity: sha512-VmK4kqzNpOAt2LASVbw2cbbe9sD6K30E7jOjqzHxHieHMTWInkdOljtzHmNGvKr3P0MeF4Wy+Z7j6CdETFecDA==} dev: false - /astro-loading-indicator@0.5.0(astro@4.11.0): + /astro-loading-indicator@0.5.0(astro@4.11.1): resolution: {integrity: sha512-NU06AzJEzvlzXLac8ODFgHjzTDyaF/GV+nQQ7Rq21rCeSifhmLQu219lJukIUS0ySs4ySO4PAwcaHGClOSEufA==} peerDependencies: astro: ^4.0.0 dependencies: - astro: 4.11.0(@types/node@18.19.17)(sass@1.77.4)(typescript@5.3.3) + astro: 4.11.1(@types/node@18.19.17)(sass@1.77.4)(typescript@5.3.3) dev: false - /astro@4.11.0(@types/node@18.19.17)(sass@1.77.4)(typescript@5.3.3): - resolution: {integrity: sha512-3VWxz/08sChQIX68tuE7Y769DUdjsT3Zq2/y4SkrDRlwN9IZ/aebwcRWr5a2yMSdO2vpFxtEdobq0mKnMlLErg==} + /astro@4.11.1(@types/node@18.19.17)(sass@1.77.4)(typescript@5.3.3): + resolution: {integrity: sha512-6e9/9nafmnxzaLSq2+9VNpi+7j0E4UoK2IJ7gkhyv1wk3XfciA6zHc3ESx7/Sk/rjenz9NSTTzAwcmVzWWHv/g==} engines: {node: ^18.17.1 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0'} hasBin: true dependencies: - '@astrojs/compiler': 2.8.0 - '@astrojs/internal-helpers': 0.4.0 - '@astrojs/markdown-remark': 5.1.0 + '@astrojs/compiler': 2.8.1 + '@astrojs/internal-helpers': 0.4.1 + '@astrojs/markdown-remark': 5.1.1 '@astrojs/telemetry': 3.1.0 '@babel/core': 7.24.7 '@babel/generator': 7.24.7 @@ -2734,7 +2735,7 @@ packages: diff: 5.2.0 dlv: 1.1.3 dset: 3.1.3 - es-module-lexer: 1.5.3 + es-module-lexer: 1.5.4 esbuild: 0.21.5 estree-walker: 3.0.3 execa: 8.0.1 @@ -2768,7 +2769,7 @@ packages: which-pm: 2.2.0 yargs-parser: 21.1.1 zod: 3.23.8 - zod-to-json-schema: 3.23.0(zod@3.23.8) + zod-to-json-schema: 3.23.1(zod@3.23.8) optionalDependencies: sharp: 0.33.4 transitivePeerDependencies: @@ -2836,6 +2837,11 @@ packages: possible-typed-array-names: 1.0.0 dev: true + /axe-core@4.9.1: + resolution: {integrity: sha512-QbUdXJVTpvUTHU7871ppZkdOLBeGUKBQWHkHrvN2V9IQWGMt61zf3B45BtzjxEJzYuj0JBjBZP/hmYS/R9pmAw==} + engines: {node: '>=4'} + dev: true + /axobject-query@4.0.0: resolution: {integrity: sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==} dependencies: @@ -3549,8 +3555,8 @@ packages: domelementtype: 2.3.0 domhandler: 5.0.3 - /drizzle-orm@0.30.10(@libsql/client@0.6.0)(@types/react@18.3.3)(react@18.3.1): - resolution: {integrity: sha512-IRy/QmMWw9lAQHpwbUh1b8fcn27S/a9zMIzqea1WNOxK9/4EB8gIo+FZWLiPXzl2n9ixGSv8BhsLZiOppWEwBw==} + /drizzle-orm@0.31.2(@libsql/client@0.6.2)(@types/react@18.3.3)(react@18.3.1): + resolution: {integrity: sha512-QnenevbnnAzmbNzQwbhklvIYrDE8YER8K7kSrAWQSV1YvFCdSQPzj+jzqRdTSsV2cDqSpQ0NXGyL1G9I43LDLg==} peerDependencies: '@aws-sdk/client-rds-data': '>=3' '@cloudflare/workers-types': '>=3' @@ -3560,6 +3566,7 @@ packages: '@op-engineering/op-sqlite': '>=2' '@opentelemetry/api': ^1.4.1 '@planetscale/database': '>=1' + '@tidbcloud/serverless': '*' '@types/better-sqlite3': '*' '@types/pg': '*' '@types/react': '>=18' @@ -3594,6 +3601,8 @@ packages: optional: true '@planetscale/database': optional: true + '@tidbcloud/serverless': + optional: true '@types/better-sqlite3': optional: true '@types/pg': @@ -3629,7 +3638,7 @@ packages: sqlite3: optional: true dependencies: - '@libsql/client': 0.6.0 + '@libsql/client': 0.6.2 '@types/react': 18.3.3 react: 18.3.1 dev: false @@ -3815,8 +3824,8 @@ packages: safe-array-concat: 1.1.0 dev: true - /es-module-lexer@1.5.3: - resolution: {integrity: sha512-i1gCgmR9dCl6Vil6UKPI/trA69s08g/syhiDK9TG0Nf1RJjjFI+AzoWW7sPufzkgYAn861skuCwJa0pIIHYxvg==} + /es-module-lexer@1.5.4: + resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} dev: false /es-object-atoms@1.0.0: @@ -4950,23 +4959,6 @@ packages: - supports-color dev: false - /hast-util-to-html@9.0.0: - resolution: {integrity: sha512-IVGhNgg7vANuUA2XKrT6sOIIPgaYZnmLx3l/CCOAK0PtgfoHrZwX7jCSYyFxHTrGmC6S9q8aQQekjp4JPZF+cw==} - dependencies: - '@types/hast': 3.0.4 - '@types/unist': 3.0.2 - ccount: 2.0.1 - comma-separated-tokens: 2.0.3 - hast-util-raw: 9.0.2 - hast-util-whitespace: 3.0.0 - html-void-elements: 3.0.0 - mdast-util-to-hast: 13.1.0 - property-information: 6.4.1 - space-separated-tokens: 2.0.2 - stringify-entities: 4.0.3 - zwitch: 2.0.4 - dev: false - /hast-util-to-html@9.0.1: resolution: {integrity: sha512-hZOofyZANbyWo+9RP75xIDV/gq+OUKx+T46IlwERnKmfpwp81XBFbT9mi26ws+SJchA4RVUQwIBJpqEOBhMzEQ==} dependencies: @@ -5172,8 +5164,8 @@ packages: engines: {node: '>=8'} dev: true - /import-meta-resolve@4.0.0: - resolution: {integrity: sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA==} + /import-meta-resolve@4.1.0: + resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} dev: false /imurmurhash@0.1.4: @@ -5271,11 +5263,6 @@ packages: has-tostringtag: 1.0.2 dev: true - /is-buffer@2.0.5: - resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} - engines: {node: '>=4'} - dev: false - /is-builtin-module@3.2.1: resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} engines: {node: '>=6'} @@ -6520,12 +6507,6 @@ packages: new-array: 1.0.0 dev: false - /nlcst-to-string@3.1.1: - resolution: {integrity: sha512-63mVyqaqt0cmn2VcI2aH6kxe1rLAmSROqHMA0i4qqg1tidkfExgpb0FGMikMCn86mw5dFtBtEANfmSSK7TjNHw==} - dependencies: - '@types/nlcst': 1.0.4 - dev: false - /nlcst-to-string@4.0.0: resolution: {integrity: sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==} dependencies: @@ -6885,14 +6866,6 @@ packages: lines-and-columns: 1.2.4 dev: true - /parse-latin@5.0.1: - resolution: {integrity: sha512-b/K8ExXaWC9t34kKeDV8kGXBkXZ1HCSAZRYE7HR14eA1GlXX5L8iWhs8USJNhQU9q5ci413jCKF0gOyovvyRBg==} - dependencies: - nlcst-to-string: 3.1.1 - unist-util-modify-children: 3.1.1 - unist-util-visit-children: 2.0.2 - dev: false - /parse-latin@7.0.0: resolution: {integrity: sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==} dependencies: @@ -7347,8 +7320,8 @@ packages: resolution: {integrity: sha512-1TX1i048LooI9QoecrXy7nGFFbFSufxVRAfc6Y9YMRAi56l+oB0zP51mLSV312uRuvVLPV1opSlJmslozR1XHQ==} dependencies: '@types/hast': 3.0.4 - hast-util-to-html: 9.0.0 - unified: 11.0.4 + hast-util-to-html: 9.0.1 + unified: 11.0.5 dev: false /rehype@13.0.1: @@ -7368,7 +7341,7 @@ packages: micromark-extension-gfm: 3.0.0 remark-parse: 11.0.0 remark-stringify: 11.0.0 - unified: 11.0.4 + unified: 11.0.5 transitivePeerDependencies: - supports-color dev: false @@ -7392,7 +7365,7 @@ packages: '@types/mdast': 4.0.3 mdast-util-from-markdown: 2.0.0 micromark-util-types: 2.0.0 - unified: 11.0.4 + unified: 11.0.5 transitivePeerDependencies: - supports-color dev: false @@ -7403,26 +7376,17 @@ packages: '@types/hast': 3.0.4 '@types/mdast': 4.0.3 mdast-util-to-hast: 13.1.0 - unified: 11.0.4 + unified: 11.0.5 vfile: 6.0.1 dev: false - /remark-smartypants@2.1.0: - resolution: {integrity: sha512-qoF6Vz3BjU2tP6OfZqHOvCU0ACmu/6jhGaINSQRI9mM7wCxNQTKB3JUAN4SVoN2ybElEDTxBIABRep7e569iJw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - retext: 8.1.0 - retext-smartypants: 5.2.0 - unist-util-visit: 5.0.0 - dev: false - /remark-smartypants@3.0.1: resolution: {integrity: sha512-qyshfCl2eLO0i0558e79ZJsfojC5wjnYLByjt0FmjJQN6aYwcRxpoj784LZJSoWCdnA2ubh5rLNGb8Uur/wDng==} engines: {node: '>=16.0.0'} dependencies: retext: 9.0.0 retext-smartypants: 6.1.0 - unified: 11.0.4 + unified: 11.0.5 unist-util-visit: 5.0.0 dev: false @@ -7431,7 +7395,7 @@ packages: dependencies: '@types/mdast': 4.0.3 mdast-util-to-markdown: 2.1.0 - unified: 11.0.4 + unified: 11.0.5 dev: false /request-light@0.7.0: @@ -7492,30 +7456,12 @@ packages: signal-exit: 3.0.7 dev: false - /retext-latin@3.1.0: - resolution: {integrity: sha512-5MrD1tuebzO8ppsja5eEu+ZbBeUNCjoEarn70tkXOS7Bdsdf6tNahsv2bY0Z8VooFF6cw7/6S+d3yI/TMlMVVQ==} - dependencies: - '@types/nlcst': 1.0.4 - parse-latin: 5.0.1 - unherit: 3.0.1 - unified: 10.1.2 - dev: false - /retext-latin@4.0.0: resolution: {integrity: sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==} dependencies: '@types/nlcst': 2.0.3 parse-latin: 7.0.0 - unified: 11.0.4 - dev: false - - /retext-smartypants@5.2.0: - resolution: {integrity: sha512-Do8oM+SsjrbzT2UNIKgheP0hgUQTDDQYyZaIY3kfq0pdFzoPk+ZClYJ+OERNXveog4xf1pZL4PfRxNoVL7a/jw==} - dependencies: - '@types/nlcst': 1.0.4 - nlcst-to-string: 3.1.1 - unified: 10.1.2 - unist-util-visit: 4.1.2 + unified: 11.0.5 dev: false /retext-smartypants@6.1.0: @@ -7526,29 +7472,12 @@ packages: unist-util-visit: 5.0.0 dev: false - /retext-stringify@3.1.0: - resolution: {integrity: sha512-767TLOaoXFXyOnjx/EggXlb37ZD2u4P1n0GJqVdpipqACsQP+20W+BNpMYrlJkq7hxffnFk+jc6mAK9qrbuB8w==} - dependencies: - '@types/nlcst': 1.0.4 - nlcst-to-string: 3.1.1 - unified: 10.1.2 - dev: false - /retext-stringify@4.0.0: resolution: {integrity: sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==} dependencies: '@types/nlcst': 2.0.3 nlcst-to-string: 4.0.0 - unified: 11.0.4 - dev: false - - /retext@8.1.0: - resolution: {integrity: sha512-N9/Kq7YTn6ZpzfiGW45WfEGJqFf1IM1q8OsRa1CGzIebCJBNCANDRmOrholiDRGKo/We7ofKR4SEvcGAWEMD3Q==} - dependencies: - '@types/nlcst': 1.0.4 - retext-latin: 3.1.0 - retext-stringify: 3.1.0 - unified: 10.1.2 + unified: 11.0.5 dev: false /retext@9.0.0: @@ -7557,7 +7486,7 @@ packages: '@types/nlcst': 2.0.3 retext-latin: 4.0.0 retext-stringify: 4.0.0 - unified: 11.0.4 + unified: 11.0.5 dev: false /reusify@1.0.4: @@ -7790,12 +7719,6 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - /shiki@1.5.2: - resolution: {integrity: sha512-fpPbuSaatinmdGijE7VYUD3hxLozR3ZZ+iAx8Iy2X6REmJGyF5hQl94SgmiUNTospq346nXUVZx0035dyGvIVw==} - dependencies: - '@shikijs/core': 1.5.2 - dev: false - /shiki@1.9.0: resolution: {integrity: sha512-i6//Lqgn7+7nZA0qVjoYH0085YdNk4MC+tJV4bo+HgjgRMJ0JmkLZzFAuvVioJqLkcGDK5GAMpghZEZkCnwxpQ==} dependencies: @@ -7848,8 +7771,8 @@ packages: /sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - /sitemap@7.1.1: - resolution: {integrity: sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg==} + /sitemap@7.1.2: + resolution: {integrity: sha512-ARCqzHJ0p4gWt+j7NlU5eDlIO9+Rkr/JhPFZKKQ1l5GCus7rJH4UdrlVAh0xC/gDS/Qir2UMxqYNHtsKr2rpCw==} engines: {node: '>=12.0.0', npm: '>=5.6.0'} hasBin: true dependencies: @@ -8562,24 +8485,20 @@ packages: /undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - /unherit@3.0.1: - resolution: {integrity: sha512-akOOQ/Yln8a2sgcLj4U0Jmx0R5jpIg2IUyRrWOzmEbjBtGzBdHtSeFKgoEcoH4KYIG/Pb8GQ/BwtYm0GCq1Sqg==} - dev: false - - /unified@10.1.2: - resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} + /unified@11.0.4: + resolution: {integrity: sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==} dependencies: - '@types/unist': 2.0.10 + '@types/unist': 3.0.2 bail: 2.0.2 + devlop: 1.1.0 extend: 3.0.2 - is-buffer: 2.0.5 is-plain-obj: 4.1.0 trough: 2.2.0 - vfile: 5.3.7 + vfile: 6.0.1 dev: false - /unified@11.0.4: - resolution: {integrity: sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==} + /unified@11.0.5: + resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} dependencies: '@types/unist': 3.0.2 bail: 2.0.2 @@ -8597,25 +8516,12 @@ packages: unist-util-is: 6.0.0 dev: false - /unist-util-is@5.2.1: - resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==} - dependencies: - '@types/unist': 2.0.10 - dev: false - /unist-util-is@6.0.0: resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} dependencies: '@types/unist': 3.0.2 dev: false - /unist-util-modify-children@3.1.1: - resolution: {integrity: sha512-yXi4Lm+TG5VG+qvokP6tpnk+r1EPwyYL04JWDxLvgvPV40jANh7nm3udk65OOWquvbMDe+PL9+LmkxDpTv/7BA==} - dependencies: - '@types/unist': 2.0.10 - array-iterate: 2.0.1 - dev: false - /unist-util-modify-children@4.0.0: resolution: {integrity: sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==} dependencies: @@ -8642,37 +8548,18 @@ packages: unist-util-visit: 5.0.0 dev: false - /unist-util-stringify-position@3.0.3: - resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==} - dependencies: - '@types/unist': 2.0.10 - dev: false - /unist-util-stringify-position@4.0.0: resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} dependencies: '@types/unist': 3.0.2 dev: false - /unist-util-visit-children@2.0.2: - resolution: {integrity: sha512-+LWpMFqyUwLGpsQxpumsQ9o9DG2VGLFrpz+rpVXYIEdPy57GSy5HioC0g3bg/8WP9oCLlapQtklOzQ8uLS496Q==} - dependencies: - '@types/unist': 2.0.10 - dev: false - /unist-util-visit-children@3.0.0: resolution: {integrity: sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==} dependencies: '@types/unist': 3.0.2 dev: false - /unist-util-visit-parents@5.1.3: - resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==} - dependencies: - '@types/unist': 2.0.10 - unist-util-is: 5.2.1 - dev: false - /unist-util-visit-parents@6.0.1: resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} dependencies: @@ -8680,14 +8567,6 @@ packages: unist-util-is: 6.0.0 dev: false - /unist-util-visit@4.1.2: - resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==} - dependencies: - '@types/unist': 2.0.10 - unist-util-is: 5.2.1 - unist-util-visit-parents: 5.1.3 - dev: false - /unist-util-visit@5.0.0: resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} dependencies: @@ -8737,13 +8616,6 @@ packages: vfile: 6.0.1 dev: false - /vfile-message@3.1.4: - resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==} - dependencies: - '@types/unist': 2.0.10 - unist-util-stringify-position: 3.0.3 - dev: false - /vfile-message@4.0.2: resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} dependencies: @@ -8751,15 +8623,6 @@ packages: unist-util-stringify-position: 4.0.0 dev: false - /vfile@5.3.7: - resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==} - dependencies: - '@types/unist': 2.0.10 - is-buffer: 2.0.5 - unist-util-stringify-position: 3.0.3 - vfile-message: 3.1.4 - dev: false - /vfile@6.0.1: resolution: {integrity: sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==} dependencies: @@ -9173,8 +9036,8 @@ packages: engines: {node: '>=12.20'} dev: false - /zod-to-json-schema@3.23.0(zod@3.23.8): - resolution: {integrity: sha512-az0uJ243PxsRIa2x1WmNE/pnuA05gUq/JB8Lwe1EDCCL/Fz9MgjYQ0fPlyc2Tcv6aF2ZA7WM5TWaRZVEFaAIag==} + /zod-to-json-schema@3.23.1(zod@3.23.8): + resolution: {integrity: sha512-oT9INvydob1XV0v1d2IadrR74rLtDInLvDFfAa1CG0Pmg/vxATk7I2gSelfj271mbzeM4Da0uuDQE/Nkj3DWNw==} peerDependencies: zod: ^3.23.3 dependencies: diff --git a/src/components/Notecard/NotecardComposer.tsx b/src/components/Notecard/NotecardComposer.tsx index 484969f5..17c4194a 100644 --- a/src/components/Notecard/NotecardComposer.tsx +++ b/src/components/Notecard/NotecardComposer.tsx @@ -103,7 +103,7 @@ export const NotecardComposer = () => { data-1p-ignore />
@@ -115,6 +115,7 @@ export const NotecardComposer = () => { viewBox="0 0 24 24" width="24" fill="currentColor" + aria-label="Previous theme" > @@ -127,6 +128,7 @@ export const NotecardComposer = () => { width="24" viewBox="0 0 24 24" fill="currentColor" + aria-label="Next theme" > diff --git a/src/components/Webring.astro b/src/components/Webring.astro index 8c680151..7c4011ee 100644 --- a/src/components/Webring.astro +++ b/src/components/Webring.astro @@ -15,7 +15,7 @@ const { title, description, url, prev, next, color } = data; style={`--webring-bg: var(--${color}-3); --webring-text: var(--${color}-12); --webring-hover: var(--${color}-4); --webring-border: var(--${color}-5)`} > -

{title}

+

{title}

{description}
+

Guestbook

{ diff --git a/src/styles/base.css b/src/styles/base.css index 6cb48d6a..01f2cec2 100644 --- a/src/styles/base.css +++ b/src/styles/base.css @@ -108,3 +108,13 @@ a { left: 0; right: 0; } + +.visually-hidden { + clip: rect(0 0 0 0); + clip-path: inset(50%); + height: 1px; + overflow: hidden; + position: absolute; + white-space: nowrap; + width: 1px; +} diff --git a/tests/accessibility.spec.ts b/tests/accessibility.spec.ts new file mode 100644 index 00000000..727cc636 --- /dev/null +++ b/tests/accessibility.spec.ts @@ -0,0 +1,33 @@ +import AxeBuilder from "@axe-core/playwright"; +import { expect, test } from "@playwright/test"; + +const paths = [ + "/", + "/garden", + "/about", + "/now", + "/guestbook", + "/webrings", + "/colophon", +]; + +test.describe("all pages", () => { + for (const path of paths) { + test(`${path} page should not have any automatically detectable accessibility issues`, async ({ + page, + }, testInfo) => { + await page.goto(path); + + const accessibilityScanResults = await new AxeBuilder({ + page, + }).analyze(); + + await testInfo.attach("accessibility-scan-results", { + body: JSON.stringify(accessibilityScanResults, null, 2), + contentType: "application/json", + }); + + expect(accessibilityScanResults.violations).toHaveLength(0); + }); + } +});