diff --git a/package-lock.json b/package-lock.json index c4def218..7503c41e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,29 +12,29 @@ "@radix-ui/react-navigation-menu": "^1.2.0", "@radix-ui/react-tooltip": "^1.2.0", "classnames": "^2.5.0", - "dangerously-set-html-content": "^1.0.13", + "dangerously-set-html-content": "^1.1.0", "date-fns": "^4.0.0", - "markdown-it": "^13.0.1", + "markdown-it": "^14.1.0", "next": "^16.1.0", - "next-seo": "^5.15.0", + "next-seo": "^7.1.0", "react": "^19.2.0", "react-dom": "^19.2.0", - "react-icons": "^4.2.0", + "react-icons": "^5.5.0", "sharp": "^0.34.0", - "typograf": "^6.11.1", - "valtio": "^2.1.7" + "typograf": "^7.6.0", + "valtio": "^2.3.0" }, "devDependencies": { "@testing-library/jest-dom": "^6.9.1", "@testing-library/react": "^16.3.2", - "@types/markdown-it": "^12.2.3", - "@types/node": "^22.19.9", + "@types/markdown-it": "^14.1.0", + "@types/node": "^25.2.0", "@types/react": "^19.2.0", "@typescript-eslint/eslint-plugin": "^8.54.0", "@typescript-eslint/parser": "^8.54.0", "eslint": "^9.0.0", "eslint-config-next": "^16.1.0", - "globals": "^16.0.0", + "globals": "^17.3.0", "happy-dom": "^20.5.0", "typescript": "^5.9.0", "vitest": "^4.0.18" @@ -2764,35 +2764,38 @@ "license": "MIT" }, "node_modules/@types/linkify-it": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz", - "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==", - "dev": true + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==", + "dev": true, + "license": "MIT" }, "node_modules/@types/markdown-it": { - "version": "12.2.3", - "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", - "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", - "dev": true, - "dependencies": { - "@types/linkify-it": "*", - "@types/mdurl": "*" - } - }, - "node_modules/@types/mdurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", - "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==", - "dev": true - }, - "node_modules/@types/node": { - "version": "22.19.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.9.tgz", - "integrity": "sha512-PD03/U8g1F9T9MI+1OBisaIARhSzeidsUjQaf51fOxrfjeiKN9bLVO06lHuHYjxdnqLWJijJHfqXPSJri2EM2A==", + "version": "14.1.2", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz", + "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~6.21.0" + "@types/linkify-it": "^5", + "@types/mdurl": "^2" + } + }, + "node_modules/@types/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "25.2.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.2.2.tgz", + "integrity": "sha512-BkmoP5/FhRYek5izySdkOneRyXYN35I860MFAGupTdebyE66uZaR+bXLHq8k4DirE5DwQi3NuhvRU1jqTVwUrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.16.0" } }, "node_modules/@types/react": { @@ -3749,9 +3752,10 @@ "license": "BSD-2-Clause" }, "node_modules/dangerously-set-html-content": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/dangerously-set-html-content/-/dangerously-set-html-content-1.0.13.tgz", - "integrity": "sha512-C/6Rm8L3BgjFX0ugETpWS3MyrRqTycVbqlSKDhqeoMaZAfCw2Xx1qcj4CYGnZnn61tCJ3JZdHnWCcNEXvhh4sA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/dangerously-set-html-content/-/dangerously-set-html-content-1.1.0.tgz", + "integrity": "sha512-kUHpnYZ9EgT6BKUEgrgccg17Pa0YdI9MlWdDYeu49HIXYONCxZpKr6Tj24q+LwFmbmtL3IJ1Rvj+aaTTzFOepg==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -3976,9 +3980,10 @@ } }, "node_modules/entities": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", - "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", "engines": { "node": ">=0.12" }, @@ -5098,9 +5103,9 @@ } }, "node_modules/globals": { - "version": "16.5.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-16.5.0.tgz", - "integrity": "sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==", + "version": "17.3.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-17.3.0.tgz", + "integrity": "sha512-yMqGUQVVCkD4tqjOJf3TnrvaaHDMYp4VlUSObbkIiuCPe/ofdMBFIAcBbCSRFWOnos6qRiTVStDwqPLUclaxIw==", "dev": true, "license": "MIT", "engines": { @@ -5177,19 +5182,6 @@ "node": ">=20.0.0" } }, - "node_modules/happy-dom/node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, "node_modules/has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", @@ -5921,11 +5913,12 @@ } }, "node_modules/linkify-it": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-4.0.1.tgz", - "integrity": "sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "license": "MIT", "dependencies": { - "uc.micro": "^1.0.1" + "uc.micro": "^2.0.0" } }, "node_modules/locate-path": { @@ -5993,18 +5986,20 @@ } }, "node_modules/markdown-it": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.1.tgz", - "integrity": "sha512-lTlxriVoy2criHP0JKRhO2VDG9c2ypWCsT237eDiLqi09rmbKoUetyGHq2uOIRoRS//kfoJckS0eUzzkDR+k2Q==", + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", + "license": "MIT", "dependencies": { "argparse": "^2.0.1", - "entities": "~3.0.1", - "linkify-it": "^4.0.1", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" }, "bin": { - "markdown-it": "bin/markdown-it.js" + "markdown-it": "bin/markdown-it.mjs" } }, "node_modules/math-intrinsics": { @@ -6018,9 +6013,10 @@ } }, "node_modules/mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "license": "MIT" }, "node_modules/merge2": { "version": "1.4.1", @@ -6171,13 +6167,12 @@ } }, "node_modules/next-seo": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/next-seo/-/next-seo-5.15.0.tgz", - "integrity": "sha512-LGbcY91yDKGMb7YI+28n3g+RuChUkt6pXNpa8FkfKkEmNiJkeRDEXTnnjVtwT9FmMhG6NH8qwHTelGrlYm9rgg==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/next-seo/-/next-seo-7.1.0.tgz", + "integrity": "sha512-gTWm9wnAXvtqD8QPIpbBA6iMnqMp1WyNTGza9QJPabVIPoX+ZDt1/J0KUkziiIKRyad+nSGLC0BfHgekqcfq0Q==", "peerDependencies": { - "next": "^8.1.1-canary.54 || >=9.0.0", - "react": ">=16.0.0", - "react-dom": ">=16.0.0" + "next": ">=13.4.0", + "react": ">=18.2.0" } }, "node_modules/node-releases": { @@ -6576,6 +6571,15 @@ "node": ">=6" } }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -6618,9 +6622,10 @@ } }, "node_modules/react-icons": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.2.0.tgz", - "integrity": "sha512-rmzEDFt+AVXRzD7zDE21gcxyBizD/3NqjbX6cmViAgdqfJ2UiLer8927/QhhrXQV7dEj/1EGuOTPp7JnLYVJKQ==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-5.5.0.tgz", + "integrity": "sha512-MEFcXdkP3dLo8uumGI5xN3lDFNsRtrjbOEKDLD7yv76v4wpnEq2Lt2qeHaQOr34I/wPN3s3+N08WkQ+CW37Xiw==", + "license": "MIT", "peerDependencies": { "react": "*" } @@ -7567,17 +7572,19 @@ } }, "node_modules/typograf": { - "version": "6.11.1", - "resolved": "https://registry.npmjs.org/typograf/-/typograf-6.11.1.tgz", - "integrity": "sha512-j4PA+q7DkDzmSp+ejDgDZM3njqH7+EAzta286zRqh113E+HpKq/x2VbWYeNxk2PmzpRvAqAHILlfJb0IWEIgDg==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/typograf/-/typograf-7.6.0.tgz", + "integrity": "sha512-sqYx4X1L7EDNRuJpqg/V+GCWMOpzVD5Om9IW0udi294sQYPwGGeRpPwsLC3gPt2BTsLtLiWJKpkwiyuO5PK2lQ==", + "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "license": "MIT" }, "node_modules/unbox-primitive": { "version": "1.1.0", @@ -7599,9 +7606,9 @@ } }, "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", "dev": true, "license": "MIT" }, @@ -7647,9 +7654,9 @@ } }, "node_modules/valtio": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/valtio/-/valtio-2.1.7.tgz", - "integrity": "sha512-DwJhCDpujuQuKdJ2H84VbTjEJJteaSmqsuUltsfbfdbotVfNeTE4K/qc/Wi57I9x8/2ed4JNdjEna7O6PfavRg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/valtio/-/valtio-2.3.0.tgz", + "integrity": "sha512-1MfKNcmOIdBSatiJsYgw420n6jnD+jeoI0V+RkOQbCB0ElLh6GKUfPr0hc9uq/KBGeghivDEarRsKFFdSQQnKw==", "license": "MIT", "dependencies": { "proxy-compare": "^3.0.1" diff --git a/package.json b/package.json index 42da07ea..af70817c 100644 --- a/package.json +++ b/package.json @@ -22,17 +22,17 @@ "@radix-ui/react-navigation-menu": "^1.2.0", "@radix-ui/react-tooltip": "^1.2.0", "classnames": "^2.5.0", - "dangerously-set-html-content": "^1.0.13", + "dangerously-set-html-content": "^1.1.0", "date-fns": "^4.0.0", - "markdown-it": "^13.0.1", + "markdown-it": "^14.1.0", "next": "^16.1.0", - "next-seo": "^5.15.0", + "next-seo": "^7.1.0", "react": "^19.2.0", "react-dom": "^19.2.0", - "react-icons": "^4.2.0", + "react-icons": "^5.5.0", "sharp": "^0.34.0", - "typograf": "^6.11.1", - "valtio": "^2.1.7" + "typograf": "^7.6.0", + "valtio": "^2.3.0" }, "overrides": { "dangerously-set-html-content": { @@ -42,14 +42,14 @@ "devDependencies": { "@testing-library/jest-dom": "^6.9.1", "@testing-library/react": "^16.3.2", - "@types/markdown-it": "^12.2.3", - "@types/node": "^22.19.9", + "@types/markdown-it": "^14.1.0", + "@types/node": "^25.2.0", "@types/react": "^19.2.0", "@typescript-eslint/eslint-plugin": "^8.54.0", "@typescript-eslint/parser": "^8.54.0", "eslint": "^9.0.0", "eslint-config-next": "^16.1.0", - "globals": "^16.0.0", + "globals": "^17.3.0", "happy-dom": "^20.5.0", "typescript": "^5.9.0", "vitest": "^4.0.18" diff --git a/pages/[...slug].tsx b/pages/[...slug].tsx index 1a5d94ea..5e5d1eb9 100644 --- a/pages/[...slug].tsx +++ b/pages/[...slug].tsx @@ -1,7 +1,7 @@ import Head from "next/head" import { App } from "@/components/App" import { Page } from "@/components/Page" -import { NextSeo } from "next-seo" +import { generateNextSeo } from "next-seo/pages" import { MetaBuilder } from "@/lib/meta" import type { GetStaticProps, NextPage } from "next" import type { BreadcrumbPart, MenuItem, Meta, Tag, Sign, Token } from "@/types" @@ -38,12 +38,12 @@ const Index: NextPage = props => { return ( <> - {!props.meta ? null : ( - + {!props.meta ? null : generateNextSeo({ + title: props.meta.title, + description: props.meta.description, + canonical: "https://art.shlisselburg.org/", + openGraph: { url: props.meta.url, title: props.meta.title, description: props.meta.description, @@ -56,10 +56,11 @@ const Index: NextPage = props => { type: "image/jpeg", }, ], - site_name: props.meta.siteName, - }} - /> - )} + siteName: props.meta.siteName, + }, + })} + {props.title} + = props => { menu={props.menu} breadcrumbs={props.breadcrumb} > - - {props.title} - = props => { return ( <> - + {generateNextSeo({ title: props.meta.title, description: props.meta.description, - images: [ - { - url: props.meta.image, - width: props.meta.imageWidth, - height: props.meta.imageHeight, - alt: props.meta.description, - type: "image/jpeg", - }, - ], - site_name: props.meta.siteName, - }} - /> - + canonical: "https://art.shlisselburg.org/", + openGraph: { + url: props.meta.url, + title: props.meta.title, + description: props.meta.description, + images: [ + { + url: props.meta.image, + width: props.meta.imageWidth, + height: props.meta.imageHeight, + alt: props.meta.description, + type: "image/jpeg", + }, + ], + siteName: props.meta.siteName, + }, + })} {props.title}