diff --git a/astro.config.mjs b/astro.config.mjs index 4826b07..53f0965 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -3,7 +3,6 @@ import { defineConfig } from "astro/config"; /** * Integrations */ -// import mdx from "@astrojs/mdx"; import sitemap from "@astrojs/sitemap"; import solidJs from "@astrojs/solid-js"; import image from "@astrojs/image"; @@ -65,28 +64,31 @@ export default defineConfig({ * Articles */ { - name: "posts", + name: "articles", label: "Публикации", label_singular: "публикацию", description: "Технические статьи, туториалы и различные справочные материалы которые связаны с IT тематикой", folder: "src/content/blog", - slug: "{{year}}-{{month}}-{{day}}_{{slug}}", + slug: "{{slug}}", create: true, delete: true, + i18n: true, fields: [ { name: "coverImage", widget: "image", label: "Постер", + required: false, + i18n: true, }, { name: "draft", label: "В черновике", widget: "boolean", - required: true, - default: true, hint: "Опубликована ли статья", + i18n: true, + required: false, }, { name: "author", @@ -95,19 +97,19 @@ export default defineConfig({ search_fields: ["firstName", "lastName"], collection: "authors", label: "Автор", - required: true, + i18n: true, }, { name: "title", widget: "string", label: "Заголовок", - required: true, + i18n: true, }, { name: "description", widget: "string", label: "Описание", - required: true, + i18n: true, }, { name: "tags", @@ -117,25 +119,27 @@ export default defineConfig({ multiple: true, value_field: "title", search_fields: ["title"], + i18n: true, }, { name: "pubDate", widget: "datetime", label: "Дата публикации", - required: true, picker_utc: true, + i18n: true, }, { name: "updatedDate", widget: "datetime", label: "Дата обновления", - required: true, picker_utc: true, + i18n: true, }, { name: "body", widget: "markdown", label: "Содержание", + i18n: true, }, ], }, @@ -171,24 +175,28 @@ export default defineConfig({ folder: "src/content/authors", create: true, delete: true, + i18n: true, fields: [ { label: "Имя", name: "firstName", widget: "string", required: true, + i18n: true, }, { label: "Фамилия", name: "lastName", widget: "string", required: true, + i18n: true, }, { label: "Об авторе", name: "body", widget: "markdown", required: false, + i18n: true, }, ], }, @@ -199,6 +207,7 @@ export default defineConfig({ name: "projects", label: "Проекты", label_singular: "проект", + description: "Основные проекты, которые были разработаны в выложены в открытый доступ", folder: "src/content/projects", create: true, delete: true, @@ -211,18 +220,9 @@ export default defineConfig({ required: true, i18n: true, }, - { - name: "draft", - label: "В черновике", - widget: "boolean", - required: true, - i18n: true, - default: true, - }, { name: "title", label: "Название", - default: "my-project", widget: "string", required: true, i18n: true, @@ -231,7 +231,6 @@ export default defineConfig({ name: "year", label: "В каком году разработал", widget: "number", - default: 2023, required: true, i18n: true, }, @@ -308,9 +307,9 @@ export default defineConfig({ label: "Настройки", files: [ { - name: "site-settings", + name: "siteconfig", label: "Настройки веб-сайта", - file: "src/content/site-settings.md", + file: "siteconfig.json", fields: [ { label: "Глобальный заголовок", @@ -320,8 +319,9 @@ export default defineConfig({ }, { label: "В разработке", - name: "isUnderConstruction", + name: "isSiteUnderConstruction", widget: "boolean", + required: false, default: false, hint: "Отображает баннер на всех старницах о том, что веб-сайт находится в разработке", }, diff --git a/package-lock.json b/package-lock.json index cfc03a9..3835b70 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,11 +10,11 @@ "license": "MIT", "dependencies": { "@astrojs/image": "^0.14.1", - "@astrojs/mdx": "^0.16.0", "@astrojs/rss": "^2.1.0", "@astrojs/sitemap": "^1.0.1", "@astrojs/solid-js": "^2.0.2", "@netlify/functions": "^1.4.0", + "@sindresorhus/slugify": "^2.2.0", "astro": "^2.0.10", "astro-icon": "^0.8.0", "astro-netlify-cms": "^0.5.3", @@ -123,33 +123,6 @@ "astro": "^2.0.2" } }, - "node_modules/@astrojs/mdx": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@astrojs/mdx/-/mdx-0.16.0.tgz", - "integrity": "sha512-HNk0FhNNthI7+pLmheJyPVU36dXE5l+9UwmmnrMV6COHNZIO2t+pnWnsushEDYZjpkYITDwnXKnQAtD8Mqj4xw==", - "dependencies": { - "@astrojs/markdown-remark": "^2.0.1", - "@astrojs/prism": "^2.0.0", - "@mdx-js/mdx": "^2.1.2", - "@mdx-js/rollup": "^2.1.1", - "acorn": "^8.8.0", - "es-module-lexer": "^0.10.5", - "estree-util-visit": "^1.2.0", - "github-slugger": "^1.4.0", - "gray-matter": "^4.0.3", - "kleur": "^4.1.4", - "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.0", - "vfile": "^5.3.2" - }, - "engines": { - "node": ">=16.12.0" - } - }, "node_modules/@astrojs/prism": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-2.0.0.tgz", @@ -1428,52 +1401,6 @@ "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.0.tgz", "integrity": "sha512-HPnRdYO0WjFjRTSwO3frz1wKaU649OBFPX3Zo/2WZvuRi6zMiRGui8SnPQiQABgqCf8YikDe5t3HViTVw1WUzA==" }, - "node_modules/@mdx-js/mdx": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-2.3.0.tgz", - "integrity": "sha512-jLuwRlz8DQfQNiUCJR50Y09CGPq3fLtmtUQfVrj79E0JWu3dvsVcxVIcfhR5h0iXu+/z++zDrYeiJqifRynJkA==", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/mdx": "^2.0.0", - "estree-util-build-jsx": "^2.0.0", - "estree-util-is-identifier-name": "^2.0.0", - "estree-util-to-js": "^1.1.0", - "estree-walker": "^3.0.0", - "hast-util-to-estree": "^2.0.0", - "markdown-extensions": "^1.0.0", - "periscopic": "^3.0.0", - "remark-mdx": "^2.0.0", - "remark-parse": "^10.0.0", - "remark-rehype": "^10.0.0", - "unified": "^10.0.0", - "unist-util-position-from-estree": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "unist-util-visit": "^4.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/rollup": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@mdx-js/rollup/-/rollup-2.3.0.tgz", - "integrity": "sha512-wLvRfJS/M4UmdqTd+WoaySEE7q4BIejYf1xAHXYvtT1du/1Tl/z2450Gg2+Hu7fh05KwRRiehiTP9Yc/Dtn0fA==", - "dependencies": { - "@mdx-js/mdx": "^2.0.0", - "@rollup/pluginutils": "^5.0.0", - "source-map": "^0.7.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "rollup": ">=2" - } - }, "node_modules/@netlify/functions": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/@netlify/functions/-/functions-1.4.0.tgz", @@ -1556,31 +1483,56 @@ "resolved": "https://registry.npmjs.org/@react-dnd/shallowequal/-/shallowequal-2.0.0.tgz", "integrity": "sha512-Pc/AFTdwZwEKJxFJvlxrSmGe/di+aAOBn60sremrpLo6VI/6cmiUYNNwlI5KNYttg7uypzA3ILPMPgxB2GYZEg==" }, - "node_modules/@rollup/pluginutils": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", - "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "node_modules/@sindresorhus/slugify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/slugify/-/slugify-2.2.0.tgz", + "integrity": "sha512-9Vybc/qX8Kj6pxJaapjkFbiUJPk7MAkCh/GFCxIBnnsuYCFPIXKvnLidG8xlepht3i24L5XemUmGtrJ3UWrl6w==", "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" + "@sindresorhus/transliterate": "^1.0.0", + "escape-string-regexp": "^5.0.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=12" }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@rollup/pluginutils/node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + "node_modules/@sindresorhus/slugify/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@sindresorhus/transliterate": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/transliterate/-/transliterate-1.6.0.tgz", + "integrity": "sha512-doH1gimEu3A46VX6aVxpHTeHrytJAG6HgdxntYnCFiIFHEM/ZGpG8KiZGBChchjQmG0XFIBL552kBTjVcMZXwQ==", + "dependencies": { + "escape-string-regexp": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@sindresorhus/transliterate/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/@trysound/sax": { "version": "0.2.0", @@ -1590,14 +1542,6 @@ "node": ">=10.13.0" } }, - "node_modules/@types/acorn": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz", - "integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==", - "dependencies": { - "@types/estree": "*" - } - }, "node_modules/@types/babel__core": { "version": "7.20.0", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz", @@ -1648,14 +1592,6 @@ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" }, - "node_modules/@types/estree-jsx": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.0.tgz", - "integrity": "sha512-3qvGd0z8F2ENTGr/GG1yViqfiKmRfrXVx5sJyHGFu3z7m5g5utCQtGp/g29JnjflhtQJBv1WDQukHiT58xPcYQ==", - "dependencies": { - "@types/estree": "*" - } - }, "node_modules/@types/hast": { "version": "2.3.4", "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz", @@ -1686,11 +1622,6 @@ "@types/unist": "*" } }, - "node_modules/@types/mdx": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.3.tgz", - "integrity": "sha512-IgHxcT3RC8LzFLhKwP3gbMPeaK7BM9eBH46OdapPA7yvuIUJ8H6zHZV53J8hGZcTSnt95jANt+rTBNUUc22ACQ==" - }, "node_modules/@types/mime-types": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.1.tgz", @@ -1880,14 +1811,6 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, "node_modules/ajv": { "version": "8.12.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", @@ -2208,14 +2131,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/astring": { - "version": "1.8.4", - "resolved": "https://registry.npmjs.org/astring/-/astring-1.8.4.tgz", - "integrity": "sha512-97a+l2LBU3Op3bBQEff79i/E4jMD2ZLFD8rHx9B6mXyB2uQwhJQYfiDqUwtfjF4QA1F2qs//N6Cw8LetMbQjcw==", - "bin": { - "astring": "bin/astring" - } - }, "node_modules/astro": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/astro/-/astro-2.0.10.tgz", @@ -2833,15 +2748,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/character-reference-invalid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", - "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -3635,11 +3541,6 @@ "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" }, - "node_modules/es-module-lexer": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.10.5.tgz", - "integrity": "sha512-+7IwY/kiGAacQfY+YBhKMvEmyAJnw5grTUgjG85Pe7vcUI/6b7pZjZG8nQ7+48YhzEAEqrEgD2dCz/JIK+AYvw==" - }, "node_modules/es-set-tostringtag": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", @@ -3746,68 +3647,6 @@ "esrever": "bin/esrever" } }, - "node_modules/estree-util-attach-comments": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-2.1.1.tgz", - "integrity": "sha512-+5Ba/xGGS6mnwFbXIuQiDPTbuTxuMCooq3arVv7gPZtYpjp+VXH/NkHAP35OOefPhNG/UGqU3vt/LTABwcHX0w==", - "dependencies": { - "@types/estree": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-util-build-jsx": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-2.2.2.tgz", - "integrity": "sha512-m56vOXcOBuaF+Igpb9OPAy7f9w9OIkb5yhjsZuaPm7HoGi4oTOQi0h2+yZ+AtKklYFZ+rPC4n0wYCJCEU1ONqg==", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "estree-util-is-identifier-name": "^2.0.0", - "estree-walker": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-util-is-identifier-name": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-2.1.0.tgz", - "integrity": "sha512-bEN9VHRyXAUOjkKVQVvArFym08BTWB0aJPppZZr0UNyAqWsLaVfAqP7hbaTJjzHifmB5ebnR8Wm7r7yGN/HonQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-util-to-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-1.2.0.tgz", - "integrity": "sha512-IzU74r1PK5IMMGZXUVZbmiu4A1uhiPgW5hm1GjcOfr4ZzHaMPpLNJjR7HjXiIOzi25nZDrgFTobHTkV5Q6ITjA==", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "astring": "^1.8.0", - "source-map": "^0.7.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/estree-util-visit": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-1.2.1.tgz", - "integrity": "sha512-xbgqcrkIVbIG+lI/gzbvd9SGTJL4zqJKBFttUl5pP27KhAjtMKbX/mQXJ7qgyXpMgVy/zvpm0xoQQaGL8OloOw==", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/estree-walker": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", @@ -3995,18 +3834,6 @@ "reusify": "^1.0.4" } }, - "node_modules/fault": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz", - "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==", - "dependencies": { - "format": "^0.2.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/fecha": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", @@ -4122,14 +3949,6 @@ "is-callable": "^1.1.3" } }, - "node_modules/format": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", - "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==", - "engines": { - "node": ">=0.4.x" - } - }, "node_modules/formdata-polyfill": { "version": "4.0.10", "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", @@ -4608,32 +4427,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/hast-util-to-estree": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-2.3.2.tgz", - "integrity": "sha512-YYDwATNdnvZi3Qi84iatPIl1lWpXba1MeNrNbDfJfVzEBZL8uUmtR7mt7bxKBC8kuAuvb0bkojXYZzsNHyHCLg==", - "dependencies": { - "@types/estree": "^1.0.0", - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^2.0.0", - "@types/unist": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "estree-util-attach-comments": "^2.0.0", - "estree-util-is-identifier-name": "^2.0.0", - "hast-util-whitespace": "^2.0.0", - "mdast-util-mdx-expression": "^1.0.0", - "mdast-util-mdxjs-esm": "^1.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "style-to-object": "^0.4.1", - "unist-util-position": "^4.0.0", - "zwitch": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/hast-util-to-html": { "version": "8.0.4", "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-8.0.4.tgz", @@ -5037,15 +4830,6 @@ "node": ">= 0.10" } }, - "node_modules/is-alphabetical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", - "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/is-alphanumeric": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz", @@ -5054,19 +4838,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-alphanumerical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", - "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", - "dependencies": { - "is-alphabetical": "^2.0.0", - "is-decimal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/is-array-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz", @@ -5181,15 +4952,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-decimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", - "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/is-docker": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", @@ -5239,15 +5001,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-hexadecimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", - "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/is-hotkey": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/is-hotkey/-/is-hotkey-0.2.0.tgz", @@ -5329,14 +5082,6 @@ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==" }, - "node_modules/is-reference": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.1.tgz", - "integrity": "sha512-baJJdQLiYaJdvFbJqXrcGv3WU3QCzBlUcI5QhbesIm6/xPsvmO+2CDoi/GMOFBQEQm+PXkwOPrp9KK5ozZsp2w==", - "dependencies": { - "@types/estree": "*" - } - }, "node_modules/is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -5795,14 +5540,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/markdown-extensions": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-1.1.1.tgz", - "integrity": "sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/markdown-table": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.3.tgz", @@ -5913,20 +5650,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-frontmatter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-1.0.1.tgz", - "integrity": "sha512-JjA2OjxRqAa8wEG8hloD0uTU0kdn8kbtOWpPP94NBkfAlbxn4S8gCGf/9DwFtEeGPXrDcNXdiDjVaRdUFqYokw==", - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-to-markdown": "^1.3.0", - "micromark-extension-frontmatter": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/mdast-util-gfm": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-2.0.2.tgz", @@ -6015,77 +5738,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-mdx": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-2.0.1.tgz", - "integrity": "sha512-38w5y+r8nyKlGvNjSEqWrhG0w5PmnRA+wnBvm+ulYCct7nsGYhFVb0lljS9bQav4psDAS1eGkP2LMVcZBi/aqw==", - "dependencies": { - "mdast-util-from-markdown": "^1.0.0", - "mdast-util-mdx-expression": "^1.0.0", - "mdast-util-mdx-jsx": "^2.0.0", - "mdast-util-mdxjs-esm": "^1.0.0", - "mdast-util-to-markdown": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdx-expression": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-1.3.2.tgz", - "integrity": "sha512-xIPmR5ReJDu/DHH1OoIT1HkuybIfRGYRywC+gJtI7qHjCJp/M9jrmBEJW22O8lskDWm562BX2W8TiAwRTb0rKA==", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^2.0.0", - "@types/mdast": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "mdast-util-to-markdown": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdx-jsx": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-2.1.2.tgz", - "integrity": "sha512-o9vBCYQK5ZLGEj3tCGISJGjvafyHRVJlZmfJzSE7xjiogSzIeph/Z4zMY65q4WGRMezQBeAwPlrdymDYYYx0tA==", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^2.0.0", - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "ccount": "^2.0.0", - "mdast-util-from-markdown": "^1.1.0", - "mdast-util-to-markdown": "^1.3.0", - "parse-entities": "^4.0.0", - "stringify-entities": "^4.0.0", - "unist-util-remove-position": "^4.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-mdxjs-esm": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-1.3.1.tgz", - "integrity": "sha512-SXqglS0HrEvSdUEfoXFtcg7DRl7S2cwOXc7jkuusG472Mmjag34DUDeOJUZtl+BVnyeO1frIgVpHlNRWc2gk/w==", - "dependencies": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^2.0.0", - "@types/mdast": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "mdast-util-to-markdown": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/mdast-util-phrasing": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-3.0.1.tgz", @@ -6270,20 +5922,6 @@ "uvu": "^0.5.0" } }, - "node_modules/micromark-extension-frontmatter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-1.0.0.tgz", - "integrity": "sha512-EXjmRnupoX6yYuUJSQhrQ9ggK0iQtQlpi6xeJzVD5xscyAI+giqco5fdymayZhJMbIFecjnE2yz85S9NzIgQpg==", - "dependencies": { - "fault": "^2.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/micromark-extension-gfm": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-2.0.1.tgz", @@ -6399,100 +6037,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/micromark-extension-mdx-expression": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-1.0.4.tgz", - "integrity": "sha512-TCgLxqW6ReQ3AJgtj1P0P+8ZThBTloLbeb7jNaqr6mCOLDpxUiBFE/9STgooMZttEwOQu5iEcCCa3ZSDhY9FGw==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-factory-mdx-expression": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-events-to-acorn": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "node_modules/micromark-extension-mdx-jsx": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-1.0.3.tgz", - "integrity": "sha512-VfA369RdqUISF0qGgv2FfV7gGjHDfn9+Qfiv5hEwpyr1xscRj/CiVRkU7rywGFCO7JwJ5L0e7CJz60lY52+qOA==", - "dependencies": { - "@types/acorn": "^4.0.0", - "estree-util-is-identifier-name": "^2.0.0", - "micromark-factory-mdx-expression": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0", - "vfile-message": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-mdx-md": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-1.0.0.tgz", - "integrity": "sha512-xaRAMoSkKdqZXDAoSgp20Azm0aRQKGOl0RrS81yGu8Hr/JhMsBmfs4wR7m9kgVUIO36cMUQjNyiyDKPrsv8gOw==", - "dependencies": { - "micromark-util-types": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-mdxjs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-1.0.0.tgz", - "integrity": "sha512-TZZRZgeHvtgm+IhtgC2+uDMR7h8eTKF0QUX9YsgoL9+bADBpBY6SiLvWqnBlLbCEevITmTqmEuY3FoxMKVs1rQ==", - "dependencies": { - "acorn": "^8.0.0", - "acorn-jsx": "^5.0.0", - "micromark-extension-mdx-expression": "^1.0.0", - "micromark-extension-mdx-jsx": "^1.0.0", - "micromark-extension-mdx-md": "^1.0.0", - "micromark-extension-mdxjs-esm": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-types": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-mdxjs-esm": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-1.0.3.tgz", - "integrity": "sha512-2N13ol4KMoxb85rdDwTAC6uzs8lMX0zeqpcyx7FhS7PxXomOnLactu8WI8iBNXW8AVyea3KIJd/1CKnUmwrK9A==", - "dependencies": { - "micromark-core-commonmark": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-events-to-acorn": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-position-from-estree": "^1.1.0", - "uvu": "^0.5.0", - "vfile-message": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/micromark-factory-destination": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.0.0.tgz", @@ -6534,31 +6078,6 @@ "uvu": "^0.5.0" } }, - "node_modules/micromark-factory-mdx-expression": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-1.0.7.tgz", - "integrity": "sha512-QAdFbkQagTZ/eKb8zDGqmjvgevgJH3+aQpvvKrXWxNJp3o8/l2cAbbrBd0E04r0Gx6nssPpqWIjnbHFvZu5qsQ==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-events-to-acorn": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-position-from-estree": "^1.0.0", - "uvu": "^0.5.0", - "vfile-message": "^3.0.0" - } - }, "node_modules/micromark-factory-space": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz", @@ -6751,30 +6270,6 @@ } ] }, - "node_modules/micromark-util-events-to-acorn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-1.2.1.tgz", - "integrity": "sha512-mkg3BaWlw6ZTkQORrKVBW4o9ICXPxLtGz51vml5mQpKFdo9vqIX68CAx5JhTOdjQyAHH7JFmm4rh8toSPQZUmg==", - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "@types/acorn": "^4.0.0", - "@types/estree": "^1.0.0", - "estree-util-visit": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0", - "vfile-location": "^4.0.0", - "vfile-message": "^3.0.0" - } - }, "node_modules/micromark-util-html-tag-name": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.1.0.tgz", @@ -9074,25 +8569,6 @@ "node": ">=6" } }, - "node_modules/parse-entities": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz", - "integrity": "sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==", - "dependencies": { - "@types/unist": "^2.0.0", - "character-entities": "^2.0.0", - "character-entities-legacy": "^3.0.0", - "character-reference-invalid": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "is-alphanumerical": "^2.0.0", - "is-decimal": "^2.0.0", - "is-hexadecimal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/parse-headers": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", @@ -9188,16 +8664,6 @@ "pbf": "bin/pbf" } }, - "node_modules/periscopic": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", - "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^3.0.0", - "is-reference": "^3.0.0" - } - }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -10756,21 +10222,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-frontmatter": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-4.0.1.tgz", - "integrity": "sha512-38fJrB0KnmD3E33a5jZC/5+gGAC2WKNiPw1/fdXJvijBlhA7RCsvJklrYJakS0HedninvaCYW8lQGf9C918GfA==", - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-frontmatter": "^1.0.0", - "micromark-extension-frontmatter": "^1.0.0", - "unified": "^10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/remark-gfm": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-3.0.1.tgz", @@ -10786,19 +10237,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-mdx": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-2.3.0.tgz", - "integrity": "sha512-g53hMkpM0I98MU266IzDFMrTD980gNF3BJnkyFcmN+dD873mQeD5rdMO3Y2X+x8umQfbSE0PcoEDl7ledSA+2g==", - "dependencies": { - "mdast-util-mdx": "^2.0.0", - "micromark-extension-mdxjs": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/remark-parse": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.1.tgz", @@ -12069,14 +11507,6 @@ "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" }, - "node_modules/style-to-object": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.1.tgz", - "integrity": "sha512-HFpbb5gr2ypci7Qw+IOhnP2zOU7e77b+rzM+wTzXzfi1PrtBCX0E7Pk4wL4iTLnhzZ+JgEGAhX81ebTg/aYjQw==", - "dependencies": { - "inline-style-parser": "0.1.1" - } - }, "node_modules/stylis": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.3.tgz", @@ -12579,31 +12009,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/unist-util-position-from-estree": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-1.1.2.tgz", - "integrity": "sha512-poZa0eXpS+/XpoQwGwl79UUdea4ol2ZuCYguVaJS4qzIOMDzbqz8a3erUCOmubSZkaOuGamb3tX790iwOIROww==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-remove-position": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-4.0.2.tgz", - "integrity": "sha512-TkBb0HABNmxzAcfLf4qsIbFbaPDvMO6wa3b3j4VcEzFVaw1LBKwnW4/sRJ/atSLSzoIg41JWEdnE7N6DIhGDGQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-visit": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/unist-util-stringify-position": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", @@ -13362,30 +12767,6 @@ "vfile": "^5.3.2" } }, - "@astrojs/mdx": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@astrojs/mdx/-/mdx-0.16.0.tgz", - "integrity": "sha512-HNk0FhNNthI7+pLmheJyPVU36dXE5l+9UwmmnrMV6COHNZIO2t+pnWnsushEDYZjpkYITDwnXKnQAtD8Mqj4xw==", - "requires": { - "@astrojs/markdown-remark": "^2.0.1", - "@astrojs/prism": "^2.0.0", - "@mdx-js/mdx": "^2.1.2", - "@mdx-js/rollup": "^2.1.1", - "acorn": "^8.8.0", - "es-module-lexer": "^0.10.5", - "estree-util-visit": "^1.2.0", - "github-slugger": "^1.4.0", - "gray-matter": "^4.0.3", - "kleur": "^4.1.4", - "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.0", - "vfile": "^5.3.2" - } - }, "@astrojs/prism": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-2.0.0.tgz", @@ -14292,41 +13673,6 @@ "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.0.tgz", "integrity": "sha512-HPnRdYO0WjFjRTSwO3frz1wKaU649OBFPX3Zo/2WZvuRi6zMiRGui8SnPQiQABgqCf8YikDe5t3HViTVw1WUzA==" }, - "@mdx-js/mdx": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-2.3.0.tgz", - "integrity": "sha512-jLuwRlz8DQfQNiUCJR50Y09CGPq3fLtmtUQfVrj79E0JWu3dvsVcxVIcfhR5h0iXu+/z++zDrYeiJqifRynJkA==", - "requires": { - "@types/estree-jsx": "^1.0.0", - "@types/mdx": "^2.0.0", - "estree-util-build-jsx": "^2.0.0", - "estree-util-is-identifier-name": "^2.0.0", - "estree-util-to-js": "^1.1.0", - "estree-walker": "^3.0.0", - "hast-util-to-estree": "^2.0.0", - "markdown-extensions": "^1.0.0", - "periscopic": "^3.0.0", - "remark-mdx": "^2.0.0", - "remark-parse": "^10.0.0", - "remark-rehype": "^10.0.0", - "unified": "^10.0.0", - "unist-util-position-from-estree": "^1.0.0", - "unist-util-stringify-position": "^3.0.0", - "unist-util-visit": "^4.0.0", - "vfile": "^5.0.0" - } - }, - "@mdx-js/rollup": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@mdx-js/rollup/-/rollup-2.3.0.tgz", - "integrity": "sha512-wLvRfJS/M4UmdqTd+WoaySEE7q4BIejYf1xAHXYvtT1du/1Tl/z2450Gg2+Hu7fh05KwRRiehiTP9Yc/Dtn0fA==", - "requires": { - "@mdx-js/mdx": "^2.0.0", - "@rollup/pluginutils": "^5.0.0", - "source-map": "^0.7.0", - "vfile": "^5.0.0" - } - }, "@netlify/functions": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/@netlify/functions/-/functions-1.4.0.tgz", @@ -14391,20 +13737,34 @@ "resolved": "https://registry.npmjs.org/@react-dnd/shallowequal/-/shallowequal-2.0.0.tgz", "integrity": "sha512-Pc/AFTdwZwEKJxFJvlxrSmGe/di+aAOBn60sremrpLo6VI/6cmiUYNNwlI5KNYttg7uypzA3ILPMPgxB2GYZEg==" }, - "@rollup/pluginutils": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", - "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "@sindresorhus/slugify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/slugify/-/slugify-2.2.0.tgz", + "integrity": "sha512-9Vybc/qX8Kj6pxJaapjkFbiUJPk7MAkCh/GFCxIBnnsuYCFPIXKvnLidG8xlepht3i24L5XemUmGtrJ3UWrl6w==", "requires": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" + "@sindresorhus/transliterate": "^1.0.0", + "escape-string-regexp": "^5.0.0" }, "dependencies": { - "estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + "escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==" + } + } + }, + "@sindresorhus/transliterate": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/transliterate/-/transliterate-1.6.0.tgz", + "integrity": "sha512-doH1gimEu3A46VX6aVxpHTeHrytJAG6HgdxntYnCFiIFHEM/ZGpG8KiZGBChchjQmG0XFIBL552kBTjVcMZXwQ==", + "requires": { + "escape-string-regexp": "^5.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==" } } }, @@ -14413,14 +13773,6 @@ "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==" }, - "@types/acorn": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz", - "integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==", - "requires": { - "@types/estree": "*" - } - }, "@types/babel__core": { "version": "7.20.0", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz", @@ -14471,14 +13823,6 @@ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" }, - "@types/estree-jsx": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.0.tgz", - "integrity": "sha512-3qvGd0z8F2ENTGr/GG1yViqfiKmRfrXVx5sJyHGFu3z7m5g5utCQtGp/g29JnjflhtQJBv1WDQukHiT58xPcYQ==", - "requires": { - "@types/estree": "*" - } - }, "@types/hast": { "version": "2.3.4", "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz", @@ -14509,11 +13853,6 @@ "@types/unist": "*" } }, - "@types/mdx": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.3.tgz", - "integrity": "sha512-IgHxcT3RC8LzFLhKwP3gbMPeaK7BM9eBH46OdapPA7yvuIUJ8H6zHZV53J8hGZcTSnt95jANt+rTBNUUc22ACQ==" - }, "@types/mime-types": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.1.tgz", @@ -14699,12 +14038,6 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==" }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "requires": {} - }, "ajv": { "version": "8.12.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", @@ -14976,11 +14309,6 @@ "is-string": "^1.0.7" } }, - "astring": { - "version": "1.8.4", - "resolved": "https://registry.npmjs.org/astring/-/astring-1.8.4.tgz", - "integrity": "sha512-97a+l2LBU3Op3bBQEff79i/E4jMD2ZLFD8rHx9B6mXyB2uQwhJQYfiDqUwtfjF4QA1F2qs//N6Cw8LetMbQjcw==" - }, "astro": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/astro/-/astro-2.0.10.tgz", @@ -15441,11 +14769,6 @@ "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==" }, - "character-reference-invalid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", - "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==" - }, "chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -16024,11 +15347,6 @@ "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" }, - "es-module-lexer": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.10.5.tgz", - "integrity": "sha512-+7IwY/kiGAacQfY+YBhKMvEmyAJnw5grTUgjG85Pe7vcUI/6b7pZjZG8nQ7+48YhzEAEqrEgD2dCz/JIK+AYvw==" - }, "es-set-tostringtag": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", @@ -16103,48 +15421,6 @@ "resolved": "https://registry.npmjs.org/esrever/-/esrever-0.2.0.tgz", "integrity": "sha512-1e9YJt6yQkyekt2BUjTky7LZWWVyC2cIpgdnsTAvMcnzXIZvlW/fTMPkxBcZoYhgih4d+EC+iw+yv9GIkz7vrw==" }, - "estree-util-attach-comments": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-2.1.1.tgz", - "integrity": "sha512-+5Ba/xGGS6mnwFbXIuQiDPTbuTxuMCooq3arVv7gPZtYpjp+VXH/NkHAP35OOefPhNG/UGqU3vt/LTABwcHX0w==", - "requires": { - "@types/estree": "^1.0.0" - } - }, - "estree-util-build-jsx": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-2.2.2.tgz", - "integrity": "sha512-m56vOXcOBuaF+Igpb9OPAy7f9w9OIkb5yhjsZuaPm7HoGi4oTOQi0h2+yZ+AtKklYFZ+rPC4n0wYCJCEU1ONqg==", - "requires": { - "@types/estree-jsx": "^1.0.0", - "estree-util-is-identifier-name": "^2.0.0", - "estree-walker": "^3.0.0" - } - }, - "estree-util-is-identifier-name": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-2.1.0.tgz", - "integrity": "sha512-bEN9VHRyXAUOjkKVQVvArFym08BTWB0aJPppZZr0UNyAqWsLaVfAqP7hbaTJjzHifmB5ebnR8Wm7r7yGN/HonQ==" - }, - "estree-util-to-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-1.2.0.tgz", - "integrity": "sha512-IzU74r1PK5IMMGZXUVZbmiu4A1uhiPgW5hm1GjcOfr4ZzHaMPpLNJjR7HjXiIOzi25nZDrgFTobHTkV5Q6ITjA==", - "requires": { - "@types/estree-jsx": "^1.0.0", - "astring": "^1.8.0", - "source-map": "^0.7.0" - } - }, - "estree-util-visit": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-1.2.1.tgz", - "integrity": "sha512-xbgqcrkIVbIG+lI/gzbvd9SGTJL4zqJKBFttUl5pP27KhAjtMKbX/mQXJ7qgyXpMgVy/zvpm0xoQQaGL8OloOw==", - "requires": { - "@types/estree-jsx": "^1.0.0", - "@types/unist": "^2.0.0" - } - }, "estree-walker": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", @@ -16303,14 +15579,6 @@ "reusify": "^1.0.4" } }, - "fault": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz", - "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==", - "requires": { - "format": "^0.2.0" - } - }, "fecha": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", @@ -16403,11 +15671,6 @@ "is-callable": "^1.1.3" } }, - "format": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", - "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==" - }, "formdata-polyfill": { "version": "4.0.10", "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", @@ -16747,28 +16010,6 @@ "zwitch": "^2.0.0" } }, - "hast-util-to-estree": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-2.3.2.tgz", - "integrity": "sha512-YYDwATNdnvZi3Qi84iatPIl1lWpXba1MeNrNbDfJfVzEBZL8uUmtR7mt7bxKBC8kuAuvb0bkojXYZzsNHyHCLg==", - "requires": { - "@types/estree": "^1.0.0", - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^2.0.0", - "@types/unist": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "estree-util-attach-comments": "^2.0.0", - "estree-util-is-identifier-name": "^2.0.0", - "hast-util-whitespace": "^2.0.0", - "mdast-util-mdx-expression": "^1.0.0", - "mdast-util-mdxjs-esm": "^1.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "style-to-object": "^0.4.1", - "unist-util-position": "^4.0.0", - "zwitch": "^2.0.0" - } - }, "hast-util-to-html": { "version": "8.0.4", "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-8.0.4.tgz", @@ -17062,25 +16303,11 @@ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" }, - "is-alphabetical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", - "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==" - }, "is-alphanumeric": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz", "integrity": "sha512-ZmRL7++ZkcMOfDuWZuMJyIVLr2keE1o/DeNWh1EmgqGhUcV+9BIVsx0BcSBOHTZqzjs4+dISzr2KAeBEWGgXeA==" }, - "is-alphanumerical": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", - "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", - "requires": { - "is-alphabetical": "^2.0.0", - "is-decimal": "^2.0.0" - } - }, "is-array-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz", @@ -17148,11 +16375,6 @@ "has-tostringtag": "^1.0.0" } }, - "is-decimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", - "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==" - }, "is-docker": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", @@ -17181,11 +16403,6 @@ "is-extglob": "^2.1.1" } }, - "is-hexadecimal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", - "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==" - }, "is-hotkey": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/is-hotkey/-/is-hotkey-0.2.0.tgz", @@ -17237,14 +16454,6 @@ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==" }, - "is-reference": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.1.tgz", - "integrity": "sha512-baJJdQLiYaJdvFbJqXrcGv3WU3QCzBlUcI5QhbesIm6/xPsvmO+2CDoi/GMOFBQEQm+PXkwOPrp9KK5ozZsp2w==", - "requires": { - "@types/estree": "*" - } - }, "is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -17582,11 +16791,6 @@ "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==" }, - "markdown-extensions": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-1.1.1.tgz", - "integrity": "sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==" - }, "markdown-table": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.3.tgz", @@ -17675,16 +16879,6 @@ "uvu": "^0.5.0" } }, - "mdast-util-frontmatter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-1.0.1.tgz", - "integrity": "sha512-JjA2OjxRqAa8wEG8hloD0uTU0kdn8kbtOWpPP94NBkfAlbxn4S8gCGf/9DwFtEeGPXrDcNXdiDjVaRdUFqYokw==", - "requires": { - "@types/mdast": "^3.0.0", - "mdast-util-to-markdown": "^1.3.0", - "micromark-extension-frontmatter": "^1.0.0" - } - }, "mdast-util-gfm": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-2.0.2.tgz", @@ -17749,61 +16943,6 @@ "mdast-util-to-markdown": "^1.3.0" } }, - "mdast-util-mdx": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-2.0.1.tgz", - "integrity": "sha512-38w5y+r8nyKlGvNjSEqWrhG0w5PmnRA+wnBvm+ulYCct7nsGYhFVb0lljS9bQav4psDAS1eGkP2LMVcZBi/aqw==", - "requires": { - "mdast-util-from-markdown": "^1.0.0", - "mdast-util-mdx-expression": "^1.0.0", - "mdast-util-mdx-jsx": "^2.0.0", - "mdast-util-mdxjs-esm": "^1.0.0", - "mdast-util-to-markdown": "^1.0.0" - } - }, - "mdast-util-mdx-expression": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-1.3.2.tgz", - "integrity": "sha512-xIPmR5ReJDu/DHH1OoIT1HkuybIfRGYRywC+gJtI7qHjCJp/M9jrmBEJW22O8lskDWm562BX2W8TiAwRTb0rKA==", - "requires": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^2.0.0", - "@types/mdast": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "mdast-util-to-markdown": "^1.0.0" - } - }, - "mdast-util-mdx-jsx": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-2.1.2.tgz", - "integrity": "sha512-o9vBCYQK5ZLGEj3tCGISJGjvafyHRVJlZmfJzSE7xjiogSzIeph/Z4zMY65q4WGRMezQBeAwPlrdymDYYYx0tA==", - "requires": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^2.0.0", - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "ccount": "^2.0.0", - "mdast-util-from-markdown": "^1.1.0", - "mdast-util-to-markdown": "^1.3.0", - "parse-entities": "^4.0.0", - "stringify-entities": "^4.0.0", - "unist-util-remove-position": "^4.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, - "mdast-util-mdxjs-esm": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-1.3.1.tgz", - "integrity": "sha512-SXqglS0HrEvSdUEfoXFtcg7DRl7S2cwOXc7jkuusG472Mmjag34DUDeOJUZtl+BVnyeO1frIgVpHlNRWc2gk/w==", - "requires": { - "@types/estree-jsx": "^1.0.0", - "@types/hast": "^2.0.0", - "@types/mdast": "^3.0.0", - "mdast-util-from-markdown": "^1.0.0", - "mdast-util-to-markdown": "^1.0.0" - } - }, "mdast-util-phrasing": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-3.0.1.tgz", @@ -17943,16 +17082,6 @@ "uvu": "^0.5.0" } }, - "micromark-extension-frontmatter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-1.0.0.tgz", - "integrity": "sha512-EXjmRnupoX6yYuUJSQhrQ9ggK0iQtQlpi6xeJzVD5xscyAI+giqco5fdymayZhJMbIFecjnE2yz85S9NzIgQpg==", - "requires": { - "fault": "^2.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0" - } - }, "micromark-extension-gfm": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-2.0.1.tgz", @@ -18040,74 +17169,6 @@ "uvu": "^0.5.0" } }, - "micromark-extension-mdx-expression": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-1.0.4.tgz", - "integrity": "sha512-TCgLxqW6ReQ3AJgtj1P0P+8ZThBTloLbeb7jNaqr6mCOLDpxUiBFE/9STgooMZttEwOQu5iEcCCa3ZSDhY9FGw==", - "requires": { - "micromark-factory-mdx-expression": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-events-to-acorn": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0" - } - }, - "micromark-extension-mdx-jsx": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-1.0.3.tgz", - "integrity": "sha512-VfA369RdqUISF0qGgv2FfV7gGjHDfn9+Qfiv5hEwpyr1xscRj/CiVRkU7rywGFCO7JwJ5L0e7CJz60lY52+qOA==", - "requires": { - "@types/acorn": "^4.0.0", - "estree-util-is-identifier-name": "^2.0.0", - "micromark-factory-mdx-expression": "^1.0.0", - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0", - "vfile-message": "^3.0.0" - } - }, - "micromark-extension-mdx-md": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-1.0.0.tgz", - "integrity": "sha512-xaRAMoSkKdqZXDAoSgp20Azm0aRQKGOl0RrS81yGu8Hr/JhMsBmfs4wR7m9kgVUIO36cMUQjNyiyDKPrsv8gOw==", - "requires": { - "micromark-util-types": "^1.0.0" - } - }, - "micromark-extension-mdxjs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-1.0.0.tgz", - "integrity": "sha512-TZZRZgeHvtgm+IhtgC2+uDMR7h8eTKF0QUX9YsgoL9+bADBpBY6SiLvWqnBlLbCEevITmTqmEuY3FoxMKVs1rQ==", - "requires": { - "acorn": "^8.0.0", - "acorn-jsx": "^5.0.0", - "micromark-extension-mdx-expression": "^1.0.0", - "micromark-extension-mdx-jsx": "^1.0.0", - "micromark-extension-mdx-md": "^1.0.0", - "micromark-extension-mdxjs-esm": "^1.0.0", - "micromark-util-combine-extensions": "^1.0.0", - "micromark-util-types": "^1.0.0" - } - }, - "micromark-extension-mdxjs-esm": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-1.0.3.tgz", - "integrity": "sha512-2N13ol4KMoxb85rdDwTAC6uzs8lMX0zeqpcyx7FhS7PxXomOnLactu8WI8iBNXW8AVyea3KIJd/1CKnUmwrK9A==", - "requires": { - "micromark-core-commonmark": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-events-to-acorn": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-position-from-estree": "^1.1.0", - "uvu": "^0.5.0", - "vfile-message": "^3.0.0" - } - }, "micromark-factory-destination": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-1.0.0.tgz", @@ -18129,21 +17190,6 @@ "uvu": "^0.5.0" } }, - "micromark-factory-mdx-expression": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-1.0.7.tgz", - "integrity": "sha512-QAdFbkQagTZ/eKb8zDGqmjvgevgJH3+aQpvvKrXWxNJp3o8/l2cAbbrBd0E04r0Gx6nssPpqWIjnbHFvZu5qsQ==", - "requires": { - "micromark-factory-space": "^1.0.0", - "micromark-util-character": "^1.0.0", - "micromark-util-events-to-acorn": "^1.0.0", - "micromark-util-symbol": "^1.0.0", - "micromark-util-types": "^1.0.0", - "unist-util-position-from-estree": "^1.0.0", - "uvu": "^0.5.0", - "vfile-message": "^3.0.0" - } - }, "micromark-factory-space": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.0.0.tgz", @@ -18236,20 +17282,6 @@ "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-1.0.1.tgz", "integrity": "sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA==" }, - "micromark-util-events-to-acorn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-1.2.1.tgz", - "integrity": "sha512-mkg3BaWlw6ZTkQORrKVBW4o9ICXPxLtGz51vml5mQpKFdo9vqIX68CAx5JhTOdjQyAHH7JFmm4rh8toSPQZUmg==", - "requires": { - "@types/acorn": "^4.0.0", - "@types/estree": "^1.0.0", - "estree-util-visit": "^1.0.0", - "micromark-util-types": "^1.0.0", - "uvu": "^0.5.0", - "vfile-location": "^4.0.0", - "vfile-message": "^3.0.0" - } - }, "micromark-util-html-tag-name": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.1.0.tgz", @@ -19823,21 +18855,6 @@ "callsites": "^3.0.0" } }, - "parse-entities": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz", - "integrity": "sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==", - "requires": { - "@types/unist": "^2.0.0", - "character-entities": "^2.0.0", - "character-entities-legacy": "^3.0.0", - "character-reference-invalid": "^2.0.0", - "decode-named-character-reference": "^1.0.0", - "is-alphanumerical": "^2.0.0", - "is-decimal": "^2.0.0", - "is-hexadecimal": "^2.0.0" - } - }, "parse-headers": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", @@ -19908,16 +18925,6 @@ "resolve-protobuf-schema": "^2.1.0" } }, - "periscopic": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", - "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", - "requires": { - "@types/estree": "^1.0.0", - "estree-walker": "^3.0.0", - "is-reference": "^3.0.0" - } - }, "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -21026,17 +20033,6 @@ "unified": "^10.0.0" } }, - "remark-frontmatter": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-4.0.1.tgz", - "integrity": "sha512-38fJrB0KnmD3E33a5jZC/5+gGAC2WKNiPw1/fdXJvijBlhA7RCsvJklrYJakS0HedninvaCYW8lQGf9C918GfA==", - "requires": { - "@types/mdast": "^3.0.0", - "mdast-util-frontmatter": "^1.0.0", - "micromark-extension-frontmatter": "^1.0.0", - "unified": "^10.0.0" - } - }, "remark-gfm": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-3.0.1.tgz", @@ -21048,15 +20044,6 @@ "unified": "^10.0.0" } }, - "remark-mdx": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-2.3.0.tgz", - "integrity": "sha512-g53hMkpM0I98MU266IzDFMrTD980gNF3BJnkyFcmN+dD873mQeD5rdMO3Y2X+x8umQfbSE0PcoEDl7ledSA+2g==", - "requires": { - "mdast-util-mdx": "^2.0.0", - "micromark-extension-mdxjs": "^1.0.0" - } - }, "remark-parse": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-10.0.1.tgz", @@ -21990,14 +20977,6 @@ "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" }, - "style-to-object": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.1.tgz", - "integrity": "sha512-HFpbb5gr2ypci7Qw+IOhnP2zOU7e77b+rzM+wTzXzfi1PrtBCX0E7Pk4wL4iTLnhzZ+JgEGAhX81ebTg/aYjQw==", - "requires": { - "inline-style-parser": "0.1.1" - } - }, "stylis": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.3.tgz", @@ -22374,23 +21353,6 @@ "@types/unist": "^2.0.0" } }, - "unist-util-position-from-estree": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-1.1.2.tgz", - "integrity": "sha512-poZa0eXpS+/XpoQwGwl79UUdea4ol2ZuCYguVaJS4qzIOMDzbqz8a3erUCOmubSZkaOuGamb3tX790iwOIROww==", - "requires": { - "@types/unist": "^2.0.0" - } - }, - "unist-util-remove-position": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-4.0.2.tgz", - "integrity": "sha512-TkBb0HABNmxzAcfLf4qsIbFbaPDvMO6wa3b3j4VcEzFVaw1LBKwnW4/sRJ/atSLSzoIg41JWEdnE7N6DIhGDGQ==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-visit": "^4.0.0" - } - }, "unist-util-stringify-position": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", diff --git a/package.json b/package.json index edaf5a3..7ff3113 100644 --- a/package.json +++ b/package.json @@ -19,11 +19,11 @@ }, "dependencies": { "@astrojs/image": "^0.14.1", - "@astrojs/mdx": "^0.16.0", "@astrojs/rss": "^2.1.0", "@astrojs/sitemap": "^1.0.1", "@astrojs/solid-js": "^2.0.2", "@netlify/functions": "^1.4.0", + "@sindresorhus/slugify": "^2.2.0", "astro": "^2.0.10", "astro-icon": "^0.8.0", "astro-netlify-cms": "^0.5.3", diff --git a/siteconfig.json b/siteconfig.json new file mode 100644 index 0000000..a46f94a --- /dev/null +++ b/siteconfig.json @@ -0,0 +1,7 @@ +{ + "globalTitle": "Sergey Yarkov", + "articles": { + "recentLimit": 5 + }, + "isSiteUnderConstruction": false +} \ No newline at end of file diff --git a/src/components/ArticleComments.astro b/src/components/ArticleComments.astro index 3b5543b..4f371ea 100644 --- a/src/components/ArticleComments.astro +++ b/src/components/ArticleComments.astro @@ -38,6 +38,10 @@ const { url, id } = Astro.props as Props; window.addEventListener( "onthemetoggled", () => - document.readyState == "complete" && setTimeout(() => DISQUS.reset({ reload: true, config: disqus_config }), 100) + document.readyState == "complete" && + setTimeout( + () => "DISQUS" in window && DISQUS.reset({ reload: true, config: disqus_config }), + 100 + ) ); diff --git a/src/components/ArticleContent.astro b/src/components/ArticleContent.astro new file mode 100644 index 0000000..6ef94bc --- /dev/null +++ b/src/components/ArticleContent.astro @@ -0,0 +1,225 @@ +
+ + diff --git a/src/components/ArticleContent/ArticleContent.astro b/src/components/ArticleContent/ArticleContent.astro deleted file mode 100644 index 27cc78d..0000000 --- a/src/components/ArticleContent/ArticleContent.astro +++ /dev/null @@ -1,5 +0,0 @@ ---- -import "./ArticleContent.scss"; ---- - -
diff --git a/src/components/ArticleContent/ArticleContent.scss b/src/components/ArticleContent/ArticleContent.scss deleted file mode 100644 index df2d334..0000000 --- a/src/components/ArticleContent/ArticleContent.scss +++ /dev/null @@ -1,221 +0,0 @@ -.article-content { - & h1, - h2, - h3, - h4, - h5, - h6 { - margin-top: 3rem; - margin-bottom: 1rem; - padding-bottom: 5px; - } - - & p, - em, - q { - line-height: var(--line-height-base); - font-size: var(--font-size-lg); - } - - & p { - margin: 1.5rem 0; - } - - & ul, - ol { - padding-left: 1.5rem; - line-height: var(--line-height-base); - margin: 1.5rem 0; - & li { - font-size: var(--font-size-lg); - line-height: var(--line-height-base); - margin-bottom: 0.5rem; - padding-left: 0.25rem; - } - } - - & q { - font-style: italic; - quotes: "« " " »"; - } - - & a { - color: var(--font-color); - text-decoration: underline; - text-decoration-color: var(--color-blue-500); - text-underline-offset: 2.2px; - text-decoration-thickness: 2px; - font-weight: 500; - &:hover { - color: var(--color-blue-500); - text-decoration-thickness: 2px; - } - } - - & figure { - margin: 0 0 1em; - & figcaption { - color: var(--color-gray-400); - } - } - - & hr { - background-color: var(--border-color); - margin: 40px 0; - border: none; - height: 1px; - } - - & pre { - font-size: var(--font-size-sm); - border-radius: var(--border-radius-md); - } - - & :not(pre) > code { - -webkit-font-smoothing: subpixel-antialiased; - background: var(--background-inline-code); - border-radius: var(--border-radius-lg); - font-size: 1rem; - font-weight: 500; - font-family: "IBM Plex Mono", monospace; - padding: 0.2rem 0.3rem; - } - - & figcaption { - font-style: italic; - font-size: 1em; - text-align: center; - margin: 0.7rem 0; - } - - & .table-wrapper { - overflow-x: auto; - margin-bottom: 1.25rem; - } - - & table { - display: table; - border-radius: var(--border-radius-md); - min-width: 100%; - font-size: var(--font-size-md); - border: 1px solid var(--border-color); - border-collapse: separate; - border-spacing: 0; - margin: 5px 0; - & thead th { - background-color: var(--background-card); - border-top-left-radius: var(--border-radius-md); - border-top-right-radius: var(--border-radius-md); - } - & td, - th { - border-bottom: 1px solid var(--border-color); - padding: 0.5rem; - text-align: left; - } - & tbody tr:last-child td { - border: none; - } - } - - & li { - list-style: disc; - & li { - list-style-type: circle; - } - &::marker { - color: var(--color-blue-500); - font-size: 1.3rem; - line-height: var(--line-height-none); - } - } - - & blockquote { - margin: 1.5rem 0; - font-style: italic; - border-left: 0.25rem solid var(--border-color); - padding-left: 1rem; - } - - & .heading-wrapper { - border-bottom: 1px solid var(--border-color); - margin: 3rem 0 1rem 0; - padding-bottom: 0.35rem; - - & h2 { - font-size: var(--font-size-2xl); - } - - & h3 { - font-size: var(--font-size-xl); - } - - & h4 { - font-size: var(--font-size-lg); - } - - & h1, - h2, - h3, - h4, - h5, - h6 { - margin: 0; - } - } - - & .heading-wrapper { - display: flex; - align-items: center; - flex-direction: row-reverse; - justify-content: flex-end; - margin-inline-start: 1px; - & .anchor-link { - position: relative; - display: inline-flex; - text-decoration: none; - justify-content: center; - align-items: center; - opacity: 0; - & .anchor-icon { - position: absolute; - left: -25px; - top: -13px; - } - & svg { - vertical-align: middle; - } - } - & .anchor-label { - position: absolute; - width: 0; - height: 0; - padding: 0; - overflow: hidden; - white-space: nowrap; - } - &:hover { - & .anchor-link { - opacity: 1; - } - } - } - & .languages-available { - margin: 25px 0; - font-size: var(--font-size-lg); - } -} - -@media screen and (max-width: 800px) { - .article-content { - & .heading-wrapper { - flex-direction: row; - justify-content: flex-start; - & .anchor-link { - & .anchor-icon { - left: 5px; - } - } - } - } -} diff --git a/src/components/ArticleCover.astro b/src/components/ArticleCover.astro new file mode 100644 index 0000000..e1cb212 --- /dev/null +++ b/src/components/ArticleCover.astro @@ -0,0 +1,34 @@ +--- +import { Picture } from "@astrojs/image/components"; + +export interface Props { + src: string; + alt?: string; +} + +const { src, alt } = Astro.props as Props; +--- + +
+
+ +
+
+ + diff --git a/src/components/ArticleItem.astro b/src/components/ArticleItem.astro index dc5f764..fd949ca 100644 --- a/src/components/ArticleItem.astro +++ b/src/components/ArticleItem.astro @@ -1,29 +1,44 @@ --- -import { getLanguageFromURL } from "@i18n/utils"; +import type { CollectionEntry } from "astro:content"; +import slugify from "@sindresorhus/slugify"; +import { URL_BLOG_PREFIX } from "@root/pages/[...blog].astro"; import { DEFAULT_LANGUAGE } from "@root/constants"; +import { getLanguageFromURL } from "@i18n/utils"; import { createDateFormatter } from "@root/utils"; export interface Props { - href: string; - title: string; - date: Date; + entry: CollectionEntry<"blog">; } -const lang = getLanguageFromURL(Astro.url.pathname); -// const isNonDefaultLanguage = DEFAULT_LANGUAGE !== lang; - -const { href, title, date } = Astro.props as Props; +const pageLang = getLanguageFromURL(Astro.url.pathname); +const { + entry: { + id, + data: { title, pubDate }, + }, +} = Astro.props as Props; +const slug = slugify(title, { lowercase: true }); +const articleLang = id.split("/")[0]; --- -
- +
+

