diff --git a/config/mdx.config.js b/config/mdx.config.js index 949478418..e7f08fc59 100644 --- a/config/mdx.config.js +++ b/config/mdx.config.js @@ -1,4 +1,9 @@ +/** @typedef {import('@mdx-js/mdx').CompileOptions} CompileOptions */ +/** @typedef {import('retext-smartypants').Options} TypographicOptions */ +/** @typedef {import('./i18n.config.js').Locale} Locale */ + import withSyntaxHighlighter from "@shikijs/rehype"; +import { getLocale, getTranslations } from "next-intl/server"; import withHeadingIds from "rehype-slug"; import withFrontmatter from "remark-frontmatter"; import withGfm from "remark-gfm"; @@ -8,14 +13,51 @@ import withTypographicQuotes from "remark-smartypants"; import { withMdxFootnotes } from "../lib/content/footnotes.js"; import { config as syntaxHighlighterConfig } from "./syntax-highlighter.config.js"; -/** @type {import('@mdx-js/mdx').CompileOptions} */ -export const config = { - remarkPlugins: [ - withFrontmatter, - withMdxFrontmatter, - withGfm, - withMdxFootnotes, - withTypographicQuotes, - ], - rehypePlugins: [withHeadingIds, [withSyntaxHighlighter, syntaxHighlighterConfig]], +/** @type {Map} */ +const cache = new Map(); + +/** @type {Record} */ +const typography = { + de: { + openingQuotes: { double: "„", single: "‚" }, + closingQuotes: { double: "“", single: "‘" }, + }, + en: { + openingQuotes: { double: "“", single: "‘" }, + closingQuotes: { double: "”", single: "’" }, + }, }; + +/** @type {() => Promise} */ +export async function createConfig() { + const locale = /** @type {Locale} */ (await getLocale()); + const t = await getTranslations(); + + if (cache.has(locale)) return /** @type {CompileOptions} */ (cache.get(locale)); + + /** @type {CompileOptions} */ + const config = { + remarkPlugins: [ + withFrontmatter, + withMdxFrontmatter, + withGfm, + withMdxFootnotes, + [withTypographicQuotes, typography[locale]], + ], + remarkRehypeOptions: { + footnoteBackLabel(referenceIndex, rereferenceIndex) { + return t("Mdx.FootnoteBackLabel", { + reference: + String(referenceIndex + 1) + + (rereferenceIndex > 1 ? "-" + String(rereferenceIndex) : ""), + }); + }, + footnoteLabel: t("Mdx.Footnotes"), + }, + rehypePlugins: [withHeadingIds, [withSyntaxHighlighter, syntaxHighlighterConfig]], + }; + + cache.set(locale, config); + + return config; +} diff --git a/keystatic.config.tsx b/keystatic.config.tsx index 9afbd343d..55c66c81e 100644 --- a/keystatic.config.tsx +++ b/keystatic.config.tsx @@ -86,6 +86,7 @@ function createComponents( Download: mark({ label: "Download", icon: , + tag: "a", className: "underline decoration-dotted", schema: { href: fields.file({ diff --git a/lib/content/mdx.ts b/lib/content/mdx.ts index c7575e4d0..d280079ae 100644 --- a/lib/content/mdx.ts +++ b/lib/content/mdx.ts @@ -7,7 +7,7 @@ import { notFound } from "next/navigation"; import { cache } from "react"; import * as runtime from "react/jsx-runtime"; -import { config as mdxConfig } from "@/config/mdx.config"; +import { createConfig as createMdxConfig } from "@/config/mdx.config"; import { reader } from "@/lib/content/reader"; import type { Curriculum, DocumentationPage, Resource } from "@/lib/content/types"; import { useMDXComponents } from "@/mdx-components"; @@ -17,11 +17,13 @@ interface MdxContent> extends MDXModule { frontmatter: T; } -export const processMdx = cache(function processMdx>( +export const processMdx = cache(async function processMdx>( code: string, ): Promise> { + const config = await createMdxConfig(); + // @ts-expect-error Upstream type error. - return evaluate(code, { ...runtime, ...mdxConfig, useMDXComponents }); + return evaluate(code, { ...runtime, ...config, useMDXComponents }); }); interface CurriculumMetadata extends Omit {} diff --git a/messages/de.json b/messages/de.json index 87a7116f9..e1247bde4 100644 --- a/messages/de.json +++ b/messages/de.json @@ -89,6 +89,10 @@ "name": "ACDH-CH Howto", "short-name": "ACDH-CH Howto" }, + "Mdx": { + "FootnoteBackLabel": "Zurück zu Referenz {reference}", + "Footnotes": "Fußnoten" + }, "NotFoundPage": { "meta": { "title": "Seite nicht gefunden" diff --git a/messages/en.json b/messages/en.json index 0a5c380c3..0a65f4f73 100644 --- a/messages/en.json +++ b/messages/en.json @@ -89,6 +89,10 @@ "name": "ACDH-CH Howto", "short-name": "ACDH-CH Howto" }, + "Mdx": { + "FootnoteBackLabel": "Back to reference {reference}", + "Footnotes": "Footnotes" + }, "NotFoundPage": { "meta": { "title": "Page not found" diff --git a/next.config.js b/next.config.js index 0a918a64d..6bc01b75a 100644 --- a/next.config.js +++ b/next.config.js @@ -6,7 +6,7 @@ import localesPlugin from "@react-aria/optimize-locales-plugin"; import createI18nPlugin from "next-intl/plugin"; import { env } from "./config/env.config.js"; -import { config as mdxConfig } from "./config/mdx.config.js"; +import { createConfig as createMdxConfig } from "./config/mdx.config.js"; /** @type {NextConfig} */ const config = { @@ -92,7 +92,7 @@ const plugins = [ createI18nPlugin("./lib/i18n.ts"), createMdxPlugin({ extension: /\.(md|mdx)$/, - options: mdxConfig, + options: await createMdxConfig(), }), ]; diff --git a/package.json b/package.json index a118c45e2..c2cceb334 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "node": "20.x", "pnpm": "9.x" }, - "packageManager": "pnpm@9.0.6", + "packageManager": "pnpm@9.1.0", "scripts": { "analyze": "BUNDLE_ANALYZER=\"enabled\" next build --no-lint", "build": "next build", @@ -26,7 +26,7 @@ "preinstall": "npx only-allow pnpm", "prepare": "run-s setup", "setup": "is-ci || simple-git-hooks", - "start": "next start", + "start": "node .next/standalone/server.js", "test": "exit 0", "test:e2e": "playwright test", "test:e2e:codegen": "playwright codegen", @@ -39,7 +39,7 @@ "dependencies": { "@acdh-oeaw/lib": "^0.1.11", "@acdh-oeaw/validate-env": "^0.0.3", - "@keystatic/core": "^0.5.13", + "@keystatic/core": "^0.5.14", "@keystatic/next": "^5.0.0", "@mdx-js/mdx": "^3.0.1", "@react-aria/utils": "^3.24.0", @@ -52,7 +52,7 @@ "lucide-react": "^0.378.0", "mdast-util-mdx": "^3.0.0", "next": "^14.2.3", - "next-intl": "^3.12.1", + "next-intl": "^3.12.2", "react": "^18.3.1", "react-aria-components": "^1.2.0", "react-dom": "^18.3.1", @@ -62,6 +62,7 @@ "remark-gfm": "^4.0.0", "remark-mdx-frontmatter": "^4.0.0", "remark-smartypants": "^3.0.1", + "retext-smartypants": "^6.1.0", "server-only": "^0.0.1", "sharp": "^0.33.3", "shiki": "^1.4.0", @@ -86,16 +87,16 @@ "@next/bundle-analyzer": "^14.2.3", "@next/eslint-plugin-next": "^14.2.3", "@next/mdx": "^14.2.3", - "@playwright/test": "^1.43.1", + "@playwright/test": "^1.44.0", "@react-aria/optimize-locales-plugin": "^1.1.0", "@react-types/shared": "^3.23.0", "@shikijs/rehype": "^1.4.0", "@types/mdast": "^4.0.3", "@types/mdx": "^2.0.13", - "@types/node": "^20.12.8", + "@types/node": "^20.12.10", "@types/react": "^18.3.1", "@types/react-dom": "^18.3.0", - "axe-core": "^4.9.0", + "axe-core": "^4.9.1", "axe-playwright": "^2.0.1", "ci-info": "^4.0.0", "dotenv": "^16.4.5", @@ -113,7 +114,7 @@ "stylelint": "^16.5.0", "tailwindcss": "^3.4.3", "tailwindcss-react-aria-components": "^1.1.2", - "tsx": "^4.9.0", + "tsx": "^4.9.3", "typescript": "^5.4.5" }, "pnpm": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 12aa9f922..806c50cab 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -18,11 +18,11 @@ importers: specifier: ^0.0.3 version: 0.0.3 '@keystatic/core': - specifier: ^0.5.13 - version: 0.5.13(next@14.2.3(@playwright/test@1.43.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: ^0.5.14 + version: 0.5.14(next@14.2.3(@playwright/test@1.44.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@keystatic/next': specifier: ^5.0.0 - version: 5.0.0(@keystatic/core@0.5.13(next@14.2.3(@playwright/test@1.43.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(next@14.2.3(@playwright/test@1.43.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 5.0.0(@keystatic/core@0.5.14(next@14.2.3(@playwright/test@1.44.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(next@14.2.3(@playwright/test@1.44.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@mdx-js/mdx': specifier: ^3.0.1 version: 3.0.1 @@ -55,10 +55,10 @@ importers: version: 3.0.0 next: specifier: ^14.2.3 - version: 14.2.3(@playwright/test@1.43.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 14.2.3(@playwright/test@1.44.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next-intl: - specifier: ^3.12.1 - version: 3.12.1(next@14.2.3(@playwright/test@1.43.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + specifier: ^3.12.2 + version: 3.12.2(next@14.2.3(@playwright/test@1.44.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) react: specifier: ^18.3.1 version: 18.3.1 @@ -86,6 +86,9 @@ importers: remark-smartypants: specifier: ^3.0.1 version: 3.0.1 + retext-smartypants: + specifier: ^6.1.0 + version: 6.1.0 server-only: specifier: ^0.0.1 version: 0.0.1 @@ -113,7 +116,7 @@ importers: devDependencies: '@acdh-oeaw/commitlint-config': specifier: ^1.0.0 - version: 1.0.0(@commitlint/cli@18.6.1(@types/node@20.12.8)(typescript@5.4.5)) + version: 1.0.0(@commitlint/cli@18.6.1(@types/node@20.12.10)(typescript@5.4.5)) '@acdh-oeaw/eslint-config': specifier: ^1.0.7 version: 1.0.7(eslint@8.57.0)(typescript@5.4.5) @@ -140,7 +143,7 @@ importers: version: 1.0.2(typescript@5.4.5) '@commitlint/cli': specifier: ^18.6.1 - version: 18.6.1(@types/node@20.12.8)(typescript@5.4.5) + version: 18.6.1(@types/node@20.12.10)(typescript@5.4.5) '@mdx-js/loader': specifier: ^3.0.1 version: 3.0.1(webpack@5.91.0) @@ -154,8 +157,8 @@ importers: specifier: ^14.2.3 version: 14.2.3(@mdx-js/loader@3.0.1(webpack@5.91.0)) '@playwright/test': - specifier: ^1.43.1 - version: 1.43.1 + specifier: ^1.44.0 + version: 1.44.0 '@react-aria/optimize-locales-plugin': specifier: ^1.1.0 version: 1.1.0 @@ -172,8 +175,8 @@ importers: specifier: ^2.0.13 version: 2.0.13 '@types/node': - specifier: ^20.12.8 - version: 20.12.8 + specifier: ^20.12.10 + version: 20.12.10 '@types/react': specifier: ^18.3.1 version: 18.3.1 @@ -181,11 +184,11 @@ importers: specifier: ^18.3.0 version: 18.3.0 axe-core: - specifier: ^4.9.0 - version: 4.9.0 + specifier: ^4.9.1 + version: 4.9.1 axe-playwright: specifier: ^2.0.1 - version: 2.0.1(playwright@1.43.1) + version: 2.0.1(playwright@1.44.0) ci-info: specifier: ^4.0.0 version: 4.0.0 @@ -235,8 +238,8 @@ importers: specifier: ^1.1.2 version: 1.1.2(tailwindcss@3.4.3) tsx: - specifier: ^4.9.0 - version: 4.9.0 + specifier: ^4.9.3 + version: 4.9.3 typescript: specifier: ^5.4.5 version: 5.4.5 @@ -847,8 +850,8 @@ packages: next: optional: true - '@keystatic/core@0.5.13': - resolution: {integrity: sha512-lqUm97TydS35z1xRP+XEcYhG3Gn73tnZOrCcFr9EVpFZZvTDIp9NVCPYumIwwhX+Lqlu677DnKDyF9bBLvXiQQ==} + '@keystatic/core@0.5.14': + resolution: {integrity: sha512-BqQk46jP+WJCUHffLnpkk3MbMwT0I5F7TISDJ1VlVcAiRKP9deTzcFbRrMP4jfnEKwG5bCksgZBXUj6W5VMChg==} peerDependencies: react: ^18.2.0 react-dom: ^18.2.0 @@ -971,8 +974,8 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@playwright/test@1.43.1': - resolution: {integrity: sha512-HgtQzFgNEEo4TE22K/X7sYTYNqEMMTZmFS8kTq6m8hXj+m1D8TgwgIbumHddJa9h4yl4GkKb8/bgAl2+g7eDgA==} + '@playwright/test@1.44.0': + resolution: {integrity: sha512-rNX5lbNidamSUorBhB4XZ9SQTjAqfe5M+p37Z8ic0jPFBMo5iCtQz1kRWkEMg+rYOKSlVycpQmpqjSFq7LXOfg==} engines: {node: '>=16'} hasBin: true @@ -1632,8 +1635,8 @@ packages: '@types/node@16.11.13': resolution: {integrity: sha512-eUXZzHLHoZqj1frtUetNkUetYoJ6X55UmrVnFD4DMhVeAmwLjniZhtBmsRiemQh4uq4G3vUra/Ws/hs9vEvL3Q==} - '@types/node@20.12.8': - resolution: {integrity: sha512-NU0rJLJnshZWdE/097cdCBbyW1h4hEg0xpovcoAQYHl8dnEyp/NAOiE45pvc+Bd1Dt+2r94v2eGFpQJ4R7g+2w==} + '@types/node@20.12.10': + resolution: {integrity: sha512-Eem5pH9pmWBHoGAT8Dr5fdc5rYA+4NAovdM4EktRPVAAiJhmWWfQrA0cFhAbOsQdSfIHjAud6YdkbL69+zSKjw==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -1933,8 +1936,8 @@ packages: resolution: {integrity: sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==} engines: {node: '>=4'} - axe-core@4.9.0: - resolution: {integrity: sha512-H5orY+M2Fr56DWmMFpMrq5Ge93qjNdPVqzBv5gWK3aD1OvjBEJlEzxf09z93dGVQeI0LiW+aCMIx1QtShC/zUw==} + axe-core@4.9.1: + resolution: {integrity: sha512-QbUdXJVTpvUTHU7871ppZkdOLBeGUKBQWHkHrvN2V9IQWGMt61zf3B45BtzjxEJzYuj0JBjBZP/hmYS/R9pmAw==} engines: {node: '>=4'} axe-html-reporter@2.2.3: @@ -3647,8 +3650,8 @@ packages: neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - next-intl@3.12.1: - resolution: {integrity: sha512-VoEOhSOKKdNz7oU0aiYkJOEmdGI0aR1gDelajPmYnekQZyL96xXlMEKgZPPupCR8CKZgENaKfTYRW6o4ahZ/PA==} + next-intl@3.12.2: + resolution: {integrity: sha512-KsbvKs00VcL1EIMIaRln129lR7xdpB0Lng1+8HR1MYywtRo+r4Pi7HVUZJnnO364jsZeptekYejJd0NBo3W8Fw==} peerDependencies: next: ^10.0.0 || ^11.0.0 || ^12.0.0 || ^13.0.0 || ^14.0.0 react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -3849,13 +3852,13 @@ packages: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} - playwright-core@1.43.1: - resolution: {integrity: sha512-EI36Mto2Vrx6VF7rm708qSnesVQKbxEWvPrfA1IPY6HgczBplDx7ENtx+K2n4kJ41sLLkuGfmb0ZLSSXlDhqPg==} + playwright-core@1.44.0: + resolution: {integrity: sha512-ZTbkNpFfYcGWohvTTl+xewITm7EOuqIqex0c7dNZ+aXsbrLj0qI8XlGKfPpipjm0Wny/4Lt4CJsWJk1stVS5qQ==} engines: {node: '>=16'} hasBin: true - playwright@1.43.1: - resolution: {integrity: sha512-V7SoH0ai2kNt1Md9E3Gwas5B9m8KR2GVvwZnAI6Pg0m3sh7UvgiYhRrhsziCmqMJNouPckiOhk8T+9bSAK0VIA==} + playwright@1.44.0: + resolution: {integrity: sha512-F9b3GUCLQ3Nffrfb6dunPOkE5Mh68tR7zN32L4jCk4FjQamgesGay7/dAAe1WaMEGV04DkdJfcJzjoCKygUaRQ==} engines: {node: '>=16'} hasBin: true @@ -4593,8 +4596,8 @@ packages: tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - tsx@4.9.0: - resolution: {integrity: sha512-UY0UUhDPL6MkqkZU4xTEjEBOLfV+RIt4xeeJ1qwK73xai4/zveG+X6+tieILa7rjtegUW2LE4p7fw7gAoLuytA==} + tsx@4.9.3: + resolution: {integrity: sha512-czVbetlILiyJZI5zGlj2kw9vFiSeyra9liPD4nG+Thh4pKTi0AmMEQ8zdV/L2xbIVKrIqif4sUNrsMAOksx9Zg==} engines: {node: '>=18.0.0'} hasBin: true @@ -4702,8 +4705,8 @@ packages: peerDependencies: react: '>= 16.8.0' - use-intl@3.12.1: - resolution: {integrity: sha512-rVwlWhitnRbMzbB553JsE0u9u+a18y7TDq+5ujmF0Jg+5gwp5vnrLsTHV/HcraP2PmxG/KhUDPYo1oTjJm5SHQ==} + use-intl@3.12.2: + resolution: {integrity: sha512-pX+FQVNLoorie/AV9Y4EgeeNZG8ZLJIQu1wQALTvKo3TCQhlYikO+9xbQpgFf0bjXawQ+JUdcu0BWAhq06eMYg==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -4904,9 +4907,9 @@ snapshots: optionalDependencies: graphql: 16.8.1 - '@acdh-oeaw/commitlint-config@1.0.0(@commitlint/cli@18.6.1(@types/node@20.12.8)(typescript@5.4.5))': + '@acdh-oeaw/commitlint-config@1.0.0(@commitlint/cli@18.6.1(@types/node@20.12.10)(typescript@5.4.5))': dependencies: - '@commitlint/cli': 18.6.1(@types/node@20.12.8)(typescript@5.4.5) + '@commitlint/cli': 18.6.1(@types/node@20.12.10)(typescript@5.4.5) '@commitlint/config-conventional': 18.6.3 '@acdh-oeaw/eslint-config-next@1.0.10(@acdh-oeaw/eslint-config-react@1.0.8(@acdh-oeaw/eslint-config@1.0.7(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0))(@acdh-oeaw/eslint-config@1.0.7(eslint@8.57.0)(typescript@5.4.5))': @@ -5009,11 +5012,11 @@ snapshots: '@braintree/sanitize-url@6.0.4': {} - '@commitlint/cli@18.6.1(@types/node@20.12.8)(typescript@5.4.5)': + '@commitlint/cli@18.6.1(@types/node@20.12.10)(typescript@5.4.5)': dependencies: '@commitlint/format': 18.6.1 '@commitlint/lint': 18.6.1 - '@commitlint/load': 18.6.1(@types/node@20.12.8)(typescript@5.4.5) + '@commitlint/load': 18.6.1(@types/node@20.12.10)(typescript@5.4.5) '@commitlint/read': 18.6.1 '@commitlint/types': 18.6.1 execa: 5.1.1 @@ -5063,7 +5066,7 @@ snapshots: '@commitlint/rules': 18.6.1 '@commitlint/types': 18.6.1 - '@commitlint/load@18.6.1(@types/node@20.12.8)(typescript@5.4.5)': + '@commitlint/load@18.6.1(@types/node@20.12.10)(typescript@5.4.5)': dependencies: '@commitlint/config-validator': 18.6.1 '@commitlint/execute-rule': 18.6.1 @@ -5071,7 +5074,7 @@ snapshots: '@commitlint/types': 18.6.1 chalk: 4.1.2 cosmiconfig: 8.3.6(typescript@5.4.5) - cosmiconfig-typescript-loader: 5.0.0(@types/node@20.12.8)(cosmiconfig@8.3.6(typescript@5.4.5))(typescript@5.4.5) + cosmiconfig-typescript-loader: 5.0.0(@types/node@20.12.10)(cosmiconfig@8.3.6(typescript@5.4.5))(typescript@5.4.5) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 @@ -5482,7 +5485,7 @@ snapshots: '@juggle/resize-observer@3.4.0': {} - '@keystar/ui@0.7.2(next@14.2.3(@playwright/test@1.43.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@keystar/ui@0.7.2(next@14.2.3(@playwright/test@1.44.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 '@emotion/css': 11.11.2 @@ -5570,9 +5573,9 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) optionalDependencies: - next: 14.2.3(@playwright/test@1.43.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 14.2.3(@playwright/test@1.44.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@keystatic/core@0.5.13(next@14.2.3(@playwright/test@1.43.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@keystatic/core@0.5.14(next@14.2.3(@playwright/test@1.44.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 '@braintree/sanitize-url': 6.0.4 @@ -5580,7 +5583,7 @@ snapshots: '@emotion/weak-memoize': 0.3.1 '@floating-ui/react': 0.24.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@internationalized/string': 3.2.2 - '@keystar/ui': 0.7.2(next@14.2.3(@playwright/test@1.43.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@keystar/ui': 0.7.2(next@14.2.3(@playwright/test@1.44.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@markdoc/markdoc': 0.4.0(@types/react@18.3.1)(react@18.3.1) '@react-aria/focus': 3.17.0(react@18.3.1) '@react-aria/i18n': 3.11.0(react@18.3.1) @@ -5657,13 +5660,13 @@ snapshots: - next - supports-color - '@keystatic/next@5.0.0(@keystatic/core@0.5.13(next@14.2.3(@playwright/test@1.43.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(next@14.2.3(@playwright/test@1.43.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@keystatic/next@5.0.0(@keystatic/core@0.5.14(next@14.2.3(@playwright/test@1.44.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(next@14.2.3(@playwright/test@1.44.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.24.5 - '@keystatic/core': 0.5.13(next@14.2.3(@playwright/test@1.43.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@keystatic/core': 0.5.14(next@14.2.3(@playwright/test@1.44.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/react': 18.3.1 chokidar: 3.6.0 - next: 14.2.3(@playwright/test@1.43.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 14.2.3(@playwright/test@1.44.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) server-only: 0.0.1 @@ -5771,9 +5774,9 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@playwright/test@1.43.1': + '@playwright/test@1.44.0': dependencies: - playwright: 1.43.1 + playwright: 1.44.0 '@polka/url@1.0.0-next.25': {} @@ -6891,7 +6894,7 @@ snapshots: '@types/node@16.11.13': {} - '@types/node@20.12.8': + '@types/node@20.12.10': dependencies: undici-types: 5.26.5 @@ -7024,7 +7027,7 @@ snapshots: '@urql/exchange-auth@2.1.6(graphql@16.8.1)': dependencies: - '@urql/core': 4.3.0(graphql@16.8.1) + '@urql/core': 5.0.3(graphql@16.8.1) wonka: 6.3.4 transitivePeerDependencies: - graphql @@ -7032,14 +7035,14 @@ snapshots: '@urql/exchange-graphcache@6.5.1(graphql@16.8.1)': dependencies: '@0no-co/graphql.web': 1.0.7(graphql@16.8.1) - '@urql/core': 4.3.0(graphql@16.8.1) + '@urql/core': 5.0.3(graphql@16.8.1) wonka: 6.3.4 transitivePeerDependencies: - graphql '@urql/exchange-persisted@4.2.0(graphql@16.8.1)': dependencies: - '@urql/core': 4.3.0(graphql@16.8.1) + '@urql/core': 5.0.3(graphql@16.8.1) wonka: 6.3.4 transitivePeerDependencies: - graphql @@ -7279,22 +7282,22 @@ snapshots: axe-core@4.7.0: {} - axe-core@4.9.0: {} + axe-core@4.9.1: {} - axe-html-reporter@2.2.3(axe-core@4.9.0): + axe-html-reporter@2.2.3(axe-core@4.9.1): dependencies: - axe-core: 4.9.0 + axe-core: 4.9.1 mustache: 4.2.0 rimraf: 3.0.2 - axe-playwright@2.0.1(playwright@1.43.1): + axe-playwright@2.0.1(playwright@1.44.0): dependencies: '@types/junit-report-builder': 3.0.2 - axe-core: 4.9.0 - axe-html-reporter: 2.2.3(axe-core@4.9.0) + axe-core: 4.9.1 + axe-html-reporter: 2.2.3(axe-core@4.9.1) junit-report-builder: 3.2.1 picocolors: 1.0.0 - playwright: 1.43.1 + playwright: 1.44.0 axios@1.6.8: dependencies: @@ -7517,9 +7520,9 @@ snapshots: cookie@0.5.0: {} - cosmiconfig-typescript-loader@5.0.0(@types/node@20.12.8)(cosmiconfig@8.3.6(typescript@5.4.5))(typescript@5.4.5): + cosmiconfig-typescript-loader@5.0.0(@types/node@20.12.10)(cosmiconfig@8.3.6(typescript@5.4.5))(typescript@5.4.5): dependencies: - '@types/node': 20.12.8 + '@types/node': 20.12.10 cosmiconfig: 8.3.6(typescript@5.4.5) jiti: 1.21.0 typescript: 5.4.5 @@ -8659,7 +8662,7 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 20.12.8 + '@types/node': 20.12.10 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -9371,15 +9374,15 @@ snapshots: neo-async@2.6.2: {} - next-intl@3.12.1(next@14.2.3(@playwright/test@1.43.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1): + next-intl@3.12.2(next@14.2.3(@playwright/test@1.44.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1): dependencies: '@formatjs/intl-localematcher': 0.2.32 negotiator: 0.6.3 - next: 14.2.3(@playwright/test@1.43.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + next: 14.2.3(@playwright/test@1.44.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 - use-intl: 3.12.1(react@18.3.1) + use-intl: 3.12.2(react@18.3.1) - next@14.2.3(@playwright/test@1.43.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + next@14.2.3(@playwright/test@1.44.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@next/env': 14.2.3 '@swc/helpers': 0.5.5 @@ -9400,7 +9403,7 @@ snapshots: '@next/swc-win32-arm64-msvc': 14.2.3 '@next/swc-win32-ia32-msvc': 14.2.3 '@next/swc-win32-x64-msvc': 14.2.3 - '@playwright/test': 1.43.1 + '@playwright/test': 1.44.0 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros @@ -9598,11 +9601,11 @@ snapshots: pirates@4.0.6: {} - playwright-core@1.43.1: {} + playwright-core@1.44.0: {} - playwright@1.43.1: + playwright@1.44.0: dependencies: - playwright-core: 1.43.1 + playwright-core: 1.44.0 optionalDependencies: fsevents: 2.3.2 @@ -10583,7 +10586,7 @@ snapshots: tslib@2.6.2: {} - tsx@4.9.0: + tsx@4.9.3: dependencies: esbuild: 0.20.2 get-tsconfig: 4.7.3 @@ -10733,7 +10736,7 @@ snapshots: transitivePeerDependencies: - graphql - use-intl@3.12.1(react@18.3.1): + use-intl@3.12.2(react@18.3.1): dependencies: '@formatjs/ecma402-abstract': 1.18.2 intl-messageformat: 10.5.11 diff --git a/readme.md b/readme.md index b245b14c4..e4bc1c632 100644 --- a/readme.md +++ b/readme.md @@ -6,8 +6,8 @@ deployed at . prerequisites: -- [Node.js v20](https://nodejs.org/en/download) -- [pnpm](https://pnpm.io/installation) +- [node.js v20](https://nodejs.org/en/download) +- [pnpm v9](https://pnpm.io/installation) set required environment variables in `.env.local`: