From 2b839437a98eca9a7a3d6070f9c70b7a15ca4a73 Mon Sep 17 00:00:00 2001 From: sergeyyarkov Date: Sat, 11 Feb 2023 21:54:31 +0300 Subject: [PATCH] setup --- astro.config.mjs | 30 +- package-lock.json | 791 +++++++++++++++++- package.json | 8 +- public/android-chrome-192x192.png | Bin 0 -> 4663 bytes public/android-chrome-256x256.png | Bin 0 -> 6258 bytes public/apple-touch-icon.png | Bin 0 -> 4371 bytes public/assets/css/code-highlight-dark.min.css | 1 + .../assets/css/code-highlight-light.min.css | 1 + public/assets/js/detect-theme.js | 22 + public/assets/js/load-code-highlight.js | 48 ++ public/browserconfig.xml | 9 + public/favicon-dark-16x16.png | Bin 0 -> 617 bytes public/favicon-dark-32x32.png | Bin 0 -> 938 bytes public/favicon-light-16x16.png | Bin 0 -> 635 bytes public/favicon-light-32x32.png | Bin 0 -> 955 bytes public/favicon.ico | Bin 0 -> 15086 bytes public/favicon.svg | 13 - public/mstile-150x150.png | Bin 0 -> 3557 bytes public/robots.txt | 4 + public/safari-pinned-tab.svg | 23 + public/site.webmanifest | 19 + .../ArticleContent/ArticleContent.astro | 5 + .../ArticleContent/ArticleContent.scss | 221 +++++ src/components/ArticleItem.astro | 76 ++ src/components/ArticlePost/ArticlePost.astro | 77 ++ src/components/ArticlePost/ArticlePost.scss | 92 ++ src/components/BaseHead.astro | 93 +- src/components/BaseLayout.astro | 20 + src/components/Button.astro | 25 + src/components/ContactForm.astro | 54 ++ src/components/ContactsList.astro | 36 + src/components/EmptyList.astro | 17 + src/components/Footer.astro | 54 +- src/components/Header.astro | 25 - src/components/Header/Header.astro | 178 ++++ src/components/{ => Header}/HeaderLink.astro | 12 +- src/components/LanguageSelect.astro | 93 ++ src/components/NavToggle/NavToggle.scss | 22 + src/components/NavToggle/NavToggle.tsx | 41 + src/components/NavToggle/index.ts | 1 + src/components/PageHeading.astro | 31 + src/components/RecentArticles.astro | 60 ++ src/components/SiteContent.astro | 16 + src/components/Splash/Splash.astro | 10 + src/components/Splash/SplashHeading.astro | 34 + src/components/Splash/SplashLink.astro | 30 + src/components/Splash/SplashLinks.astro | 11 + .../ThemeSwticher/ThemeSwitcher.scss | 31 + .../ThemeSwticher/ThemeSwitcher.tsx | 72 ++ src/components/ThemeSwticher/index.ts | 1 + src/components/UnderConstruction.astro | 16 + src/constants.ts | 13 + src/consts.ts | 5 - src/content/blog/using-mdx.mdx | 10 +- src/content/config.ts | 4 +- src/env.d.ts | 4 + src/i18n/en/ui.ts | 55 ++ src/i18n/languages.ts | 5 + src/i18n/ru/ui.ts | 55 ++ src/i18n/utils.ts | 22 + src/icons/adonisjs.svg | 10 + src/icons/alpinejs.svg | 1 + src/icons/arrow-up-right.svg | 3 + src/icons/astro.svg | 3 + src/icons/astro_filled.svg | 3 + src/icons/avr.svg | 3 + src/icons/book.svg | 3 + src/icons/chat.svg | 4 + src/icons/chip.svg | 4 + src/icons/docker.svg | 6 + src/icons/email.svg | 10 + src/icons/email_filled.svg | 3 + src/icons/expressjs.svg | 10 + src/icons/eye.svg | 3 + src/icons/gatsbyjs.svg | 3 + src/icons/git-branch.svg | 3 + src/icons/github_filled.svg | 3 + src/icons/graphql.svg | 10 + src/icons/information.svg | 3 + src/icons/language-c.svg | 3 + src/icons/link-out.svg | 3 + src/icons/mongodb.svg | 3 + src/icons/moon.svg | 3 + src/icons/mysql.svg | 10 + src/icons/netlify.svg | 9 + src/icons/nodejs.svg | 3 + src/icons/postgresql.svg | 8 + src/icons/reactjs.svg | 3 + src/icons/redis.svg | 3 + src/icons/round-school.svg | 3 + src/icons/round-shop-two.svg | 3 + src/icons/rss.svg | 3 + src/icons/sass.svg | 3 + src/icons/search.svg | 3 + src/icons/serial.svg | 1 + src/icons/socket-io.svg | 10 + src/icons/sun.svg | 3 + src/icons/telegram.svg | 3 + src/icons/translate.svg | 3 + src/icons/triangle_filled.svg | 3 + src/icons/vite.svg | 10 + src/icons/webpack.svg | 3 + src/layouts/BlogPost.astro | 51 -- src/layouts/article.astro | 42 + src/layouts/default.astro | 25 + src/pages/about.astro | 63 -- src/pages/articles/[...slug].astro | 21 + src/pages/blog/[...slug].astro | 21 - src/pages/blog/index.astro | 54 -- src/pages/contacts.astro | 5 + src/pages/index.astro | 49 +- src/pages/rss.xml.js | 16 - src/pages/rss.xml.ts | 17 + src/styles/global.css | 67 -- src/styles/global.scss | 138 +++ src/styles/theme.scss | 154 ++++ src/templates/Contacts.astro | 25 + src/templates/Home.astro | 31 + src/types/main.d.ts | 30 + src/utils/date.ts | 8 + src/utils/history.ts | 15 + src/utils/index.ts | 3 + src/utils/string.ts | 13 + src/utils/url.ts | 5 + tsconfig.json | 26 +- 125 files changed, 3235 insertions(+), 427 deletions(-) create mode 100644 public/android-chrome-192x192.png create mode 100644 public/android-chrome-256x256.png create mode 100644 public/apple-touch-icon.png create mode 100644 public/assets/css/code-highlight-dark.min.css create mode 100644 public/assets/css/code-highlight-light.min.css create mode 100644 public/assets/js/detect-theme.js create mode 100644 public/assets/js/load-code-highlight.js create mode 100644 public/browserconfig.xml create mode 100644 public/favicon-dark-16x16.png create mode 100644 public/favicon-dark-32x32.png create mode 100644 public/favicon-light-16x16.png create mode 100644 public/favicon-light-32x32.png create mode 100644 public/favicon.ico delete mode 100644 public/favicon.svg create mode 100644 public/mstile-150x150.png create mode 100644 public/robots.txt create mode 100644 public/safari-pinned-tab.svg create mode 100644 public/site.webmanifest create mode 100644 src/components/ArticleContent/ArticleContent.astro create mode 100644 src/components/ArticleContent/ArticleContent.scss create mode 100644 src/components/ArticleItem.astro create mode 100644 src/components/ArticlePost/ArticlePost.astro create mode 100644 src/components/ArticlePost/ArticlePost.scss create mode 100644 src/components/BaseLayout.astro create mode 100644 src/components/Button.astro create mode 100644 src/components/ContactForm.astro create mode 100644 src/components/ContactsList.astro create mode 100644 src/components/EmptyList.astro delete mode 100644 src/components/Header.astro create mode 100644 src/components/Header/Header.astro rename src/components/{ => Header}/HeaderLink.astro (67%) create mode 100644 src/components/LanguageSelect.astro create mode 100644 src/components/NavToggle/NavToggle.scss create mode 100644 src/components/NavToggle/NavToggle.tsx create mode 100644 src/components/NavToggle/index.ts create mode 100644 src/components/PageHeading.astro create mode 100644 src/components/RecentArticles.astro create mode 100644 src/components/SiteContent.astro create mode 100644 src/components/Splash/Splash.astro create mode 100644 src/components/Splash/SplashHeading.astro create mode 100644 src/components/Splash/SplashLink.astro create mode 100644 src/components/Splash/SplashLinks.astro create mode 100644 src/components/ThemeSwticher/ThemeSwitcher.scss create mode 100644 src/components/ThemeSwticher/ThemeSwitcher.tsx create mode 100644 src/components/ThemeSwticher/index.ts create mode 100644 src/components/UnderConstruction.astro create mode 100644 src/constants.ts delete mode 100644 src/consts.ts create mode 100644 src/i18n/en/ui.ts create mode 100644 src/i18n/languages.ts create mode 100644 src/i18n/ru/ui.ts create mode 100644 src/i18n/utils.ts create mode 100644 src/icons/adonisjs.svg create mode 100644 src/icons/alpinejs.svg create mode 100644 src/icons/arrow-up-right.svg create mode 100644 src/icons/astro.svg create mode 100644 src/icons/astro_filled.svg create mode 100644 src/icons/avr.svg create mode 100644 src/icons/book.svg create mode 100644 src/icons/chat.svg create mode 100644 src/icons/chip.svg create mode 100644 src/icons/docker.svg create mode 100644 src/icons/email.svg create mode 100644 src/icons/email_filled.svg create mode 100644 src/icons/expressjs.svg create mode 100644 src/icons/eye.svg create mode 100644 src/icons/gatsbyjs.svg create mode 100644 src/icons/git-branch.svg create mode 100644 src/icons/github_filled.svg create mode 100644 src/icons/graphql.svg create mode 100644 src/icons/information.svg create mode 100644 src/icons/language-c.svg create mode 100644 src/icons/link-out.svg create mode 100644 src/icons/mongodb.svg create mode 100644 src/icons/moon.svg create mode 100644 src/icons/mysql.svg create mode 100644 src/icons/netlify.svg create mode 100644 src/icons/nodejs.svg create mode 100644 src/icons/postgresql.svg create mode 100644 src/icons/reactjs.svg create mode 100644 src/icons/redis.svg create mode 100644 src/icons/round-school.svg create mode 100644 src/icons/round-shop-two.svg create mode 100644 src/icons/rss.svg create mode 100644 src/icons/sass.svg create mode 100644 src/icons/search.svg create mode 100644 src/icons/serial.svg create mode 100644 src/icons/socket-io.svg create mode 100644 src/icons/sun.svg create mode 100644 src/icons/telegram.svg create mode 100644 src/icons/translate.svg create mode 100644 src/icons/triangle_filled.svg create mode 100644 src/icons/vite.svg create mode 100644 src/icons/webpack.svg delete mode 100644 src/layouts/BlogPost.astro create mode 100644 src/layouts/article.astro create mode 100644 src/layouts/default.astro delete mode 100644 src/pages/about.astro create mode 100644 src/pages/articles/[...slug].astro delete mode 100644 src/pages/blog/[...slug].astro delete mode 100644 src/pages/blog/index.astro create mode 100644 src/pages/contacts.astro delete mode 100644 src/pages/rss.xml.js create mode 100644 src/pages/rss.xml.ts delete mode 100644 src/styles/global.css create mode 100644 src/styles/global.scss create mode 100644 src/styles/theme.scss create mode 100644 src/templates/Contacts.astro create mode 100644 src/templates/Home.astro create mode 100644 src/types/main.d.ts create mode 100644 src/utils/date.ts create mode 100644 src/utils/history.ts create mode 100644 src/utils/index.ts create mode 100644 src/utils/string.ts create mode 100644 src/utils/url.ts diff --git a/astro.config.mjs b/astro.config.mjs index 3b2f75c..5ebccf1 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -1,10 +1,30 @@ -import { defineConfig } from 'astro/config'; -import mdx from '@astrojs/mdx'; +import { defineConfig } from "astro/config"; -import sitemap from '@astrojs/sitemap'; +/** + * Integrations + */ +import mdx from "@astrojs/mdx"; +import sitemap from "@astrojs/sitemap"; +import solidJs from "@astrojs/solid-js"; + +import languages from "./src/i18n/languages"; + +import { DEFAULT_LANGUAGE } from "./src/constants"; // https://astro.build/config export default defineConfig({ - site: 'https://example.com', - integrations: [mdx(), sitemap()], + site: "https://yarkov.tech", + integrations: [ + mdx(), + sitemap({ + i18n: { + defaultLocale: DEFAULT_LANGUAGE, + locales: Object.fromEntries(Object.keys(languages).map((key) => [key, key])), + }, + }), + solidJs(), + ], + markdown: { + syntaxHighlight: "prism", + }, }); diff --git a/package-lock.json b/package-lock.json index 2c376c6..910d820 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,18 +1,26 @@ { "name": "yarkov.tech", - "version": "0.0.1", + "version": "2.0.0", "lockfileVersion": 2, "requires": true, "packages": { "": { - "version": "0.0.1", + "name": "yarkov.tech", + "version": "2.0.0", + "license": "MIT", "dependencies": { "@astrojs/mdx": "^0.16.0", "@astrojs/rss": "^2.1.0", "@astrojs/sitemap": "^1.0.1", + "@astrojs/solid-js": "^2.0.2", "astro": "^2.0.10", + "astro-icon": "^0.8.0", "ioredis": "^5.3.0", - "quicklink": "^2.3.0" + "quicklink": "^2.3.0", + "solid-js": "^1.6.10" + }, + "devDependencies": { + "sass": "^1.58.0" } }, "node_modules/@ampproject/remapping": { @@ -133,6 +141,21 @@ "zod": "^3.17.3" } }, + "node_modules/@astrojs/solid-js": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@astrojs/solid-js/-/solid-js-2.0.2.tgz", + "integrity": "sha512-fQMOfBcmvYHXJg8vR0LgoeBgrlLHrxnlzxxmPkDKrGPBRh9y3si2d/ChpMyMRL3ibAOqWTs7Xs5gOYqrFZbw3g==", + "dependencies": { + "babel-preset-solid": "^1.4.2", + "vitefu": "^0.2.4" + }, + "engines": { + "node": ">=16.12.0" + }, + "peerDependencies": { + "solid-js": "^1.4.3" + } + }, "node_modules/@astrojs/telemetry": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-2.0.0.tgz", @@ -1033,6 +1056,14 @@ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/@types/acorn": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz", @@ -1279,6 +1310,19 @@ "node": ">=4" } }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "devOptional": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/arg": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", @@ -1375,6 +1419,16 @@ "npm": ">=6.14.0" } }, + "node_modules/astro-icon": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/astro-icon/-/astro-icon-0.8.0.tgz", + "integrity": "sha512-sCzhZcl46BIyLJVg89hq5J4uQABn2psmGvK4cUaxib+M/kBI3TrPy1w3g2O5h/WcrTHLVN9LyxjgkD4lEJJFpw==", + "dependencies": { + "node-fetch": "^3.1.0", + "resolve-pkg": "^2.0.0", + "svgo": "^2.8.0" + } + }, "node_modules/astro/node_modules/es-module-lexer": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.1.1.tgz", @@ -1385,6 +1439,32 @@ "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==" }, + "node_modules/babel-plugin-jsx-dom-expressions": { + "version": "0.35.15", + "resolved": "https://registry.npmjs.org/babel-plugin-jsx-dom-expressions/-/babel-plugin-jsx-dom-expressions-0.35.15.tgz", + "integrity": "sha512-33GQnanjYKefOTO2lQK6EaKXPJ1W8vtzvBneGfhKaOZHQJLqe61P93jP0TLTz67sqsA0m1ph1cNdGpLc/Nx2Xg==", + "dependencies": { + "@babel/helper-module-imports": "7.18.6", + "@babel/plugin-syntax-jsx": "^7.18.6", + "@babel/types": "^7.20.7", + "html-entities": "2.3.3", + "validate-html-nesting": "^1.2.0" + }, + "peerDependencies": { + "@babel/core": "^7.20.12" + } + }, + "node_modules/babel-preset-solid": { + "version": "1.6.10", + "resolved": "https://registry.npmjs.org/babel-preset-solid/-/babel-preset-solid-1.6.10.tgz", + "integrity": "sha512-qBLjzeWmgY5jX11sJg/lriXABYdClfJrJJrIHaT6G5EuGhxhm6jn7XjqXjLBZHBgy5n/Z+iqJ5YfQj8KG2jKTA==", + "dependencies": { + "babel-plugin-jsx-dom-expressions": "^0.35.15" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, "node_modules/bail": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", @@ -1413,6 +1493,15 @@ } ] }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "devOptional": true, + "engines": { + "node": ">=8" + } + }, "node_modules/bl": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", @@ -1423,6 +1512,11 @@ "readable-stream": "^3.4.0" } }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + }, "node_modules/boxen": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/boxen/-/boxen-6.2.1.tgz", @@ -1664,6 +1758,33 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "devOptional": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, "node_modules/ci-info": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", @@ -1752,6 +1873,14 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" + } + }, "node_modules/common-ancestor-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", @@ -1783,6 +1912,76 @@ "node": ">= 8" } }, + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-tree/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csstype": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "engines": { + "node": ">= 12" + } + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -1872,6 +2071,57 @@ "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, "node_modules/dset": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.2.tgz", @@ -1904,6 +2154,14 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/es-module-lexer": { "version": "0.10.5", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.10.5.tgz", @@ -2139,6 +2397,28 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -2182,6 +2462,17 @@ "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", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, "node_modules/fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", @@ -2444,6 +2735,11 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/html-entities": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", + "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==" + }, "node_modules/html-escaper": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz", @@ -2485,6 +2781,12 @@ } ] }, + "node_modules/immutable": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.2.4.tgz", + "integrity": "sha512-WDxL3Hheb1JkRN3sQkyujNlL/xRjAo3rJtaU5xeufUauG66JdMr32bLj4gF+vWl84DIA3Zxw7tiAjneYzRRw+w==", + "devOptional": true + }, "node_modules/import-meta-resolve": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-2.2.1.tgz", @@ -2549,6 +2851,18 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "devOptional": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/is-buffer": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", @@ -3227,6 +3541,11 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -4004,11 +4323,55 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.0.tgz", + "integrity": "sha512-BKwRP/O0UvoMKp7GNdwPlObhYGB5DQqwhEDQlNKuoqwVYSxkSZCSbHjnFFmUEtwSKRPU4kNK8PbDYYitwaE3QA==", + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, "node_modules/node-releases": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==" }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "devOptional": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/npm-run-path": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", @@ -4034,6 +4397,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -4512,6 +4886,18 @@ "node": ">= 6" } }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "devOptional": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, "node_modules/redis-errors": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", @@ -4698,6 +5084,25 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg/-/resolve-pkg-2.0.0.tgz", + "integrity": "sha512-+1lzwXehGCXSeryaISr6WujZzowloigEofRB+dj75y9RRa/obVcYgbHJd53tdYw8pvZj8GojXaaENws8Ktw/hQ==", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/restore-cursor": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", @@ -4886,6 +5291,23 @@ } ] }, + "node_modules/sass": { + "version": "1.58.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.58.0.tgz", + "integrity": "sha512-PiMJcP33DdKtZ/1jSjjqVIKihoDc6yWmYr9K/4r3fVVIEDAluD0q7XZiRKrNJcPK3qkLRF/79DND1H5q1LBjgg==", + "devOptional": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/sass-formatter": { "version": "0.7.5", "resolved": "https://registry.npmjs.org/sass-formatter/-/sass-formatter-0.7.5.tgz", @@ -5029,6 +5451,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/solid-js": { + "version": "1.6.10", + "resolved": "https://registry.npmjs.org/solid-js/-/solid-js-1.6.10.tgz", + "integrity": "sha512-Sf0e6PQCEFkFtbPq0L+93Ua81YQOefBEbvDJ0YXT92b6Lzw0k7UvzSd2l1BbYM+yzE3UmepU1tyMDc/3nIByjA==", + "dependencies": { + "csstype": "^3.1.0" + } + }, "node_modules/source-map": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", @@ -5059,6 +5489,12 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility" + }, "node_modules/standard-as-callback": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz", @@ -5201,6 +5637,26 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/synckit": { "version": "0.8.5", "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", @@ -5529,6 +5985,11 @@ "node": ">=8" } }, + "node_modules/validate-html-nesting": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/validate-html-nesting/-/validate-html-nesting-1.2.1.tgz", + "integrity": "sha512-T1ab131NkP3BfXB7KUSgV7Rhu81R2id+L6NaJ7NypAAG5iV6gXnPpQE5RK1fvb+3JYsPTL+ihWna5sr5RN9gaQ==" + }, "node_modules/vfile": { "version": "5.3.7", "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz", @@ -5723,6 +6184,14 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/web-streams-polyfill": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", + "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", + "engines": { + "node": ">= 8" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -5944,6 +6413,15 @@ "zod": "^3.17.3" } }, + "@astrojs/solid-js": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@astrojs/solid-js/-/solid-js-2.0.2.tgz", + "integrity": "sha512-fQMOfBcmvYHXJg8vR0LgoeBgrlLHrxnlzxxmPkDKrGPBRh9y3si2d/ChpMyMRL3ibAOqWTs7Xs5gOYqrFZbw3g==", + "requires": { + "babel-preset-solid": "^1.4.2", + "vitefu": "^0.2.4" + } + }, "@astrojs/telemetry": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-2.0.0.tgz", @@ -6505,6 +6983,11 @@ } } }, + "@trysound/sax": { + "version": "0.2.0", + "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", @@ -6729,6 +7212,16 @@ "color-convert": "^1.9.0" } }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "devOptional": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, "arg": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", @@ -6823,6 +7316,36 @@ } } }, + "astro-icon": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/astro-icon/-/astro-icon-0.8.0.tgz", + "integrity": "sha512-sCzhZcl46BIyLJVg89hq5J4uQABn2psmGvK4cUaxib+M/kBI3TrPy1w3g2O5h/WcrTHLVN9LyxjgkD4lEJJFpw==", + "requires": { + "node-fetch": "^3.1.0", + "resolve-pkg": "^2.0.0", + "svgo": "^2.8.0" + } + }, + "babel-plugin-jsx-dom-expressions": { + "version": "0.35.15", + "resolved": "https://registry.npmjs.org/babel-plugin-jsx-dom-expressions/-/babel-plugin-jsx-dom-expressions-0.35.15.tgz", + "integrity": "sha512-33GQnanjYKefOTO2lQK6EaKXPJ1W8vtzvBneGfhKaOZHQJLqe61P93jP0TLTz67sqsA0m1ph1cNdGpLc/Nx2Xg==", + "requires": { + "@babel/helper-module-imports": "7.18.6", + "@babel/plugin-syntax-jsx": "^7.18.6", + "@babel/types": "^7.20.7", + "html-entities": "2.3.3", + "validate-html-nesting": "^1.2.0" + } + }, + "babel-preset-solid": { + "version": "1.6.10", + "resolved": "https://registry.npmjs.org/babel-preset-solid/-/babel-preset-solid-1.6.10.tgz", + "integrity": "sha512-qBLjzeWmgY5jX11sJg/lriXABYdClfJrJJrIHaT6G5EuGhxhm6jn7XjqXjLBZHBgy5n/Z+iqJ5YfQj8KG2jKTA==", + "requires": { + "babel-plugin-jsx-dom-expressions": "^0.35.15" + } + }, "bail": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", @@ -6833,6 +7356,12 @@ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "devOptional": true + }, "bl": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", @@ -6843,6 +7372,11 @@ "readable-stream": "^3.4.0" } }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + }, "boxen": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/boxen/-/boxen-6.2.1.tgz", @@ -6984,6 +7518,22 @@ "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", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "devOptional": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, "ci-info": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", @@ -7035,6 +7585,11 @@ "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==" }, + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" + }, "common-ancestor-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", @@ -7060,6 +7615,57 @@ "which": "^2.0.1" } }, + "css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + } + }, + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "requires": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==" + }, + "csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "requires": { + "css-tree": "^1.1.2" + } + }, + "csstype": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + }, + "data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==" + }, "debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -7119,6 +7725,39 @@ "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" }, + "dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" + }, + "domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, "dset": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.2.tgz", @@ -7148,6 +7787,11 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + }, "es-module-lexer": { "version": "0.10.5", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.10.5.tgz", @@ -7317,6 +7961,15 @@ "format": "^0.2.0" } }, + "fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "requires": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + } + }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -7348,6 +8001,14 @@ "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", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "requires": { + "fetch-blob": "^3.1.2" + } + }, "fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", @@ -7544,6 +8205,11 @@ "space-separated-tokens": "^2.0.0" } }, + "html-entities": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", + "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==" + }, "html-escaper": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-3.0.3.tgz", @@ -7564,6 +8230,12 @@ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, + "immutable": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.2.4.tgz", + "integrity": "sha512-WDxL3Hheb1JkRN3sQkyujNlL/xRjAo3rJtaU5xeufUauG66JdMr32bLj4gF+vWl84DIA3Zxw7tiAjneYzRRw+w==", + "devOptional": true + }, "import-meta-resolve": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-2.2.1.tgz", @@ -7609,6 +8281,15 @@ "is-decimal": "^2.0.0" } }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "devOptional": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, "is-buffer": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", @@ -8067,6 +8748,11 @@ "@types/mdast": "^3.0.0" } }, + "mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + }, "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -8525,11 +9211,32 @@ "@types/nlcst": "^1.0.0" } }, + "node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==" + }, + "node-fetch": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.0.tgz", + "integrity": "sha512-BKwRP/O0UvoMKp7GNdwPlObhYGB5DQqwhEDQlNKuoqwVYSxkSZCSbHjnFFmUEtwSKRPU4kNK8PbDYYitwaE3QA==", + "requires": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + } + }, "node-releases": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==" }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "devOptional": true + }, "npm-run-path": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", @@ -8545,6 +9252,14 @@ } } }, + "nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "requires": { + "boolbase": "^1.0.0" + } + }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -8872,6 +9587,15 @@ "util-deprecate": "^1.0.1" } }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "devOptional": true, + "requires": { + "picomatch": "^2.2.1" + } + }, "redis-errors": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", @@ -9004,6 +9728,19 @@ "supports-preserve-symlinks-flag": "^1.0.0" } }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" + }, + "resolve-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg/-/resolve-pkg-2.0.0.tgz", + "integrity": "sha512-+1lzwXehGCXSeryaISr6WujZzowloigEofRB+dj75y9RRa/obVcYgbHJd53tdYw8pvZj8GojXaaENws8Ktw/hQ==", + "requires": { + "resolve-from": "^5.0.0" + } + }, "restore-cursor": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", @@ -9118,6 +9855,17 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, + "sass": { + "version": "1.58.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.58.0.tgz", + "integrity": "sha512-PiMJcP33DdKtZ/1jSjjqVIKihoDc6yWmYr9K/4r3fVVIEDAluD0q7XZiRKrNJcPK3qkLRF/79DND1H5q1LBjgg==", + "devOptional": true, + "requires": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + } + }, "sass-formatter": { "version": "0.7.5", "resolved": "https://registry.npmjs.org/sass-formatter/-/sass-formatter-0.7.5.tgz", @@ -9234,6 +9982,14 @@ "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==" }, + "solid-js": { + "version": "1.6.10", + "resolved": "https://registry.npmjs.org/solid-js/-/solid-js-1.6.10.tgz", + "integrity": "sha512-Sf0e6PQCEFkFtbPq0L+93Ua81YQOefBEbvDJ0YXT92b6Lzw0k7UvzSd2l1BbYM+yzE3UmepU1tyMDc/3nIByjA==", + "requires": { + "csstype": "^3.1.0" + } + }, "source-map": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", @@ -9254,6 +10010,11 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" + }, "standard-as-callback": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/standard-as-callback/-/standard-as-callback-2.1.0.tgz", @@ -9356,6 +10117,20 @@ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" }, + "svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "requires": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + } + }, "synckit": { "version": "0.8.5", "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.5.tgz", @@ -9568,6 +10343,11 @@ "sade": "^1.7.3" } }, + "validate-html-nesting": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/validate-html-nesting/-/validate-html-nesting-1.2.1.tgz", + "integrity": "sha512-T1ab131NkP3BfXB7KUSgV7Rhu81R2id+L6NaJ7NypAAG5iV6gXnPpQE5RK1fvb+3JYsPTL+ihWna5sr5RN9gaQ==" + }, "vfile": { "version": "5.3.7", "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz", @@ -9697,6 +10477,11 @@ "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==" }, + "web-streams-polyfill": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", + "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==" + }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", diff --git a/package.json b/package.json index 03d3f70..fd7f77c 100644 --- a/package.json +++ b/package.json @@ -21,8 +21,14 @@ "@astrojs/mdx": "^0.16.0", "@astrojs/rss": "^2.1.0", "@astrojs/sitemap": "^1.0.1", + "@astrojs/solid-js": "^2.0.2", "astro": "^2.0.10", + "astro-icon": "^0.8.0", "ioredis": "^5.3.0", - "quicklink": "^2.3.0" + "quicklink": "^2.3.0", + "solid-js": "^1.6.10" + }, + "devDependencies": { + "sass": "^1.58.0" } } diff --git a/public/android-chrome-192x192.png b/public/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..d005d3578c8e3d7c552a53feaf5acf28abe7a26a GIT binary patch literal 4663 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 literal 0 HcmV?d00001 diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e8637e08047fa8ab5d560033e4764a75734b28bf GIT binary patch literal 4371 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 MHGS0zWxJ671Bi-S$p8QV literal 0 HcmV?d00001 diff --git a/public/assets/css/code-highlight-dark.min.css b/public/assets/css/code-highlight-dark.min.css new file mode 100644 index 0000000..2339ae7 --- /dev/null +++ b/public/assets/css/code-highlight-dark.min.css @@ -0,0 +1 @@ +code[class*=language-],pre[class*=language-]{background:#111b27;color:#aab1bf;text-shadow:0 1px rgba(0,0,0,.3);font-family:'Fira Code','Fira Mono',Menlo,Consolas,'DejaVu Sans Mono',monospace;direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;line-height:1.5;-moz-tab-size:2;-o-tab-size:2;tab-size:2;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection{background:#3e4450;color:inherit;text-shadow:none}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection{background:#3e4450;color:inherit;text-shadow:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto;border-radius:.3em}:not(pre)>code[class*=language-]{padding:.2em .3em;border-radius:.3em;white-space:normal}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}.token.cdata,.token.comment,.token.prolog{color:#5b6270}.token.doctype,.token.entity,.token.punctuation{color:#aab1bf}.token.atrule,.token.attr-name,.token.boolean,.token.class-name,.token.constant,.token.number{color:#d19965}.token.keyword{color:#c578dd}.token.deleted,.token.important,.token.property,.token.symbol,.token.tag{color:#df6b75}.token.attr-value,.token.attr-value>.token.punctuation,.token.builtin,.token.char,.token.inserted,.token.regex,.token.selector,.token.string{color:#97c279}.token.function,.token.operator,.token.variable{color:#61afef}.token.url{color:#56b5c2}.token.attr-value>.token.punctuation.attr-equals,.token.special-attr>.token.attr-value>.token.value.css{color:#aab1bf}.language-css .token.selector{color:#df6b75}.language-css .token.property{color:#aab1bf}.language-css .token.function,.language-css .token.url>.token.function{color:#56b5c2}.language-css .token.url>.token.string.url{color:#97c279}.language-css .token.atrule .token.rule,.language-css .token.important{color:#c578dd}.language-javascript .token.operator{color:#c578dd}.language-javascript .token.template-string>.token.interpolation>.token.interpolation-punctuation.punctuation{color:#be5046}.language-json .token.operator{color:#aab1bf}.language-json .token.null.keyword{color:#d19965}.language-markdown .token.url,.language-markdown .token.url-reference.url>.token.string,.language-markdown .token.url>.token.operator{color:#aab1bf}.language-markdown .token.url>.token.content{color:#61afef}.language-markdown .token.url-reference.url,.language-markdown .token.url>.token.url{color:#56b5c2}.language-markdown .token.blockquote.punctuation,.language-markdown .token.hr.punctuation{color:#5b6270;font-style:italic}.language-markdown .token.code-snippet{color:#97c279}.language-markdown .token.bold .token.content{color:#d19965}.language-markdown .token.italic .token.content{color:#c578dd}.language-markdown .token.list.punctuation,.language-markdown .token.strike .token.content,.language-markdown .token.strike .token.punctuation,.language-markdown .token.title.important>.token.punctuation{color:#df6b75}.token.bold{font-weight:700}.token.comment,.token.italic{font-style:italic}.token.entity{cursor:help}.token.namespace{opacity:.8}.token.token.cr:before,.token.token.lf:before,.token.token.space:before,.token.token.tab:not(:empty):before{color:hsla(220,14%,71%,.15);text-shadow:none}div.code-toolbar>.toolbar.toolbar>.toolbar-item{margin-right:.4em}div.code-toolbar>.toolbar.toolbar>.toolbar-item>a,div.code-toolbar>.toolbar.toolbar>.toolbar-item>button,div.code-toolbar>.toolbar.toolbar>.toolbar-item>span{background:#393f4a;color:#818896;padding:.1em .4em;border-radius:.3em}div.code-toolbar>.toolbar.toolbar>.toolbar-item>a:focus,div.code-toolbar>.toolbar.toolbar>.toolbar-item>a:hover,div.code-toolbar>.toolbar.toolbar>.toolbar-item>button:focus,div.code-toolbar>.toolbar.toolbar>.toolbar-item>button:hover,div.code-toolbar>.toolbar.toolbar>.toolbar-item>span:focus,div.code-toolbar>.toolbar.toolbar>.toolbar-item>span:hover{background:#3e4450;color:#aab1bf}.line-highlight.line-highlight{background:hsla(220,100%,80%,.04)}.line-highlight.line-highlight:before,.line-highlight.line-highlight[data-end]:after{background:#393f4a;color:#aab1bf;padding:.1em .6em;border-radius:.3em;box-shadow:0 2px 0 0 rgba(0,0,0,.2)}pre[id].linkable-line-numbers.linkable-line-numbers span.line-numbers-rows>span:hover:before{background-color:hsla(220,100%,80%,.04)}.command-line .command-line-prompt,.line-numbers.line-numbers .line-numbers-rows{border-right-color:hsla(220,14%,71%,.15)}.command-line .command-line-prompt>span:before,.line-numbers .line-numbers-rows>span:before{color:#626d82}.rainbow-braces .token.token.punctuation.brace-level-1,.rainbow-braces .token.token.punctuation.brace-level-5,.rainbow-braces .token.token.punctuation.brace-level-9{color:#df6b75}.rainbow-braces .token.token.punctuation.brace-level-10,.rainbow-braces .token.token.punctuation.brace-level-2,.rainbow-braces .token.token.punctuation.brace-level-6{color:#97c279}.rainbow-braces .token.token.punctuation.brace-level-11,.rainbow-braces .token.token.punctuation.brace-level-3,.rainbow-braces .token.token.punctuation.brace-level-7{color:#61afef}.rainbow-braces .token.token.punctuation.brace-level-12,.rainbow-braces .token.token.punctuation.brace-level-4,.rainbow-braces .token.token.punctuation.brace-level-8{color:#c578dd}pre.diff-highlight>code .token.token.deleted:not(.prefix),pre>code.diff-highlight .token.token.deleted:not(.prefix){background-color:hsla(353,100%,66%,.15)}pre.diff-highlight>code .token.token.deleted:not(.prefix) ::-moz-selection,pre.diff-highlight>code .token.token.deleted:not(.prefix)::-moz-selection,pre>code.diff-highlight .token.token.deleted:not(.prefix) ::-moz-selection,pre>code.diff-highlight .token.token.deleted:not(.prefix)::-moz-selection{background-color:hsla(353,95%,66%,.25)}pre.diff-highlight>code .token.token.deleted:not(.prefix) ::selection,pre.diff-highlight>code .token.token.deleted:not(.prefix)::selection,pre>code.diff-highlight .token.token.deleted:not(.prefix) ::selection,pre>code.diff-highlight .token.token.deleted:not(.prefix)::selection{background-color:hsla(353,95%,66%,.25)}pre.diff-highlight>code .token.token.inserted:not(.prefix),pre>code.diff-highlight .token.token.inserted:not(.prefix){background-color:hsla(137,100%,55%,.15)}pre.diff-highlight>code .token.token.inserted:not(.prefix) ::-moz-selection,pre.diff-highlight>code .token.token.inserted:not(.prefix)::-moz-selection,pre>code.diff-highlight .token.token.inserted:not(.prefix) ::-moz-selection,pre>code.diff-highlight .token.token.inserted:not(.prefix)::-moz-selection{background-color:hsla(135,73%,55%,.25)}pre.diff-highlight>code .token.token.inserted:not(.prefix) ::selection,pre.diff-highlight>code .token.token.inserted:not(.prefix)::selection,pre>code.diff-highlight .token.token.inserted:not(.prefix) ::selection,pre>code.diff-highlight .token.token.inserted:not(.prefix)::selection{background-color:hsla(135,73%,55%,.25)}.prism-previewer-gradient.prism-previewer-gradient div,.prism-previewer.prism-previewer:before{border-color:#252830}.prism-previewer-color.prism-previewer-color:before,.prism-previewer-easing.prism-previewer-easing:before,.prism-previewer-gradient.prism-previewer-gradient div{border-radius:.3em}.prism-previewer.prism-previewer:after{border-top-color:#252830}.prism-previewer-flipped.prism-previewer-flipped.after{border-bottom-color:#252830}.prism-previewer-angle.prism-previewer-angle:before,.prism-previewer-easing.prism-previewer-easing,.prism-previewer-time.prism-previewer-time:before{background:#30353f}.prism-previewer-angle.prism-previewer-angle circle,.prism-previewer-time.prism-previewer-time circle{stroke:#aab1bf;stroke-opacity:1}.prism-previewer-easing.prism-previewer-easing circle,.prism-previewer-easing.prism-previewer-easing line,.prism-previewer-easing.prism-previewer-easing path{stroke:#aab1bf}.prism-previewer-easing.prism-previewer-easing circle{fill:transparent} \ No newline at end of file diff --git a/public/assets/css/code-highlight-light.min.css b/public/assets/css/code-highlight-light.min.css new file mode 100644 index 0000000..37a3b9d --- /dev/null +++ b/public/assets/css/code-highlight-light.min.css @@ -0,0 +1 @@ +code[class*=language-],pre[class*=language-]{background:#f9f9f9;color:#383942;font-family:'Fira Code','Fira Mono',Menlo,Consolas,'DejaVu Sans Mono',monospace;direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;line-height:1.5;-moz-tab-size:2;-o-tab-size:2;tab-size:2;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection{background:#e5e5e5;color:inherit}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection{background:#e5e5e5;color:inherit}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto;border-radius:.3em}:not(pre)>code[class*=language-]{padding:.2em .3em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.prolog{color:#9fa0a6}.token.doctype,.token.entity,.token.punctuation{color:#383942}.token.atrule,.token.attr-name,.token.boolean,.token.class-name,.token.constant,.token.number{color:#b66a00}.token.keyword{color:#a625a4}.token.deleted,.token.important,.token.property,.token.symbol,.token.tag{color:#e35549}.token.attr-value,.token.attr-value>.token.punctuation,.token.builtin,.token.char,.token.inserted,.token.regex,.token.selector,.token.string{color:#50a04f}.token.function,.token.operator,.token.variable{color:#4078f1}.token.url{color:#0083bb}.token.attr-value>.token.punctuation.attr-equals,.token.special-attr>.token.attr-value>.token.value.css{color:#383942}.language-css .token.selector{color:#e35549}.language-css .token.property{color:#383942}.language-css .token.function,.language-css .token.url>.token.function{color:#0083bb}.language-css .token.url>.token.string.url{color:#50a04f}.language-css .token.atrule .token.rule,.language-css .token.important{color:#a625a4}.language-javascript .token.operator{color:#a625a4}.language-javascript .token.template-string>.token.interpolation>.token.interpolation-punctuation.punctuation{color:#c91142}.language-json .token.operator{color:#383942}.language-json .token.null.keyword{color:#b66a00}.language-markdown .token.url,.language-markdown .token.url-reference.url>.token.string,.language-markdown .token.url>.token.operator{color:#383942}.language-markdown .token.url>.token.content{color:#4078f1}.language-markdown .token.url-reference.url,.language-markdown .token.url>.token.url{color:#0083bb}.language-markdown .token.blockquote.punctuation,.language-markdown .token.hr.punctuation{color:#9fa0a6;font-style:italic}.language-markdown .token.code-snippet{color:#50a04f}.language-markdown .token.bold .token.content{color:#b66a00}.language-markdown .token.italic .token.content{color:#a625a4}.language-markdown .token.list.punctuation,.language-markdown .token.strike .token.content,.language-markdown .token.strike .token.punctuation,.language-markdown .token.title.important>.token.punctuation{color:#e35549}.token.bold{font-weight:700}.token.comment,.token.italic{font-style:italic}.token.entity{cursor:help}.token.namespace{opacity:.8}.token.token.cr:before,.token.token.lf:before,.token.token.space:before,.token.token.tab:not(:empty):before{color:hsla(230,8%,24%,.2)}div.code-toolbar>.toolbar.toolbar>.toolbar-item{margin-right:.4em}div.code-toolbar>.toolbar.toolbar>.toolbar-item>a,div.code-toolbar>.toolbar.toolbar>.toolbar-item>button,div.code-toolbar>.toolbar.toolbar>.toolbar-item>span{background:#e5e5e5;color:#696b76;padding:.1em .4em;border-radius:.3em}div.code-toolbar>.toolbar.toolbar>.toolbar-item>a:focus,div.code-toolbar>.toolbar.toolbar>.toolbar-item>a:hover,div.code-toolbar>.toolbar.toolbar>.toolbar-item>button:focus,div.code-toolbar>.toolbar.toolbar>.toolbar-item>button:hover,div.code-toolbar>.toolbar.toolbar>.toolbar-item>span:focus,div.code-toolbar>.toolbar.toolbar>.toolbar-item>span:hover{background:#c6c6c7;color:#383942}.line-highlight.line-highlight{background:hsla(230,8%,24%,.05)}.line-highlight.line-highlight:before,.line-highlight.line-highlight[data-end]:after{background:#e5e5e5;color:#383942;padding:.1em .6em;border-radius:.3em;box-shadow:0 2px 0 0 rgba(0,0,0,.2)}pre[id].linkable-line-numbers.linkable-line-numbers span.line-numbers-rows>span:hover:before{background-color:hsla(230,8%,24%,.05)}.command-line .command-line-prompt,.line-numbers.line-numbers .line-numbers-rows{border-right-color:hsla(230,8%,24%,.2)}.command-line .command-line-prompt>span:before,.line-numbers .line-numbers-rows>span:before{color:#9d9d9f}.rainbow-braces .token.token.punctuation.brace-level-1,.rainbow-braces .token.token.punctuation.brace-level-5,.rainbow-braces .token.token.punctuation.brace-level-9{color:#e35549}.rainbow-braces .token.token.punctuation.brace-level-10,.rainbow-braces .token.token.punctuation.brace-level-2,.rainbow-braces .token.token.punctuation.brace-level-6{color:#50a04f}.rainbow-braces .token.token.punctuation.brace-level-11,.rainbow-braces .token.token.punctuation.brace-level-3,.rainbow-braces .token.token.punctuation.brace-level-7{color:#4078f1}.rainbow-braces .token.token.punctuation.brace-level-12,.rainbow-braces .token.token.punctuation.brace-level-4,.rainbow-braces .token.token.punctuation.brace-level-8{color:#a625a4}pre.diff-highlight>code .token.token.deleted:not(.prefix),pre>code.diff-highlight .token.token.deleted:not(.prefix){background-color:hsla(353,100%,66%,.15)}pre.diff-highlight>code .token.token.deleted:not(.prefix) ::-moz-selection,pre.diff-highlight>code .token.token.deleted:not(.prefix)::-moz-selection,pre>code.diff-highlight .token.token.deleted:not(.prefix) ::-moz-selection,pre>code.diff-highlight .token.token.deleted:not(.prefix)::-moz-selection{background-color:hsla(353,95%,66%,.25)}pre.diff-highlight>code .token.token.deleted:not(.prefix) ::selection,pre.diff-highlight>code .token.token.deleted:not(.prefix)::selection,pre>code.diff-highlight .token.token.deleted:not(.prefix) ::selection,pre>code.diff-highlight .token.token.deleted:not(.prefix)::selection{background-color:hsla(353,95%,66%,.25)}pre.diff-highlight>code .token.token.inserted:not(.prefix),pre>code.diff-highlight .token.token.inserted:not(.prefix){background-color:hsla(137,100%,55%,.15)}pre.diff-highlight>code .token.token.inserted:not(.prefix) ::-moz-selection,pre.diff-highlight>code .token.token.inserted:not(.prefix)::-moz-selection,pre>code.diff-highlight .token.token.inserted:not(.prefix) ::-moz-selection,pre>code.diff-highlight .token.token.inserted:not(.prefix)::-moz-selection{background-color:hsla(135,73%,55%,.25)}pre.diff-highlight>code .token.token.inserted:not(.prefix) ::selection,pre.diff-highlight>code .token.token.inserted:not(.prefix)::selection,pre>code.diff-highlight .token.token.inserted:not(.prefix) ::selection,pre>code.diff-highlight .token.token.inserted:not(.prefix)::selection{background-color:hsla(135,73%,55%,.25)}.prism-previewer-gradient.prism-previewer-gradient div,.prism-previewer.prism-previewer:before{border-color:#f2f2f2}.prism-previewer-color.prism-previewer-color:before,.prism-previewer-easing.prism-previewer-easing:before,.prism-previewer-gradient.prism-previewer-gradient div{border-radius:.3em}.prism-previewer.prism-previewer:after{border-top-color:#f2f2f2}.prism-previewer-flipped.prism-previewer-flipped.after{border-bottom-color:#f2f2f2}.prism-previewer-angle.prism-previewer-angle:before,.prism-previewer-easing.prism-previewer-easing,.prism-previewer-time.prism-previewer-time:before{background:#fff}.prism-previewer-angle.prism-previewer-angle circle,.prism-previewer-time.prism-previewer-time circle{stroke:#383942;stroke-opacity:1}.prism-previewer-easing.prism-previewer-easing circle,.prism-previewer-easing.prism-previewer-easing line,.prism-previewer-easing.prism-previewer-easing path{stroke:#383942}.prism-previewer-easing.prism-previewer-easing circle{fill:transparent} \ No newline at end of file diff --git a/public/assets/js/detect-theme.js b/public/assets/js/detect-theme.js new file mode 100644 index 0000000..d34ae2c --- /dev/null +++ b/public/assets/js/detect-theme.js @@ -0,0 +1,22 @@ +/** + * This script is used to determine the theme of the site. + * The theme value is taken from localstorage, otherwise from the operating system. + * It is very important to include this script before loading the CSS + * and body markup to prevent FOUC (Flash of unstyled content). + */ + +window.theme = (() => { + const local = localStorage.getItem("theme"); + if (local && (local === "dark" || local === "light")) return local; + const isDark = window.matchMedia("(prefers-color-scheme: dark)").matches; + return isDark ? "dark" : "light"; +})(); + +document.documentElement.setAttribute("data-theme", window.theme); + +/* Sync with OS theme */ +window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", ({ matches: isDark }) => { + window.theme = isDark ? "dark" : "light"; + localStorage.setItem("theme", window.theme); + document.documentElement.setAttribute("data-theme", window.theme); +}); diff --git a/public/assets/js/load-code-highlight.js b/public/assets/js/load-code-highlight.js new file mode 100644 index 0000000..9451820 --- /dev/null +++ b/public/assets/js/load-code-highlight.js @@ -0,0 +1,48 @@ +/** + * This script will load the properly code highlithing theme based on user theme + * It is important to insert it after detecting a user theme + * and assigning the `window.theme` property + */ + +if (window.theme) { + /* the {theme} in the path will be dynamically changed */ + const PATH = `/assets/css/code-highlight-{theme}.min.css`; + const $head = document.getElementsByTagName("head")[0]; + const getPath = (theme) => PATH.replace(`{theme}`, theme); + const createLink = (theme, media) => { + const $link = document.createElement("link"); + $link.rel = "stylesheet"; + $link.type = "text/css"; + $link.href = getPath(theme); + $link.media = media; + return $link; + }; + + /* init links to load them first */ + const $light = createLink("light", "none"); + const $dark = createLink("dark", "none"); + + const toggleMedia = (theme) => { + switch (theme) { + case "light": + $light.media = "all"; + $dark.media = "none"; + break; + case "dark": + $light.media = "none"; + $dark.media = "all"; + break; + default: + break; + } + }; + + toggleMedia(window.theme); + $head.appendChild($light); + $head.appendChild($dark); + + window.addEventListener("onthemetoggled", ({ detail: newTheme }) => toggleMedia(newTheme)); + window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change", ({ matches: isDark }) => { + return isDark ? toggleMedia("dark") : toggleMedia("light"); + }); +} diff --git a/public/browserconfig.xml b/public/browserconfig.xml new file mode 100644 index 0000000..b3930d0 --- /dev/null +++ b/public/browserconfig.xml @@ -0,0 +1,9 @@ + + + + + + #da532c + + + diff --git a/public/favicon-dark-16x16.png b/public/favicon-dark-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..6acf70577091427c39cb02d0f5c1153a2c7c1dee GIT binary patch literal 617 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YDR+ueoXe|!I#{XiaP zfk$L90|U1(2s1Lwnj--eWH0gbb!C6XAt=DF%CgMq4^Zf*r;B5V#`)HX8~qLih_wAL z*6i5sBCgBg&cyttPvzBtOX3BSkKAoB|Hyl1#vGXrKD9lJ(nr_@q{W=p?0xp_n}Nur zd(&QQpF3yr=l?(JA8F+kwp($S^)UEL2=jkr5a;aTXsJ+{x2UpU?z|cyeXjGmiXWd# zDKyp>yeU)`361y^CG#!C8<`)MX5lF!N|bKNY}tZ*U&t~(9Fuv)XLag+rYrez z3c0lGff~ZALLy3n63Z0|it^Jkb5a#bDhpB-G7CzQ85k<&JpRPPQ5dG7amxSn8PBId z49v>hddb|v%EI20MVN&ZTpCOcr!XsT4pBILk4UEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10f+@+{-G$+Qd;gjJKptm- zM`SSr1Gg{;GcwGYBLNg-FY)wsWq-yYD8R4EvdrlZP?MFXi(`n#@wZcLGlUZ*j@O^B zp5E>0p{v*$BI2UCE#lYK2-g6|5{^ginUT6VMe#LIRqdsnhfCv}h7EQ!zOMOwu>C7HR7eLfP9`Ma(8dInd~rajw#-K-LJ z-ruh$d02IcCByFQ8+kL-o@0JL+zj1)0234>xC?;Fx~k zpWM#*T`!W&nC#Ci*L}ap%A{dQ`K}kn^K61LKRXm#o8GdU^)suDO~HAoY~E_~m{sBN zApv3Uyo}EZFj(DTyghkd*5Cf^V!Kz>`nB)o`q1=#iIjiTK9_ZRN5A?%b~^a!wep*F zW%_G)FB{L~-xu=yO!dnAu>G6YDE$hlyvsLX>+?NHMmxTQ)$bSn`uSwdr)NpCx4%@M zyokNRqk4kz843O5Z8F=e@A^*aid<*9&1~2OC7#SED=^9w*8k&a~npqi| zS{a*b8yHv_7%+rSYDUqJo1c=IR*73fA(xgtP(yfCNJL3cV!1*=QGQxxPO3slWkIS! zW2I`Q&6e6=(&6r>mdKI;Vst09Y1wFaQ7m literal 0 HcmV?d00001 diff --git a/public/favicon-light-16x16.png b/public/favicon-light-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..a2e1e13ccc82bd331f3d4db4ae9ba80bf44e7b15 GIT binary patch literal 635 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 literal 0 HcmV?d00001 diff --git a/public/favicon.svg b/public/favicon.svg deleted file mode 100644 index 0f39062..0000000 --- a/public/favicon.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - diff --git a/public/mstile-150x150.png b/public/mstile-150x150.png new file mode 100644 index 0000000000000000000000000000000000000000..c37abf32e8cee6d544e02335b0b08874fef7d90e GIT binary patch literal 3557 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 + + + +Created by potrace 1.14, written by Peter Selinger 2001-2017 + + + + + diff --git a/public/site.webmanifest b/public/site.webmanifest new file mode 100644 index 0000000..3bb1b80 --- /dev/null +++ b/public/site.webmanifest @@ -0,0 +1,19 @@ +{ + "name": "yarkov.tech", + "short_name": "yarkov.tech", + "icons": [ + { + "src": "/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/android-chrome-256x256.png", + "sizes": "256x256", + "type": "image/png" + } + ], + "theme_color": "#ffffff", + "background_color": "#ffffff", + "display": "standalone" +} diff --git a/src/components/ArticleContent/ArticleContent.astro b/src/components/ArticleContent/ArticleContent.astro new file mode 100644 index 0000000..27cc78d --- /dev/null +++ b/src/components/ArticleContent/ArticleContent.astro @@ -0,0 +1,5 @@ +--- +import "./ArticleContent.scss"; +--- + +
diff --git a/src/components/ArticleContent/ArticleContent.scss b/src/components/ArticleContent/ArticleContent.scss new file mode 100644 index 0000000..df2d334 --- /dev/null +++ b/src/components/ArticleContent/ArticleContent.scss @@ -0,0 +1,221 @@ +.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/ArticleItem.astro b/src/components/ArticleItem.astro new file mode 100644 index 0000000..dc5f764 --- /dev/null +++ b/src/components/ArticleItem.astro @@ -0,0 +1,76 @@ +--- +import { getLanguageFromURL } from "@i18n/utils"; +import { DEFAULT_LANGUAGE } from "@root/constants"; +import { createDateFormatter } from "@root/utils"; + +export interface Props { + href: string; + title: string; + date: Date; +} + +const lang = getLanguageFromURL(Astro.url.pathname); +// const isNonDefaultLanguage = DEFAULT_LANGUAGE !== lang; + +const { href, title, date } = Astro.props as Props; +--- + + + + diff --git a/src/components/ArticlePost/ArticlePost.astro b/src/components/ArticlePost/ArticlePost.astro new file mode 100644 index 0000000..df8db92 --- /dev/null +++ b/src/components/ArticlePost/ArticlePost.astro @@ -0,0 +1,77 @@ +--- +// import { Picture } from "@astrojs/image/components"; +import { Icon } from "astro-icon"; +import { createDateFormatter } from "@root/utils"; +// import { isURL } from "@utils/string"; +// import ArticleComments from "@components/ArticleComments"; +// import TranslatedLink from "../TranslatedLink"; +import type { CollectionEntry } from "astro:content"; +// import { useTranslation } from "@root/i18n/utils"; +import "./ArticlePost.scss"; +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: { title, description, pubDate }, +} = article; +// const t = useTranslation(Astro); +--- + +
+
+
+
+
    + +