{title}

- + {articleLang !== pageLang && {articleLang.toLocaleUpperCase()}}

-

diff --git a/src/components/ArticlePost/ArticlePost.astro b/src/components/ArticlePost.astro similarity index 51% rename from src/components/ArticlePost/ArticlePost.astro rename to src/components/ArticlePost.astro index 043d370..2d5f37f 100644 --- a/src/components/ArticlePost/ArticlePost.astro +++ b/src/components/ArticlePost.astro @@ -1,23 +1,24 @@ --- -import { Picture } from "@astrojs/image/components"; +import type { CollectionEntry } from "astro:content"; import { Icon } from "astro-icon"; import { createDateFormatter } from "@root/utils"; -// import { isURL } from "@utils/string"; +import ArticleCover from "@components/ArticleCover.astro"; import ArticleComments from "@components/ArticleComments.astro"; // import TranslatedLink from "../TranslatedLink"; -import type { CollectionEntry } from "astro:content"; -// import { useTranslation } from "@root/i18n/utils"; -import "./ArticlePost.scss"; +// import { useTranslation } from "@i18n/utils"; + export type Props = { article: CollectionEntry<"blog">; lang: string; }; + const { article, lang } = Astro.props as Props; const canonicalUrl = new URL(Astro.url.pathname, Astro.site); const { data: { coverImage, title, author, description, tags, pubDate }, slug, } = article; + // const t = useTranslation(Astro); --- @@ -53,24 +54,7 @@ const { > - { - coverImage && ( -
-
- -
-
- ) - } + {coverImage && }

