diff --git a/package.json b/package.json index 8991086..566d6f7 100644 --- a/package.json +++ b/package.json @@ -15,13 +15,13 @@ "dependencies": { "@astrojs/mdx": "^4.2.6", "@astrojs/partytown": "^2.1.4", - "@astrojs/rss": "^4.0.11", "@astrojs/sitemap": "^3.3.1", "@waline/client": "^3.5.7", - "astro": "^5.7.11", + "astro": "^5.7.12", "astro-og-canvas": "^0.7.0", "astro-robots-txt": "^1.0.0", "canvaskit-wasm": "^0.40.0", + "feed": "^5.0.0", "katex": "^0.16.22", "markdown-it": "^14.1.0", "mdast-util-to-string": "^4.0.0", @@ -40,18 +40,18 @@ "@antfu/eslint-config": "^4.13.0", "@astrojs/check": "^0.9.4", "@types/markdown-it": "^14.1.2", - "@types/node": "^22.15.15", + "@types/node": "^22.15.17", "@types/sanitize-html": "^2.16.0", - "@unocss/eslint-plugin": "66.1.0", - "@unocss/preset-attributify": "66.1.0", - "@unocss/reset": "66.1.0", + "@unocss/eslint-plugin": "66.1.1", + "@unocss/preset-attributify": "66.1.1", + "@unocss/reset": "66.1.1", "astro-eslint-parser": "^1.2.2", "eslint": "^9.26.0", "eslint-plugin-astro": "^1.3.1", "lint-staged": "^15.5.2", "sharp": "^0.34.1", "typescript": "~5.8.3", - "unocss": "66.1.0", + "unocss": "66.1.1", "unocss-preset-theme": "^0.14.1" }, "lint-staged": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f4d8b2e..aa3b657 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,13 +10,10 @@ importers: dependencies: '@astrojs/mdx': specifier: ^4.2.6 - version: 4.2.6(astro@5.7.11(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.3)(rollup@4.40.2)(terser@5.39.0)(typescript@5.8.3)(yaml@2.7.1)) + version: 4.2.6(astro@5.7.12(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.29.3)(rollup@4.40.2)(terser@5.39.0)(typescript@5.8.3)(yaml@2.7.1)) '@astrojs/partytown': specifier: ^2.1.4 version: 2.1.4 - '@astrojs/rss': - specifier: ^4.0.11 - version: 4.0.11 '@astrojs/sitemap': specifier: ^3.3.1 version: 3.3.1 @@ -24,17 +21,20 @@ importers: specifier: ^3.5.7 version: 3.5.7(typescript@5.8.3) astro: - specifier: ^5.7.11 - version: 5.7.11(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.3)(rollup@4.40.2)(terser@5.39.0)(typescript@5.8.3)(yaml@2.7.1) + specifier: ^5.7.12 + version: 5.7.12(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.29.3)(rollup@4.40.2)(terser@5.39.0)(typescript@5.8.3)(yaml@2.7.1) astro-og-canvas: specifier: ^0.7.0 - version: 0.7.0(astro@5.7.11(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.3)(rollup@4.40.2)(terser@5.39.0)(typescript@5.8.3)(yaml@2.7.1)) + version: 0.7.0(astro@5.7.12(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.29.3)(rollup@4.40.2)(terser@5.39.0)(typescript@5.8.3)(yaml@2.7.1)) astro-robots-txt: specifier: ^1.0.0 version: 1.0.0 canvaskit-wasm: specifier: ^0.40.0 version: 0.40.0 + feed: + specifier: ^5.0.0 + version: 5.0.0 katex: specifier: ^0.16.22 version: 0.16.22 @@ -77,7 +77,7 @@ importers: devDependencies: '@antfu/eslint-config': specifier: ^4.13.0 - version: 4.13.0(@typescript-eslint/utils@8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3))(@unocss/eslint-plugin@66.1.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3))(@vue/compiler-sfc@3.5.13)(astro-eslint-parser@1.2.2)(eslint-plugin-astro@1.3.1(eslint@9.26.0(jiti@2.4.2)))(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3)(vitest@3.1.1(@types/debug@4.1.12)(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1)) + version: 4.13.0(@typescript-eslint/utils@8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3))(@unocss/eslint-plugin@66.1.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3))(@vue/compiler-sfc@3.5.13)(astro-eslint-parser@1.2.2)(eslint-plugin-astro@1.3.1(eslint@9.26.0(jiti@2.4.2)))(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3)(vitest@3.1.1(@types/debug@4.1.12)(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1)) '@astrojs/check': specifier: ^0.9.4 version: 0.9.4(typescript@5.8.3) @@ -85,20 +85,20 @@ importers: specifier: ^14.1.2 version: 14.1.2 '@types/node': - specifier: ^22.15.15 - version: 22.15.15 + specifier: ^22.15.17 + version: 22.15.17 '@types/sanitize-html': specifier: ^2.16.0 version: 2.16.0 '@unocss/eslint-plugin': - specifier: 66.1.0 - version: 66.1.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) + specifier: 66.1.1 + version: 66.1.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) '@unocss/preset-attributify': - specifier: 66.1.0 - version: 66.1.0 + specifier: 66.1.1 + version: 66.1.1 '@unocss/reset': - specifier: 66.1.0 - version: 66.1.0 + specifier: 66.1.1 + version: 66.1.1 astro-eslint-parser: specifier: ^1.2.2 version: 1.2.2 @@ -118,11 +118,11 @@ importers: specifier: ~5.8.3 version: 5.8.3 unocss: - specifier: 66.1.0 - version: 66.1.0(postcss@8.5.3)(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1))(vue@3.5.13(typescript@5.8.3)) + specifier: 66.1.1 + version: 66.1.1(postcss@8.5.3)(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1))(vue@3.5.13(typescript@5.8.3)) unocss-preset-theme: specifier: ^0.14.1 - version: 0.14.1(@unocss/core@66.1.0) + version: 0.14.1(@unocss/core@66.1.1) packages: @@ -225,9 +225,6 @@ packages: resolution: {integrity: sha512-GilTHKGCW6HMq7y3BUv9Ac7GMe/MO9gi9GW62GzKtth0SwukCu/qp2wLiGpEujhY+VVhaG9v7kv/5vFzvf4NYw==} engines: {node: ^18.17.1 || ^20.3.0 || >=22.0.0} - '@astrojs/rss@4.0.11': - resolution: {integrity: sha512-3e3H8i6kc97KGnn9iaZBJpIkdoQi8MmR5zH5R+dWsfCM44lLTszOqy1OBfGGxDt56mpQkYVtZJWoxMyWuUZBfw==} - '@astrojs/sitemap@3.3.1': resolution: {integrity: sha512-GRnDUCTviBSNfXJ0Jmur+1/C+z3g36jy79VyYggfe1uNyEYSTcmAfTTCmbytrRvJRNyJJnSfB/77Gnm9PiXRRg==} @@ -778,8 +775,8 @@ packages: '@mdx-js/mdx@3.1.0': resolution: {integrity: sha512-/QxEhPAvGwbQmy1Px8F899L5Uc2KZ6JtXwlCgJmjSTBedwOZkByYcBG4GceIGPXRDsmfxhHazuS+hlOShRLeDw==} - '@modelcontextprotocol/sdk@1.11.0': - resolution: {integrity: sha512-k/1pb70eD638anoi0e8wUGAlbMJXyvdV4p62Ko+EZ7eBe1xMx8Uhak1R5DgfoofsK5IBBnRwsYGTaLZl+6/+RQ==} + '@modelcontextprotocol/sdk@1.11.1': + resolution: {integrity: sha512-9LfmxKTb1v+vUS1/emSk1f5ePmTLkb9Le9AxOB5T0XM59EUumwcS45z05h7aiZx3GI0Bl7mjb3FMEglYj+acuQ==} engines: {node: '>=18'} '@napi-rs/wasm-runtime@0.2.9': @@ -811,8 +808,8 @@ packages: '@polka/url@1.0.0-next.29': resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} - '@quansync/fs@0.1.2': - resolution: {integrity: sha512-ezIadUb1aFhwJLd++WVqVpi9rnlX8vnd4ju7saPhwLHJN1mJgOv0puePTGV+FbtSnWtwoHDT8lAm4kagDZmpCg==} + '@quansync/fs@0.1.3': + resolution: {integrity: sha512-G0OnZbMWEs5LhDyqy2UL17vGhSVHkQIfVojMtEWVenvj0V5S84VBgy86kJIuNsGDp2p7sTKlpSIpBUWdC35OKg==} engines: {node: '>=20.0.0'} '@qwik.dev/partytown@0.11.0': @@ -974,6 +971,9 @@ packages: '@types/estree@1.0.7': resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} + '@types/fontkit@2.0.8': + resolution: {integrity: sha512-wN+8bYxIpJf+5oZdrdtaX04qUuWHcKxcDEgRS9Qm9ZClSHjzEn13SxUC+5eRM+4yXIeTYk8mTzLAWGF64847ew==} + '@types/hast@3.0.4': resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} @@ -1007,8 +1007,8 @@ packages: '@types/node@17.0.45': resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} - '@types/node@22.15.15': - resolution: {integrity: sha512-R5muMcZob3/Jjchn5LcO8jdKwSCbzqmPB6ruBxMcf9kbxtniZHP327s6C37iOfuw8mbKK3cAQa7sEl7afLrQ8A==} + '@types/node@22.15.17': + resolution: {integrity: sha512-wIX2aSZL5FE+MR0JlvF87BNVrtFWf6AE6rxSE9X7OwnVvoyCQjpzSRJ+M87se/4QCkCiebQAqrJ0y6fwIyi7nw==} '@types/sanitize-html@2.16.0': resolution: {integrity: sha512-l6rX1MUXje5ztPT0cAFtUayXF06DqPhRyfVXareEN5gGCFaP/iwsxIyKODr9XDhfxPpN6vXUFNfo5kZMXCxBtw==} @@ -1075,100 +1075,100 @@ packages: '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} - '@unocss/astro@66.1.0': - resolution: {integrity: sha512-lZmA794RA0D1FQzAef+obM4AKTG1UcQRLexzmIDVTd1CMz847GArUjI7NsOTV0aIVzv9pA18bnHS47ycQsDzuQ==} + '@unocss/astro@66.1.1': + resolution: {integrity: sha512-/wteVem8orDq5B4xhAol81WcK1eEwg6FCeWZhtWnP5u/1e0zI5h1rLTbyzb+qqXVNcGgqUo/jSYLLJ+dNQa99g==} peerDependencies: vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 peerDependenciesMeta: vite: optional: true - '@unocss/cli@66.1.0': - resolution: {integrity: sha512-J+2E01hmVs4qJMILfF4Mn8oDIlhQjhqjflknRFGkO9bxJHLPizqHxuO4NG/XypQsQuEGLTG/xWb7cEa20g/L0A==} + '@unocss/cli@66.1.1': + resolution: {integrity: sha512-1bZ+iQJNt21bkBK+kmZymqSLt2W3zpawlx3w9SvQPuOy4xK8B6HkKaUcBnr9Wy3MymrI5Qwccr5f4vXweBkAxQ==} engines: {node: '>=14'} hasBin: true - '@unocss/config@66.1.0': - resolution: {integrity: sha512-+ha33SKD6zmkwEQU2EvI83ceYeGKJYUWP7MpR/k5rCy6Tcmn2ecP5ZPUWO4OhUIwfc3b+L5LrC14Q7bMOyQ7ig==} + '@unocss/config@66.1.1': + resolution: {integrity: sha512-Fg4sRw5dncNHxh/SM6guRzAveBI1FErw2ncb70Qe0LzCY7+IfUqrOBep/HIHP7NA1Mcj2JxHlM61ITLqrcYKpw==} engines: {node: '>=14'} '@unocss/core@0.63.6': resolution: {integrity: sha512-Q4QPgJ271Up89+vIqqOKgtdCKkFpHqvHN8W1LUlKPqtYnOvVYaOIVNAZowaIdEhPuc83yLc6Tg2+7riK18QKEw==} - '@unocss/core@66.1.0': - resolution: {integrity: sha512-BKnWrzy05uACXfkE/rqQegj5cvXcIP+eE7CHwSwKpyWNlY9bRsPa7BA5t4WOQMGxhYeVJnZ1ELp8PqzYD6TtWg==} + '@unocss/core@66.1.1': + resolution: {integrity: sha512-EOewEnipyB7Y6ne0YQmxdCG1hbMjYJ7oPMeHKfQuCZz60DPzkYwV6zVMa35ySMs1xljb/vFTHVFcJA8du3i8XA==} - '@unocss/eslint-plugin@66.1.0': - resolution: {integrity: sha512-CTIVMFxVs8cuymblDoPQsjrq75NSGtPP5kRLZ08B0Dhn30g8/rAXuxN5/D/jZ4HSc4FQGZwnIKM7TyeBlNpFaw==} + '@unocss/eslint-plugin@66.1.1': + resolution: {integrity: sha512-WkcyScjl3+6ERXCY/HBlBQJU/45HbRaklHc2u5F1Rdr1Pam/Fe90OnC93SB1oH7wwKmvE4vyP9dFQFrYVdUANg==} engines: {node: '>=14'} - '@unocss/extractor-arbitrary-variants@66.1.0': - resolution: {integrity: sha512-Xv5484j0aPERkPxY2j5V5pzGSVOp+/rsweKr6UFKnhAQSfSc0b4Z8FJhliNehZCLIzpVwzRrh6JIb3LzwHcJSw==} + '@unocss/extractor-arbitrary-variants@66.1.1': + resolution: {integrity: sha512-hDbdXm2+LjQ18zkUniU6tCGdyBHxnMZ0M2LFF21iGEbDvK3ukX4uEVAhzASEmhkEE0nULyEJg0HkU4CRNBupBg==} - '@unocss/inspector@66.1.0': - resolution: {integrity: sha512-qH2E7i61AGckC4jB9KBxHT1xKMC3aQ1th/9MYiu7CwhUWfTtdUuPYOjSj5DNZVovQH6HzgyFiQUVX/BvV2wHnQ==} + '@unocss/inspector@66.1.1': + resolution: {integrity: sha512-112uYliXR7VLYqdPfDWy/cL65An36IabFL7xU9dRPBDYmlB5qyVks9l5Sqd8uMafsZYjbMhpkjPRkXTmLMieEw==} - '@unocss/postcss@66.1.0': - resolution: {integrity: sha512-qJoeAdZsxgX4DKQvjzqtKWt4gRPX6LOcr7DeyEBIpCD84FNqUdypeLq8heHzlfhKpDNC3MPDzsMemJeam3Zjsg==} + '@unocss/postcss@66.1.1': + resolution: {integrity: sha512-+CTeYbUGDk8ESrwxRN6wkaIAJYfJekt7NvUSp1us9zws+2Ev3pH7GXztbGmTz8HCkSqLB/3MOQ6sIpviS1A7/Q==} engines: {node: '>=14'} peerDependencies: postcss: ^8.4.21 - '@unocss/preset-attributify@66.1.0': - resolution: {integrity: sha512-Jy7hePNaEgw+6WNR01hnYuDEO3PzHCcc4kcI+OSvKQLdwVLTz3vxLj4042KxxtIEWIxYWjyVef/EK4vqq0R9ww==} + '@unocss/preset-attributify@66.1.1': + resolution: {integrity: sha512-PQC0L5CVt8JRCPBHWX1YD/XmGVWT5HZLa3NHZkl2nezoZNAiSSmwe9f5kq+bZDUZYvtbAY6jltF+G4rUAdWvJA==} - '@unocss/preset-icons@66.1.0': - resolution: {integrity: sha512-vyC5X0bPUCHs9lDJA40yoaCz6V4vQVOzt86hly46VVMIsW59xgfoTnHWEzxOeS8+UoMuBSN8WZO+CeCTToaaWQ==} + '@unocss/preset-icons@66.1.1': + resolution: {integrity: sha512-F8NZKJfGzlv7tCxbo5cDXouxm1azKMzGOV11zbDTuZFDacyH5WprQ9zNMffUdUuVDy+rwAN+OoR0GEyggt4zww==} - '@unocss/preset-mini@66.1.0': - resolution: {integrity: sha512-UqdRWNaUOMOM4eAYYvAR0bqiqVZv/5t4wtlTNjLNpyIjJ1KLmVxSmcyyuxMbktcG5I6U6WIB3lTrqxMd0xmEyw==} + '@unocss/preset-mini@66.1.1': + resolution: {integrity: sha512-VRv1BWqnKaDQZb4EGZ6bV03+jLios9R8CmlOKAjr9AIAUuZv3OKP7LoSA9Jo0bci1wQUdHxNs8IvD2c1mDz+Pw==} - '@unocss/preset-tagify@66.1.0': - resolution: {integrity: sha512-u0uQnjOjggNyxsAgGbfcE87iiIKTlVwaiL4vWGWvYtelmQw6R/JqTta/6B3KGJYyN+1DL7/Q7qxQ96ErDiM9FA==} + '@unocss/preset-tagify@66.1.1': + resolution: {integrity: sha512-cC4MjyRVu3w4xxdlvz+mrkElNEYJpgCx/HVQehK9aXDBP9L9NgpEr+7Mqefhv5ES4a2U82MPNSElyFIwm3bOUw==} - '@unocss/preset-typography@66.1.0': - resolution: {integrity: sha512-Kd5kdwsLpRGibcLFBhtDS5uTmyRyNnkMPnqRKAcDgGsqDlcZKpMDxsU3TC0v99q9khn0RXP21kT9Rq1v0f/fQA==} + '@unocss/preset-typography@66.1.1': + resolution: {integrity: sha512-FB8leh/TANJB7U8sUuEG0pM+Nqhw65A1k+xJEXlYKAbfIdUN6mGNvFirh6c2WJXUg6rHe06l//TZAAvwJiS29Q==} - '@unocss/preset-uno@66.1.0': - resolution: {integrity: sha512-dmm4VtMMvjb6VnGfqdq8WiQSOsmJpq2L3Ha2OxpjJybMPv9cTYPxgnul2X6LcrmfeLk1uzI7EYyf/HXYysF+Hg==} + '@unocss/preset-uno@66.1.1': + resolution: {integrity: sha512-2gfayXo7He9ecCIp4KzpRpCjc6bFtukAahdLf5WoW66GRxoTDAsOuWQitG+B2IiExIX0fci8uahFudMNyLpjMA==} - '@unocss/preset-web-fonts@66.1.0': - resolution: {integrity: sha512-MSJpGGTbeLyERzKvIgWgMrVLtiJv3MZ6/+tLYtWFdYoeFZx4Ybmhp9/G6IxEot0fMXm+rMpL/wNvdZ3V+Y/37Q==} + '@unocss/preset-web-fonts@66.1.1': + resolution: {integrity: sha512-vVjidprhFWsZ0ClRIfGhH3evsdtDgXPSoyv8MlN8dP5RqkpH817h5PqmInxHkYeC5Mg/HsUy5HA0NryBQix0vQ==} - '@unocss/preset-wind3@66.1.0': - resolution: {integrity: sha512-dZBC/MPKgGfLKwdZprhNURAHDD9MEiS9R+NGxhugM3IDlDDf+RgRHtGHkdVNm7Cq9J++Kf1mcn7RDwGiGMwdlA==} + '@unocss/preset-wind3@66.1.1': + resolution: {integrity: sha512-Z8SqXaubPJHltD0+dneYei0spxH+spzGNiOWI7qffsByxvc6B/kOdJFOhVWE5DhYO33KJWyGxZdXzCq7Xxdm9Q==} - '@unocss/preset-wind4@66.1.0': - resolution: {integrity: sha512-Kcaqn8AR0kXktjoJVoQg+XE8Q9OxRKQjI2e43e/YyF96tgPZent+Dqe3RwIWXS4Lom4ZZMnpXhz4CkWZZegSTQ==} + '@unocss/preset-wind4@66.1.1': + resolution: {integrity: sha512-p7YU0xcYF/+DUcsV//QkrXVEvORefSmXNOHnZ3HqawWdOABQJD/pu3QMk64jnEdrjQg07s4Wd1Zh5DAhSXFmLw==} - '@unocss/preset-wind@66.1.0': - resolution: {integrity: sha512-gYuWMA8zf1D4QgaSZDC/29oH0ohDsgcvN2S6ILIHjqbXGwog0nWHzS6zR426mqUSYS0yOABX+HDl82mU3mfSjQ==} + '@unocss/preset-wind@66.1.1': + resolution: {integrity: sha512-+C66yMgJe6/Xu3ZoP+8XMqL5N3RkLIZVVbVXtnhSvCF8qd4rJ+d4/odeQ8M/WUcQXSysIckkDfnYC2FGSTEakw==} - '@unocss/reset@66.1.0': - resolution: {integrity: sha512-SFTTmwGwI+n64bHOByvxbXQdhZsz109HgynE2PC2CUhHSovj5K9xW/MX7AYPZjY8U9AfqaaPvg/7ciZ6Z44CvA==} + '@unocss/reset@66.1.1': + resolution: {integrity: sha512-WrI3sStMd/EXTcb3SaTVH10Wc9NKutW4+/HktQy470wEpncXdvihrXgCYwJH6LEEL4KOto3o+KKSD5xenWE7Aw==} '@unocss/rule-utils@0.63.6': resolution: {integrity: sha512-moeDEq5d9mB8gSYeoqHMkXWWekaFFdhg7QCuwwCbxCc+NPMOgGkmfAoafz+y2tdvK7pEuT191RWOiHQ0MkA5oQ==} engines: {node: '>=14'} - '@unocss/rule-utils@66.1.0': - resolution: {integrity: sha512-MSjXKScH53fL05yN8dercMFGDiTnwOb57luuydB0AxNqzYf1qOMFShP8D7zoZZ55wFvjbkXLyXBc4khD83l0gw==} + '@unocss/rule-utils@66.1.1': + resolution: {integrity: sha512-a7xe3FsvsI6T6u8QtXcQF22jnElB68X92aHjuSRt512gRjhhu/5kSzLJbMkv9RsclHJbmjnz6OUkk/mlTTxcFg==} engines: {node: '>=14'} - '@unocss/transformer-attributify-jsx@66.1.0': - resolution: {integrity: sha512-7EDOnu6A7D11uFCjcQ7RNXTPbLoyYDY3FIVkxS+Wh/dfBWHbMT9B08Y88Be6zD12TJ/yy0HufSmbpCsqki7QpA==} + '@unocss/transformer-attributify-jsx@66.1.1': + resolution: {integrity: sha512-HE/O9xdPLrf20ZynvYsJOUwPQagExDUQSVdo9zYPwoUQ7O+Ep5uwRBp1vpT/suZfU87RwWSvKSFOHmFoKiJBCA==} - '@unocss/transformer-compile-class@66.1.0': - resolution: {integrity: sha512-AOFQ041eCYSMOoJETSMerD0Ub4gAvQ5vhjsffwlanlR48U4hJvSoDFe0jdw+zKetKNaDoWOKql8u4OBscyYs4g==} + '@unocss/transformer-compile-class@66.1.1': + resolution: {integrity: sha512-tptWeOEaR56XNLeJy+MtoTagYCH5giRYrlaOdQPX57NDnRqRB0KJYHew2YpgH6j6eZ1WbQ4WK8j1PzAmr1FVgg==} - '@unocss/transformer-directives@66.1.0': - resolution: {integrity: sha512-BuNwjERcODy8rlgPRQ1pZWBHqN1ZZeHSKUhXixtdNfWWMwmrdJTZghDPFQXs0o7eqoxle78+cqjnnRncTyPxmQ==} + '@unocss/transformer-directives@66.1.1': + resolution: {integrity: sha512-qj2oUc9P+cY6PD+vTmbyb830GTofKm1IMeT+lhH4eyMX3lpfbDxj1LTjyJzouhK8s5VD56gWXx8wFdTuaEQ2Ww==} - '@unocss/transformer-variant-group@66.1.0': - resolution: {integrity: sha512-RNOlI8zqVEmEjsKBVLwXSaDRNnONBPaI0i7wug6GTWcvtX16EE7+g2fveLDeYHWqbbyXjqjo7KuzB4aHc7pB3w==} + '@unocss/transformer-variant-group@66.1.1': + resolution: {integrity: sha512-opU9y9c6iGUtTXPa+bDfkihSAth+5PVO9hLbPWlDIiN6mDF7WHzAbnhg0Q+FixjAI+n772XWKoLdrPn3yM2NZA==} - '@unocss/vite@66.1.0': - resolution: {integrity: sha512-RLWLbHutHnHU1E0iXv9xuqvkOQb8sCkafKqEvQw+Ez5QgQNmg9pOc/ymmKX39/j1ENuSp2XldCJP370obBC4Pw==} + '@unocss/vite@66.1.1': + resolution: {integrity: sha512-+ddMVpMxvm+2r8Je3YJRGYiZ/p/7LPD69VKT3vjFG3lT3IbfXtt18q6kYwBi+9lcnI68qgh3/s4qXQ2Q/iX5NQ==} peerDependencies: vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 @@ -1470,8 +1470,8 @@ packages: astro-robots-txt@1.0.0: resolution: {integrity: sha512-6JQSLid4gMhoWjOm85UHLkgrw0+hHIjnJVIUqxjU2D6feKlVyYukMNYjH44ZDZBK1P8hNxd33PgWlHzCASvedA==} - astro@5.7.11: - resolution: {integrity: sha512-9qRVwp8pue3isddLBnTexJsmKFpmms9Fo7Ss+3yrC0aINvbHKpD7q6qf52BtfQEk2xJgyx3SQy3dUsuD90sEqQ==} + astro@5.7.12: + resolution: {integrity: sha512-UQOItiZz2hcv9PlHTQ6dNqFDIVNPnmwk6eyAjJqPE9O8EDHZK2JKtTRD0CBFN2Uqr0RE0TWP2gqDpLfsa5dJEA==} engines: {node: ^18.17.1 || ^20.3.0 || >=22.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0'} hasBin: true @@ -1853,8 +1853,8 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - electron-to-chromium@1.5.150: - resolution: {integrity: sha512-rOOkP2ZUMx1yL4fCxXQKDHQ8ZXwisb2OycOQVKHgvB3ZI4CvehOd4y2tfnnLDieJ3Zs1RL1Dlp3cMkyIn7nnXA==} + electron-to-chromium@1.5.151: + resolution: {integrity: sha512-Rl6uugut2l9sLojjS4H4SAr3A4IgACMLgpuEMPYCVcKydzfyPrn5absNRju38IhQOf/NwjJY8OGWjlteqYeBCA==} emmet@2.4.11: resolution: {integrity: sha512-23QPJB3moh/U9sT4rQzGgeyyGIrcM+GH5uVYg2C6wZIxAIJq7Ng3QLT79tl8FUwDXhyq9SusfknOrofAKqvgyQ==} @@ -1991,8 +1991,8 @@ packages: peerDependencies: eslint: '>=8' - eslint-plugin-import-x@4.11.0: - resolution: {integrity: sha512-NAaYY49342gj09QGvwnFFl5KcD5aLzjAz97Lo+upnN8MzjEGSIlmL5sxCYGqtIeMjw8fSRDFZIp2xjRLT+yl4Q==} + eslint-plugin-import-x@4.11.1: + resolution: {integrity: sha512-CiqREASJRnhwCB0NujkTdo4jU+cJAnhQrd4aCnWC1o+rYWIWakVbyuzVbnCriUUSLAnn5CoJ2ob36TEgNzejBQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -2009,8 +2009,8 @@ packages: peerDependencies: eslint: '>=6.0.0' - eslint-plugin-n@17.17.0: - resolution: {integrity: sha512-2VvPK7Mo73z1rDFb6pTvkH6kFibAmnTubFq5l83vePxu0WiY1s0LOtj2WHb6Sa40R3w4mnh8GFYbHBQyMlotKw==} + eslint-plugin-n@17.18.0: + resolution: {integrity: sha512-hvZ/HusueqTJ7VDLoCpjN0hx4N4+jHIWTXD4TMLHy9F23XkDagR9v+xQWRWR57yY55GPF8NnD4ox9iGTxirY8A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: '>=8.23.0' @@ -2157,8 +2157,8 @@ packages: resolution: {integrity: sha512-VARTJ9CYeuQYb0pZEPbzi740OWFgpHe7AYJ2WFZVnUDUQp5Dk2yJUgF36YsZ81cOyxT0QxmXD2EQpapAouzWVA==} engines: {node: '>=18.0.0'} - eventsource@3.0.6: - resolution: {integrity: sha512-l19WpE2m9hSuyP06+FbuUUf1G+R0SFLrtQfbRb9PRr+oimOfxQhgGCbVaXg5IvZyyTThJsxh6L/srkMiCeBPDA==} + eventsource@3.0.7: + resolution: {integrity: sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==} engines: {node: '>=18.0.0'} execa@8.0.1: @@ -2201,10 +2201,6 @@ packages: fast-uri@3.0.6: resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} - fast-xml-parser@4.5.3: - resolution: {integrity: sha512-RKihhV+SHsIUGXObeVy9AXiBbFwkVk7Syp8XgwN5U3JV416+Gwp/GO9i0JYKmikykgz/UHRrrV4ROuZEo/T0ig==} - hasBin: true - fastq@1.19.1: resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} @@ -2219,6 +2215,10 @@ packages: picomatch: optional: true + feed@5.0.0: + resolution: {integrity: sha512-b+xl8kQ/bxInBKTe3GLCGDFU45kFiDSIEEdDUAUGGThN1Jqpx+7uFb95NEPjI1JAjXy2iEFPzxHsK2rIEyJibw==} + engines: {node: '>=20', pnpm: '>=10'} + file-entry-cache@8.0.0: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} @@ -2254,6 +2254,9 @@ packages: resolution: {integrity: sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==} engines: {node: '>=8'} + fontace@0.3.0: + resolution: {integrity: sha512-czoqATrcnxgWb/nAkfyIrRp6Q8biYj7nGnL6zfhTcX+JKKpWHFBnb8uNMw/kZr7u++3Y3wYSYoZgHkCcsuBpBg==} + fontkit@2.0.4: resolution: {integrity: sha512-syetQadaUEDNdxdugga9CpEYVaQIxOwk7GlwZWWZ19//qW4zE5bknOKeMBDYAASwnpaSHKJITRLMF9m1fp3s6g==} @@ -2409,8 +2412,8 @@ packages: htmlparser2@8.0.2: resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} - http-cache-semantics@4.1.1: - resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + http-cache-semantics@4.2.0: + resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} http-errors@2.0.0: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} @@ -3246,8 +3249,8 @@ packages: property-information@6.5.0: resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} - property-information@7.0.0: - resolution: {integrity: sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==} + property-information@7.1.0: + resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} @@ -3625,9 +3628,6 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - strnum@1.1.2: - resolution: {integrity: sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==} - style-to-js@1.1.16: resolution: {integrity: sha512-/Q6ld50hKYPH3d/r6nr117TZkHR0w0kGGIVfpG9N6D8NymRPM9RqCUv4pRpJ62E5DqOYx2AFpbZMyCPnjQCnOw==} @@ -3823,11 +3823,11 @@ packages: peerDependencies: '@unocss/core': '>= 0.52.0' - unocss@66.1.0: - resolution: {integrity: sha512-2DDOx+CBRkpJHlfOW9+dPYF4OwK5zqDDAs97I+X+etAJ6n2x6eDOXCI0Oebdjh4Rd8HshDoXoFFRx6/nrHIBUg==} + unocss@66.1.1: + resolution: {integrity: sha512-GD/y7AsvbO6bG9Zu+5xf6UNIPyIwOUffTqLgFaWXHOqO6xXpbH9SWz2B+ATMdjwsRGr/JJHn3pLFo8lHGsHKsQ==} engines: {node: '>=14'} peerDependencies: - '@unocss/webpack': 66.1.0 + '@unocss/webpack': 66.1.1 vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 peerDependenciesMeta: '@unocss/webpack': @@ -4182,6 +4182,10 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + xml-js@1.6.11: + resolution: {integrity: sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==} + hasBin: true + xml-name-validator@4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -4258,7 +4262,7 @@ snapshots: '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 - '@antfu/eslint-config@4.13.0(@typescript-eslint/utils@8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3))(@unocss/eslint-plugin@66.1.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3))(@vue/compiler-sfc@3.5.13)(astro-eslint-parser@1.2.2)(eslint-plugin-astro@1.3.1(eslint@9.26.0(jiti@2.4.2)))(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3)(vitest@3.1.1(@types/debug@4.1.12)(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1))': + '@antfu/eslint-config@4.13.0(@typescript-eslint/utils@8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3))(@unocss/eslint-plugin@66.1.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3))(@vue/compiler-sfc@3.5.13)(astro-eslint-parser@1.2.2)(eslint-plugin-astro@1.3.1(eslint@9.26.0(jiti@2.4.2)))(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3)(vitest@3.1.1(@types/debug@4.1.12)(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1))': dependencies: '@antfu/install-pkg': 1.1.0 '@clack/prompts': 0.10.1 @@ -4267,7 +4271,7 @@ snapshots: '@stylistic/eslint-plugin': 4.2.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) '@typescript-eslint/eslint-plugin': 8.32.0(@typescript-eslint/parser@8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) '@typescript-eslint/parser': 8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) - '@vitest/eslint-plugin': 1.1.44(@typescript-eslint/utils@8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3)(vitest@3.1.1(@types/debug@4.1.12)(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1)) + '@vitest/eslint-plugin': 1.1.44(@typescript-eslint/utils@8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3)(vitest@3.1.1(@types/debug@4.1.12)(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1)) ansis: 3.17.0 cac: 6.7.14 eslint: 9.26.0(jiti@2.4.2) @@ -4276,10 +4280,10 @@ snapshots: eslint-merge-processors: 2.0.0(eslint@9.26.0(jiti@2.4.2)) eslint-plugin-antfu: 3.1.1(eslint@9.26.0(jiti@2.4.2)) eslint-plugin-command: 3.2.0(eslint@9.26.0(jiti@2.4.2)) - eslint-plugin-import-x: 4.11.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) + eslint-plugin-import-x: 4.11.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) eslint-plugin-jsdoc: 50.6.11(eslint@9.26.0(jiti@2.4.2)) eslint-plugin-jsonc: 2.20.0(eslint@9.26.0(jiti@2.4.2)) - eslint-plugin-n: 17.17.0(eslint@9.26.0(jiti@2.4.2)) + eslint-plugin-n: 17.18.0(eslint@9.26.0(jiti@2.4.2)) eslint-plugin-no-only-tests: 3.3.0 eslint-plugin-perfectionist: 4.12.3(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) eslint-plugin-pnpm: 0.3.1(eslint@9.26.0(jiti@2.4.2)) @@ -4298,7 +4302,7 @@ snapshots: vue-eslint-parser: 10.1.3(eslint@9.26.0(jiti@2.4.2)) yaml-eslint-parser: 1.3.0 optionalDependencies: - '@unocss/eslint-plugin': 66.1.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) + '@unocss/eslint-plugin': 66.1.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) astro-eslint-parser: 1.2.2 eslint-plugin-astro: 1.3.1(eslint@9.26.0(jiti@2.4.2)) transitivePeerDependencies: @@ -4380,12 +4384,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@astrojs/mdx@4.2.6(astro@5.7.11(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.3)(rollup@4.40.2)(terser@5.39.0)(typescript@5.8.3)(yaml@2.7.1))': + '@astrojs/mdx@4.2.6(astro@5.7.12(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.29.3)(rollup@4.40.2)(terser@5.39.0)(typescript@5.8.3)(yaml@2.7.1))': dependencies: '@astrojs/markdown-remark': 6.3.1 '@mdx-js/mdx': 3.1.0(acorn@8.14.1) acorn: 8.14.1 - astro: 5.7.11(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.3)(rollup@4.40.2)(terser@5.39.0)(typescript@5.8.3)(yaml@2.7.1) + astro: 5.7.12(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.29.3)(rollup@4.40.2)(terser@5.39.0)(typescript@5.8.3)(yaml@2.7.1) es-module-lexer: 1.7.0 estree-util-visit: 2.0.0 hast-util-to-html: 9.0.5 @@ -4408,11 +4412,6 @@ snapshots: dependencies: prismjs: 1.30.0 - '@astrojs/rss@4.0.11': - dependencies: - fast-xml-parser: 4.5.3 - kleur: 4.1.5 - '@astrojs/sitemap@3.3.1': dependencies: sitemap: 8.0.0 @@ -4900,12 +4899,12 @@ snapshots: - acorn - supports-color - '@modelcontextprotocol/sdk@1.11.0': + '@modelcontextprotocol/sdk@1.11.1': dependencies: content-type: 1.0.5 cors: 2.8.5 cross-spawn: 7.0.6 - eventsource: 3.0.6 + eventsource: 3.0.7 express: 5.1.0 express-rate-limit: 7.5.0(express@5.1.0) pkce-challenge: 5.0.0 @@ -4942,7 +4941,7 @@ snapshots: '@polka/url@1.0.0-next.29': {} - '@quansync/fs@0.1.2': + '@quansync/fs@0.1.3': dependencies: quansync: 0.2.10 @@ -5087,6 +5086,10 @@ snapshots: '@types/estree@1.0.7': {} + '@types/fontkit@2.0.8': + dependencies: + '@types/node': 22.15.17 + '@types/hast@3.0.4': dependencies: '@types/unist': 3.0.3 @@ -5118,7 +5121,7 @@ snapshots: '@types/node@17.0.45': {} - '@types/node@22.15.15': + '@types/node@22.15.17': dependencies: undici-types: 6.21.0 @@ -5128,7 +5131,7 @@ snapshots: '@types/sax@1.2.7': dependencies: - '@types/node': 22.15.15 + '@types/node': 22.15.17 '@types/unist@2.0.11': {} @@ -5215,22 +5218,22 @@ snapshots: '@ungap/structured-clone@1.3.0': {} - '@unocss/astro@66.1.0(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1))(vue@3.5.13(typescript@5.8.3))': + '@unocss/astro@66.1.1(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1))(vue@3.5.13(typescript@5.8.3))': dependencies: - '@unocss/core': 66.1.0 - '@unocss/reset': 66.1.0 - '@unocss/vite': 66.1.0(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1))(vue@3.5.13(typescript@5.8.3)) + '@unocss/core': 66.1.1 + '@unocss/reset': 66.1.1 + '@unocss/vite': 66.1.1(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1))(vue@3.5.13(typescript@5.8.3)) optionalDependencies: - vite: 6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1) + vite: 6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1) transitivePeerDependencies: - vue - '@unocss/cli@66.1.0': + '@unocss/cli@66.1.1': dependencies: '@ampproject/remapping': 2.3.0 - '@unocss/config': 66.1.0 - '@unocss/core': 66.1.0 - '@unocss/preset-uno': 66.1.0 + '@unocss/config': 66.1.1 + '@unocss/core': 66.1.1 + '@unocss/preset-uno': 66.1.1 cac: 6.7.14 chokidar: 3.6.0 colorette: 2.0.20 @@ -5241,21 +5244,21 @@ snapshots: tinyglobby: 0.2.13 unplugin-utils: 0.2.4 - '@unocss/config@66.1.0': + '@unocss/config@66.1.1': dependencies: - '@unocss/core': 66.1.0 + '@unocss/core': 66.1.1 unconfig: 7.3.2 '@unocss/core@0.63.6': {} - '@unocss/core@66.1.0': {} + '@unocss/core@66.1.1': {} - '@unocss/eslint-plugin@66.1.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3)': + '@unocss/eslint-plugin@66.1.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3)': dependencies: '@typescript-eslint/utils': 8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) - '@unocss/config': 66.1.0 - '@unocss/core': 66.1.0 - '@unocss/rule-utils': 66.1.0 + '@unocss/config': 66.1.1 + '@unocss/core': 66.1.1 + '@unocss/rule-utils': 66.1.1 magic-string: 0.30.17 synckit: 0.9.2 transitivePeerDependencies: @@ -5263,14 +5266,14 @@ snapshots: - supports-color - typescript - '@unocss/extractor-arbitrary-variants@66.1.0': + '@unocss/extractor-arbitrary-variants@66.1.1': dependencies: - '@unocss/core': 66.1.0 + '@unocss/core': 66.1.1 - '@unocss/inspector@66.1.0(vue@3.5.13(typescript@5.8.3))': + '@unocss/inspector@66.1.1(vue@3.5.13(typescript@5.8.3))': dependencies: - '@unocss/core': 66.1.0 - '@unocss/rule-utils': 66.1.0 + '@unocss/core': 66.1.1 + '@unocss/rule-utils': 66.1.1 colorette: 2.0.20 gzip-size: 6.0.0 sirv: 3.0.1 @@ -5278,112 +5281,112 @@ snapshots: transitivePeerDependencies: - vue - '@unocss/postcss@66.1.0(postcss@8.5.3)': + '@unocss/postcss@66.1.1(postcss@8.5.3)': dependencies: - '@unocss/config': 66.1.0 - '@unocss/core': 66.1.0 - '@unocss/rule-utils': 66.1.0 + '@unocss/config': 66.1.1 + '@unocss/core': 66.1.1 + '@unocss/rule-utils': 66.1.1 css-tree: 3.1.0 postcss: 8.5.3 tinyglobby: 0.2.13 - '@unocss/preset-attributify@66.1.0': + '@unocss/preset-attributify@66.1.1': dependencies: - '@unocss/core': 66.1.0 + '@unocss/core': 66.1.1 - '@unocss/preset-icons@66.1.0': + '@unocss/preset-icons@66.1.1': dependencies: '@iconify/utils': 2.3.0 - '@unocss/core': 66.1.0 + '@unocss/core': 66.1.1 ofetch: 1.4.1 transitivePeerDependencies: - supports-color - '@unocss/preset-mini@66.1.0': + '@unocss/preset-mini@66.1.1': dependencies: - '@unocss/core': 66.1.0 - '@unocss/extractor-arbitrary-variants': 66.1.0 - '@unocss/rule-utils': 66.1.0 + '@unocss/core': 66.1.1 + '@unocss/extractor-arbitrary-variants': 66.1.1 + '@unocss/rule-utils': 66.1.1 - '@unocss/preset-tagify@66.1.0': + '@unocss/preset-tagify@66.1.1': dependencies: - '@unocss/core': 66.1.0 + '@unocss/core': 66.1.1 - '@unocss/preset-typography@66.1.0': + '@unocss/preset-typography@66.1.1': dependencies: - '@unocss/core': 66.1.0 - '@unocss/preset-mini': 66.1.0 - '@unocss/rule-utils': 66.1.0 + '@unocss/core': 66.1.1 + '@unocss/preset-mini': 66.1.1 + '@unocss/rule-utils': 66.1.1 - '@unocss/preset-uno@66.1.0': + '@unocss/preset-uno@66.1.1': dependencies: - '@unocss/core': 66.1.0 - '@unocss/preset-wind3': 66.1.0 + '@unocss/core': 66.1.1 + '@unocss/preset-wind3': 66.1.1 - '@unocss/preset-web-fonts@66.1.0': + '@unocss/preset-web-fonts@66.1.1': dependencies: - '@unocss/core': 66.1.0 + '@unocss/core': 66.1.1 ofetch: 1.4.1 - '@unocss/preset-wind3@66.1.0': + '@unocss/preset-wind3@66.1.1': dependencies: - '@unocss/core': 66.1.0 - '@unocss/preset-mini': 66.1.0 - '@unocss/rule-utils': 66.1.0 + '@unocss/core': 66.1.1 + '@unocss/preset-mini': 66.1.1 + '@unocss/rule-utils': 66.1.1 - '@unocss/preset-wind4@66.1.0': + '@unocss/preset-wind4@66.1.1': dependencies: - '@unocss/core': 66.1.0 - '@unocss/extractor-arbitrary-variants': 66.1.0 - '@unocss/rule-utils': 66.1.0 + '@unocss/core': 66.1.1 + '@unocss/extractor-arbitrary-variants': 66.1.1 + '@unocss/rule-utils': 66.1.1 - '@unocss/preset-wind@66.1.0': + '@unocss/preset-wind@66.1.1': dependencies: - '@unocss/core': 66.1.0 - '@unocss/preset-wind3': 66.1.0 + '@unocss/core': 66.1.1 + '@unocss/preset-wind3': 66.1.1 - '@unocss/reset@66.1.0': {} + '@unocss/reset@66.1.1': {} '@unocss/rule-utils@0.63.6': dependencies: '@unocss/core': 0.63.6 magic-string: 0.30.17 - '@unocss/rule-utils@66.1.0': + '@unocss/rule-utils@66.1.1': dependencies: - '@unocss/core': 66.1.0 + '@unocss/core': 66.1.1 magic-string: 0.30.17 - '@unocss/transformer-attributify-jsx@66.1.0': + '@unocss/transformer-attributify-jsx@66.1.1': dependencies: - '@unocss/core': 66.1.0 + '@unocss/core': 66.1.1 - '@unocss/transformer-compile-class@66.1.0': + '@unocss/transformer-compile-class@66.1.1': dependencies: - '@unocss/core': 66.1.0 + '@unocss/core': 66.1.1 - '@unocss/transformer-directives@66.1.0': + '@unocss/transformer-directives@66.1.1': dependencies: - '@unocss/core': 66.1.0 - '@unocss/rule-utils': 66.1.0 + '@unocss/core': 66.1.1 + '@unocss/rule-utils': 66.1.1 css-tree: 3.1.0 - '@unocss/transformer-variant-group@66.1.0': + '@unocss/transformer-variant-group@66.1.1': dependencies: - '@unocss/core': 66.1.0 + '@unocss/core': 66.1.1 - '@unocss/vite@66.1.0(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1))(vue@3.5.13(typescript@5.8.3))': + '@unocss/vite@66.1.1(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1))(vue@3.5.13(typescript@5.8.3))': dependencies: '@ampproject/remapping': 2.3.0 - '@unocss/config': 66.1.0 - '@unocss/core': 66.1.0 - '@unocss/inspector': 66.1.0(vue@3.5.13(typescript@5.8.3)) + '@unocss/config': 66.1.1 + '@unocss/core': 66.1.1 + '@unocss/inspector': 66.1.1(vue@3.5.13(typescript@5.8.3)) chokidar: 3.6.0 magic-string: 0.30.17 pathe: 2.0.3 tinyglobby: 0.2.13 unplugin-utils: 0.2.4 - vite: 6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1) + vite: 6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1) transitivePeerDependencies: - vue @@ -5440,13 +5443,13 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.7.2': optional: true - '@vitest/eslint-plugin@1.1.44(@typescript-eslint/utils@8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3)(vitest@3.1.1(@types/debug@4.1.12)(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1))': + '@vitest/eslint-plugin@1.1.44(@typescript-eslint/utils@8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3)(vitest@3.1.1(@types/debug@4.1.12)(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1))': dependencies: '@typescript-eslint/utils': 8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) eslint: 9.26.0(jiti@2.4.2) optionalDependencies: typescript: 5.8.3 - vitest: 3.1.1(@types/debug@4.1.12)(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1) + vitest: 3.1.1(@types/debug@4.1.12)(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1) '@vitest/expect@3.1.1': dependencies: @@ -5456,13 +5459,13 @@ snapshots: tinyrainbow: 2.0.0 optional: true - '@vitest/mocker@3.1.1(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1))': + '@vitest/mocker@3.1.1(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1))': dependencies: '@vitest/spy': 3.1.1 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1) + vite: 6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1) optional: true '@vitest/pretty-format@3.1.1': @@ -5715,9 +5718,9 @@ snapshots: transitivePeerDependencies: - supports-color - astro-og-canvas@0.7.0(astro@5.7.11(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.3)(rollup@4.40.2)(terser@5.39.0)(typescript@5.8.3)(yaml@2.7.1)): + astro-og-canvas@0.7.0(astro@5.7.12(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.29.3)(rollup@4.40.2)(terser@5.39.0)(typescript@5.8.3)(yaml@2.7.1)): dependencies: - astro: 5.7.11(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.3)(rollup@4.40.2)(terser@5.39.0)(typescript@5.8.3)(yaml@2.7.1) + astro: 5.7.12(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.29.3)(rollup@4.40.2)(terser@5.39.0)(typescript@5.8.3)(yaml@2.7.1) canvaskit-wasm: 0.39.1 deterministic-object-hash: 2.0.2 entities: 4.5.0 @@ -5727,7 +5730,7 @@ snapshots: valid-filename: 4.0.0 zod: 3.24.4 - astro@5.7.11(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.3)(rollup@4.40.2)(terser@5.39.0)(typescript@5.8.3)(yaml@2.7.1): + astro@5.7.12(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.29.3)(rollup@4.40.2)(terser@5.39.0)(typescript@5.8.3)(yaml@2.7.1): dependencies: '@astrojs/compiler': 2.12.0 '@astrojs/internal-helpers': 0.6.1 @@ -5755,9 +5758,10 @@ snapshots: esbuild: 0.25.4 estree-walker: 3.0.3 flattie: 1.1.1 + fontace: 0.3.0 github-slugger: 2.0.0 html-escaper: 3.0.3 - http-cache-semantics: 4.1.1 + http-cache-semantics: 4.2.0 js-yaml: 4.1.0 kleur: 4.1.5 magic-string: 0.30.17 @@ -5780,8 +5784,8 @@ snapshots: unist-util-visit: 5.0.0 unstorage: 1.16.0 vfile: 6.0.3 - vite: 6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1) - vitefu: 1.0.6(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1)) + vite: 6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1) + vitefu: 1.0.6(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1)) xxhash-wasm: 1.1.0 yargs-parser: 21.1.1 yocto-spinner: 0.2.2 @@ -5893,7 +5897,7 @@ snapshots: browserslist@4.24.5: dependencies: caniuse-lite: 1.0.30001717 - electron-to-chromium: 1.5.150 + electron-to-chromium: 1.5.151 node-releases: 2.0.19 update-browserslist-db: 1.1.3(browserslist@4.24.5) @@ -6168,7 +6172,7 @@ snapshots: ee-first@1.1.1: {} - electron-to-chromium@1.5.150: {} + electron-to-chromium@1.5.151: {} emmet@2.4.11: dependencies: @@ -6321,7 +6325,7 @@ snapshots: eslint: 9.26.0(jiti@2.4.2) eslint-compat-utils: 0.5.1(eslint@9.26.0(jiti@2.4.2)) - eslint-plugin-import-x@4.11.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3): + eslint-plugin-import-x@4.11.1(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3): dependencies: '@typescript-eslint/utils': 8.32.0(eslint@9.26.0(jiti@2.4.2))(typescript@5.8.3) comment-parser: 1.4.1 @@ -6369,7 +6373,7 @@ snapshots: transitivePeerDependencies: - '@eslint/json' - eslint-plugin-n@17.17.0(eslint@9.26.0(jiti@2.4.2)): + eslint-plugin-n@17.18.0(eslint@9.26.0(jiti@2.4.2)): dependencies: '@eslint-community/eslint-utils': 4.7.0(eslint@9.26.0(jiti@2.4.2)) enhanced-resolve: 5.18.1 @@ -6500,7 +6504,7 @@ snapshots: '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 - '@modelcontextprotocol/sdk': 1.11.0 + '@modelcontextprotocol/sdk': 1.11.1 '@types/estree': 1.0.7 '@types/json-schema': 7.0.15 ajv: 6.12.6 @@ -6596,7 +6600,7 @@ snapshots: eventsource-parser@3.0.1: {} - eventsource@3.0.6: + eventsource@3.0.7: dependencies: eventsource-parser: 3.0.1 @@ -6671,10 +6675,6 @@ snapshots: fast-uri@3.0.6: {} - fast-xml-parser@4.5.3: - dependencies: - strnum: 1.1.2 - fastq@1.19.1: dependencies: reusify: 1.1.0 @@ -6687,6 +6687,10 @@ snapshots: optionalDependencies: picomatch: 4.0.2 + feed@5.0.0: + dependencies: + xml-js: 1.6.11 + file-entry-cache@8.0.0: dependencies: flat-cache: 4.0.1 @@ -6724,6 +6728,11 @@ snapshots: flattie@1.1.1: {} + fontace@0.3.0: + dependencies: + '@types/fontkit': 2.0.8 + fontkit: 2.0.4 + fontkit@2.0.4: dependencies: '@swc/helpers': 0.5.17 @@ -6849,7 +6858,7 @@ snapshots: '@types/unist': 3.0.3 devlop: 1.1.0 hastscript: 9.0.1 - property-information: 7.0.0 + property-information: 7.1.0 vfile: 6.0.3 vfile-location: 5.0.3 web-namespaces: 2.0.1 @@ -6895,7 +6904,7 @@ snapshots: mdast-util-mdx-expression: 2.0.1 mdast-util-mdx-jsx: 3.2.0 mdast-util-mdxjs-esm: 2.0.1 - property-information: 7.0.0 + property-information: 7.1.0 space-separated-tokens: 2.0.2 style-to-js: 1.1.16 unist-util-position: 5.0.0 @@ -6912,7 +6921,7 @@ snapshots: hast-util-whitespace: 3.0.0 html-void-elements: 3.0.0 mdast-util-to-hast: 13.2.0 - property-information: 7.0.0 + property-information: 7.1.0 space-separated-tokens: 2.0.2 stringify-entities: 4.0.4 zwitch: 2.0.4 @@ -6929,7 +6938,7 @@ snapshots: mdast-util-mdx-expression: 2.0.1 mdast-util-mdx-jsx: 3.2.0 mdast-util-mdxjs-esm: 2.0.1 - property-information: 7.0.0 + property-information: 7.1.0 space-separated-tokens: 2.0.2 style-to-js: 1.1.16 unist-util-position: 5.0.0 @@ -6967,7 +6976,7 @@ snapshots: '@types/hast': 3.0.4 comma-separated-tokens: 2.0.3 hast-util-parse-selector: 4.0.0 - property-information: 7.0.0 + property-information: 7.1.0 space-separated-tokens: 2.0.2 html-escaper@3.0.3: {} @@ -6981,7 +6990,7 @@ snapshots: domutils: 3.2.2 entities: 4.5.0 - http-cache-semantics@4.1.1: {} + http-cache-semantics@4.2.0: {} http-errors@2.0.0: dependencies: @@ -8042,7 +8051,7 @@ snapshots: property-information@6.5.0: {} - property-information@7.0.0: {} + property-information@7.1.0: {} proxy-addr@2.0.7: dependencies: @@ -8613,8 +8622,6 @@ snapshots: strip-json-comments@3.1.1: {} - strnum@1.1.2: {} - style-to-js@1.1.16: dependencies: style-to-object: 1.0.8 @@ -8733,7 +8740,7 @@ snapshots: unconfig@7.3.2: dependencies: - '@quansync/fs': 0.1.2 + '@quansync/fs': 0.1.3 defu: 6.1.4 jiti: 2.4.2 quansync: 0.2.10 @@ -8813,34 +8820,34 @@ snapshots: unist-util-is: 6.0.0 unist-util-visit-parents: 6.0.1 - unocss-preset-theme@0.14.1(@unocss/core@66.1.0): + unocss-preset-theme@0.14.1(@unocss/core@66.1.1): dependencies: - '@unocss/core': 66.1.0 + '@unocss/core': 66.1.1 '@unocss/rule-utils': 0.63.6 - unocss@66.1.0(postcss@8.5.3)(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1))(vue@3.5.13(typescript@5.8.3)): + unocss@66.1.1(postcss@8.5.3)(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1))(vue@3.5.13(typescript@5.8.3)): dependencies: - '@unocss/astro': 66.1.0(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1))(vue@3.5.13(typescript@5.8.3)) - '@unocss/cli': 66.1.0 - '@unocss/core': 66.1.0 - '@unocss/postcss': 66.1.0(postcss@8.5.3) - '@unocss/preset-attributify': 66.1.0 - '@unocss/preset-icons': 66.1.0 - '@unocss/preset-mini': 66.1.0 - '@unocss/preset-tagify': 66.1.0 - '@unocss/preset-typography': 66.1.0 - '@unocss/preset-uno': 66.1.0 - '@unocss/preset-web-fonts': 66.1.0 - '@unocss/preset-wind': 66.1.0 - '@unocss/preset-wind3': 66.1.0 - '@unocss/preset-wind4': 66.1.0 - '@unocss/transformer-attributify-jsx': 66.1.0 - '@unocss/transformer-compile-class': 66.1.0 - '@unocss/transformer-directives': 66.1.0 - '@unocss/transformer-variant-group': 66.1.0 - '@unocss/vite': 66.1.0(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1))(vue@3.5.13(typescript@5.8.3)) + '@unocss/astro': 66.1.1(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1))(vue@3.5.13(typescript@5.8.3)) + '@unocss/cli': 66.1.1 + '@unocss/core': 66.1.1 + '@unocss/postcss': 66.1.1(postcss@8.5.3) + '@unocss/preset-attributify': 66.1.1 + '@unocss/preset-icons': 66.1.1 + '@unocss/preset-mini': 66.1.1 + '@unocss/preset-tagify': 66.1.1 + '@unocss/preset-typography': 66.1.1 + '@unocss/preset-uno': 66.1.1 + '@unocss/preset-web-fonts': 66.1.1 + '@unocss/preset-wind': 66.1.1 + '@unocss/preset-wind3': 66.1.1 + '@unocss/preset-wind4': 66.1.1 + '@unocss/transformer-attributify-jsx': 66.1.1 + '@unocss/transformer-compile-class': 66.1.1 + '@unocss/transformer-directives': 66.1.1 + '@unocss/transformer-variant-group': 66.1.1 + '@unocss/vite': 66.1.1(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1))(vue@3.5.13(typescript@5.8.3)) optionalDependencies: - vite: 6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1) + vite: 6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1) transitivePeerDependencies: - postcss - supports-color @@ -8919,13 +8926,13 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite-node@3.1.1(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1): + vite-node@3.1.1(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1): dependencies: cac: 6.7.14 debug: 4.4.0 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1) + vite: 6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1) transitivePeerDependencies: - '@types/node' - jiti @@ -8941,7 +8948,7 @@ snapshots: - yaml optional: true - vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1): + vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1): dependencies: esbuild: 0.25.4 fdir: 6.4.4(picomatch@4.0.2) @@ -8950,21 +8957,21 @@ snapshots: rollup: 4.40.2 tinyglobby: 0.2.13 optionalDependencies: - '@types/node': 22.15.15 + '@types/node': 22.15.17 fsevents: 2.3.3 jiti: 2.4.2 lightningcss: 1.29.3 terser: 5.39.0 yaml: 2.7.1 - vitefu@1.0.6(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1)): + vitefu@1.0.6(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1)): optionalDependencies: - vite: 6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1) + vite: 6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1) - vitest@3.1.1(@types/debug@4.1.12)(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1): + vitest@3.1.1(@types/debug@4.1.12)(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1): dependencies: '@vitest/expect': 3.1.1 - '@vitest/mocker': 3.1.1(vite@6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1)) + '@vitest/mocker': 3.1.1(vite@6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1)) '@vitest/pretty-format': 3.1.3 '@vitest/runner': 3.1.1 '@vitest/snapshot': 3.1.1 @@ -8980,12 +8987,12 @@ snapshots: tinyexec: 0.3.2 tinypool: 1.0.2 tinyrainbow: 2.0.0 - vite: 6.3.5(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1) - vite-node: 3.1.1(@types/node@22.15.15)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1) + vite: 6.3.5(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1) + vite-node: 3.1.1(@types/node@22.15.17)(jiti@2.4.2)(lightningcss@1.29.3)(terser@5.39.0)(yaml@2.7.1) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 - '@types/node': 22.15.15 + '@types/node': 22.15.17 transitivePeerDependencies: - jiti - less @@ -9178,6 +9185,10 @@ snapshots: wrappy@1.0.2: {} + xml-js@1.6.11: + dependencies: + sax: 1.4.1 + xml-name-validator@4.0.0: {} xxhash-wasm@1.1.0: {} diff --git a/public/feeds/atom-style.xsl b/public/feeds/atom-style.xsl new file mode 100644 index 0000000..946b7ba --- /dev/null +++ b/public/feeds/atom-style.xsl @@ -0,0 +1,105 @@ + + + + + + + Web Feed + + + + + + + + This is a web feed, also known as an RSS feed. Subscribe by copying the URL from the address bar into your newsreader. + + + + + + + + + + + + + + + + + + + + + + Web Feed Preview + + + + + + + + Visit Website → + + + Recent Items + + + + + + + + + + + + Published: + + + + + + + + diff --git a/public/rss-style.xsl b/public/feeds/rss-style.xsl similarity index 100% rename from public/rss-style.xsl rename to public/feeds/rss-style.xsl diff --git a/src/components/Comments/Waline.astro b/src/components/Comments/Waline.astro index b2eafd8..e752c0d 100644 --- a/src/components/Comments/Waline.astro +++ b/src/components/Comments/Waline.astro @@ -69,128 +69,98 @@ document.addEventListener('astro:page-load', initWaline) #waline .wl-login-info { --at-apply: 'mt-0 mr-3' } - #waline .wl-avatar { --at-apply: 'border-none' } - #waline .wl-logout-btn { --at-apply: 'z-99' } - #waline .wl-login-nick:not(:has(img)) { --at-apply: 'leading-3.6 mt-1.4'; } - #waline .wl-panel { --at-apply: 'm-0 rounded border-secondary/25' } - #waline .wl-header { --at-apply: 'p-0'; } - #waline .wl-header-item { border-bottom: 1px solid var(--waline-border-color); } - #waline .wl-header label { --at-apply: 'text-3'; } - #waline .wl-header input { --at-apply: 'text-2.8'; } - #waline .wl-card, #waline .wl-header.item3 { --at-apply: 'border-b-0'; } - #waline .wl-card .wl-quote { --at-apply: 'border-is-none mt-4'; } - #waline .wl-editor { --at-apply: 'min-h-24'; } - #waline .wl-editor::placeholder { color: var(--waline-light-grey); } - #waline .wl-footer { --at-apply: 'm-2'; } - #waline .wl-info .wl-btn { --at-apply: 'rounded'; } - #waline .wl-text-number, #waline .wl-action[title="Markdown Guide"], #waline .wl-sort, #waline .wl-gallery::-webkit-scrollbar { --at-apply: 'hidden'; } - #waline .wl-emoji-popup { --at-apply: 'start-0 rounded border-secondary/25'; } - #waline .wl-emoji-popup .wl-tab-wrapper::-webkit-scrollbar { --at-apply: 'w-1.2'; } - #waline .wl-emoji-popup .wl-tab-wrapper::-webkit-scrollbar-thumb { background: oklch(var(--un-preset-theme-colors-secondary) / 0.25); } - #waline .wl-emoji-popup .wl-tab-wrapper::-webkit-scrollbar-track-piece { --at-apply: 'bg-transparent'; } - #waline .wl-gif-popup { --at-apply: 'border-secondary/25'; } - #waline .wl-gif-popup input { --at-apply: 'bg-background border-secondary/25'; } - #waline .wl-gif-popup input::placeholder { --at-apply: 'c-secondary/30 text-3.5'; } - #waline .wl-gallery { --at-apply: 'scrollbar-hidden'; } - #waline .wl-meta-head { --at-apply: 'pt-3 pb-2 px-0'; } - #waline .wl-card-item { --at-apply: 'px-0'; } - #waline .wl-user-avatar { --at-apply: 'mt-1'; } - #waline .wl-content p { --at-apply: 'leading-6 text-3.5'; } - #waline .wl-time { color: oklch(var(--un-preset-theme-colors-primary) / 0.75); } - #waline .wl-edit, #waline .wl-delete { --at-apply: 'mr-0.4'; } - #waline .wl-like { --at-apply: 'mr-1.2'; } @@ -199,33 +169,33 @@ document.addEventListener('astro:page-load', initWaline) + /* Rendering Options */ + --waline-avatar-radius: 0.5rem; +} + diff --git a/src/components/Widgets/GoBack.astro b/src/components/Widgets/GoBack.astro index 0d57ecc..0699ac8 100644 --- a/src/components/Widgets/GoBack.astro +++ b/src/components/Widgets/GoBack.astro @@ -6,7 +6,7 @@ import GoBackIcon from '@/assets/icons/go-back.svg'; id="back-button" class="hidden" lg="block absolute c-secondary/40 left--10 top-1/2 aspect-square w-4.5 translate-y--1/2 transition-colors ease-out c-secondary active:scale-90 hover:c-primary/80" - aria-label="Back to home" + aria-label="Go back" > 1) { window.history.back() } - else { - // Click site title link to trigger view transition when no history - const titleLink = document.getElementById('site-title-link') as HTMLAnchorElement - if (titleLink) { - titleLink.click() - } - } }) } setupBackButton() -document.addEventListener('astro:page-load', setupBackButton) +document.addEventListener('astro:after-swap', setupBackButton) diff --git a/src/components/Widgets/TOC.astro b/src/components/Widgets/TOC.astro index b5bb84a..a657a22 100644 --- a/src/components/Widgets/TOC.astro +++ b/src/components/Widgets/TOC.astro @@ -82,11 +82,9 @@ const filteredHeadings = headings.filter(heading => .toc-title { --at-apply: 'font-semibold ml-4 select-none 2xl:hidden'; } - .toc-list { --at-apply: 'list-none pl-0 space-y-2 mt-1 mb-4 2xl:space-y-1.2'; } - .toc-link-h2, .toc-link-h3, .toc-link-h4 { --at-apply: 'text-sm no-underline font-normal text-balance select-none 2xl:(text-3.2 c-secondary/60 transition-colors ease-in hover:(c-secondary font-medium))'; } @@ -95,7 +93,6 @@ const filteredHeadings = headings.filter(heading => .accordion-wrapper { --at-apply: 'grid rows-[0fr] duration-300 ease-in-out'; } - .accordion-content { --at-apply: 'overflow-hidden max-h-66 2xl:(max-h-[calc(100vh-21.5rem)]) pl-4 pr-6'; } @@ -104,7 +101,6 @@ const filteredHeadings = headings.filter(heading => .accordion-toggle:checked ~ .accordion-wrapper { grid-template-rows: 1fr; } - .accordion-toggle:checked ~ .accordion-wrapper .accordion-content { --at-apply: 'overflow-y-auto'; } @@ -113,19 +109,15 @@ const filteredHeadings = headings.filter(heading => .accordion-wrapper { grid-template-rows: 1fr; } - .accordion-toggle:checked ~ .accordion-wrapper { grid-template-rows: 0fr; } - .accordion-content { --at-apply: 'overflow-y-auto'; } - .accordion-toggle:checked ~ .accordion-wrapper .accordion-content { --at-apply: 'overflow-hidden'; } - .toc-link-active { --at-apply: 'c-secondary font-medium'; } diff --git a/src/pages/[lang]/atom.xml.ts b/src/pages/[lang]/atom.xml.ts index 64c0d10..3e2bba3 100644 --- a/src/pages/[lang]/atom.xml.ts +++ b/src/pages/[lang]/atom.xml.ts @@ -1,6 +1,6 @@ import type { APIContext } from 'astro' import { moreLocales } from '@/config' -import { generateRSS } from '@/utils/rss' +import { generateAtom } from '@/utils/feed' export function getStaticPaths() { return moreLocales.map(lang => ({ @@ -8,7 +8,6 @@ export function getStaticPaths() { })) } -export async function GET({ params }: APIContext) { - const lang = params.lang as typeof moreLocales[number] - return generateRSS({ lang }) +export async function GET(context: APIContext) { + return generateAtom(context) } diff --git a/src/pages/[lang]/rss.xml.ts b/src/pages/[lang]/rss.xml.ts index 64c0d10..8872080 100644 --- a/src/pages/[lang]/rss.xml.ts +++ b/src/pages/[lang]/rss.xml.ts @@ -1,6 +1,6 @@ import type { APIContext } from 'astro' import { moreLocales } from '@/config' -import { generateRSS } from '@/utils/rss' +import { generateRSS } from '@/utils/feed' export function getStaticPaths() { return moreLocales.map(lang => ({ @@ -8,7 +8,6 @@ export function getStaticPaths() { })) } -export async function GET({ params }: APIContext) { - const lang = params.lang as typeof moreLocales[number] - return generateRSS({ lang }) +export async function GET(context: APIContext) { + return generateRSS(context) } diff --git a/src/pages/atom.xml.ts b/src/pages/atom.xml.ts index 6432db1..89fdea3 100644 --- a/src/pages/atom.xml.ts +++ b/src/pages/atom.xml.ts @@ -1,5 +1,6 @@ -import { generateRSS } from '@/utils/rss' +import type { APIContext } from 'astro' +import { generateAtom } from '@/utils/feed' -export async function GET() { - return generateRSS() +export async function GET(context: APIContext) { + return generateAtom(context) } diff --git a/src/pages/rss.xml.ts b/src/pages/rss.xml.ts index 6432db1..9542d98 100644 --- a/src/pages/rss.xml.ts +++ b/src/pages/rss.xml.ts @@ -1,5 +1,6 @@ -import { generateRSS } from '@/utils/rss' +import type { APIContext } from 'astro' +import { generateRSS } from '@/utils/feed' -export async function GET() { - return generateRSS() +export async function GET(context: APIContext) { + return generateRSS(context) } diff --git a/src/utils/description.ts b/src/utils/description.ts index 9a8eeee..12283d5 100644 --- a/src/utils/description.ts +++ b/src/utils/description.ts @@ -2,7 +2,7 @@ import type { CollectionEntry } from 'astro:content' import { defaultLocale } from '@/config' import MarkdownIt from 'markdown-it' -type ExcerptScene = 'list' | 'meta' | 'og' | 'rss' +type ExcerptScene = 'list' | 'meta' | 'og' | 'feed' const parser = new MarkdownIt() const isCJKLang = (lang: string) => ['zh', 'zh-tw', 'ja'].includes(lang) @@ -24,7 +24,7 @@ const EXCERPT_LENGTHS: Record, baseUrl: string): string { + const needsLangPrefix = post.data.lang !== defaultLocale && post.data.lang !== '' + const langPrefix = needsLangPrefix ? `${post.data.lang}/` : '' + const postSlug = post.data.abbrlink || post.id + + return new URL(`${langPrefix}posts/${postSlug}/`, baseUrl).toString() +} + +/** + * Generate a feed object supporting both RSS and Atom formats + */ +export async function generateFeed({ lang }: GenerateFeedOptions = {}) { + const currentUI = ui[lang as keyof typeof ui] || ui[defaultLocale as keyof typeof ui] + const useI18nTitle = themeConfig.site.i18nTitle + const siteTitle = useI18nTitle ? currentUI.title : title + const siteDescription = useI18nTitle ? currentUI.description : description + const siteURL = lang ? `${url}/${lang}` : url + const author: Author = { + name: siteAuthor, + link: url, + } + + // Create Feed instance + const feed = new Feed({ + title: siteTitle, + description: siteDescription, + id: siteURL, + link: siteURL, + language: lang || themeConfig.global.locale, + copyright: `Copyright © ${new Date().getFullYear()} ${siteAuthor}`, + updated: new Date(), + generator: 'Astro-Theme-Retypeset with Feed for Node.js', + feedLinks: { + rss: new URL(lang ? `/${lang}/rss.xml` : '/rss.xml', url).toString(), + atom: new URL(lang ? `/${lang}/atom.xml` : '/atom.xml', url).toString(), + }, + author, + }) + + // Filter posts by language and exclude drafts + const posts = await getCollection( + 'posts', + ({ data }: { data: CollectionEntry<'posts'>['data'] }) => + (!data.draft && (data.lang === lang || data.lang === '' || (lang === undefined && data.lang === defaultLocale))), + ) + + // Sort posts by published date in descending order + const sortedPosts = [...posts].sort((a, b) => + new Date(b.data.published).getTime() - new Date(a.data.published).getTime(), + ) + + // Limit to the latest 25 posts + const limitedPosts = sortedPosts.slice(0, 25) + + // Add posts to feed + for (const post of limitedPosts) { + const postLink = generatePostUrl(post, url) + + const postContent = post.body + ? sanitizeHtml(markdownParser.render(post.body), { + allowedTags: sanitizeHtml.defaults.allowedTags.concat(['img']), + }) + : '' + + feed.addItem({ + title: post.data.title, + id: postLink, + link: postLink, + description: generateDescription(post, 'feed'), + content: postContent, + author: [author], + // published -> Atom:, RSS: + published: new Date(post.data.published), + // date -> Atom:, RSS has no update tag + date: post.data.updated ? new Date(post.data.updated) : new Date(post.data.published), + }) + } + + // Add follow verification if available + if (followConfig?.feedID && followConfig?.userID) { + feed.addExtension({ + name: 'follow_challenge', + objects: { + feedId: followConfig.feedID, + userId: followConfig.userID, + }, + }) + } + + return feed +} + +/** + * Generate RSS 2.0 format feed + */ +export async function generateRSS(context: APIContext) { + const feed = await generateFeed({ + lang: context.params?.lang as string | undefined, + }) + + let rssXml = feed.rss2() + rssXml = rssXml.replace( + '', + '\n', + ) + + return new Response(rssXml, { + headers: { + 'Content-Type': 'application/rss+xml; charset=utf-8', + }, + }) +} + +/** + * Generate Atom 1.0 format feed + */ +export async function generateAtom(context: APIContext) { + const feed = await generateFeed({ + lang: context.params?.lang as string | undefined, + }) + + let atomXml = feed.atom1() + atomXml = atomXml.replace( + '', + '\n', + ) + + return new Response(atomXml, { + headers: { + 'Content-Type': 'application/atom+xml; charset=utf-8', + }, + }) +} diff --git a/src/utils/rss.ts b/src/utils/rss.ts deleted file mode 100644 index e38beaa..0000000 --- a/src/utils/rss.ts +++ /dev/null @@ -1,68 +0,0 @@ -import type { CollectionEntry } from 'astro:content' -import { defaultLocale, themeConfig } from '@/config' -import { ui } from '@/i18n/ui' -import { generateDescription } from '@/utils/description' -import rss from '@astrojs/rss' -import { getCollection } from 'astro:content' -import MarkdownIt from 'markdown-it' -import sanitizeHtml from 'sanitize-html' - -const parser = new MarkdownIt() -const { title, description, url } = themeConfig.site -const followConfig = themeConfig.seo?.follow - -interface GenerateRSSOptions { - lang?: string -} - -export async function generateRSS({ lang }: GenerateRSSOptions = {}) { - const currentUI = ui[lang as keyof typeof ui] || ui[defaultLocale as keyof typeof ui] - const siteTitle = themeConfig.site.i18nTitle ? currentUI.title : title - const siteDescription = themeConfig.site.i18nTitle ? currentUI.description : description - - // Get posts for specific language (including universal posts and default language when lang is undefined) - const posts = await getCollection( - 'posts', - ({ data }: { data: CollectionEntry<'posts'>['data'] }) => - (!data.draft && (data.lang === lang || data.lang === '' || (lang === undefined && data.lang === defaultLocale))), - ) - - // Sort posts by published date in descending order - const sortedPosts = [...posts].sort((a, b) => - new Date(b.data.published).getTime() - new Date(a.data.published).getTime(), - ) - - return rss({ - title: siteTitle, - site: lang ? `${url}/${lang}` : url, - description: siteDescription, - stylesheet: '/rss-style.xsl', - customData: ` - Copyright © ${new Date().getFullYear()} ${themeConfig.site.author} - ${lang || themeConfig.global.locale} - ${new Date().toUTCString()} - ${followConfig?.feedID && followConfig?.userID - ? ` - ${followConfig.feedID} - ${followConfig.userID} - ` - : '' - } - `.trim(), - items: sortedPosts.map((post: CollectionEntry<'posts'>) => ({ - title: post.data.title, - // Generate URL with language prefix and abbrlink/slug - link: new URL( - `${post.data.lang !== defaultLocale && post.data.lang !== '' ? `${post.data.lang}/` : ''}posts/${post.data.abbrlink || post.id}/`, - url, - ).toString(), - description: generateDescription(post, 'rss'), - pubDate: post.data.published, - content: post.body - ? sanitizeHtml(parser.render(post.body), { - allowedTags: sanitizeHtml.defaults.allowedTags.concat(['img']), - }) - : '', - })), - }) -}
+ This is a web feed, also known as an RSS feed. Subscribe by copying the URL from the address bar into your newsreader. +