+
+
+ + --- {"просмотров"} +
+
+
+

{title}

+
+
+ + +
+ +
+

+ {description} +

+
+
+ + +
diff --git a/src/components/ArticlePost/ArticlePost.scss b/src/components/ArticlePost/ArticlePost.scss new file mode 100644 index 0000000..2b5741c --- /dev/null +++ b/src/components/ArticlePost/ArticlePost.scss @@ -0,0 +1,92 @@ +.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 7113e39..9726d7c 100644 --- a/src/components/BaseHead.astro +++ b/src/components/BaseHead.astro @@ -1,43 +1,80 @@ --- -// Import the global.css file here so that it is included on -// all pages through the use of the component. -import '../styles/global.css'; +import "@styles/global.scss"; +import { SITE_METADATA } from "@root/constants"; export interface Props { - title: string; + title?: string; description: string; image?: string; } const canonicalURL = new URL(Astro.url.pathname, Astro.site); -const { title, description, image = '/placeholder-social.jpg' } = Astro.props; +const { title, description } = Astro.props; --- - - - - - + + + + + - - + + - -{title} - - + + + + {title || SITE_METADATA.title} - - - - - - + + + + + + - - - - - - + + + + + + + + + + + + + + + + + + + diff --git a/src/components/BaseLayout.astro b/src/components/BaseLayout.astro new file mode 100644 index 0000000..4722e68 --- /dev/null +++ b/src/components/BaseLayout.astro @@ -0,0 +1,20 @@ +--- +import { IS_SITE_UNDER_CONSTRUCTION } from "@root/constants"; +import Header from "@components/Header/Header.astro"; +import Footer from "@components/Footer.astro"; +import SiteContent from "@components/SiteContent.astro"; +import UnderConstruction from "./UnderConstruction.astro"; +--- + + + { + IS_SITE_UNDER_CONSTRUCTION && ( + 🚧  This web site is under development  🚧 + ) + } +
+ + + +