{description} @@ -81,8 +65,9 @@ const {

- + + diff --git a/src/components/ArticlePost/ArticlePost.scss b/src/components/ArticlePost/ArticlePost.scss deleted file mode 100644 index 2b5741c..0000000 --- a/src/components/ArticlePost/ArticlePost.scss +++ /dev/null @@ -1,92 +0,0 @@ -.article { - & header { - & div:nth-child(1) { - display: flex; - justify-content: space-between; - align-items: center; - & .views { - display: flex; - align-items: center; - & span { - margin-left: 3.5px; - font-size: var(--font-size-sm); - color: var(--font-color-grayer); - } - } - } - & .heading { - margin-top: 1.125rem; - - & h1 { - font-weight: 600; - font-size: 2.125rem; - } - - & p { - font-size: 1.125rem; - line-height: var(--line-height-base); - } - } - - & .tags { - font-size: var(--font-size-sm); - text-transform: uppercase; - & ul { - display: flex; - flex-wrap: wrap; - column-gap: 7px; - row-gap: 7px; - } - } - - & .published { - margin-bottom: 1.25em; - color: var(--font-color-gray); - } - } - - & .cover { - margin: 20px 0; - & figure { - margin: 0; - } - } - - & .description p { - line-height: var(--line-height-base); - font-size: var(--font-size-lg); - } - - & footer { - margin-top: 5rem; - } - - & img { - border-radius: var(--border-radius-lg); - display: block; - margin: 0 auto; - max-width: 100%; - height: auto; - - &:not([src*=".svg"]) { - filter: var(--image-filter); - } - } -} - -@media screen and (max-width: 560px) { - .article { - & header { - & div:nth-child(1) { - flex-direction: column; - align-items: flex-start; - & .tags { - margin-bottom: 15px; - } - } - & .heading h1 { - font-size: 2rem; - } - } - } -} diff --git a/src/components/BaseHead.astro b/src/components/BaseHead.astro index b1cb283..73c3c72 100644 --- a/src/components/BaseHead.astro +++ b/src/components/BaseHead.astro @@ -9,7 +9,6 @@ export interface Props { } const canonicalURL = new URL(Astro.url.pathname, Astro.site); - const { title, description } = Astro.props; --- diff --git a/src/components/RecentArticles.astro b/src/components/RecentArticles.astro index aa220d6..b51e126 100644 --- a/src/components/RecentArticles.astro +++ b/src/components/RecentArticles.astro @@ -2,11 +2,12 @@ import type { CollectionEntry } from "astro:content"; import ArticleItem from "@components/ArticleItem.astro"; import EmptyList from "@components/EmptyList.astro"; +import siteconfig from "siteconfig.json"; export interface Props { articles: CollectionEntry<"blog">[]; length?: number | undefined; } -const { articles, length = 5 } = Astro.props as Props; +const { articles, length = siteconfig.articles.recentLimit } = Astro.props as Props; const isEmpty = articles.length === 0; --- @@ -19,11 +20,7 @@ const isEmpty = articles.length === 0;
{ !isEmpty ? ( - articles - .slice(0, length) - .map((article) => ( - - )) + articles.slice(0, length).map((article) => ) ) : ( ) diff --git a/src/components/SkillsBlock.astro b/src/components/SkillsBlock.astro new file mode 100644 index 0000000..2ea647e --- /dev/null +++ b/src/components/SkillsBlock.astro @@ -0,0 +1,69 @@ +--- +import { Icon } from "astro-icon"; +import type { CollectionEntry } from "astro:content"; + +export interface Props { + data: CollectionEntry<"skills">["data"]; +} + +const { + data: { title, list }, +} = Astro.props as Props; +--- + +
+
+

{title}

+
+
+
    + { + list.map((entry) => ( +
  • + {entry.icon && } + {entry.title} +
  • + )) + } +
+
+
+ + diff --git a/src/components/SkillsList.astro b/src/components/SkillsList.astro new file mode 100644 index 0000000..c8cd1ec --- /dev/null +++ b/src/components/SkillsList.astro @@ -0,0 +1,20 @@ +--- +--- + +
+ diff --git a/src/constants.ts b/src/constants.ts index 1cf32ee..4385d92 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -1,13 +1,10 @@ +import siteconfig from "../siteconfig.json"; + export const DEFAULT_LANGUAGE: LanguageKeys = "ru"; - -/* Show banner about website development */ -export const IS_SITE_UNDER_CONSTRUCTION = - import.meta.env.IS_SITE_UNDER_CONSTRUCTION === "true" ? true : false; - +export const IS_SITE_UNDER_CONSTRUCTION = siteconfig.isSiteUnderConstruction; export const SUPPORTED_LANGUAGES: SupportedLanguages = ["ru", "en"]; - export const SITE_METADATA: SiteMetadataType = { - title: "Sergey Yarkov", + title: siteconfig.globalTitle, name: "yarkov.tech", author: "Sergey Yarkov", themeColor: "#1e2327", diff --git a/src/content/authors/en/сергей-ярков.md b/src/content/authors/en/сергей-ярков.md new file mode 100644 index 0000000..ecc73c2 --- /dev/null +++ b/src/content/authors/en/сергей-ярков.md @@ -0,0 +1,24 @@ +--- +firstName: Sergey +lastName: Yarkov +--- +My name is Sergey and I am a web developer. My main activity is creating web sites. I am interested in areas such as programming, embedded systems, and electronics. +I started making web sites in 2017, starting with simple HTML pages, and in 2019 I started learning programming. At present, I have experience in **full-stack** web development of client-server applications that solve a wide range of tasks. +Some of my personal [projects](/projects/) I put in public access on [Github](https://github.com/sergeyyarkov). + +## Purpose of this site + +I originally created this website for myself, to consolidate my knowledge by writing articles. +Since 2022, I have been posting materials on this website, and now at any time I can return to any topic and learn it again. +My articles can also help someone with mastering a particular topic. The main direction of this site is IT, +and [here](/articles/) I publish materials on topics that interest me, as well as talk about my [projects](/projects/). +I am absolutely calm about any criticism and I do not claim to be the best programmer in the world, +so do not judge the materials of this resource harshly. + +## Skills + +This list shows the skills and technologies that I have used/use in my projects. +For creating web projects, I use **Node.js** and the **Adonis.js** framework for the server-side. +For the client-side, I develop using **React.js** or **Alpine.js**. + +this website is made using the [**Astro.js**](https://astro.build) framework and [**Solid.js**](https://www.solidjs.com/) library. \ No newline at end of file diff --git a/src/content/authors/ru/сергей-ярков.md b/src/content/authors/ru/сергей-ярков.md new file mode 100644 index 0000000..960bb1a --- /dev/null +++ b/src/content/authors/ru/сергей-ярков.md @@ -0,0 +1,28 @@ +--- +firstName: Сергей +lastName: Ярков +--- +Мое имя **Сергей** я являюсь веб-разработчиком. Основной деятельностью моей работы является создание веб-сайтов. +Мне интересны такие сферы как программирование, встраиваемые системы и электроника. +Веб-сайты я начал делать с 2017 года начиная с верстки простых HTML страничек и с 2019 года я начал +обучаться программированием и на сегодняшний момент я имею опыт в **full-stack** веб-разработке клиент-серверных приложений, +которые решают самые разные задачи. +Некоторые из своих личных [проектов](/projects/) я выкладываю в общий доступ на [Github](https://github.com/sergeyyarkov). + +## Зачем этот сайт + +Первоначально я создал этот сайт для себя, чтобы закреплять свои знания путем написания статей. С 2022 года я начал +выкладывать материалы на этот сайт и сейчас в любой момент я могу вернуться к какой-либо теме и еще раз её усвоить. +Мои статьи также смогут кому-то помочь с освоением какой-либо темы. +Главным направлением этого сайта является IT, и [здесь](/articles/) я публикую материалы на темы, которые меня интересуют, +а также рассказываю о своих [проектах](/projects/). +Я отношусь абсолютно спокойно к любой критике и я не претендую на звание лучшего программиста в мире, поэтому +не судите строго материалы этого ресурса. + +## Навыки + +Этот список показывает имеющиеся у меня навыки и технологии которые я когда-либо использовал/использую в своих проектах. +Для создания веб-проектов в качестве серверной части я использую **Node.js** и фреймворк **Adonis.js**. +Клиентскую часть я разрабатываю на **React.js** или **Alpine.js**. + +этот веб-сайт сделан с помощью фреймворка **[Astro.js](https://astro.build)** и библиотеки **[Solid.js](https://www.solidjs.com/)** \ No newline at end of file diff --git a/src/content/authors/sergey-yarkov.md b/src/content/authors/sergey-yarkov.md deleted file mode 100644 index 2c2d9bb..0000000 --- a/src/content/authors/sergey-yarkov.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -firstName: Sergey -lastName: Yarkov ---- diff --git a/src/content/blog/en/использование-webserial-api-для-общения-с-микроконтроллером.md b/src/content/blog/en/использование-webserial-api-для-общения-с-микроконтроллером.md new file mode 100644 index 0000000..b0b6dee --- /dev/null +++ b/src/content/blog/en/использование-webserial-api-для-общения-с-микроконтроллером.md @@ -0,0 +1,17 @@ +--- +coverImage: /media/serial-port.jpg +draft: false +author: Sergey Yarkov +title: Using the WebSerial API to communicate with the microcontroller +description: We will talk about what is WebSerial API, how it can be used in a + browser to read and write data to a serial device and where it can be applied. +tags: + - JavaScript + - AVR + - WebSerial API + - Tutorial +pubDate: 2022-11-04T21:00:00.000Z +updatedDate: 2023-02-13T16:34:23.326Z +--- + +# ... diff --git a/src/content/blog/en/управление-и-подключение-сдвигового-регистра-74hc595-к-микрокотнороллеру.md b/src/content/blog/en/управление-и-подключение-сдвигового-регистра-74hc595-к-микрокотнороллеру.md new file mode 100644 index 0000000..25f1aaa --- /dev/null +++ b/src/content/blog/en/управление-и-подключение-сдвигового-регистра-74hc595-к-микрокотнороллеру.md @@ -0,0 +1,16 @@ +--- +coverImage: null +draft: false +author: Sergey Yarkov +title: 74HC595 shift register control by microcontroller +description: This tutorial shows how to control the shift register of the + 74HC595 in conjunction with the AVR microcontroller. +tags: + - AVR + - Digital Electronics + - Tutorial +pubDate: 2023-02-14T19:23:55.622Z +updatedDate: 2023-02-14T19:23:55.646Z +--- + +... diff --git a/src/content/blog/ispolzovanie-webserial-api-dlya-obshcheniya-s-mikrokontrollerom.md b/src/content/blog/ru/использование-webserial-api-для-общения-с-микроконтроллером.md similarity index 100% rename from src/content/blog/ispolzovanie-webserial-api-dlya-obshcheniya-s-mikrokontrollerom.md rename to src/content/blog/ru/использование-webserial-api-для-общения-с-микроконтроллером.md diff --git a/src/content/blog/ru/управление-и-подключение-сдвигового-регистра-74hc595-к-микрокотнороллеру.md b/src/content/blog/ru/управление-и-подключение-сдвигового-регистра-74hc595-к-микрокотнороллеру.md new file mode 100644 index 0000000..c4cd23a --- /dev/null +++ b/src/content/blog/ru/управление-и-подключение-сдвигового-регистра-74hc595-к-микрокотнороллеру.md @@ -0,0 +1,15 @@ +--- +draft: false +author: Sergey Yarkov +title: Управление сдвиговым регистром 74HC595 микрокотнороллером +description: В этом туториале рассматривается то, как управлять сдвиговым + регистром 74HC595 в связке с микроконтроллером AVR. +tags: + - AVR + - Digital Electronics + - Tutorial +pubDate: 2023-02-14T19:23:55.622Z +updatedDate: 2023-02-14T19:23:55.646Z +--- + +... diff --git a/src/content/config.ts b/src/content/config.ts index c247b89..bee3486 100644 --- a/src/content/config.ts +++ b/src/content/config.ts @@ -3,7 +3,8 @@ import { defineCollection, z } from "astro:content"; const blog = defineCollection({ schema: z.object({ title: z.string(), - coverImage: z.string().optional(), + draft: z.boolean().optional(), + coverImage: z.string().nullable().optional(), author: z.string(), tags: z.string().array().optional(), description: z.string(), @@ -16,7 +17,6 @@ const blog = defineCollection({ .or(z.date()) .optional() .transform((str) => (str ? new Date(str) : undefined)), - draft: z.boolean(), }), }); @@ -42,7 +42,6 @@ const projects = defineCollection({ sourceUrl: z.string(), demoUrl: z.string().nullable().optional(), articleUrl: z.string().nullable().optional(), - draft: z.boolean(), }), }); diff --git a/src/content/projects/en/devthread.md b/src/content/projects/en/devthread.md index cfcc406..f383179 100644 --- a/src/content/projects/en/devthread.md +++ b/src/content/projects/en/devthread.md @@ -1,6 +1,5 @@ --- icon: triangle_filled -draft: false title: devthread year: 2021 description: Static website for publishing various articles, developed with diff --git a/src/content/projects/en/digital-store.md b/src/content/projects/en/digital-store.md index 5c927d3..7a2c8dd 100644 --- a/src/content/projects/en/digital-store.md +++ b/src/content/projects/en/digital-store.md @@ -1,6 +1,5 @@ --- icon: round-shop-two -draft: false title: digital-store year: 2019 description: Customizable online store with control panel for selling digital goods diff --git a/src/content/projects/en/educt.md b/src/content/projects/en/educt.md index 5091d5c..c2aacce 100644 --- a/src/content/projects/en/educt.md +++ b/src/content/projects/en/educt.md @@ -1,6 +1,5 @@ --- icon: round-school -draft: false title: educt year: 2022 description: Learning Management System (LMS) to publish your courses, lectures, lessons diff --git a/src/content/projects/en/memory-led-game.md b/src/content/projects/en/memory-led-game.md index fe9098c..04fef72 100644 --- a/src/content/projects/en/memory-led-game.md +++ b/src/content/projects/en/memory-led-game.md @@ -1,6 +1,5 @@ --- icon: chip -draft: false title: memory-led-game year: 2022 description: Analogue of the popular game "Simon says" on the AVR microcontroller diff --git a/src/content/projects/en/node-docker-example.md b/src/content/projects/en/node-docker-example.md index a7e54cf..913f34e 100644 --- a/src/content/projects/en/node-docker-example.md +++ b/src/content/projects/en/node-docker-example.md @@ -1,6 +1,5 @@ --- icon: nodejs -draft: false title: node-docker-example year: 2022 description: An example of using Docker to deploy a Node.js application diff --git a/src/content/projects/en/react-chat-app.md b/src/content/projects/en/react-chat-app.md index 97527b8..60dce0e 100644 --- a/src/content/projects/en/react-chat-app.md +++ b/src/content/projects/en/react-chat-app.md @@ -1,6 +1,5 @@ --- icon: chat -draft: false title: react-chat-app year: 2021 description: Client-server web chat application developed with Node.js and Socket.io diff --git a/src/content/projects/en/web-serial-example.md b/src/content/projects/en/web-serial-example.md index 1c9a973..09fe2d1 100644 --- a/src/content/projects/en/web-serial-example.md +++ b/src/content/projects/en/web-serial-example.md @@ -1,6 +1,5 @@ --- icon: serial -draft: false title: web-serial-example year: 2022 description: An example of using the Web Serial API to interact with the diff --git a/src/content/projects/en/yarkov-tech.md b/src/content/projects/en/yarkov-tech.md index 5f9ab7c..ca9cdcf 100644 --- a/src/content/projects/en/yarkov-tech.md +++ b/src/content/projects/en/yarkov-tech.md @@ -1,6 +1,5 @@ --- icon: book -draft: false title: yarkov.tech year: 2023 description: My personal website where you can find information about me and a diff --git a/src/content/projects/ru/devthread.md b/src/content/projects/ru/devthread.md index 4874eec..0b1c5dd 100644 --- a/src/content/projects/ru/devthread.md +++ b/src/content/projects/ru/devthread.md @@ -1,6 +1,5 @@ --- icon: triangle_filled -draft: false title: devthread year: 2021 description: Статический веб-сайт для публикации различных статей, разработанный diff --git a/src/content/projects/ru/digital-store.md b/src/content/projects/ru/digital-store.md index 3b9f2a2..5313886 100644 --- a/src/content/projects/ru/digital-store.md +++ b/src/content/projects/ru/digital-store.md @@ -1,6 +1,5 @@ --- icon: round-shop-two -draft: false title: digital-store year: 2019 description: Настраиваемый интернет-магазин с панелью управления для продажи diff --git a/src/content/projects/ru/educt.md b/src/content/projects/ru/educt.md index f2e3562..2681565 100644 --- a/src/content/projects/ru/educt.md +++ b/src/content/projects/ru/educt.md @@ -1,6 +1,5 @@ --- icon: round-school -draft: false title: educt year: 2022 description: Система управления обучением (LMS) для публикации ваших курсов, лекций, уроков diff --git a/src/content/projects/ru/memory-led-game.md b/src/content/projects/ru/memory-led-game.md index 6ef27af..2a47d08 100644 --- a/src/content/projects/ru/memory-led-game.md +++ b/src/content/projects/ru/memory-led-game.md @@ -1,6 +1,5 @@ --- icon: chip -draft: false title: memory-led-game year: 2022 description: Аналог популярной игры "Саймон говорит" на AVR микроконтроллере diff --git a/src/content/projects/ru/node-docker-example.md b/src/content/projects/ru/node-docker-example.md index 1a1e68e..50ac0b0 100644 --- a/src/content/projects/ru/node-docker-example.md +++ b/src/content/projects/ru/node-docker-example.md @@ -1,6 +1,5 @@ --- icon: nodejs -draft: false title: node-docker-example year: 2022 description: Пример использования Docker для развертывания Node.js приложения diff --git a/src/content/projects/ru/react-chat-app.md b/src/content/projects/ru/react-chat-app.md index be4524f..e2e7244 100644 --- a/src/content/projects/ru/react-chat-app.md +++ b/src/content/projects/ru/react-chat-app.md @@ -1,6 +1,5 @@ --- icon: chat -draft: false title: react-chat-app year: 2021 description: Клиент-серверное веб приложение чата разработанное при помощи diff --git a/src/content/projects/ru/web-serial-example.md b/src/content/projects/ru/web-serial-example.md index 04e68d3..fcd5aa3 100644 --- a/src/content/projects/ru/web-serial-example.md +++ b/src/content/projects/ru/web-serial-example.md @@ -1,6 +1,5 @@ --- icon: serial -draft: false title: web-serial-example year: 2022 description: Пример использования Web Serial API для взаимодействия с diff --git a/src/content/projects/ru/yarkov-tech.md b/src/content/projects/ru/yarkov-tech.md index 6b36f25..ff9f147 100644 --- a/src/content/projects/ru/yarkov-tech.md +++ b/src/content/projects/ru/yarkov-tech.md @@ -1,6 +1,5 @@ --- icon: book -draft: false title: yarkov.tech year: 2023 description: Мой персональный веб-сайт где находятся информация обо мне и список diff --git a/src/content/site-settings.md b/src/content/site-settings.md deleted file mode 100644 index 500621c..0000000 --- a/src/content/site-settings.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -globalTitle: yarkov.tech -articles: - recentLimit: 5 ---- diff --git a/src/layouts/article.astro b/src/layouts/article.astro index 67d5fd5..2cf041a 100644 --- a/src/layouts/article.astro +++ b/src/layouts/article.astro @@ -3,8 +3,8 @@ import type { CollectionEntry } from "astro:content"; import { DEFAULT_LANGUAGE, SITE_METADATA } from "@root/constants"; import BaseHead from "@components/BaseHead.astro"; import BaseLayout from "@components/BaseLayout.astro"; -import ArticleContent from "@components/ArticleContent/ArticleContent.astro"; -import ArticlePost from "@components/ArticlePost/ArticlePost.astro"; +import ArticleContent from "@components/ArticleContent.astro"; +import ArticlePost from "@components/ArticlePost.astro"; import OpenGraph from "@components/OpenGraph.astro"; export interface Props { diff --git a/src/pages/[...blog].astro b/src/pages/[...blog].astro new file mode 100644 index 0000000..2e820f1 --- /dev/null +++ b/src/pages/[...blog].astro @@ -0,0 +1,36 @@ +--- +import { CollectionEntry, getCollection } from "astro:content"; +import ArticleLayout from "@root/layouts/article.astro"; +import { DEFAULT_LANGUAGE } from "@root/constants"; +import slugify from "@sindresorhus/slugify"; + +export const URL_BLOG_PREFIX = "blog"; + +/** + * Generate articles pages from `blog` collection. + * The final url will be `http://website.com/blog/2023-01-01/my-article` with default language + * and `http://website.com/{language-code}/blog/2023-01-01/my-article` with other languages. + */ +export async function getStaticPaths() { + const collection = await getCollection("blog", (e) => !e.data.draft); + return collection.map((article) => { + const [languageCode] = article.slug.split("/"); + const slug = slugify(article.data.title, { lowercase: true }); + const pubDate = article.data.pubDate.toISOString().split("T")[0]; + const url = + DEFAULT_LANGUAGE !== languageCode + ? `${languageCode}/${URL_BLOG_PREFIX}/${pubDate}/${slug}` + : `${URL_BLOG_PREFIX}/${pubDate}/${slug}`; + + return { params: { blog: url }, props: { article } }; + }); +} + +type Props = { article: CollectionEntry<"blog"> }; + +const { Content } = await Astro.props.article.render(); +--- + + + + diff --git a/src/pages/[...slug].astro b/src/pages/[...slug].astro deleted file mode 100644 index 62dec71..0000000 --- a/src/pages/[...slug].astro +++ /dev/null @@ -1,22 +0,0 @@ ---- -import { CollectionEntry, getCollection } from "astro:content"; -import ArticleLayout from "@root/layouts/article.astro"; - -export async function getStaticPaths() { - const articles = await getCollection("blog"); - return articles - .filter((a) => !a.data.draft) - .map((article) => ({ - params: { slug: `articles/${article.slug}` }, - props: { article }, - })); -} - -type Props = { article: CollectionEntry<"blog"> }; - -const { Content } = await Astro.props.article.render(); ---- - - - - diff --git a/src/pages/[lang]/about.astro b/src/pages/[lang]/about.astro index ea752f0..f4624be 100644 --- a/src/pages/[lang]/about.astro +++ b/src/pages/[lang]/about.astro @@ -3,6 +3,7 @@ import { getLanguageKeys } from "@i18n/utils"; import { DEFAULT_LANGUAGE } from "@root/constants"; import About from "@templates/About.astro"; +// TODO: do not generate pages without required data export function getStaticPaths() { return getLanguageKeys() .filter((lang) => lang !== DEFAULT_LANGUAGE) diff --git a/src/templates/About.astro b/src/templates/About.astro index 0573bc9..245312f 100644 --- a/src/templates/About.astro +++ b/src/templates/About.astro @@ -1,26 +1,28 @@ --- -import PageLayout from "@layouts/default.astro"; +import { getCollection, getEntryBySlug } from "astro:content"; import { getLanguageFromURL } from "@i18n/utils"; -// import { useTranslation } from "@i18n/utils"; -// import * as API from "@root/lib/api"; +import PageLayout from "@layouts/default.astro"; import PageHeading from "@components/PageHeading.astro"; -// import SkillsList from "@components/SkillsList"; -// import SkillsBlock from "@components/SkillsBlock"; -// import ArticleContent from "@components/ArticleContent"; -const lang = getLanguageFromURL(Astro.url.pathname); +import SkillsList from "@components/SkillsList.astro"; +import SkillsBlock from "@components/SkillsBlock.astro"; +import ArticleContent from "@components/ArticleContent.astro"; + +const pageLang = getLanguageFromURL(Astro.url.pathname); +const skills = await getCollection("skills", (e) => e.id.startsWith(`${pageLang}/`)); +const about = await getEntryBySlug("authors", `${pageLang}/сергей-ярков`); +const data = await about?.render(); + // const t = useTranslation(Astro); -// const data = await API.fetchAboutMe(Astro); -// const { skills } = SITE_METADATA; --- - +
- - + + + {skills.map((block) => )} +
diff --git a/src/templates/Home.astro b/src/templates/Home.astro index 053ed26..443bea2 100644 --- a/src/templates/Home.astro +++ b/src/templates/Home.astro @@ -1,15 +1,15 @@ --- +import { getCollection } from "astro:content"; import PageLayout from "@layouts/default.astro"; import Splash from "@components/Splash/Splash.astro"; import SplashHeading from "@root/components/Splash/SplashHeading.astro"; import SplashLinks from "@root/components/Splash/SplashLinks.astro"; import SplashLink from "@root/components/Splash/SplashLink.astro"; -import { getCollection } from "astro:content"; import RecentArticles from "@root/components/RecentArticles.astro"; -const articles = (await getCollection("blog")) - .filter((p) => !p.data.draft) - .sort((a, b) => a.data.pubDate.valueOf() - b.data.pubDate.valueOf()); +const articles = (await getCollection("blog", (e) => !e.data.draft)).sort( + (a, b) => a.data.pubDate.valueOf() - b.data.pubDate.valueOf() +); --- diff --git a/src/templates/NotFound.astro b/src/templates/NotFound.astro index 31b8bd4..ec66ccd 100644 --- a/src/templates/NotFound.astro +++ b/src/templates/NotFound.astro @@ -8,6 +8,6 @@ const lang = getLanguageFromURL(Astro.url.pathname);

404

-

{"Страница не найдена"}

+

{"Страницу которую вы пытаетесь найти не существует."}