diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 75241e9..a97eb58 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -161,6 +161,64 @@ importers: specifier: 1.0.0-rc.1 version: 1.0.0-rc.1(@radix-ui/colors@3.0.0-rc.5)(tailwindcss@3.3.3) + web-reforged: + dependencies: + '@astrojs/check': + specifier: ^0.3.1 + version: 0.3.1(typescript@5.2.2) + '@astrojs/mdx': + specifier: ^1.1.4 + version: 1.1.5(astro@3.5.4) + '@astrojs/rss': + specifier: ^3.0.0 + version: 3.0.0 + '@astrojs/sitemap': + specifier: ^3.0.3 + version: 3.0.3 + '@astrojs/tailwind': + specifier: ^5.0.2 + version: 5.0.2(astro@3.5.4)(tailwindcss@3.3.3) + '@radix-ui/colors': + specifier: ^3.0.0 + version: 3.0.0 + '@tailwindcss/typography': + specifier: ^0.5.10 + version: 0.5.10(tailwindcss@3.3.3) + astro: + specifier: ^3.5.0 + version: 3.5.4(typescript@5.2.2) + astro-icon: + specifier: ^0.8.1 + version: 0.8.1 + clsx: + specifier: ^2.0.0 + version: 2.0.0 + iconify-icon: + specifier: ^1.0.8 + version: 1.0.8 + tailwind-merge: + specifier: ^2.0.0 + version: 2.0.0 + tailwindcss: + specifier: ^3.0.24 + version: 3.3.3 + typescript: + specifier: ^5.2.2 + version: 5.2.2 + devDependencies: + '@typescript-eslint/parser': + specifier: ^6.10.0 + version: 6.11.0(eslint@8.53.0)(typescript@5.2.2) + eslint: + specifier: ^8.53.0 + version: 8.53.0 + eslint-plugin-astro: + specifier: ^0.29.1 + version: 0.29.1(eslint@8.53.0) + eslint-plugin-jsx-a11y: + specifier: ^6.8.0 + version: 6.8.0(eslint@8.53.0) + packages: /@aashutoshrathi/word-wrap@1.2.6: @@ -178,14 +236,72 @@ packages: '@jridgewell/gen-mapping': 0.3.3 '@jridgewell/trace-mapping': 0.3.19 + /@astrojs/check@0.3.1(typescript@5.2.2): + resolution: {integrity: sha512-3LjEUvh7Z4v9NPokaqKMXQ0DwnSXfmtcyAuWVTjNt9yzjv54SxykobV5CTOB3TIko+Rqg59ejamJBxaJN6fvkw==} + hasBin: true + peerDependencies: + typescript: ^5.0.0 + dependencies: + '@astrojs/language-server': 2.5.2(typescript@5.2.2) + chokidar: 3.5.3 + fast-glob: 3.3.1 + kleur: 4.1.5 + typescript: 5.2.2 + yargs: 17.7.2 + transitivePeerDependencies: + - prettier + - prettier-plugin-astro + dev: false + /@astrojs/compiler@2.1.0: resolution: {integrity: sha512-Mp+qrNhly+27bL/Zq8lGeUY+YrdoU0eDfIlAeGIPrzt0PnI/jGpvPUdCaugv4zbCrDkOUScFfcbeEiYumrdJnw==} + + /@astrojs/compiler@2.3.1: + resolution: {integrity: sha512-tlyFdyMzPtOQ5pr8eM0aUZmLAYKl+4liyE5JG6YV1HXSyI9RR7/bpyXCXEJDsYLDV5wYRBGxL5/xb9UVHstkMQ==} dev: false /@astrojs/internal-helpers@0.2.0: resolution: {integrity: sha512-NQ4ppp1CM0HNkKbJNM4saVSfmUYzGlRalF6wx7F6T/MYHYSWGuojY89/oFTy4t8VlOGUCUijlsVNNeziWaUo5g==} dev: false + /@astrojs/internal-helpers@0.2.1: + resolution: {integrity: sha512-06DD2ZnItMwUnH81LBLco3tWjcZ1lGU9rLCCBaeUCGYe9cI0wKyY2W3kDyoW1I6GmcWgt1fu+D1CTvz+FIKf8A==} + dev: false + + /@astrojs/language-server@2.5.2(typescript@5.2.2): + resolution: {integrity: sha512-O5SMzoQ65wSxA1KygreI9UJYmHpgt15bSYBxceHwqX7OCDM4Ek8mr6mZn45LGDtwM3dp1uup7kp8exfRPwIFbA==} + hasBin: true + peerDependencies: + prettier: ^3.0.0 + prettier-plugin-astro: '>=0.11.0' + peerDependenciesMeta: + prettier: + optional: true + prettier-plugin-astro: + optional: true + dependencies: + '@astrojs/compiler': 2.3.1 + '@jridgewell/sourcemap-codec': 1.4.15 + '@volar/kit': 1.10.10(typescript@5.2.2) + '@volar/language-core': 1.10.10 + '@volar/language-server': 1.10.10 + '@volar/language-service': 1.10.10 + '@volar/source-map': 1.10.10 + '@volar/typescript': 1.10.10 + fast-glob: 3.3.1 + muggle-string: 0.3.1 + volar-service-css: 0.0.16(@volar/language-service@1.10.10) + volar-service-emmet: 0.0.16(@volar/language-service@1.10.10) + volar-service-html: 0.0.16(@volar/language-service@1.10.10) + volar-service-prettier: 0.0.16(@volar/language-service@1.10.10) + volar-service-typescript: 0.0.16(@volar/language-service@1.10.10)(@volar/typescript@1.10.10) + volar-service-typescript-twoslash-queries: 0.0.16(@volar/language-service@1.10.10) + vscode-html-languageservice: 5.1.1 + vscode-uri: 3.0.8 + transitivePeerDependencies: + - typescript + dev: false + /@astrojs/markdown-remark@3.2.0(astro@3.1.2): resolution: {integrity: sha512-jigyLfefUZPKgVmmraCkVpdUuFH1R3SrpgQO13axsgwLDBgkggaQpNR5Ag4O9PDualeBtbdt30aYSfvnBKx9Hg==} peerDependencies: @@ -210,6 +326,30 @@ packages: - supports-color dev: false + /@astrojs/markdown-remark@3.5.0(astro@3.5.4): + resolution: {integrity: sha512-q7vdIqzYhxpsfghg2YmkmSXCfp4w7lBTYP+SSHw89wVhC5Riltr3u8w2otBRxNLSByNi+ht/gGkFC23Shetytw==} + peerDependencies: + astro: ^3.0.0 + dependencies: + '@astrojs/prism': 3.0.0 + astro: 3.5.4(typescript@5.2.2) + github-slugger: 2.0.0 + import-meta-resolve: 3.0.0 + mdast-util-definitions: 6.0.0 + rehype-raw: 6.1.1 + rehype-stringify: 9.0.4 + remark-gfm: 3.0.1 + remark-parse: 10.0.2 + remark-rehype: 10.1.0 + remark-smartypants: 2.0.0 + shikiji: 0.6.13 + unified: 10.1.2 + unist-util-visit: 4.1.2 + vfile: 5.3.7 + transitivePeerDependencies: + - supports-color + dev: false + /@astrojs/mdx@1.1.0(astro@3.1.2): resolution: {integrity: sha512-rmLZBw3CUCkp+5blBJloV2EqJGRaJTraJygWMfCvrLcCA3vzhwzACnVQKdUDlts8EEr6V6+HXYVqi46AVEfobg==} engines: {node: '>=18.14.1'} @@ -236,6 +376,32 @@ packages: - supports-color dev: false + /@astrojs/mdx@1.1.5(astro@3.5.4): + resolution: {integrity: sha512-4bveyB1Lb1vWo2kdHJjQYoCytWlrIjAxHATHUTuYnBPmdPjsfy9wuCnb9rozwyyarDABx87CzG5gotBNYd+dVA==} + engines: {node: '>=18.14.1'} + peerDependencies: + astro: ^3.0.0 + dependencies: + '@astrojs/markdown-remark': 3.5.0(astro@3.5.4) + '@mdx-js/mdx': 2.3.0 + acorn: 8.10.0 + astro: 3.5.4(typescript@5.2.2) + es-module-lexer: 1.3.1 + estree-util-visit: 1.2.1 + github-slugger: 2.0.0 + gray-matter: 4.0.3 + hast-util-to-html: 8.0.4 + kleur: 4.1.5 + rehype-raw: 6.1.1 + remark-gfm: 3.0.1 + remark-smartypants: 2.0.0 + source-map: 0.7.4 + unist-util-visit: 4.1.2 + vfile: 5.3.7 + transitivePeerDependencies: + - supports-color + dev: false + /@astrojs/partytown@2.0.0: resolution: {integrity: sha512-WKyWs3TdxAG4b0+vkMWwDProatsikfvpjJQ+IIDEI7QvPBmdIbD9BDfuGgKIETnmkA1DxFj9G3jiGn2DGiJKzg==} dependencies: @@ -250,6 +416,20 @@ packages: prismjs: 1.29.0 dev: false + /@astrojs/rss@3.0.0: + resolution: {integrity: sha512-PMX8iqByk9gtOrusikten/oF5uHjOCZigL6RuXFBUu+xtdKQxXzfIohJ99V2haA4FJjVDyibDTGzXR81POBMxQ==} + dependencies: + fast-xml-parser: 4.3.2 + kleur: 4.1.5 + dev: false + + /@astrojs/sitemap@3.0.3: + resolution: {integrity: sha512-+GRKp1yho9dpHBcMcU6JpbL41k0yYZghOkNsMRb8QIRflbGHvd787tdv9oIZ5NJj0SqAuOlqp2UpqLkJXuAe2A==} + dependencies: + sitemap: 7.1.1 + zod: 3.22.4 + dev: false + /@astrojs/svelte@4.0.2(astro@3.1.2)(svelte@4.2.1)(typescript@5.2.2)(vite@4.4.9): resolution: {integrity: sha512-XB9Sexq+iW5aUpctDk6zuKHbWIAuPlAnZKbfgaS9VOaOUtx1t12crP9YoKEVcTifXYgoRuWWfeEAm2I8pYlLIQ==} engines: {node: '>=18.14.1'} @@ -282,6 +462,21 @@ packages: - ts-node dev: false + /@astrojs/tailwind@5.0.2(astro@3.5.4)(tailwindcss@3.3.3): + resolution: {integrity: sha512-oXqeqmBlkQmsltrsU9nEWeXOtrZIAHW8dcmX7BCdrjzPnU6dPwWzAwhddNQ9ihKiWwsLnlbwQZIo2CDigcZlIA==} + peerDependencies: + astro: ^3.2.4 + tailwindcss: ^3.0.24 + dependencies: + astro: 3.5.4(typescript@5.2.2) + autoprefixer: 10.4.16(postcss@8.4.30) + postcss: 8.4.30 + postcss-load-config: 4.0.1(postcss@8.4.30) + tailwindcss: 3.3.3 + transitivePeerDependencies: + - ts-node + dev: false + /@astrojs/telemetry@3.0.2: resolution: {integrity: sha512-ef+jqCkqopCzjGfsMsr+8p56Nj6F9ZzouWcWZt+dKsqbRccI3c8K3jfkLcdq4AyfFZtKBDB6N4ZuI68g33oiOg==} engines: {node: '>=18.14.1'} @@ -298,6 +493,21 @@ packages: - supports-color dev: false + /@astrojs/telemetry@3.0.4: + resolution: {integrity: sha512-A+0c7k/Xy293xx6odsYZuXiaHO0PL+bnDoXOc47sGDF5ffIKdKQGRPFl2NMlCF4L0NqN4Ynbgnaip+pPF0s7pQ==} + engines: {node: '>=18.14.1'} + dependencies: + ci-info: 3.8.0 + debug: 4.3.4 + dlv: 1.1.3 + dset: 3.1.2 + is-docker: 3.0.0 + is-wsl: 3.0.0 + which-pm-runs: 1.1.0 + transitivePeerDependencies: + - supports-color + dev: false + /@babel/cli@7.22.15(@babel/core@7.22.20): resolution: {integrity: sha512-prtg5f6zCERIaECeTZzd2fMtVjlfjhUcO+fBLQ6DXXdq5FljN+excVitJ2nogsusdf31LeqkjAfXZ7Xq+HmN8g==} engines: {node: '>=6.9.0'} @@ -1505,6 +1715,12 @@ packages: dependencies: regenerator-runtime: 0.14.0 + /@babel/runtime@7.23.2: + resolution: {integrity: sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.14.0 + /@babel/template@7.22.15: resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} engines: {node: '>=6.9.0'} @@ -1763,6 +1979,22 @@ packages: tslib: 2.6.2 dev: false + /@emmetio/abbreviation@2.3.3: + resolution: {integrity: sha512-mgv58UrU3rh4YgbE/TzgLQwJ3pFsHHhCLqY20aJq+9comytTXUDNGG/SMtSeMJdkpxgXSXunBGLD8Boka3JyVA==} + dependencies: + '@emmetio/scanner': 1.0.4 + dev: false + + /@emmetio/css-abbreviation@2.1.8: + resolution: {integrity: sha512-s9yjhJ6saOO/uk1V74eifykk2CBYi01STTK3WlXWGOepyKa23ymJ053+DNQjpFcy1ingpaO7AxCcwLvHFY9tuw==} + dependencies: + '@emmetio/scanner': 1.0.4 + dev: false + + /@emmetio/scanner@1.0.4: + resolution: {integrity: sha512-IqRuJtQff7YHHBk4G8YZ45uB9BaAGcwQeVzgj/zj8/UdOhtQpEIupUhSk8dys6spFIWVZVeK20CzGEnqR5SbqA==} + dev: false + /@emotion/is-prop-valid@0.8.8: resolution: {integrity: sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==} requiresBuild: true @@ -2152,6 +2384,16 @@ packages: eslint: 8.50.0 eslint-visitor-keys: 3.4.3 + /@eslint-community/eslint-utils@4.4.0(eslint@8.53.0): + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.53.0 + eslint-visitor-keys: 3.4.3 + dev: true + /@eslint-community/regexpp@4.8.1: resolution: {integrity: sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} @@ -2172,10 +2414,32 @@ packages: transitivePeerDependencies: - supports-color + /@eslint/eslintrc@2.1.3: + resolution: {integrity: sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.6.1 + globals: 13.22.0 + ignore: 5.2.4 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + /@eslint/js@8.50.0: resolution: {integrity: sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@eslint/js@8.53.0: + resolution: {integrity: sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + /@floating-ui/core@1.5.0: resolution: {integrity: sha512-kK1h4m36DQ0UHGj5Ah4db7R0rHemTqqO0QLvUqi1/mUUp3LuAWbWxdxSIf/XsnH9VS6rRVPLJCncjRzUvyCLXg==} dependencies: @@ -2214,6 +2478,17 @@ packages: transitivePeerDependencies: - supports-color + /@humanwhocodes/config-array@0.11.13: + resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': 2.0.1 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + dev: true + /@humanwhocodes/module-importer@1.0.1: resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} @@ -2221,6 +2496,10 @@ packages: /@humanwhocodes/object-schema@1.2.1: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + /@humanwhocodes/object-schema@2.0.1: + resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} + dev: true + /@iconify/types@2.0.0: resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} dev: false @@ -2384,7 +2663,6 @@ packages: open: 9.1.0 picocolors: 1.0.0 tslib: 2.6.2 - dev: false /@portabletext/svelte@2.0.0(svelte@4.2.1): resolution: {integrity: sha512-fyA2BFC4c/16PJxu1QpI8PC1W32TJjEPHRh69aW19OFYv5m4+7Gd4J4+Oq9C1FTKycNfcUTNaEik07KqhrLPfQ==} @@ -2407,6 +2685,10 @@ packages: engines: {node: ^14.13.1 || >=16.0.0 || >=18.0.0} dev: false + /@radix-ui/colors@3.0.0: + resolution: {integrity: sha512-FUOsGBkHrYJwCSEtWRCIfQbZG7q1e6DgxCIOe1SUQzDe/7rXXeA47s8yCn6fuTNQAj1Zq4oTFi9Yjp3wzElcxg==} + dev: false + /@radix-ui/colors@3.0.0-rc.5: resolution: {integrity: sha512-SHAmQwvoRFuX1Kqo0ZwOwp/24GQqNMUaS3tWcR5RgDaC1ZpUKQfT+IbdzGm63OVzQhpyA4PRcjimM2UMa9SYTw==} dev: true @@ -2872,7 +3154,7 @@ packages: /@types/acorn@4.0.6: resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} dependencies: - '@types/estree': 1.0.1 + '@types/estree': 1.0.2 dev: false /@types/babel__core@7.20.2: @@ -2919,7 +3201,7 @@ packages: /@types/estree-jsx@1.0.0: resolution: {integrity: sha512-3qvGd0z8F2ENTGr/GG1yViqfiKmRfrXVx5sJyHGFu3z7m5g5utCQtGp/g29JnjflhtQJBv1WDQukHiT58xPcYQ==} dependencies: - '@types/estree': 1.0.1 + '@types/estree': 1.0.2 dev: false /@types/estree@1.0.1: @@ -2951,6 +3233,12 @@ packages: '@types/unist': 2.0.8 dev: false + /@types/hast@3.0.3: + resolution: {integrity: sha512-2fYGlaDy/qyLlhidX42wAH0KBi2TCjKMH8CHmBXgRlJ3Y+OXTiqsPQ6IWarZKwF1JoUcAJdPogv1d4b0COTpmQ==} + dependencies: + '@types/unist': 3.0.0 + dev: false + /@types/is-hotkey@0.1.7: resolution: {integrity: sha512-yB5C7zcOM7idwYZZ1wKQ3pTfjA9BbvFqRWvKB46GFddxnJtHwi/b9y84ykQtxQPg5qhdpg4Q/kWU3EGoCTmLzQ==} dev: false @@ -3005,6 +3293,10 @@ packages: '@types/unist': 2.0.8 dev: false + /@types/node@17.0.45: + resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} + dev: false + /@types/node@20.6.3: resolution: {integrity: sha512-HksnYH4Ljr4VQgEy2lTStbCKv/P590tmPe5HqOnv9Gprffgv5WXAY+Y5Gqniu0GGqeTCUdBnzC3QSrzPkBkAMA==} dev: false @@ -3049,6 +3341,12 @@ packages: resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} dev: false + /@types/sax@1.2.7: + resolution: {integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==} + dependencies: + '@types/node': 20.6.3 + dev: false + /@types/scheduler@0.16.3: resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==} dev: false @@ -3120,6 +3418,27 @@ packages: - supports-color dev: true + /@typescript-eslint/parser@6.11.0(eslint@8.53.0)(typescript@5.2.2): + resolution: {integrity: sha512-+whEdjk+d5do5nxfxx73oanLL9ghKO3EwM9kBCkUtWMRwWuPaFv9ScuqlYfQ6pAD6ZiJhky7TZ2ZYhrMsfMxVQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 6.11.0 + '@typescript-eslint/types': 6.11.0 + '@typescript-eslint/typescript-estree': 6.11.0(typescript@5.2.2) + '@typescript-eslint/visitor-keys': 6.11.0 + debug: 4.3.4 + eslint: 8.53.0 + typescript: 5.2.2 + transitivePeerDependencies: + - supports-color + dev: true + /@typescript-eslint/parser@6.7.2(eslint@8.50.0)(typescript@5.2.2): resolution: {integrity: sha512-KA3E4ox0ws+SPyxQf9iSI25R6b4Ne78ORhNHeVKrPQnoYsb9UhieoiRoJgrzgEeKGOXhcY1i8YtOeCHHTDa6Fw==} engines: {node: ^16.0.0 || >=18.0.0} @@ -3147,7 +3466,14 @@ packages: dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - dev: false + + /@typescript-eslint/scope-manager@6.11.0: + resolution: {integrity: sha512-0A8KoVvIURG4uhxAdjSaxy8RdRE//HztaZdG8KiHLP8WOXSk0vlF7Pvogv+vlJA5Rnjj/wDcFENvDaHb+gKd1A==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 6.11.0 + '@typescript-eslint/visitor-keys': 6.11.0 + dev: true /@typescript-eslint/scope-manager@6.7.2: resolution: {integrity: sha512-bgi6plgyZjEqapr7u2mhxGR6E8WCzKNUFWNh6fkpVe9+yzRZeYtDTbsIBzKbcxI+r1qVWt6VIoMSNZ4r2A+6Yw==} @@ -3180,13 +3506,38 @@ packages: /@typescript-eslint/types@5.62.0: resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: false + + /@typescript-eslint/types@6.11.0: + resolution: {integrity: sha512-ZbEzuD4DwEJxwPqhv3QULlRj8KYTAnNsXxmfuUXFCxZmO6CF2gM/y+ugBSAQhrqaJL3M+oe4owdWunaHM6beqA==} + engines: {node: ^16.0.0 || >=18.0.0} + dev: true /@typescript-eslint/types@6.7.2: resolution: {integrity: sha512-flJYwMYgnUNDAN9/GAI3l8+wTmvTYdv64fcH8aoJK76Y+1FCZ08RtI5zDerM/FYT5DMkAc+19E4aLmd5KqdFyg==} engines: {node: ^16.0.0 || >=18.0.0} dev: true + /@typescript-eslint/typescript-estree@6.11.0(typescript@5.2.2): + resolution: {integrity: sha512-Aezzv1o2tWJwvZhedzvD5Yv7+Lpu1by/U1LZ5gLc4tCx8jUmuSCMioPFRjliN/6SJIvY6HpTtJIWubKuYYYesQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 6.11.0 + '@typescript-eslint/visitor-keys': 6.11.0 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.5.4 + ts-api-utils: 1.0.3(typescript@5.2.2) + typescript: 5.2.2 + transitivePeerDependencies: + - supports-color + dev: true + /@typescript-eslint/typescript-estree@6.7.2(typescript@5.2.2): resolution: {integrity: sha512-kiJKVMLkoSciGyFU0TOY0fRxnp9qq1AzVOHNeN1+B9erKFCJ4Z8WdjAkKQPP+b1pWStGFqezMLltxO+308dJTQ==} engines: {node: ^16.0.0 || >=18.0.0} @@ -3233,7 +3584,14 @@ packages: dependencies: '@typescript-eslint/types': 5.62.0 eslint-visitor-keys: 3.4.3 - dev: false + + /@typescript-eslint/visitor-keys@6.11.0: + resolution: {integrity: sha512-+SUN/W7WjBr05uRxPggJPSzyB8zUpaYo2hByKasWbqr3PM8AXfZt8UHdNpBS1v9SA62qnSSMF3380SwDqqprgQ==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 6.11.0 + eslint-visitor-keys: 3.4.3 + dev: true /@typescript-eslint/visitor-keys@6.7.2: resolution: {integrity: sha512-uVw9VIMFBUTz8rIeaUT3fFe8xIUx8r4ywAdlQv1ifH+6acn/XF8Y6rwJ7XNmkNMDrTW+7+vxFFPIF40nJCVsMQ==} @@ -3302,6 +3660,9 @@ packages: - '@codemirror/search' dev: false + /@ungap/structured-clone@1.2.0: + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + /@vitejs/plugin-react@4.0.4(vite@4.4.9): resolution: {integrity: sha512-7wU921ABnNYkETiMaZy7XqpueMnpu5VxvVps13MjmCo+utBdD79sZzrApHawHtVX66cCJQQTXFcjH0y9dSUK8g==} engines: {node: ^14.18.0 || >=16.0.0} @@ -3317,6 +3678,76 @@ packages: - supports-color dev: false + /@volar/kit@1.10.10(typescript@5.2.2): + resolution: {integrity: sha512-V2SyUPCPUhueqH8j5t48LJ0QsjExGSXzTv/XOdkUHV7hJ/ekyRGFqKxcfBtMq/nK6Tgu2G1ba+6u0d7e6wKcQw==} + peerDependencies: + typescript: '*' + dependencies: + '@volar/language-service': 1.10.10 + typesafe-path: 0.2.2 + typescript: 5.2.2 + vscode-languageserver-textdocument: 1.0.11 + vscode-uri: 3.0.8 + dev: false + + /@volar/language-core@1.10.10: + resolution: {integrity: sha512-nsV1o3AZ5n5jaEAObrS3MWLBWaGwUj/vAsc15FVNIv+DbpizQRISg9wzygsHBr56ELRH8r4K75vkYNMtsSNNWw==} + dependencies: + '@volar/source-map': 1.10.10 + dev: false + + /@volar/language-server@1.10.10: + resolution: {integrity: sha512-F2PRBU+CRjT7L9qe8bjof/uz/LbAXVmgwNU2gOSX2y1bUl3E8DHmD0dB6pwIVublvkx+Ivg/0r3Z6oyxfPPruQ==} + dependencies: + '@volar/language-core': 1.10.10 + '@volar/language-service': 1.10.10 + '@volar/typescript': 1.10.10 + '@vscode/l10n': 0.0.16 + path-browserify: 1.0.1 + request-light: 0.7.0 + vscode-languageserver: 9.0.1 + vscode-languageserver-protocol: 3.17.5 + vscode-languageserver-textdocument: 1.0.11 + vscode-uri: 3.0.8 + dev: false + + /@volar/language-service@1.10.10: + resolution: {integrity: sha512-P4fiPWDI6fLGO6BghlksCVHs1nr9gvWAMDyma3Bca4aowxXusxjUVTsnJq0EVorIN5uIr1Xel4B/tNdXt/IKyw==} + dependencies: + '@volar/language-core': 1.10.10 + '@volar/source-map': 1.10.10 + vscode-languageserver-protocol: 3.17.5 + vscode-languageserver-textdocument: 1.0.11 + vscode-uri: 3.0.8 + dev: false + + /@volar/source-map@1.10.10: + resolution: {integrity: sha512-GVKjLnifV4voJ9F0vhP56p4+F3WGf+gXlRtjFZsv6v3WxBTWU3ZVeaRaEHJmWrcv5LXmoYYpk/SC25BKemPRkg==} + dependencies: + muggle-string: 0.3.1 + dev: false + + /@volar/typescript@1.10.10: + resolution: {integrity: sha512-4a2r5bdUub2m+mYVnLu2wt59fuoYWe7nf0uXtGHU8QQ5LDNfzAR0wK7NgDiQ9rcl2WT3fxT2AA9AylAwFtj50A==} + dependencies: + '@volar/language-core': 1.10.10 + path-browserify: 1.0.1 + dev: false + + /@vscode/emmet-helper@2.9.2: + resolution: {integrity: sha512-MaGuyW+fa13q3aYsluKqclmh62Hgp0BpKIqS66fCxfOaBcVQ1OnMQxRRgQUYnCkxFISAQlkJ0qWWPyXjro1Qrg==} + dependencies: + emmet: 2.4.6 + jsonc-parser: 2.3.1 + vscode-languageserver-textdocument: 1.0.11 + vscode-languageserver-types: 3.17.5 + vscode-uri: 2.1.2 + dev: false + + /@vscode/l10n@0.0.16: + resolution: {integrity: sha512-JT5CvrIYYCrmB+dCana8sUqJEcGB1ZDXNLMQ2+42bW995WmNoenijWMUdZfwmuQUTQcEVVIa2OecZzTYWUW9Cg==} + dev: false + /abab@2.0.6: resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} dev: false @@ -3559,6 +3990,10 @@ packages: resolution: {integrity: sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==} dev: true + /ast-types-flow@0.0.8: + resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} + dev: true + /astring@1.8.6: resolution: {integrity: sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==} hasBin: true @@ -3580,6 +4015,22 @@ packages: - supports-color dev: false + /astro-eslint-parser@0.16.0: + resolution: {integrity: sha512-k9ASvY8pa6qttM+fvNJCILxxjftfNg/ou5cjd25SVHsc7moplezGGM9fgMUyf24SRYt8ShO603oHRDn2KqwxMg==} + engines: {node: ^14.18.0 || >=16.0.0} + dependencies: + '@astrojs/compiler': 2.1.0 + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + astrojs-compiler-sync: 0.3.3(@astrojs/compiler@2.1.0) + debug: 4.3.4 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + dev: true + /astro-icon@0.8.1: resolution: {integrity: sha512-APk+fbFnoyGdIVSPFrdrOW9YBK96/1fYuVe7ULTGW92+z00RKB8GfLJiUvzNVXUAX2rZJCFmruGVF4rrhcTYsg==} dependencies: @@ -3666,6 +4117,83 @@ packages: - terser dev: false + /astro@3.5.4(typescript@5.2.2): + resolution: {integrity: sha512-tyOd2o9KDz9hDaHmYvnY7BbRxeQ1yDxoOW4AVlxAnmHOK6068k6Bivr/C4Wlc6ON40lZ/qIDG9gfNkiEhMEVow==} + engines: {node: '>=18.14.1', npm: '>=6.14.0'} + hasBin: true + dependencies: + '@astrojs/compiler': 2.3.1 + '@astrojs/internal-helpers': 0.2.1 + '@astrojs/markdown-remark': 3.5.0(astro@3.5.4) + '@astrojs/telemetry': 3.0.4 + '@babel/core': 7.22.20 + '@babel/generator': 7.22.15 + '@babel/parser': 7.22.16 + '@babel/plugin-transform-react-jsx': 7.22.15(@babel/core@7.22.20) + '@babel/traverse': 7.22.20 + '@babel/types': 7.22.19 + '@types/babel__core': 7.20.2 + acorn: 8.10.0 + boxen: 7.1.1 + chokidar: 3.5.3 + ci-info: 3.8.0 + clsx: 2.0.0 + common-ancestor-path: 1.0.1 + cookie: 0.5.0 + debug: 4.3.4 + deterministic-object-hash: 1.3.1 + devalue: 4.3.2 + diff: 5.1.0 + es-module-lexer: 1.3.1 + esbuild: 0.19.3 + estree-walker: 3.0.3 + execa: 8.0.1 + fast-glob: 3.3.1 + github-slugger: 2.0.0 + gray-matter: 4.0.3 + html-escaper: 3.0.3 + http-cache-semantics: 4.1.1 + js-yaml: 4.1.0 + kleur: 4.1.5 + magic-string: 0.30.3 + mdast-util-to-hast: 12.3.0 + mime: 3.0.0 + ora: 7.0.1 + p-limit: 4.0.0 + p-queue: 7.4.1 + path-to-regexp: 6.2.1 + preferred-pm: 3.1.2 + probe-image-size: 7.2.3 + prompts: 2.4.2 + rehype: 12.0.1 + resolve: 1.22.6 + semver: 7.5.4 + server-destroy: 1.0.1 + shikiji: 0.6.13 + string-width: 6.1.0 + strip-ansi: 7.1.0 + tsconfck: 3.0.0(typescript@5.2.2) + unist-util-visit: 4.1.2 + vfile: 5.3.7 + vite: 4.4.9 + vitefu: 0.2.4(vite@4.4.9) + which-pm: 2.1.1 + yargs-parser: 21.1.1 + zod: 3.22.4 + optionalDependencies: + sharp: 0.32.6 + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + - typescript + dev: false + /astrojs-compiler-sync@0.3.3(@astrojs/compiler@2.1.0): resolution: {integrity: sha512-LbhchWgsvjvRBb5n5ez8/Q/f9ZKViuox27VxMDOdTUm8MRv9U7phzOiLue5KluqTmC0z1LId4gY2SekvoDrkuw==} engines: {node: ^14.18.0 || >=16.0.0} @@ -3674,7 +4202,6 @@ packages: dependencies: '@astrojs/compiler': 2.1.0 synckit: 0.8.5 - dev: false /async@3.2.4: resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} @@ -3711,6 +4238,11 @@ packages: engines: {node: '>= 0.4'} dev: true + /axe-core@4.7.0: + resolution: {integrity: sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==} + engines: {node: '>=4'} + dev: true + /axe-core@4.8.2: resolution: {integrity: sha512-/dlp0fxyM3R8YW7MFzaHWXrf4zzbr0vaYb23VBFCl83R7nWNPg/yaQw2Dc8jzCMmDVLhSdzH8MjrsuIUuvX+6g==} engines: {node: '>=4'} @@ -3723,6 +4255,7 @@ packages: /b4a@1.6.4: resolution: {integrity: sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==} + requiresBuild: true dev: false /babel-plugin-polyfill-corejs2@0.4.5(@babel/core@7.22.20): @@ -3772,7 +4305,6 @@ packages: /big-integer@1.6.51: resolution: {integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==} engines: {node: '>=0.6'} - dev: false /binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} @@ -3780,6 +4312,7 @@ packages: /bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + requiresBuild: true dependencies: buffer: 5.7.1 inherits: 2.0.4 @@ -3817,7 +4350,6 @@ packages: engines: {node: '>= 5.10.0'} dependencies: big-integer: 1.6.51 - dev: false /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} @@ -3863,6 +4395,7 @@ packages: /buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + requiresBuild: true dependencies: base64-js: 1.5.1 ieee754: 1.2.1 @@ -3880,7 +4413,6 @@ packages: engines: {node: '>=12'} dependencies: run-applescript: 5.0.0 - dev: false /busboy@1.6.0: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} @@ -3984,6 +4516,7 @@ packages: /chownr@1.1.4: resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + requiresBuild: true dev: false /ci-info@3.8.0: @@ -4079,6 +4612,7 @@ packages: /color-string@1.9.1: resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + requiresBuild: true dependencies: color-name: 1.1.4 simple-swizzle: 0.2.2 @@ -4091,6 +4625,7 @@ packages: /color@4.2.3: resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} engines: {node: '>=12.5.0'} + requiresBuild: true dependencies: color-convert: 2.0.1 color-string: 1.9.1 @@ -4414,6 +4949,7 @@ packages: /decompress-response@6.0.0: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} engines: {node: '>=10'} + requiresBuild: true dependencies: mimic-response: 3.1.0 dev: false @@ -4431,6 +4967,7 @@ packages: /deep-extend@0.6.0: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} + requiresBuild: true dev: false /deep-is@0.1.4: @@ -4447,7 +4984,6 @@ packages: dependencies: bplist-parser: 0.2.0 untildify: 4.0.0 - dev: false /default-browser@4.0.0: resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==} @@ -4457,7 +4993,6 @@ packages: default-browser-id: 3.0.0 execa: 7.2.0 titleize: 3.0.0 - dev: false /define-data-property@1.1.0: resolution: {integrity: sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g==} @@ -4476,7 +5011,6 @@ packages: /define-lazy-prop@3.0.0: resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} engines: {node: '>=12'} - dev: false /define-properties@1.2.1: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} @@ -4499,16 +5033,27 @@ packages: /detect-libc@2.0.2: resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==} engines: {node: '>=8'} + requiresBuild: true dev: false /detect-node-es@1.1.0: resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} dev: false + /deterministic-object-hash@1.3.1: + resolution: {integrity: sha512-kQDIieBUreEgY+akq0N7o4FzZCr27dPG1xr3wq267vPwDlSXQ3UMcBXHqTGUBaM/5WDS1jwTYjxRhUzHeuiAvw==} + dev: false + /devalue@4.3.2: resolution: {integrity: sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==} dev: false + /devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + dependencies: + dequal: 2.0.3 + dev: false + /didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} @@ -4634,6 +5179,13 @@ packages: /electron-to-chromium@1.4.528: resolution: {integrity: sha512-UdREXMXzLkREF4jA8t89FQjA8WHI6ssP38PMY4/4KhXFQbtImnghh4GkCgrtiZwLKUKVD2iTVXvDVQjfomEQuA==} + /emmet@2.4.6: + resolution: {integrity: sha512-dJfbdY/hfeTyf/Ef7Y7ubLYzkBvPQ912wPaeVYpAxvFxkEBf/+hJu4H6vhAvFN6HlxqedlfVn2x1S44FfQ97pg==} + dependencies: + '@emmetio/abbreviation': 2.3.3 + '@emmetio/css-abbreviation': 2.1.8 + dev: false + /emoji-regex@10.2.1: resolution: {integrity: sha512-97g6QgOk8zlDRdgq1WxwgTMgEWGVAQvB5Fdpgc1MkNy56la5SKP9GsMXKDOdqwn90/41a8yPwIGk1Y6WVbeMQA==} dev: false @@ -4647,6 +5199,7 @@ packages: /end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + requiresBuild: true dependencies: once: 1.4.0 dev: false @@ -4928,6 +5481,23 @@ packages: - supports-color dev: false + /eslint-plugin-astro@0.29.1(eslint@8.53.0): + resolution: {integrity: sha512-ffuUc7zFz8HavaAVaS5iRUzWqBf3/YbrFWUhx0GxXW3gVtnbri5UyvkN8EMOkZWkNXG1zqD2y9dlEsAezhbC0w==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '>=7.0.0' + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.53.0) + '@jridgewell/sourcemap-codec': 1.4.15 + '@typescript-eslint/types': 5.62.0 + astro-eslint-parser: 0.16.0 + eslint: 8.53.0 + postcss: 8.4.30 + postcss-selector-parser: 6.0.13 + transitivePeerDependencies: + - supports-color + dev: true + /eslint-plugin-import@2.28.1(eslint@8.50.0): resolution: {integrity: sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==} engines: {node: '>=4'} @@ -4987,6 +5557,31 @@ packages: semver: 6.3.1 dev: true + /eslint-plugin-jsx-a11y@6.8.0(eslint@8.53.0): + resolution: {integrity: sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==} + engines: {node: '>=4.0'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + dependencies: + '@babel/runtime': 7.23.2 + aria-query: 5.3.0 + array-includes: 3.1.7 + array.prototype.flatmap: 1.3.2 + ast-types-flow: 0.0.8 + axe-core: 4.7.0 + axobject-query: 3.2.1 + damerau-levenshtein: 1.0.8 + emoji-regex: 9.2.2 + es-iterator-helpers: 1.0.15 + eslint: 8.53.0 + hasown: 2.0.0 + jsx-ast-utils: 3.3.5 + language-tags: 1.0.9 + minimatch: 3.1.2 + object.entries: 1.1.7 + object.fromentries: 2.0.7 + dev: true + /eslint-plugin-react-hooks@4.6.0(eslint@8.50.0): resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} engines: {node: '>=10'} @@ -5099,6 +5694,53 @@ packages: transitivePeerDependencies: - supports-color + /eslint@8.53.0: + resolution: {integrity: sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.53.0) + '@eslint-community/regexpp': 4.8.1 + '@eslint/eslintrc': 2.1.3 + '@eslint/js': 8.53.0 + '@humanwhocodes/config-array': 0.11.13 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.0 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.22.0 + graphemer: 1.4.0 + ignore: 5.2.4 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.3 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + dev: true + /espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -5137,7 +5779,7 @@ packages: /estree-util-attach-comments@2.1.1: resolution: {integrity: sha512-+5Ba/xGGS6mnwFbXIuQiDPTbuTxuMCooq3arVv7gPZtYpjp+VXH/NkHAP35OOefPhNG/UGqU3vt/LTABwcHX0w==} dependencies: - '@types/estree': 1.0.1 + '@types/estree': 1.0.2 dev: false /estree-util-build-jsx@2.2.2: @@ -5170,7 +5812,7 @@ packages: /estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} dependencies: - '@types/estree': 1.0.1 + '@types/estree': 1.0.2 dev: false /esutils@2.0.3: @@ -5181,6 +5823,10 @@ packages: resolution: {integrity: sha512-4IJSItgS/41IxN5UVAVuAyczwZF7ZIEsM1XAoUzIHA6A+xzusEZUutdXz2Nr+MQPLxfTiCvqE79/C8HT8fKFvA==} dev: false + /eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + dev: false + /eventsource@2.0.2: resolution: {integrity: sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==} engines: {node: '>=12.0.0'} @@ -5214,7 +5860,6 @@ packages: onetime: 5.1.2 signal-exit: 3.0.7 strip-final-newline: 2.0.0 - dev: false /execa@7.2.0: resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} @@ -5229,7 +5874,6 @@ packages: onetime: 6.0.0 signal-exit: 3.0.7 strip-final-newline: 3.0.0 - dev: false /execa@8.0.1: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} @@ -5253,6 +5897,7 @@ packages: /expand-template@2.0.3: resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} engines: {node: '>=6'} + requiresBuild: true dev: false /extend-shallow@2.0.1: @@ -5271,6 +5916,7 @@ packages: /fast-fifo@1.3.2: resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} + requiresBuild: true dev: false /fast-glob@3.3.1: @@ -5289,6 +5935,13 @@ packages: /fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + /fast-xml-parser@4.3.2: + resolution: {integrity: sha512-rmrXUXwbJedoXkStenj1kkljNF7ugn5ZjR9FJcwmCfcCbtOMDghPajbc+Tck6vE6F5XsDmx+Pr2le9fw8+pXBg==} + hasBin: true + dependencies: + strnum: 1.0.5 + dev: false + /fastq@1.15.0: resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} dependencies: @@ -5440,6 +6093,7 @@ packages: /fs-constants@1.0.0: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + requiresBuild: true dev: false /fs-readdir-recursive@1.1.0: @@ -5467,6 +6121,10 @@ packages: /function-bind@1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + dev: true + /function.prototype.name@1.1.6: resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} engines: {node: '>= 0.4'} @@ -5539,7 +6197,6 @@ packages: /get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} - dev: false /get-stream@8.0.1: resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} @@ -5569,6 +6226,7 @@ packages: /github-from-package@0.0.0: resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} + requiresBuild: true dev: false /github-slugger@2.0.0: @@ -5750,6 +6408,13 @@ packages: resolution: {integrity: sha512-0cMsjjIC8I+D3M44pOQdsy0OHXGLVz6Z0beRuufhKa0KfaD2wGwAev6jILzXsd3/vpnNQJmWyZtIILqM1N+n5A==} dev: false + /hasown@2.0.0: + resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 + dev: true + /hast-util-from-parse5@7.1.2: resolution: {integrity: sha512-Nz7FfPBuljzsN3tCQ4kCBKqdNhQE2l0Tn+X1ubgKBPRoiDIu1mL08Cfw4k7q71+Duyaw7DXDN+VTAp4Vh3oCOw==} dependencies: @@ -5757,8 +6422,21 @@ packages: '@types/unist': 2.0.8 hastscript: 7.2.0 property-information: 6.3.0 - vfile: 5.3.7 - vfile-location: 4.1.0 + vfile: 5.3.7 + vfile-location: 4.1.0 + web-namespaces: 2.0.1 + dev: false + + /hast-util-from-parse5@8.0.1: + resolution: {integrity: sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==} + dependencies: + '@types/hast': 3.0.3 + '@types/unist': 3.0.0 + devlop: 1.1.0 + hastscript: 8.0.0 + property-information: 6.3.0 + vfile: 6.0.1 + vfile-location: 5.0.2 web-namespaces: 2.0.1 dev: false @@ -5772,6 +6450,12 @@ packages: '@types/hast': 2.3.6 dev: false + /hast-util-parse-selector@4.0.0: + resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} + dependencies: + '@types/hast': 3.0.3 + dev: false + /hast-util-raw@7.2.3: resolution: {integrity: sha512-RujVQfVsOrxzPOPSzZFiwofMArbQke6DJjnFfceiEbFh7S05CbPt0cYN+A5YeD3pso0JQk6O1aHBnx9+Pm2uqg==} dependencies: @@ -5788,10 +6472,28 @@ packages: zwitch: 2.0.4 dev: false + /hast-util-raw@9.0.1: + resolution: {integrity: sha512-5m1gmba658Q+lO5uqL5YNGQWeh1MYWZbZmWrM5lncdcuiXuo5E2HT/CIOp0rLF8ksfSwiCVJ3twlgVRyTGThGA==} + dependencies: + '@types/hast': 3.0.3 + '@types/unist': 3.0.0 + '@ungap/structured-clone': 1.2.0 + hast-util-from-parse5: 8.0.1 + hast-util-to-parse5: 8.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.0.2 + parse5: 7.1.2 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.1 + web-namespaces: 2.0.1 + zwitch: 2.0.4 + dev: false + /hast-util-to-estree@2.3.3: resolution: {integrity: sha512-ihhPIUPxN0v0w6M5+IiAZZrn0LH2uZomeWwhn7uP7avZC6TE7lIiEh2yBMPr5+zi1aUCXq6VoYRgs2Bw9xmycQ==} dependencies: - '@types/estree': 1.0.1 + '@types/estree': 1.0.2 '@types/estree-jsx': 1.0.0 '@types/hast': 2.3.6 '@types/unist': 2.0.8 @@ -5826,6 +6528,23 @@ packages: zwitch: 2.0.4 dev: false + /hast-util-to-html@9.0.0: + resolution: {integrity: sha512-IVGhNgg7vANuUA2XKrT6sOIIPgaYZnmLx3l/CCOAK0PtgfoHrZwX7jCSYyFxHTrGmC6S9q8aQQekjp4JPZF+cw==} + dependencies: + '@types/hast': 3.0.3 + '@types/unist': 3.0.0 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-raw: 9.0.1 + hast-util-whitespace: 3.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.0.2 + property-information: 6.3.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.3 + zwitch: 2.0.4 + dev: false + /hast-util-to-parse5@7.1.0: resolution: {integrity: sha512-YNRgAJkH2Jky5ySkIqFXTQiaqcAtJyVE+D5lkN6CdtOqrnkLfGYYrEcKuHOJZlp+MwjSwuD3fZuawI+sic/RBw==} dependencies: @@ -5837,10 +6556,28 @@ packages: zwitch: 2.0.4 dev: false + /hast-util-to-parse5@8.0.0: + resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==} + dependencies: + '@types/hast': 3.0.3 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + property-information: 6.3.0 + space-separated-tokens: 2.0.2 + web-namespaces: 2.0.1 + zwitch: 2.0.4 + dev: false + /hast-util-whitespace@2.0.1: resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==} dev: false + /hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} + dependencies: + '@types/hast': 3.0.3 + dev: false + /hastscript@6.0.0: resolution: {integrity: sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==} dependencies: @@ -5861,6 +6598,16 @@ packages: space-separated-tokens: 2.0.2 dev: false + /hastscript@8.0.0: + resolution: {integrity: sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==} + dependencies: + '@types/hast': 3.0.3 + comma-separated-tokens: 2.0.3 + hast-util-parse-selector: 4.0.0 + property-information: 6.3.0 + space-separated-tokens: 2.0.2 + dev: false + /history@5.3.0: resolution: {integrity: sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==} dependencies: @@ -5886,6 +6633,10 @@ packages: resolution: {integrity: sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==} dev: false + /html-void-elements@3.0.0: + resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + dev: false + /http-cache-semantics@4.1.1: resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} dev: false @@ -5914,12 +6665,10 @@ packages: /human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} - dev: false /human-signals@4.3.1: resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} engines: {node: '>=14.18.0'} - dev: false /human-signals@5.0.0: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} @@ -5988,6 +6737,7 @@ packages: /ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + requiresBuild: true dev: false /inline-style-parser@0.1.1: @@ -6046,6 +6796,7 @@ packages: /is-arrayish@0.3.2: resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + requiresBuild: true dev: false /is-async-function@2.0.0: @@ -6113,13 +6864,11 @@ packages: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} hasBin: true - dev: false /is-docker@3.0.0: resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} hasBin: true - dev: false /is-extendable@0.1.1: resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} @@ -6177,7 +6926,6 @@ packages: hasBin: true dependencies: is-docker: 3.0.0 - dev: false /is-interactive@2.0.0: resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} @@ -6229,7 +6977,7 @@ packages: /is-reference@3.0.2: resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==} dependencies: - '@types/estree': 1.0.1 + '@types/estree': 1.0.2 dev: false /is-regex@1.1.4: @@ -6261,7 +7009,6 @@ packages: /is-stream@3.0.0: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: false /is-string@1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} @@ -6320,7 +7067,6 @@ packages: engines: {node: '>=8'} dependencies: is-docker: 2.2.1 - dev: false /is-wsl@3.0.0: resolution: {integrity: sha512-TQ7xXW/fTBaz/HhGSV779AC99ocpvb9qJPuPwyIea+F+Z+htcQ1wouAA0xEQaa4saVqyP8mwkoYp5efeM/4Gbg==} @@ -6465,6 +7211,10 @@ packages: engines: {node: '>=6'} hasBin: true + /jsonc-parser@2.3.1: + resolution: {integrity: sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg==} + dev: false + /jsonc-parser@3.2.0: resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} dev: false @@ -6509,6 +7259,13 @@ packages: language-subtag-registry: 0.3.22 dev: true + /language-tags@1.0.9: + resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} + engines: {node: '>=0.10'} + dependencies: + language-subtag-registry: 0.3.22 + dev: true + /lazystream@1.0.1: resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} engines: {node: '>= 0.6.3'} @@ -6854,6 +7611,19 @@ packages: unist-util-visit: 4.1.2 dev: false + /mdast-util-to-hast@13.0.2: + resolution: {integrity: sha512-U5I+500EOOw9e3ZrclN3Is3fRpw8c19SMyNZlZ2IS+7vLsNzb2Om11VpIVOR+/0137GhZsFEF6YiKD5+0Hr2Og==} + dependencies: + '@types/hast': 3.0.3 + '@types/mdast': 4.0.0 + '@ungap/structured-clone': 1.2.0 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.0 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 + dev: false + /mdast-util-to-markdown@1.5.0: resolution: {integrity: sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==} dependencies: @@ -6898,7 +7668,6 @@ packages: /merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - dev: false /merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} @@ -7000,7 +7769,7 @@ packages: /micromark-extension-mdx-expression@1.0.8: resolution: {integrity: sha512-zZpeQtc5wfWKdzDsHRBY003H2Smg+PUi2REhqgIhdzAa5xonhP03FcXxqFSerFiNUr5AWmHpaNPQTBVOS4lrXw==} dependencies: - '@types/estree': 1.0.1 + '@types/estree': 1.0.2 micromark-factory-mdx-expression: 1.0.9 micromark-factory-space: 1.1.0 micromark-util-character: 1.2.0 @@ -7014,7 +7783,7 @@ packages: resolution: {integrity: sha512-gPH+9ZdmDflbu19Xkb8+gheqEDqkSpdCEubQyxuz/Hn8DOXiXvrXeikOoBA71+e8Pfi0/UYmU3wW3H58kr7akA==} dependencies: '@types/acorn': 4.0.6 - '@types/estree': 1.0.1 + '@types/estree': 1.0.2 estree-util-is-identifier-name: 2.1.0 micromark-factory-mdx-expression: 1.0.9 micromark-factory-space: 1.1.0 @@ -7034,7 +7803,7 @@ packages: /micromark-extension-mdxjs-esm@1.0.5: resolution: {integrity: sha512-xNRBw4aoURcyz/S69B19WnZAkWJMxHMT5hE36GtDAyhoyn/8TuAeqjFJQlwk+MKQsUD7b3l7kFX+vlfVWgcX1w==} dependencies: - '@types/estree': 1.0.1 + '@types/estree': 1.0.2 micromark-core-commonmark: 1.1.0 micromark-util-character: 1.2.0 micromark-util-events-to-acorn: 1.2.3 @@ -7078,7 +7847,7 @@ packages: /micromark-factory-mdx-expression@1.0.9: resolution: {integrity: sha512-jGIWzSmNfdnkJq05c7b0+Wv0Kfz3NJ3N4cBjnbO4zjXIlxJr+f8lk+5ZmwFvqdAbUy2q6B5rCY//g0QAAaXDWA==} dependencies: - '@types/estree': 1.0.1 + '@types/estree': 1.0.2 micromark-util-character: 1.2.0 micromark-util-events-to-acorn: 1.2.3 micromark-util-symbol: 1.1.0 @@ -7120,6 +7889,13 @@ packages: micromark-util-types: 1.1.0 dev: false + /micromark-util-character@2.0.1: + resolution: {integrity: sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==} + dependencies: + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + /micromark-util-chunked@1.1.0: resolution: {integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==} dependencies: @@ -7160,11 +7936,15 @@ packages: resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==} dev: false + /micromark-util-encode@2.0.0: + resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==} + dev: false + /micromark-util-events-to-acorn@1.2.3: resolution: {integrity: sha512-ij4X7Wuc4fED6UoLWkmo0xJQhsktfNh1J0m8g4PbIMPlx+ek/4YdW5mvbye8z/aZvAPUoxgXHrwVlXAPKMRp1w==} dependencies: '@types/acorn': 4.0.6 - '@types/estree': 1.0.1 + '@types/estree': 1.0.2 '@types/unist': 2.0.8 estree-util-visit: 1.2.1 micromark-util-symbol: 1.1.0 @@ -7197,6 +7977,14 @@ packages: micromark-util-symbol: 1.1.0 dev: false + /micromark-util-sanitize-uri@2.0.0: + resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==} + dependencies: + micromark-util-character: 2.0.1 + micromark-util-encode: 2.0.0 + micromark-util-symbol: 2.0.0 + dev: false + /micromark-util-subtokenize@1.1.0: resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==} dependencies: @@ -7210,10 +7998,18 @@ packages: resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==} dev: false + /micromark-util-symbol@2.0.0: + resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==} + dev: false + /micromark-util-types@1.1.0: resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==} dev: false + /micromark-util-types@2.0.0: + resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==} + dev: false + /micromark@3.2.0: resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==} dependencies: @@ -7266,16 +8062,15 @@ packages: /mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} - dev: false /mimic-fn@4.0.0: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} - dev: false /mimic-response@3.1.0: resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} engines: {node: '>=10'} + requiresBuild: true /min-document@2.19.0: resolution: {integrity: sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==} @@ -7297,6 +8092,7 @@ packages: /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + requiresBuild: true /mississippi@4.0.0: resolution: {integrity: sha512-7PujJ3Te6GGg9lG1nfw5jYCPV6/BsoAT0nCQwb6w+ROuromXYxI6jc/CQSlD82Z/OUMSBX1SoaqhTE+vXiLQzQ==} @@ -7316,6 +8112,7 @@ packages: /mkdirp-classic@0.5.3: resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + requiresBuild: true dev: false /module-alias@2.2.3: @@ -7346,6 +8143,10 @@ packages: /ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + /muggle-string@0.3.1: + resolution: {integrity: sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==} + dev: false + /mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} dependencies: @@ -7364,6 +8165,7 @@ packages: /napi-build-utils@1.0.2: resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==} + requiresBuild: true dev: false /natural-compare@1.4.0: @@ -7397,12 +8199,14 @@ packages: /node-abi@3.47.0: resolution: {integrity: sha512-2s6B2CWZM//kPgwnuI0KrYwNjfdByE25zvAaEpq9IH4zcNsarH8Ihu/UuX6XMPEogDAxkuUFeZn60pXNHAqn3A==} engines: {node: '>=10'} + requiresBuild: true dependencies: semver: 7.5.4 dev: false /node-addon-api@6.1.0: resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==} + requiresBuild: true dev: false /node-domexception@1.0.0: @@ -7452,14 +8256,12 @@ packages: engines: {node: '>=8'} dependencies: path-key: 3.1.1 - dev: false /npm-run-path@5.1.0: resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: path-key: 4.0.0 - dev: false /nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} @@ -7564,14 +8366,12 @@ packages: engines: {node: '>=6'} dependencies: mimic-fn: 2.1.0 - dev: false /onetime@6.0.0: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} engines: {node: '>=12'} dependencies: mimic-fn: 4.0.0 - dev: false /open@8.4.2: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} @@ -7590,7 +8390,6 @@ packages: define-lazy-prop: 3.0.0 is-inside-container: 1.0.0 is-wsl: 2.2.0 - dev: false /optionator@0.9.3: resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} @@ -7670,6 +8469,19 @@ packages: engines: {node: '>=4'} dev: false + /p-queue@7.4.1: + resolution: {integrity: sha512-vRpMXmIkYF2/1hLBKisKeVYJZ8S2tZ0zEAmIJgdVKP2nq0nh4qCdf8bgw+ZgKrkh71AOCaqzwbJJk1WtdcF3VA==} + engines: {node: '>=12'} + dependencies: + eventemitter3: 5.0.1 + p-timeout: 5.1.0 + dev: false + + /p-timeout@5.1.0: + resolution: {integrity: sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==} + engines: {node: '>=12'} + dev: false + /p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} @@ -7760,6 +8572,10 @@ packages: tslib: 2.6.2 dev: false + /path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + dev: false + /path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -7775,7 +8591,6 @@ packages: /path-key@4.0.0: resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} engines: {node: '>=12'} - dev: false /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} @@ -7803,7 +8618,7 @@ packages: /periscopic@3.1.0: resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} dependencies: - '@types/estree': 1.0.1 + '@types/estree': 1.0.2 estree-walker: 3.0.3 is-reference: 3.0.2 dev: false @@ -7928,6 +8743,7 @@ packages: resolution: {integrity: sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==} engines: {node: '>=10'} hasBin: true + requiresBuild: true dependencies: detect-libc: 2.0.2 expand-template: 2.0.3 @@ -8046,6 +8862,7 @@ packages: /pump@3.0.0: resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + requiresBuild: true dependencies: end-of-stream: 1.4.4 once: 1.4.0 @@ -8072,6 +8889,7 @@ packages: /queue-tick@1.0.1: resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==} + requiresBuild: true dev: false /raf@3.4.1: @@ -8083,6 +8901,7 @@ packages: /rc@1.2.8: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true + requiresBuild: true dependencies: deep-extend: 0.6.0 ini: 1.3.8 @@ -8421,6 +9240,10 @@ packages: unist-util-visit: 4.1.2 dev: false + /request-light@0.7.0: + resolution: {integrity: sha512-lMbBMrDoxgsyO+yB3sDcrDuX85yYt7sS8BfQd11jtbW/z5ZWgLZRcEGLsLoYw7I0WSUGQBs8CC8ScIxkTX1+6Q==} + dev: false + /require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -8528,7 +9351,6 @@ packages: engines: {node: '>=12'} dependencies: execa: 5.1.1 - dev: false /run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -8857,6 +9679,12 @@ packages: vscode-textmate: 8.0.0 dev: false + /shikiji@0.6.13: + resolution: {integrity: sha512-4T7X39csvhT0p7GDnq9vysWddf2b6BeioiN3Ymhnt3xcy9tXmDcnsEFVxX18Z4YcQgEE/w48dLJ4pPPUcG9KkA==} + dependencies: + hast-util-to-html: 9.0.0 + dev: false + /side-channel@1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: @@ -8867,7 +9695,6 @@ packages: /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - dev: false /signal-exit@4.1.0: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} @@ -8876,10 +9703,12 @@ packages: /simple-concat@1.0.1: resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} + requiresBuild: true dev: false /simple-get@4.0.1: resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} + requiresBuild: true dependencies: decompress-response: 6.0.0 once: 1.4.0 @@ -8888,6 +9717,7 @@ packages: /simple-swizzle@0.2.2: resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + requiresBuild: true dependencies: is-arrayish: 0.3.2 dev: false @@ -8900,6 +9730,17 @@ packages: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} dev: false + /sitemap@7.1.1: + resolution: {integrity: sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg==} + engines: {node: '>=12.0.0', npm: '>=5.6.0'} + hasBin: true + dependencies: + '@types/node': 17.0.45 + '@types/sax': 1.2.7 + arg: 5.0.2 + sax: 1.2.4 + dev: false + /slash@2.0.0: resolution: {integrity: sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==} engines: {node: '>=6'} @@ -9038,6 +9879,7 @@ packages: /streamx@2.15.1: resolution: {integrity: sha512-fQMzy2O/Q47rgwErk/eGeLu/roaFWV0jVsogDmrszM9uIw8L5OA+t+V93MgYlufNptfjmYR1tOMWhei/Eh7TQA==} + requiresBuild: true dependencies: fast-fifo: 1.3.2 queue-tick: 1.0.1 @@ -9161,22 +10003,25 @@ packages: /strip-final-newline@2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} - dev: false /strip-final-newline@3.0.0: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} - dev: false /strip-json-comments@2.0.1: resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} engines: {node: '>=0.10.0'} + requiresBuild: true dev: false /strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} + /strnum@1.0.5: + resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} + dev: false + /style-mod@4.1.0: resolution: {integrity: sha512-Ca5ib8HrFn+f+0n4N4ScTIA9iTOQ7MaGS1ylHcoVqW9J7w2w8PzN6g9gKmTYgGEBH8e120+RCmhpje6jC5uGWA==} dev: false @@ -9320,6 +10165,11 @@ packages: dependencies: '@pkgr/utils': 2.4.2 tslib: 2.6.2 + + /tailwind-merge@2.0.0: + resolution: {integrity: sha512-WO8qghn9yhsldLSg80au+3/gY9E4hFxIvQ3qOmlpXnqpDKoMruKfi/56BbbMg6fHTQJ9QD3cc79PoWqlaQE4rw==} + dependencies: + '@babel/runtime': 7.23.2 dev: false /tailwindcss@3.3.3: @@ -9354,6 +10204,7 @@ packages: /tar-fs@2.1.1: resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} + requiresBuild: true dependencies: chownr: 1.1.4 mkdirp-classic: 0.5.3 @@ -9363,6 +10214,7 @@ packages: /tar-fs@3.0.4: resolution: {integrity: sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==} + requiresBuild: true dependencies: mkdirp-classic: 0.5.3 pump: 3.0.0 @@ -9372,6 +10224,7 @@ packages: /tar-stream@2.2.0: resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} engines: {node: '>=6'} + requiresBuild: true dependencies: bl: 4.1.0 end-of-stream: 1.4.4 @@ -9382,6 +10235,7 @@ packages: /tar-stream@3.1.6: resolution: {integrity: sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==} + requiresBuild: true dependencies: b4a: 1.6.4 fast-fifo: 1.3.2 @@ -9426,7 +10280,6 @@ packages: /titleize@3.0.0: resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} engines: {node: '>=12'} - dev: false /to-fast-properties@2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} @@ -9479,6 +10332,19 @@ packages: /ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + /tsconfck@3.0.0(typescript@5.2.2): + resolution: {integrity: sha512-w3wnsIrJNi7avf4Zb0VjOoodoO0woEqGgZGQm+LHH9przdUI+XDKsWAXwxHA1DaRTjeuZNcregSzr7RaA8zG9A==} + engines: {node: ^18 || >=20} + hasBin: true + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + dependencies: + typescript: 5.2.2 + dev: false + /tsconfig-paths@3.14.2: resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} dependencies: @@ -9510,10 +10376,10 @@ packages: /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - dev: false /tunnel-agent@0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + requiresBuild: true dependencies: safe-buffer: 5.2.1 @@ -9655,6 +10521,16 @@ packages: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} dev: false + /typesafe-path@0.2.2: + resolution: {integrity: sha512-OJabfkAg1WLZSqJAJ0Z6Sdt3utnbzr/jh+NAHoyWHJe8CMSy79Gm085094M9nvTPy22KzTVn5Zq5mbapCI/hPA==} + dev: false + + /typescript-auto-import-cache@0.3.0: + resolution: {integrity: sha512-Rq6/q4O9iyqUdjvOoyas7x/Qf9nWUMeqpP3YeTaLA+uECgfy5wOhfOS+SW/+fZ/uI/ZcKaf+2/ZhFzXh8xfofQ==} + dependencies: + semver: 7.5.4 + dev: false + /typescript@5.2.2: resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} engines: {node: '>=14.17'} @@ -9767,6 +10643,12 @@ packages: '@types/unist': 2.0.8 dev: false + /unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} + dependencies: + '@types/unist': 3.0.0 + dev: false + /unist-util-remove-position@4.0.2: resolution: {integrity: sha512-TkBb0HABNmxzAcfLf4qsIbFbaPDvMO6wa3b3j4VcEzFVaw1LBKwnW4/sRJ/atSLSzoIg41JWEdnE7N6DIhGDGQ==} dependencies: @@ -9780,6 +10662,12 @@ packages: '@types/unist': 2.0.8 dev: false + /unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + dependencies: + '@types/unist': 3.0.0 + dev: false + /unist-util-visit-children@2.0.2: resolution: {integrity: sha512-+LWpMFqyUwLGpsQxpumsQ9o9DG2VGLFrpz+rpVXYIEdPy57GSy5HioC0g3bg/8WP9oCLlapQtklOzQ8uLS496Q==} dependencies: @@ -9831,7 +10719,6 @@ packages: /untildify@4.0.0: resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} engines: {node: '>=8'} - dev: false /update-browserslist-db@1.0.13(browserslist@4.21.11): resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} @@ -9941,6 +10828,13 @@ packages: vfile: 5.3.7 dev: false + /vfile-location@5.0.2: + resolution: {integrity: sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==} + dependencies: + '@types/unist': 3.0.0 + vfile: 6.0.1 + dev: false + /vfile-message@3.1.4: resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==} dependencies: @@ -9948,6 +10842,13 @@ packages: unist-util-stringify-position: 3.0.3 dev: false + /vfile-message@4.0.2: + resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} + dependencies: + '@types/unist': 3.0.0 + unist-util-stringify-position: 4.0.0 + dev: false + /vfile@5.3.7: resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==} dependencies: @@ -9957,6 +10858,14 @@ packages: vfile-message: 3.1.4 dev: false + /vfile@6.0.1: + resolution: {integrity: sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==} + dependencies: + '@types/unist': 3.0.0 + unist-util-stringify-position: 4.0.0 + vfile-message: 4.0.2 + dev: false + /vite@4.4.9: resolution: {integrity: sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==} engines: {node: ^14.18.0 || >=16.0.0} @@ -10002,6 +10911,138 @@ packages: vite: 4.4.9 dev: false + /volar-service-css@0.0.16(@volar/language-service@1.10.10): + resolution: {integrity: sha512-gK/XD35t/P3SQrUuS8LMlCnE2ItIk+kXI6gPvBYl1NZ7O+tLH8rUWXA32YgpwNoITxYrm/G1seaq08zs4aiPvg==} + peerDependencies: + '@volar/language-service': ~1.10.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + dependencies: + '@volar/language-service': 1.10.10 + vscode-css-languageservice: 6.2.10 + vscode-uri: 3.0.8 + dev: false + + /volar-service-emmet@0.0.16(@volar/language-service@1.10.10): + resolution: {integrity: sha512-8sWWywzVJOD+PWDArOXDWbiRlM7+peydFhXJT71i4X1WPW32RyPxn6FypvciO+amqpfZP2rXfB9eibIJ+EofSQ==} + peerDependencies: + '@volar/language-service': ~1.10.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + dependencies: + '@volar/language-service': 1.10.10 + '@vscode/emmet-helper': 2.9.2 + volar-service-html: 0.0.16(@volar/language-service@1.10.10) + dev: false + + /volar-service-html@0.0.16(@volar/language-service@1.10.10): + resolution: {integrity: sha512-/oEXXgry++1CnTXQBUNf9B8MZfTlYZuJfZA7Zx9MN7WS4ZPxk3BFOdal/cXH6RNR2ruNEYr5QTW9rsqtoUscag==} + peerDependencies: + '@volar/language-service': ~1.10.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + dependencies: + '@volar/language-service': 1.10.10 + vscode-html-languageservice: 5.1.1 + vscode-uri: 3.0.8 + dev: false + + /volar-service-prettier@0.0.16(@volar/language-service@1.10.10): + resolution: {integrity: sha512-Kj2ZdwJGEvfYbsHW8Sjrew/7EB4PgRoas4f8yAJzUUVxIC/kvhUwLDxQc8+N2IibomN76asJGWe+i6VZZvgIkw==} + peerDependencies: + '@volar/language-service': ~1.10.0 + prettier: ^2.2 || ^3.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + prettier: + optional: true + dependencies: + '@volar/language-service': 1.10.10 + dev: false + + /volar-service-typescript-twoslash-queries@0.0.16(@volar/language-service@1.10.10): + resolution: {integrity: sha512-0gPrkDTD2bMj2AnSNykOKhfmPnBFE2LS1lF3LWA7qu1ChRnJF0sodwCCbbeNYJ9+yth956ApoU1BVQ8UrMg+yw==} + peerDependencies: + '@volar/language-service': ~1.10.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + dependencies: + '@volar/language-service': 1.10.10 + dev: false + + /volar-service-typescript@0.0.16(@volar/language-service@1.10.10)(@volar/typescript@1.10.10): + resolution: {integrity: sha512-k/qFKM2oxs/3fhbr/vcBSHnCLZ1HN3Aeh+bGvV9Lc9qIhrNyCVsDFOUJN1Qp4dI72+Y+eFSIDCLHmFEZdsP2EA==} + peerDependencies: + '@volar/language-service': ~1.10.0 + '@volar/typescript': ~1.10.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + dependencies: + '@volar/language-service': 1.10.10 + '@volar/typescript': 1.10.10 + path-browserify: 1.0.1 + semver: 7.5.4 + typescript-auto-import-cache: 0.3.0 + vscode-languageserver-textdocument: 1.0.11 + vscode-nls: 5.2.0 + vscode-uri: 3.0.8 + dev: false + + /vscode-css-languageservice@6.2.10: + resolution: {integrity: sha512-sYUZPku4mQ06AWGCbMyjv2tdR6juBW6hTbVPFwbJvNVzdtEfBioQOgkdXg7yMJNWnXkvWSU1FL2kb4Vxu5Cdyw==} + dependencies: + '@vscode/l10n': 0.0.16 + vscode-languageserver-textdocument: 1.0.11 + vscode-languageserver-types: 3.17.5 + vscode-uri: 3.0.8 + dev: false + + /vscode-html-languageservice@5.1.1: + resolution: {integrity: sha512-JenrspIIG/Q+93R6G3L6HdK96itSisMynE0glURqHpQbL3dKAKzdm8L40lAHNkwJeBg+BBPpAshZKv/38onrTQ==} + dependencies: + '@vscode/l10n': 0.0.16 + vscode-languageserver-textdocument: 1.0.11 + vscode-languageserver-types: 3.17.5 + vscode-uri: 3.0.8 + dev: false + + /vscode-jsonrpc@8.2.0: + resolution: {integrity: sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==} + engines: {node: '>=14.0.0'} + dev: false + + /vscode-languageserver-protocol@3.17.5: + resolution: {integrity: sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==} + dependencies: + vscode-jsonrpc: 8.2.0 + vscode-languageserver-types: 3.17.5 + dev: false + + /vscode-languageserver-textdocument@1.0.11: + resolution: {integrity: sha512-X+8T3GoiwTVlJbicx/sIAF+yuJAqz8VvwJyoMVhwEMoEKE/fkDmrqUgDMyBECcM2A2frVZIUj5HI/ErRXCfOeA==} + dev: false + + /vscode-languageserver-types@3.17.5: + resolution: {integrity: sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==} + dev: false + + /vscode-languageserver@9.0.1: + resolution: {integrity: sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==} + hasBin: true + dependencies: + vscode-languageserver-protocol: 3.17.5 + dev: false + + /vscode-nls@5.2.0: + resolution: {integrity: sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng==} + dev: false + /vscode-oniguruma@1.7.0: resolution: {integrity: sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==} dev: false @@ -10010,6 +11051,14 @@ packages: resolution: {integrity: sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==} dev: false + /vscode-uri@2.1.2: + resolution: {integrity: sha512-8TEXQxlldWAuIODdukIb+TR5s+9Ds40eSJrw+1iDDA9IFORPjMELarNQE3myz5XIkWWpdprmJjm1/SxMlWOC8A==} + dev: false + + /vscode-uri@3.0.8: + resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==} + dev: false + /w3c-keyname@2.2.8: resolution: {integrity: sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==} dev: false @@ -10268,6 +11317,10 @@ packages: resolution: {integrity: sha512-+dTu2m6gmCbO9Ahm4ZBDapx2O6ZY9QSPXst2WXjcznPMwf2YNpn3RevLx4KkZp1OPW/ouFcoBtBzFz/LeY69oA==} dev: false + /zod@3.22.4: + resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} + dev: false + /zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} dev: false diff --git a/web/.eslintrc.cjs b/web/.eslintrc.js similarity index 85% rename from web/.eslintrc.cjs rename to web/.eslintrc.js index 331b898..2e78fb7 100644 --- a/web/.eslintrc.cjs +++ b/web/.eslintrc.js @@ -1,11 +1,10 @@ -const config = require("../.eslintrc.cjs") - module.exports = { - ...config, + // ... extends: [ - ...config.extends, + // ... "plugin:astro/recommended", ], + // ... overrides: [ { // Define the configuration for `.astro` file. @@ -23,6 +22,6 @@ module.exports = { // "astro/no-set-html-directive": "error" }, }, + // ... ], - ignorePatterns: ['**/*.js'] } \ No newline at end of file diff --git a/web/.gitignore b/web/.gitignore index 7329a85..6240da8 100644 --- a/web/.gitignore +++ b/web/.gitignore @@ -1,6 +1,7 @@ # build output dist/ -.output/ +# generated types +.astro/ # dependencies node_modules/ diff --git a/web/.vscode/extensions.json b/web/.vscode/extensions.json index 22a1505..56f043d 100644 --- a/web/.vscode/extensions.json +++ b/web/.vscode/extensions.json @@ -1,4 +1,4 @@ { - "recommendations": ["astro-build.astro-vscode"], + "recommendations": ["astro-build.astro-vscode", "unifiedjs.vscode-mdx"], "unwantedRecommendations": [] } diff --git a/web/.vscode/settings.json b/web/.vscode/settings.json deleted file mode 100644 index ab21c07..0000000 --- a/web/.vscode/settings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "astro.typescript.diagnostics.enabled": false -} \ No newline at end of file diff --git a/web/README.md b/web/README.md index 8252739..758716e 100644 --- a/web/README.md +++ b/web/README.md @@ -1,50 +1,68 @@ -# Welcome to [Astro](https://astro.build) +# Astro Starter Kit: Blog -[![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/withastro/astro/tree/latest/examples/basics) -[![Open with CodeSandbox](https://assets.codesandbox.io/github/button-edit-lime.svg)](https://codesandbox.io/s/github/withastro/astro/tree/latest/examples/basics) +```sh +npm create astro@latest -- --template blog +``` + +[![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/withastro/astro/tree/latest/examples/blog) +[![Open with CodeSandbox](https://assets.codesandbox.io/github/button-edit-lime.svg)](https://codesandbox.io/p/sandbox/github/withastro/astro/tree/latest/examples/blog) +[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/withastro/astro?devcontainer_path=.devcontainer/blog/devcontainer.json) > 🧑‍🚀 **Seasoned astronaut?** Delete this file. Have fun! -![basics](https://user-images.githubusercontent.com/4677417/186188965-73453154-fdec-4d6b-9c34-cb35c248ae5b.png) +![blog](https://github.com/withastro/astro/assets/2244813/ff10799f-a816-4703-b967-c78997e8323d) +Features: + +- ✅ Minimal styling (make it your own!) +- ✅ 100/100 Lighthouse performance +- ✅ SEO-friendly with canonical URLs and OpenGraph data +- ✅ Sitemap support +- ✅ RSS Feed support +- ✅ Markdown & MDX support ## 🚀 Project Structure Inside of your Astro project, you'll see the following folders and files: -``` -/ +```text ├── public/ -│ └── favicon.svg ├── src/ -│ ├── components/ -│ │ └── Card.astro -│ ├── layouts/ -│ │ └── Layout.astro -│ └── pages/ -│ └── index.astro -└── package.json +│   ├── components/ +│   ├── content/ +│   ├── layouts/ +│   └── pages/ +├── astro.config.mjs +├── README.md +├── package.json +└── tsconfig.json ``` Astro looks for `.astro` or `.md` files in the `src/pages/` directory. Each page is exposed as a route based on its file name. There's nothing special about `src/components/`, but that's where we like to put any Astro/React/Vue/Svelte/Preact components. +The `src/content/` directory contains "collections" of related Markdown and MDX documents. Use `getCollection()` to retrieve posts from `src/content/blog/`, and type-check your frontmatter using an optional schema. See [Astro's Content Collections docs](https://docs.astro.build/en/guides/content-collections/) to learn more. + Any static assets, like images, can be placed in the `public/` directory. ## 🧞 Commands All commands are run from the root of the project, from a terminal: -| Command | Action | -| :--------------------- | :------------------------------------------------- | -| `npm install` | Installs dependencies | -| `npm run dev` | Starts local dev server at `localhost:3000` | -| `npm run build` | Build your production site to `./dist/` | -| `npm run preview` | Preview your build locally, before deploying | -| `npm run astro ...` | Run CLI commands like `astro add`, `astro preview` | -| `npm run astro --help` | Get help using the Astro CLI | +| Command | Action | +| :------------------------ | :----------------------------------------------- | +| `npm install` | Installs dependencies | +| `npm run dev` | Starts local dev server at `localhost:4321` | +| `npm run build` | Build your production site to `./dist/` | +| `npm run preview` | Preview your build locally, before deploying | +| `npm run astro ...` | Run CLI commands like `astro add`, `astro check` | +| `npm run astro -- --help` | Get help using the Astro CLI | ## 👀 Want to learn more? -Feel free to check [our documentation](https://docs.astro.build) or jump into our [Discord server](https://astro.build/chat). +Check out [our documentation](https://docs.astro.build) or jump into our [Discord server](https://astro.build/chat). + +## Credit + +This theme is based off of the lovely [Bear Blog](https://github.com/HermanMartinus/bearblog/). diff --git a/web/astro.config.mjs b/web/astro.config.mjs index 30dd69d..cb25939 100644 --- a/web/astro.config.mjs +++ b/web/astro.config.mjs @@ -1,22 +1,11 @@ -import { defineConfig } from 'astro/config' +import { defineConfig } from 'astro/config'; +import mdx from '@astrojs/mdx'; +import sitemap from '@astrojs/sitemap'; -// https://astro.build/config -import tailwind from '@astrojs/tailwind' -import svelte from '@astrojs/svelte' - -// https://astro.build/config -import mdx from '@astrojs/mdx' -import { remarkReadingTime } from './src/lib/remark-reading-time' +import tailwind from "@astrojs/tailwind"; // https://astro.build/config export default defineConfig({ - integrations: [ - tailwind({ - applyBaseStyles: false - }), - svelte(), - mdx({ - remarkPlugins: [remarkReadingTime] - }) - ] -}) + site: 'https://example.com', + integrations: [mdx(), sitemap(), tailwind({configFile: "./tailwind.config.cjs"})] +}); \ No newline at end of file diff --git a/web/bun.lockb b/web/bun.lockb new file mode 100755 index 0000000..ea06f5d Binary files /dev/null and b/web/bun.lockb differ diff --git a/web/package.json b/web/package.json index 6841e5c..fdaaa07 100644 --- a/web/package.json +++ b/web/package.json @@ -1,47 +1,34 @@ { - "name": "@kharann/web", - "type": "module", - "version": "0.0.1", - "private": true, - "scripts": { - "dev": "astro dev", - "start": "astro dev", - "build": "astro build", - "preview": "astro preview", - "lint": "eslint --max-warnings 0 .", - "lint:fix": "eslint --fix .", - "astro": "astro" - }, - "dependencies": { - "@astrojs/mdx": "^1.1.0", - "@astrojs/partytown": "^2.0.0", - "@astrojs/svelte": "^4.0.2", - "@astrojs/tailwind": "^5.0.0", - "@portabletext/svelte": "2.0.0", - "@sanity/client": "^6.4.12", - "@tailwindcss/typography": "^0.5.10", - "astro": "^3.1.2", - "astro-icon": "^0.8.1", - "astro-seo": "^0.8.0", - "clsx": "^2.0.0", - "date-fns": "^2.30.0", - "eslint-plugin-astro": "^0.29.0", - "feather-icons": "^4.29.1", - "groq": "^3.16.7", - "iconify-icon": "^1.0.8", - "mdast-util-to-string": "^4.0.0", - "prism-svelte": "^0.5.0", - "prismjs": "^1.29.0", - "reading-time": "^1.5.0", - "sharp": "^0.32.6", - "svelte": "^4.2.1", - "tailwindcss": "^3.3.3" - }, - "devDependencies": { - "@radix-ui/colors": "3.0.0-rc.5", - "@types/prismjs": "^1.26.0" - }, - "volta": { - "node": "18.17.1" - } -} + "name": "web-reforged", + "type": "module", + "version": "0.0.1", + "scripts": { + "dev": "astro dev", + "start": "astro dev", + "build": "astro check && astro build", + "preview": "astro preview", + "astro": "astro" + }, + "dependencies": { + "@astrojs/check": "^0.3.1", + "@astrojs/mdx": "^1.1.4", + "@astrojs/rss": "^3.0.0", + "@astrojs/sitemap": "^3.0.3", + "@astrojs/tailwind": "^5.0.2", + "@radix-ui/colors": "^3.0.0", + "@tailwindcss/typography": "^0.5.10", + "astro": "^3.5.0", + "astro-icon": "^0.8.1", + "clsx": "^2.0.0", + "iconify-icon": "^1.0.8", + "tailwind-merge": "^2.0.0", + "tailwindcss": "^3.0.24", + "typescript": "^5.2.2" + }, + "devDependencies": { + "@typescript-eslint/parser": "^6.10.0", + "eslint": "^8.53.0", + "eslint-plugin-astro": "^0.29.1", + "eslint-plugin-jsx-a11y": "^6.8.0" + } +} \ No newline at end of file diff --git a/web/prettier.config.cjs b/web/prettier.config.cjs index 68ebc48..d7b21e5 100644 --- a/web/prettier.config.cjs +++ b/web/prettier.config.cjs @@ -1,8 +1,4 @@ module.exports = { - useTabs: true, - trailingComma: 'none', - semi: false, - printWidth: 100, - bracketSpacing: true, + printWidth: 120, singleQuote: true } diff --git a/web/public/analytics.js b/web/public/analytics.js deleted file mode 100644 index e96bd3c..0000000 --- a/web/public/analytics.js +++ /dev/null @@ -1 +0,0 @@ -!function(e,n){if("object"==typeof exports&&"object"==typeof module)module.exports=n();else if("function"==typeof define&&define.amd)define([],n);else{var t=n();for(var o in t)("object"==typeof exports?exports:e)[o]=t[o]}}(this,(function(){return e={913:function(){function e(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,o)}return t}function n(n){for(var o=1;o{var o=d.debug||T(i);if(t||o){var r="[Panelbear] ".concat(e);n?console.log(r,n):console.log(r)}},s="Pageview",l=()=>u(s),p=e=>{L((()=>{var t=(e=>{var t=e;if(d.beforeSend){var o;try{o=d.beforeSend(n({},e))}catch(e){console.error(e)}if(!o)return void c("Function beforeSend returned 'undefined', skipping event trigger");for(var r of(o.pid=e.pid,o.event=e.event,Object.keys(e)))t[r]=o[r]}return{p:t.pid,e:t.event,ur:t.url,sw:t.screen_width,re:t.referrer,so:t.utm_source,ca:t.utm_campaign,me:t.utm_medium,ul:t.user_language,tz:t.timezone,cs:t.connection_speed,dns:t.dns,conn:t.connect,ssl:t.ssl,ttfb:t.ttfb,dl:t.download,dcl:t.dom_content_loaded,rd:t.render,pl:t.page_load,ts:t.transfer_size,ua:t.override_user_agent,ip:t.override_ip,co:t.override_country_code}})(n({pid:d.site,event:e,url:m(),screen_width:window.screen&&window.screen.width,referrer:O(),utm_source:b(),utm_campaign:h(),utm_medium:_(),user_language:y(),timezone:S(),connection_speed:P()},E(e)));t&&f(t)&&v(t)}),"collect")},u=e=>{var n=()=>p(e);"complete"===document.readyState?setTimeout(n,0):(c("Document not ready, adding event listener"),window.addEventListener("load",(()=>{setTimeout(n,0)})))},w=()=>{if(window.history.pushState&&!window.panelbear._historyPatched){c("Single page app mode is set to 'history', patching History API");var e=window.history.pushState;window.history.pushState=function(){e.apply(this,arguments),l()},window.addEventListener("popstate",l),window.panelbear._historyPatched=!0,c("Listening for History API changes")}},v=e=>{var n="".concat(d.analyticsHost,"/api/_/events"),t=JSON.stringify(e);navigator.sendBeacon&&navigator.sendBeacon(n,t)||fetch(n,{body:t,method:"POST",credentials:"omit",keepalive:!0}),c("Sent event",e)},f=e=>{if(!d.site)return c("Bad configuration: missing site ID",void 0,!0),!1;if(e.e&&/^[a-zA-Z][a-zA-Z0-9\_\-\.]{0,63}$/.test(e.e)){if(window.localStorage&&window.localStorage.getItem(a)||!d.enabled)return c("Skipping event collection, Panelbear has been manually disabled on this browser.",void 0,!0),!1;var n="Skipping event collection, website is running locally. More info on https://panelbear.com/docs/local-development/?ref=console";if(!d.debug){if(d.honorDNT&&"doNotTrack"in window.navigator&&"1"===window.navigator.doNotTrack)return c("Honoring 'Do Not Track'"),!1;if(/^localhost$|^127(?:\.[0-9]+){0,2}\.[0-9]+$|^(?:0*\:)*?:?0*1$/.test(window.location.hostname))return c(n,void 0,!0),!1;if("file:"===window.location.protocol)return c(n,void 0,!0),!1;if("prerender"===window.document.visibilityState)return c("Skipping event collection, document is prerendering"),!1;if(window.navigator.webdriver)return c("Skipping event collection, navigation is automated"),!1}if(e.e===s){var t=window.panelbear._previousPath,o=e.ur;if(window.panelbear._previousPath=o,t&&t==o)return void c("Skipping duplicate pageview from being sent")}return!0}c("Invalid event name.",void 0,!0)},m=()=>{var e=d.includeURLFragment?window.location.hash:"";return window.location.protocol+"//"+window.location.hostname+window.location.pathname+e},g=e=>{var n=window.location.search.match(e);return n?n[2]:void 0},b=()=>g(/[?&](ref|source|utm_source)=([^?&]+)/),h=()=>g(/[?&](utm_campaign)=([^?&]+)/),y=()=>{var e=window.navigator;return e?e.userLanguage||e.language:void 0},S=()=>{try{return Intl.DateTimeFormat().resolvedOptions().timeZone}catch(e){return}},_=()=>g(/[?&](utm_medium)=([^?&]+)/),P=()=>navigator.connection&&"effectiveType"in navigator.connection?navigator.connection.effectiveType:void 0,k=e=>{try{if(e){var n=Math.ceil(e);if(isNaN(n)||n<0)return;return n}return}catch(e){return}},E=e=>{var n={};if(e!==s||window.panelbear._firstPageLoadSent)return n;try{var t=window.performance||window.mozPerformance||window.msPerformance||window.webkitPerformance||{};if(t.getEntriesByType){var o=t.getEntriesByType("navigation")[0];o&&(n={dns:o.domainLookupEnd-o.domainLookupStart,connect:o.connectEnd-o.connectStart,ssl:o.secureConnectionStart?o.requestStart-o.secureConnectionStart:void 0,ttfb:o.responseStart-o.requestStart,download:o.responseEnd-o.responseStart,dom_content_loaded:o.domContentLoadedEventEnd-o.responseEnd,render:o.domComplete-o.domContentLoadedEventEnd,page_load:o.loadEventStart,transfer_size:o.transferSize?o.transferSize/1e3:void 0})}if(0===Object.keys(n).length){var r=t.timing;r&&(n={dns:r.domainLookupEnd-r.domainLookupStart,connect:r.connectEnd-r.connectStart,ssl:r.secureConnectionStart?r.requestStart-r.secureConnectionStart:void 0,ttfb:r.responseStart-r.requestStart,download:r.responseEnd-r.responseStart,dom_content_loaded:r.domContentLoadedEventEnd-r.responseEnd,render:r.domComplete-r.domContentLoadedEventEnd,page_load:r.loadEventStart-r.navigationStart})}}catch(e){c("Error while loading performance metrics",e)}for(var a of Object.keys(n))n[a]=k(n[a]);return window.panelbear._firstPageLoadSent=!0,n},O=()=>{var e=document.referrer;if(e){var n=new URL(e);if(n.hostname.toLowerCase()===window.location.hostname.toLowerCase())return;return n.protocol+"//"+n.hostname+n.pathname}},j=(e,t)=>{switch(e){case"config":if(!t)return c("Passed empty config params");o=t,r=n({},d),a=n(n({},d),o),c("Updated configuration",d=a),d.autoTrack&&(c("Autotrack enabled"),"history"===d.spaMode&&w(),!r.site&&a.site&&(c("Triggering initial pageview"),l()));break;case"trackPageview":u("Pageview");break;case"track":u(t);break;default:return void c("Unknown command",e,!0)}var o,r,a},L=(e,n)=>{try{e()}catch(e){(new Image).src="".concat(d.analyticsHost,"/api/_/errors?s=").concat(d.site,"&h=").concat(n,"&m=").concat(encodeURIComponent(e.message))}},T=e=>window&&window.location.search.indexOf(e)>-1;L((()=>{(()=>{var e=T(r),n=T(a);if(e||n){if(!window.localStorage)return void c("Can't disable Panelbear. This browser does not support local storage.",void 0,!0);e&&(window.localStorage.removeItem(a),c("Panelbear has been enabled for this browser and website combination.",void 0,!0)),n&&(window.localStorage.setItem(a,"true"),c("Panelbear has been disabled for this browser and website combination.",void 0,!0))}})();var e=window.panelbearQ||window.panelbear?.q||[];window.panelbear=j,window.panelbear.q=e;for(var n=0;n["value"] - -export interface Experience { - company: string - company_full_name: string - url: string - positions: { - role: string - start: string - end: string - type: string - description: InputValue | undefined - }[] - -} -export interface Project { - title: string - description: string - github: string - icons: string[] -} - -export interface FrontpageData { - introduction: { - role: string - about_me: InputValue - } - experiences: Experience[] - projects: Project[] -} - -const frontpageQuery = groq` -{ - "introduction": *[_type == "whoami" ] { - role, - about_me - }[0], - "experiences": *[_type == "experience" && !(_id in path("drafts.**")) && !hidden] { - company, - company_full_name, - positions, - url - }, - "projects": *[_type == "project" && !(_id in path("drafts.**"))] { - title, - description, - github, - icons - } -}` - -export const fetchFrontpageData = async () => - await sanityClient.fetch(frontpageQuery) diff --git a/web/src/components/BaseHead.astro b/web/src/components/BaseHead.astro new file mode 100644 index 0000000..a2fe3a3 --- /dev/null +++ b/web/src/components/BaseHead.astro @@ -0,0 +1,46 @@ +--- +// Import the global.css file here so that it is included on +// all pages through the use of the component. + +interface Props { + title: string; + description: string; + image?: string; +} + +const canonicalURL = new URL(Astro.url.pathname, Astro.site); + +const { title, description, image = '/blog-placeholder-1.jpg' } = Astro.props; +--- + + + + + + + + + + + + + + + +{title} + + + + + + + + + + + + + + + + diff --git a/web/src/components/PreviewPosts.astro b/web/src/components/BlogPostItem.astro similarity index 82% rename from web/src/components/PreviewPosts.astro rename to web/src/components/BlogPostItem.astro index 1cbae63..8fbc240 100644 --- a/web/src/components/PreviewPosts.astro +++ b/web/src/components/BlogPostItem.astro @@ -1,5 +1,4 @@ --- -/* eslint-disable */ import type { MDXInstance } from 'astro' import { format } from 'date-fns' @@ -8,13 +7,14 @@ export interface Props { } const { posts } = Astro.props +const getUrl = (url: string | undefined) => url ? url.split("/").slice(2).join("/").split(".").shift() :"/" ---
    { posts.map((post) => (
  • - +

    {post.frontmatter.title}

    diff --git a/web/src/components/DualImageRow.astro b/web/src/components/DualImageRow.astro deleted file mode 100644 index 2b012b9..0000000 --- a/web/src/components/DualImageRow.astro +++ /dev/null @@ -1,29 +0,0 @@ ---- -import { Image } from 'astro:assets' - -interface ImageValue { - src: string - alt: string -} -export interface Props { - images: [ImageValue, ImageValue] -} -const { images } = Astro.props ---- - -

    - {images[0].alt} - {images[1].alt} -
    diff --git a/web/src/components/Footer.astro b/web/src/components/Footer.astro index e71cded..6558424 100644 --- a/web/src/components/Footer.astro +++ b/web/src/components/Footer.astro @@ -1,5 +1,4 @@ --- -import Link from './Link.svelte' import { Icon } from 'astro-icon' const iconLinks = [ @@ -19,6 +18,9 @@ const iconLinks = [ text: 'Mail' } ] + + +const year = new Date().getFullYear() ---
    diff --git a/web/src/components/FormattedDate.astro b/web/src/components/FormattedDate.astro new file mode 100644 index 0000000..1bcce73 --- /dev/null +++ b/web/src/components/FormattedDate.astro @@ -0,0 +1,17 @@ +--- +interface Props { + date: Date; +} + +const { date } = Astro.props; +--- + + diff --git a/web/src/components/Header/Header.astro b/web/src/components/Header/Header.astro new file mode 100644 index 0000000..09eb584 --- /dev/null +++ b/web/src/components/Header/Header.astro @@ -0,0 +1,29 @@ +--- +import ThemeIcon from '../ThemeIcon.astro'; +import Logo from './Logo.astro'; +import NavLink from './NavLink.astro'; + +const pathname = new URL(Astro.request.url).pathname; +const currentPath = pathname.slice(1); // remove the first "/" +--- + +
    + + + + + +
    + + +
    +
    diff --git a/web/src/components/Header/Header.svelte b/web/src/components/Header/Header.svelte deleted file mode 100644 index fa0519c..0000000 --- a/web/src/components/Header/Header.svelte +++ /dev/null @@ -1,39 +0,0 @@ - - - - diff --git a/web/src/components/Header/logo.svelte b/web/src/components/Header/Logo.astro similarity index 100% rename from web/src/components/Header/logo.svelte rename to web/src/components/Header/Logo.astro diff --git a/web/src/components/Header/NavLink.astro b/web/src/components/Header/NavLink.astro new file mode 100644 index 0000000..d760f37 --- /dev/null +++ b/web/src/components/Header/NavLink.astro @@ -0,0 +1,18 @@ +--- +import { cn } from '../../utils'; + +interface Props { + href: string; + isActive?: boolean; +} + +const { href, isActive } = Astro.props; +--- + + diff --git a/web/src/components/Header/dropdown.svelte b/web/src/components/Header/dropdown.svelte deleted file mode 100644 index 0e0bb3b..0000000 --- a/web/src/components/Header/dropdown.svelte +++ /dev/null @@ -1,28 +0,0 @@ - - -{#if open} - -{/if} diff --git a/web/src/components/Header/hamburger.svelte b/web/src/components/Header/hamburger.svelte deleted file mode 100644 index d8ecaeb..0000000 --- a/web/src/components/Header/hamburger.svelte +++ /dev/null @@ -1,51 +0,0 @@ - - - - - {#if open} - - {/if} - - - - - - diff --git a/web/src/components/Header/route-link.svelte b/web/src/components/Header/route-link.svelte deleted file mode 100644 index f316a6a..0000000 --- a/web/src/components/Header/route-link.svelte +++ /dev/null @@ -1,13 +0,0 @@ - - -
  • - {text} -
  • diff --git a/web/src/components/HeaderLink.astro b/web/src/components/HeaderLink.astro new file mode 100644 index 0000000..3dd439b --- /dev/null +++ b/web/src/components/HeaderLink.astro @@ -0,0 +1,24 @@ +--- +import type { HTMLAttributes } from 'astro/types'; + +type Props = HTMLAttributes<'a'>; + +const { href, class: className, ...props } = Astro.props; + +const { pathname } = Astro.url; +const isActive = href === pathname || href === pathname.replace(/\/$/, ''); +--- + + + + + diff --git a/web/src/components/Link.astro b/web/src/components/Link.astro new file mode 100644 index 0000000..5e3f9d3 --- /dev/null +++ b/web/src/components/Link.astro @@ -0,0 +1,22 @@ +--- +import { cn } from '../utils'; + +export type Props = { + 'aria-label'?: string; + class?: string; + href?: string; +}; +const props = Astro.props; +--- + + diff --git a/web/src/components/Link.svelte b/web/src/components/Link.svelte deleted file mode 100644 index 5524ded..0000000 --- a/web/src/components/Link.svelte +++ /dev/null @@ -1,29 +0,0 @@ - - - - - diff --git a/web/src/components/PortableText/code-block.svelte b/web/src/components/PortableText/code-block.svelte deleted file mode 100644 index 19430f0..0000000 --- a/web/src/components/PortableText/code-block.svelte +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - -
    -{@html highlight}
    -
    diff --git a/web/src/components/PortableText/index.svelte b/web/src/components/PortableText/index.svelte deleted file mode 100644 index 6cc0a58..0000000 --- a/web/src/components/PortableText/index.svelte +++ /dev/null @@ -1,31 +0,0 @@ - - -
    - -
    diff --git a/web/src/components/PortableText/list.svelte b/web/src/components/PortableText/list.svelte deleted file mode 100644 index 415007a..0000000 --- a/web/src/components/PortableText/list.svelte +++ /dev/null @@ -1,12 +0,0 @@ - - -{#if listItem === 'number'} -
    -{:else} -
    -{/if} diff --git a/web/src/components/PortableText/portable-link.svelte b/web/src/components/PortableText/portable-link.svelte deleted file mode 100644 index a267e14..0000000 --- a/web/src/components/PortableText/portable-link.svelte +++ /dev/null @@ -1,10 +0,0 @@ - - - - - diff --git a/web/src/components/PortableText/portable-list-item.svelte b/web/src/components/PortableText/portable-list-item.svelte deleted file mode 100644 index c2af8e9..0000000 --- a/web/src/components/PortableText/portable-list-item.svelte +++ /dev/null @@ -1,8 +0,0 @@ - - -
  • diff --git a/web/src/components/ProjectCard.astro b/web/src/components/ProjectCard.astro deleted file mode 100644 index ac0d3a2..0000000 --- a/web/src/components/ProjectCard.astro +++ /dev/null @@ -1,57 +0,0 @@ ---- -import { Image } from 'astro:assets' -import { Icon } from 'astro-icon' -import clsx from 'clsx' -import type { Project } from '../api/frontpage' -import Link from './Link.svelte' - -export interface Props { - project: Project -} - -const { project } = Astro.props -const { title, description, github, icons } = project -const org = github.split('/')[3] - -const overrides: Record = { - 'mdi:microsoft-azure': 'text-[#1769AA]', - 'mdi:aws': 'text-[#ec912d]' -} ---- - -
    - -
    - - avatar - -

    {title}

    -
    - {description} -
    -
    -
    - { - icons - ? icons.map((icon) => ( - - )) - : null - } -
    -
    diff --git a/web/src/components/Section.astro b/web/src/components/Section.astro index 44d770d..34ab190 100644 --- a/web/src/components/Section.astro +++ b/web/src/components/Section.astro @@ -1,5 +1,4 @@ --- -import Divider from './divider.svelte' import clsx from 'clsx' export interface Props { @@ -15,7 +14,7 @@ const { name, className } = Astro.props name ? ( <>

    {name}

    - +
    ) : null } diff --git a/web/src/components/ThemeIcon.astro b/web/src/components/ThemeIcon.astro index 8459faf..5a49c63 100644 --- a/web/src/components/ThemeIcon.astro +++ b/web/src/components/ThemeIcon.astro @@ -1,21 +1,47 @@ ---- ---- + \ No newline at end of file + + + \ No newline at end of file diff --git a/web/src/components/divider.svelte b/web/src/components/divider.svelte deleted file mode 100644 index 9120d20..0000000 --- a/web/src/components/divider.svelte +++ /dev/null @@ -1 +0,0 @@ -
    diff --git a/web/src/components/experiences.svelte b/web/src/components/experiences.svelte deleted file mode 100644 index 4fb4a56..0000000 --- a/web/src/components/experiences.svelte +++ /dev/null @@ -1,82 +0,0 @@ - - -
    - diff --git a/web/src/consts.ts b/web/src/consts.ts new file mode 100644 index 0000000..0df8a61 --- /dev/null +++ b/web/src/consts.ts @@ -0,0 +1,5 @@ +// Place any global data in this file. +// You can import this data from anywhere in your site by using the `import` keyword. + +export const SITE_TITLE = 'Astro Blog'; +export const SITE_DESCRIPTION = 'Welcome to my website!'; diff --git a/web/src/pages/blog/rewriting-my-blog.mdx b/web/src/content/blog/rewriting-my-blog.mdx similarity index 92% rename from web/src/pages/blog/rewriting-my-blog.mdx rename to web/src/content/blog/rewriting-my-blog.mdx index 7253c6a..6762f23 100644 --- a/web/src/pages/blog/rewriting-my-blog.mdx +++ b/web/src/content/blog/rewriting-my-blog.mdx @@ -7,7 +7,6 @@ tags: ['astro', 'sveltekit', 'blog', 'typescript', 'building in public'] --- import { Image } from 'astro:assets' -import DualImageRow from '../../components/DualImageRow.astro' I recently decided to rewrite my personal page into Astro. Previously, it was built with SvelteKit which I was quite satisfied with. @@ -46,18 +45,22 @@ However, I did want to give my page a facelift and decided to do a small rebrand Last year I decided to build a mechanical keyboard and I wanted to use the same color scheme for my blog. The keycaps set is [GMK Botanical](https://oblotzky.industries/products/gmk-botanical-2) and the kebboard is a green [Mekanisk Urskog](https://mekanisk.com/products/urskog?variant=42784529875118) - +
    + {'GMK + {'Mekanisk +
    I ended up settling for green as my primary color and decided to use [Coolors.co](https://coolors.co/) to generate my primary color. diff --git a/web/src/content/config.ts b/web/src/content/config.ts new file mode 100644 index 0000000..f041922 --- /dev/null +++ b/web/src/content/config.ts @@ -0,0 +1,15 @@ +import { defineCollection, z } from 'astro:content'; + +const blog = defineCollection({ + // Type-check frontmatter using a schema + schema: z.object({ + title: z.string(), + description: z.string(), + // Transform string to Date object + pubDate: z.coerce.date(), + updatedDate: z.coerce.date().optional(), + heroImage: z.string().optional(), + }), +}); + +export const collections = { blog }; diff --git a/web/src/env.d.ts b/web/src/env.d.ts index c11e3fd..acef35f 100644 --- a/web/src/env.d.ts +++ b/web/src/env.d.ts @@ -1,2 +1,2 @@ -// Replace `astro/client` with `@astrojs/image/client` - +/// +/// diff --git a/web/src/layouts/BlogLayout.astro b/web/src/layouts/BlogLayout.astro index dea9661..185f190 100644 --- a/web/src/layouts/BlogLayout.astro +++ b/web/src/layouts/BlogLayout.astro @@ -1,5 +1,4 @@ --- -import Divider from '../components/divider.svelte' import Layout from './Layout.astro' import { format } from 'date-fns' import clsx from 'clsx' @@ -20,8 +19,8 @@ const publishedDate = format(new Date(frontmatter.pubDate), 'LLLL d Y')
    -

    {frontmatter.title}

    - +

    {frontmatter.title}

    +

    Anh-Kha Vo • {publishedDate}

    {frontmatter.minutesRead}

    @@ -29,7 +28,7 @@ const publishedDate = format(new Date(frontmatter.pubDate), 'LLLL d Y')
    diff --git a/web/src/layouts/Layout.astro b/web/src/layouts/Layout.astro index 3154b47..4ce17a1 100644 --- a/web/src/layouts/Layout.astro +++ b/web/src/layouts/Layout.astro @@ -1,77 +1,75 @@ --- -import "./base.css" -import "@radix-ui/colors/green.css" -import "@radix-ui/colors/sand.css" -import "@radix-ui/colors/brown.css" -import "@radix-ui/colors/green-dark.css" -import "@radix-ui/colors/sand-dark.css" -import "@radix-ui/colors/brown-dark.css" +import Footer from '../components/Footer.astro'; +import Header from '../components/Header/Header.astro'; +import '@radix-ui/colors/sand.css'; +import '@radix-ui/colors/green.css'; +import '@radix-ui/colors/brown.css'; +import '@radix-ui/colors/sand-dark.css'; +import '@radix-ui/colors/green-dark.css'; +import '@radix-ui/colors/brown-dark.css'; -import Footer from '../components/Footer.astro' -import Header from '../components/Header/Header.svelte' -import { SEO } from 'astro-seo' export interface Props { - title: string - description?: string + title: string; + description?: string; } -const { title, description } = Astro.props -const url = Astro.url.pathname --- - - - - - - - - - - - - - -
    -
    -
    - -
    -
    -
    - - + html { + font-family: Satoshi, system-ui, sans-serif; + font-size: 16px; + font-display: auto; + } + + code { + font-family: + Menlo, + Monaco, + Lucida Console, + Liberation Mono, + DejaVu Sans Mono, + Bitstream Vera Sans Mono, + Courier New, + monospace; + } + + diff --git a/web/src/layouts/base.css b/web/src/layouts/base.css deleted file mode 100644 index f1b7511..0000000 --- a/web/src/layouts/base.css +++ /dev/null @@ -1,28 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; - -@layer components { - - body { - @apply text-sand-12 - } - /* h1 { - @apply text-3xl my-4; - } - h2 { - @apply text-2xl font-semibold my-3; - } - h3 { - @apply text-xl font-bold my-2; - } - h4 { - @apply text-lg font-bold my-1; - } - h5 { - @apply text-lg font-semibold; - } - h6 { - @apply text-lg; - } */ -} diff --git a/web/src/lib/remark-reading-time.js b/web/src/lib/remark-reading-time.js deleted file mode 100644 index a59dc28..0000000 --- a/web/src/lib/remark-reading-time.js +++ /dev/null @@ -1,12 +0,0 @@ -import getReadingTime from 'reading-time'; -import { toString } from 'mdast-util-to-string'; - -export function remarkReadingTime() { - return function (tree, { data }) { - const textOnPage = toString(tree); - const readingTime = getReadingTime(textOnPage); - // readingTime.text will give us minutes read as a friendly string, - // i.e. "3 min read" - data.astro.frontmatter.minutesRead = readingTime.text; - }; -} \ No newline at end of file diff --git a/web/src/lib/sanity.ts b/web/src/lib/sanity.ts deleted file mode 100644 index f191516..0000000 --- a/web/src/lib/sanity.ts +++ /dev/null @@ -1,26 +0,0 @@ -import {createClient} from '@sanity/client' - -const config = { - projectId: 'r4l4xmqo', - dataset: 'production', - apiVersion: 'v2021-11-11', // use current UTC date - see "specifying API version"! - useCdn: true -} - -export const sanityClient = createClient(config) - -export type Fetch = (input: RequestInfo, init?: RequestInit) => Promise -export type Parameters = Record; -export const getFetchUrl = (query: string, parameters?: Parameters) => { - let url = `https://${config.projectId}.api.sanity.io/${config.apiVersion}/data/query/${ - config.dataset - }?query=${encodeURIComponent(query)}` - if (parameters) { - // Encode each parameter and add it to the fetch url - const urlParameters = Object.entries(parameters) - .map(([key, val]) => `&$${key}=${encodeURIComponent(`"${val}"`)}`) - .join('') - url += urlParameters - } - return url -} diff --git a/web/src/pages/blog/[slug].astro b/web/src/pages/blog/[slug].astro new file mode 100644 index 0000000..1ebd46d --- /dev/null +++ b/web/src/pages/blog/[slug].astro @@ -0,0 +1,18 @@ +--- +export async function getStaticPaths() { + +const allPosts = await Astro.glob('../../content/blog/*.mdx') // returns an array of posts that live at ./src/pages/post/*.md +const posts = allPosts.filter((post) => !post.frontmatter.draft) + + return posts.map((post) => { + return { + params: { slug: post.file.split("/").pop()?.split(".").shift() }, + props: { post }, + }; + }); +} + +const { Content } = Astro.props.post; +--- + + \ No newline at end of file diff --git a/web/src/pages/blog/index.astro b/web/src/pages/blog/index.astro index 224232d..eda1ec4 100644 --- a/web/src/pages/blog/index.astro +++ b/web/src/pages/blog/index.astro @@ -1,9 +1,9 @@ --- -import PreviewPosts from '../../components/PreviewPosts.astro' +import BlogPostItem from '../../components/BlogPostItem.astro' import Section from '../../components/Section.astro' import Layout from '../../layouts/Layout.astro' -const allPosts = await Astro.glob('./*.mdx') // returns an array of posts that live at ./src/pages/post/*.md +const allPosts = await Astro.glob('../../content/blog/*.mdx') // returns an array of posts that live at ./src/pages/post/*.md const posts = allPosts.filter((post) => !post.frontmatter.draft) --- @@ -15,7 +15,7 @@ const posts = allPosts.filter((post) => !post.frontmatter.draft) other things I find interesting.

    - +
    diff --git a/web/src/pages/index.astro b/web/src/pages/index.astro index 557d5a5..4af1748 100644 --- a/web/src/pages/index.astro +++ b/web/src/pages/index.astro @@ -1,56 +1,61 @@ --- -import Layout from '../layouts/Layout.astro' -import { fetchFrontpageData } from '../api/frontpage' -import PortableText from '../components/PortableText/index.svelte' -import Experiences from '../components/experiences.svelte' -import ProjectCard from '../components/ProjectCard.astro' -import Section from '../components/Section.astro' -import PreviewPosts from '../components/PreviewPosts.astro' -import { compareAsc, isAfter, isBefore } from 'date-fns' - -const { introduction, experiences, projects } = await fetchFrontpageData() -const allPosts = await Astro.glob('./blog/*.mdx') // returns an array of posts that live at ./src/pages/post/*.md -const posts = allPosts - .filter((post) => !post.frontmatter.draft) - .sort((a, b) => b.frontmatter.date - a.frontmatter.date) - .slice(0, 3) +import FrontPagePost from '../components/BlogPostItem.astro'; +import Link from '../components/Link.astro'; +import Section from '../components/Section.astro'; +import Layout from '../layouts/Layout.astro'; +const allPosts = await Astro.glob('../content/blog/*.mdx') +const posts = allPosts.filter((post) => !post.frontmatter.draft) --- -
    -

    - Hi, my name is - Anhkha 👋 -

    - {introduction.role} -
    -
    - -
    -
    - -
    -
    - -
    -
    - I've worked on multiple projects, from commercial ones to small hobby projects. -
    - During my free time, I love working on open-source projects. Here are some of my open-source highlights. -
    - {projects.map((project) => )} -
    -
    -
    -
    -

    Feel free to each out if you have any questions or just want to chat!

    - Say hi! -
    -
    +
    +

    + Hi, my name is + Anhkha 👋 +

    + I'm a software developer specializing in building unique user-oriented products without sacrificing quality. +
    +
    +

    + Ever since I was a child, I've been fascinated by technology. Nevertheless, I quickly found myself tinkering with + the computer for hours if given the chance. Turns out hacking together Lua scripts for video games taught me a + thing or two about coding. A lot has changed since then, but I still found myself in front of the computer, but + tinkering around with some code instead.

    + + Since then, I've built multiple web applications, managed software teams, + and designed scalable software architectures, all while juggling volunteering, work, and university.111111 + + Fast forward to today, I've just finished my Master's degree in Informatics from NTNU and moved to Oslo. I currently work at + Liflig as a full-stack developer with a passion for web applications. In my spare time, you might find me playing + video games, reading books, developing open-source software, or working out.

    +

    +
    +
    + +
    + +
    +
    +

    Feel free to each out if you have any questions or just want to chat!

    + Say hi! +
    +
    diff --git a/web/src/pages/rss.xml.js b/web/src/pages/rss.xml.js new file mode 100644 index 0000000..9ff9801 --- /dev/null +++ b/web/src/pages/rss.xml.js @@ -0,0 +1,16 @@ +import rss from '@astrojs/rss'; +import { getCollection } from 'astro:content'; +import { SITE_TITLE, SITE_DESCRIPTION } from '../consts'; + +export async function GET(context) { + const posts = await getCollection('blog'); + return rss({ + title: SITE_TITLE, + description: SITE_DESCRIPTION, + site: context.site, + items: posts.map((post) => ({ + ...post.data, + link: `/blog/${post.slug}/`, + })), + }); +} diff --git a/web/src/theme/colors_dark.cjs b/web/src/theme/colors_dark.cjs deleted file mode 100644 index e828fc2..0000000 --- a/web/src/theme/colors_dark.cjs +++ /dev/null @@ -1,75 +0,0 @@ -const green = { - 1: 'hsla(0, 0%, 0%, 0)', - 2: 'hsla(169, 100%, 48.5%, 0.027)', - 3: 'hsla(162, 98.7%, 57.9%, 0.070)', - 4: 'hsla(158, 98.6%, 59.7%, 0.105)', - 5: 'hsla(158, 98.6%, 60.7%, 0.140)', - 6: 'hsla(156, 99.9%, 62.0%, 0.187)', - 7: 'hsla(154, 99.5%, 63.1%, 0.257)', - 8: 'hsla(152, 99.7%, 64.2%, 0.370)', - 9: 'hsla(151, 99.7%, 63.8%, 0.605)', - 10: 'hsla(152, 99.9%, 66.5%, 0.661)', - 11: 'hsla(151, 99.7%, 69.2%, 0.740)', - 12: 'hsla(137, 100%, 95.8%, 0.980)' -} - -const brand = { - 1: '#d8f3dc', - 2: '#b7e4c7', - 3: '#95d5b2', - 4: '#74c69d', - 5: '#52b788', - 6: '#40916c', - 7: '#2d6a4f', - 8: '#1b4332', - 9: '#081c15' -} - -const brown = { - 1: 'hsla(0, 0%, 0%, 0)', - 2: 'hsla(22, 99.6%, 53.6%, 0.035)', - 3: 'hsla(18, 97.8%, 69.0%, 0.088)', - 4: 'hsla(21, 98.2%, 71.0%, 0.123)', - 5: 'hsla(25, 98.4%, 72.1%, 0.158)', - 6: 'hsla(25, 98.7%, 73.5%, 0.206)', - 7: 'hsla(25, 99.0%, 74.6%, 0.289)', - 8: 'hsla(28, 99.2%, 75.3%, 0.407)', - 9: 'hsla(28, 100%, 74.8%, 0.642)', - 10: 'hsla(28, 99.9%, 74.9%, 0.712)', - 11: 'hsla(28, 99.9%, 74.9%, 0.843)', - 12: 'hsla(32, 98.2%, 95.7%, 0.979)' -} - -const sand = { - 1: 'hsla(0, 0%, 0%, 0)', - 2: 'hsla(60, 89.8%, 91.4%, 0.026)', - 3: 'hsla(60, 95.5%, 92.5%, 0.056)', - 4: 'hsla(60, 75.6%, 96.4%, 0.078)', - 5: 'hsla(60, 81.9%, 95.2%, 0.104)', - 6: 'hsla(41, 87.6%, 94.8%, 0.134)', - 7: 'hsla(60, 95.4%, 96.2%, 0.172)', - 8: 'hsla(49, 93.5%, 95.7%, 0.254)', - 9: 'hsla(52, 97.3%, 96.2%, 0.391)', - 10: 'hsla(52, 97.8%, 96.7%, 0.451)', - 11: 'hsla(51, 97.0%, 97.8%, 0.597)', - 12: 'hsla(60, 88.7%, 99.8%, 0.923)' -} - -module.exports = { - gray: sand, - brand: brand, - green: green, - brown: brown, - background: 'l(61, 2.0%, 8.3%), - foreground: { - DEFAULT: sand[12], - accent: brand[1] - }, - - accent: '#73bbc5', - highlight: { - hover: brand[5], - DEFAULT: brand[1] - }, - primary: brand[2] -} diff --git a/web/src/theme/colors_light.cjs b/web/src/theme/colors_light.cjs deleted file mode 100644 index 3deef51..0000000 --- a/web/src/theme/colors_light.cjs +++ /dev/null @@ -1,74 +0,0 @@ -const green = { - 1: 'hsla(140, 94.9%, 38.7%, 0.016)', - 2: 'hsla(138, 99.9%, 38.5%, 0.051)', - 3: 'hsla(139, 97.7%, 36.9%, 0.087)', - 4: 'hsla(139, 98.5%, 32.7%, 0.134)', - 5: 'hsla(141, 100%, 30.4%, 0.200)', - 6: 'hsla(142, 99.0%, 28.9%, 0.295)', - 7: 'hsla(146, 99.5%, 27.6%, 0.428)', - 8: 'hsla(151, 99.5%, 28.8%, 0.644)', - 9: 'hsla(151, 99.9%, 28.0%, 0.812)', - 10: 'hsla(152, 99.6%, 25.8%, 0.840)', - 11: 'hsla(153, 99.9%, 21.0%, 0.906)', - 12: 'hsla(155, 99.9%, 7.4%, 0.902)', -} - -const brand = { - 1: '#d8f3dc', - 2: '#004037', - 3: '#357246', - 4: '#74c69d', - 5: '#52b788', - 6: '#40916c', - 7: '#2d6a4f', - 8: '#1b4332', - 9: '#081c15' -} - -const brown= { - 1: 'hsla(30, 94.3%, 34.6%, 0.012)', - 2: 'hsla(30, 94.3%, 34.6%, 0.036)', - 3: 'hsla(30, 97.7%, 33.9%, 0.083)', - 4: 'hsla(31, 98.5%, 34.2%, 0.134)', - 5: 'hsla(29, 100%, 34.3%, 0.200)', - 6: 'hsla(28, 99.2%, 34.6%, 0.291)', - 7: 'hsla(29, 99.8%, 33.8%, 0.412)', - 8: 'hsla(28, 100%, 33.3%, 0.553)', - 9: 'hsla(28, 99.9%, 25.5%, 0.655)', - 10: 'hsla(26, 99.6%, 22.0%, 0.679)', - 11: 'hsla(24, 99.6%, 16.0%, 0.726)', - 12: 'hsla(19, 98.8%, 3.9%, 0.820)', -} -const sand= { - 1: 'hsla(60, 89.3%, 18.3%, 0.012)', - 2: 'hsla(60, 78.1%, 9.0%, 0.028)', - 3: 'hsla(60, 95.7%, 6.9%, 0.059)', - 4: 'hsla(60, 84.4%, 5.3%, 0.087)', - 5: 'hsla(60, 93.5%, 3.7%, 0.114)', - 6: 'hsla(60, 86.7%, 4.6%, 0.146)', - 7: 'hsla(48, 92.1%, 5.5%, 0.193)', - 8: 'hsla(51, 94.5%, 5.0%, 0.291)', - 9: 'hsla(60, 96.6%, 3.0%, 0.475)', - 10: 'hsla(60, 96.5%, 2.3%, 0.522)', - 11: 'hsla(60, 94.0%, 1.7%, 0.632)', - 12: 'hsla(48, 92.4%, 1.2%, 0.891)', -} - -module.exports = { - gray: sand, - brand: brand, - green: green, - brown: brown, - background: 'hsl(30, 50.0%, 97.6%)', - foreground: { - DEFAULT: sand[12], - accent: brand[1] - }, - - accent: '#73bbc5', - highlight: { - hover: brand[3], - DEFAULT: brand[4] - }, - primary: '#357246' -} diff --git a/web/src/utils.ts b/web/src/utils.ts new file mode 100644 index 0000000..d084cca --- /dev/null +++ b/web/src/utils.ts @@ -0,0 +1,6 @@ +import { type ClassValue, clsx } from "clsx" +import { twMerge } from "tailwind-merge" + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)) +} diff --git a/web/tailwind.config.cjs b/web/tailwind.config.cjs index f859110..d3c9d2a 100644 --- a/web/tailwind.config.cjs +++ b/web/tailwind.config.cjs @@ -1,78 +1,82 @@ -const colors = require('@radix-ui/colors') +const colors = require('@radix-ui/colors'); function getColorCode(name, step) { - return colors[name][`${name}${step}`] + return colors[name][`${name}${step}`]; } function generateScale(name) { - let scale = Array.from({ length: 12 }, (_, i) => { - let id = i + 1 - return [[id, `var(--${name}-${id}, ${getColorCode(name, id)})`]] - }).flat() + let scale = Array.from({ length: 12 }, (_, i) => { + let id = i + 1; + return [[id, `var(--${name}-${id}, ${getColorCode(name, id)})`]]; + }).flat(); + console.log(scale); - return Object.fromEntries(scale) + return Object.fromEntries(scale); } const brand = { - 1: '#d8f3dc', - 2: '#b7e4c7', - 3: '#95d5b2', - 4: '#74c69d', - 5: '#52b788', - 6: '#40916c', - 7: '#2d6a4f', - 8: '#357246', - 9: '#1b4332', - 10: '#004037', - 11: '#081c15' -} + 1: '#d8f3dc', + 2: '#b7e4c7', + 3: '#95d5b2', + 4: '#74c69d', + 5: '#52b788', + 6: '#40916c', + 7: '#2d6a4f', + 8: '#357246', + 9: '#1b4332', + 10: '#004037', + 11: '#081c15', +}; /** @type {import('tailwindcss').Config} */ module.exports = { - content: ['./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}'], - darkMode: 'class', - theme: { - extend: { - colors: { - green: generateScale('green'), - brown: generateScale('brown'), - sand: generateScale('sand'), - brand, - background: { - DEFAULT: 'hsl(30, 50.0%, 97.6%)', - dark: 'hsl(61, 2.0%, 8.3%)' - }, - foreground: { - DEFAULT: `var(--sand1)`, - accent: brand[1] - } - }, - fontFamily: { - hack: 'Hack', - lato: 'Lato', - poppins: 'Poppins' - }, - rotate: { - 360: '360deg' - }, - typography: (theme) => ({ - DEFAULT: { - css: { - '--tw-prose-body': theme('colors.sand.12'), - '--tw-prose-bold': theme('colors.brown[11]'), - '--tw-prose-invert-bullets': theme('colors.brown[11]'), - code: { - 'background-color': theme('colors.gray.3'), - padding: theme('spacing.1'), - 'border-radius': theme('borderRadius.DEFAULT') - } - } - } - }), - width: { - thin: '2px' - } - } - }, - plugins: [require('@tailwindcss/typography')] -} + content: ['./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}'], + darkMode: 'class', + theme: { + colors: { + green: generateScale('green'), + brown: generateScale('brown'), + gray: generateScale('sand'), + sand: generateScale('sand'), + brand, + background: { + DEFAULT: 'hsl(30, 50.0%, 97.6%)', + dark: 'hsl(61, 2.0%, 8.3%)', + }, + foreground: { + DEFAULT: `var(--sand1)`, + accent: brand[1], + }, + }, + extend: { + fontFamily: { + hack: 'Hack', + lato: 'Lato', + poppins: 'Poppins', + }, + rotate: { + 360: '360deg', + }, + typography: (theme) => ({ + DEFAULT: { + css: { + '--tw-prose-body': theme('colors.sand.12'), + '--tw-prose-bold': theme('colors.brown[11]'), + '--tw-prose-invert-bullets': theme('colors.brown[11]'), + code: { + 'background-color': theme('colors.gray.3'), + padding: theme('spacing.1'), + 'border-radius': theme('borderRadius.DEFAULT'), + }, + }, + }, + }), + width: { + thin: '2px', + }, + }, + }, + plugins: [ + require('@tailwindcss/typography'), + ], +}; diff --git a/web/tsconfig.json b/web/tsconfig.json index 13d8736..e9e1143 100644 --- a/web/tsconfig.json +++ b/web/tsconfig.json @@ -1,3 +1,6 @@ { - "extends": "astro/tsconfigs/strict", -} + "extends": "astro/tsconfigs/strictest", + "compilerOptions": { + "strictNullChecks": true + } +} \ No newline at end of file