diff --git a/astro.config.ts b/astro.config.ts index 84ce0f5..176a0d1 100644 --- a/astro.config.ts +++ b/astro.config.ts @@ -2,6 +2,7 @@ import type { Element } from 'hast' import mdx from '@astrojs/mdx' import partytown from '@astrojs/partytown' import sitemap from '@astrojs/sitemap' +import Compress from 'astro-compress' import robotsTxt from 'astro-robots-txt' import { defineConfig } from 'astro/config' import rehypeAutolinkHeadings from 'rehype-autolink-headings' @@ -58,6 +59,13 @@ export default defineConfig({ }), sitemap(), robotsTxt(), + Compress({ + CSS: false, + HTML: true, // Enable HTML compression only to remove comments + Image: false, + JavaScript: false, + SVG: false, + }), ], markdown: { remarkPlugins: [ @@ -71,7 +79,7 @@ export default defineConfig({ rehypeKatex, rehypeSlug, rehypeImgToFigure, - rehypeUnwrapImg, // must be after rehypeImgToFigure + rehypeUnwrapImg, // Must be after rehypeImgToFigure [ rehypeAutolinkHeadings, { diff --git a/package.json b/package.json index cda847e..cefc00f 100644 --- a/package.json +++ b/package.json @@ -11,13 +11,14 @@ "astro": "astro", "lint": "eslint .", "lint:fix": "eslint . --fix", - "assets": "curl -L https://unpkg.com/@waline/client@latest/dist/waline.css -o public/assets/waline/waline.css && curl -L https://unpkg.com/@waline/client@latest/dist/waline.js -o public/assets/waline/waline.js && curl -L https://cdn.jsdelivr.net/npm/katex@latest/dist/katex.min.css -o public/assets/katex/katex.min.css" + "comments": "curl -L https://unpkg.com/@waline/client@latest/dist/waline.css -o public/assets/waline/waline.css && curl -L https://unpkg.com/@waline/client@latest/dist/waline.js -o public/assets/waline/waline.js" }, "dependencies": { "@astrojs/mdx": "^4.2.6", "@astrojs/partytown": "^2.1.4", "@astrojs/sitemap": "^3.4.0", "astro": "^5.7.13", + "astro-compress": "^2.3.8", "astro-og-canvas": "^0.7.0", "astro-robots-txt": "^1.0.0", "canvaskit-wasm": "^0.40.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9ee5f15..aa84dfc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,6 +20,9 @@ importers: astro: specifier: ^5.7.13 version: 5.7.13(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.3)(rollup@4.41.0)(terser@5.39.0)(typescript@5.8.3)(yaml@2.8.0) + astro-compress: + specifier: ^2.3.8 + version: 2.3.8(@types/node@22.15.18)(jiti@2.4.2)(rollup@4.41.0)(typescript@5.8.3)(yaml@2.8.0) astro-og-canvas: specifier: ^0.7.0 version: 0.7.0(astro@5.7.13(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.3)(rollup@4.41.0)(terser@5.39.0)(typescript@5.8.3)(yaml@2.8.0)) @@ -811,6 +814,9 @@ packages: resolution: {integrity: sha512-ROFF39F6ZrnzSUEmQQZUar0Jt4xVoP9WnDRdWwF4NNcXs3xBTLgBUDoOwW141y1jP+S8nahIbdxbFC7IShw9Iw==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + '@playform/pipe@0.1.3': + resolution: {integrity: sha512-cjRcaj6b8XZMS+N51In78EuD9e0x0M3gYxi2g+qUGk1iya2uxcS+aSrXxfBUZueOjxADQwpyS4zLEhlbHCGcDA==} + '@polka/url@1.0.0-next.29': resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} @@ -962,9 +968,19 @@ packages: '@swc/helpers@0.5.17': resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} + '@trysound/sax@0.2.0': + resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} + engines: {node: '>=10.13.0'} + '@tybys/wasm-util@0.9.0': resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} + '@types/css-tree@2.3.10': + resolution: {integrity: sha512-WcaBazJ84RxABvRttQjjFWgTcHvZR9jGr0Y3hccPkHjFyk/a3N8EuxjKr+QfrwjoM5b1yI1Uj1i7EzOAAwBwag==} + + '@types/csso@5.0.4': + resolution: {integrity: sha512-W/FsRkm/9c04x9ON+bj+HQ0cSgNkG1LvcfuBCpkP7cpikM7+RkrNFLGtiofb++xBG6KGMUycLoDbi9/K621ZCw==} + '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} @@ -983,6 +999,9 @@ packages: '@types/hast@3.0.4': resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + '@types/html-minifier-terser@7.0.2': + resolution: {integrity: sha512-mm2HqV22l8lFQh4r2oSsOEVea+m0qqxEmwpc9kC1p/XzmjLWrReR9D/GRs8Pex2NX/imyEH9c5IU/7tMBQCHOA==} + '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} @@ -1013,6 +1032,9 @@ packages: '@types/node@17.0.45': resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} + '@types/node@22.13.14': + resolution: {integrity: sha512-Zs/Ollc1SJ8nKUAgc7ivOEdIBM8JAKgrqqUYi2J997JuKO7/tpQC+WCetQ1sypiKCQWHdvdg9wBNpUPEWZae7w==} + '@types/node@22.15.18': resolution: {integrity: sha512-v1DKRfUdyW+jJhZNEI1PYy29S2YRxMV5AOO/x/SjKmW0acCIOqmbj6Haf9eHAhsPmrhlHSxEhv/1WszcLWV4cg==} @@ -1434,6 +1456,9 @@ packages: resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} hasBin: true + astro-compress@2.3.8: + resolution: {integrity: sha512-XajjEtSTJuVRBOrtZ/Siavd4KcH47SEHo0XoZZeYVRF6BODSBqxVdtlfkqYJKM+F4XRUmLDS5ncVTILnQYvvXw==} + astro-eslint-parser@1.2.2: resolution: {integrity: sha512-JepyLROIad6f44uyqMF6HKE2QbunNzp3mYKRcPoDGt0QkxXmH222FAFC64WTyQu2Kg8NNEXHTN/sWuUId9sSxw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1521,6 +1546,9 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} + camel-case@4.1.2: + resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} + camelcase@8.0.0: resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} engines: {node: '>=16'} @@ -1577,6 +1605,10 @@ packages: resolution: {integrity: sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==} engines: {node: '>=8'} + clean-css@5.3.3: + resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==} + engines: {node: '>= 10.0'} + clean-regexp@1.0.0: resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} engines: {node: '>=4'} @@ -1628,6 +1660,10 @@ packages: comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} + commander@10.0.1: + resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} + engines: {node: '>=14'} + commander@13.1.0: resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} engines: {node: '>=18'} @@ -1635,6 +1671,10 @@ packages: commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + commander@8.3.0: resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} engines: {node: '>= 12'} @@ -1682,6 +1722,14 @@ packages: css-select@5.1.0: resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + css-tree@2.2.1: + resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + + css-tree@2.3.1: + resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + css-tree@3.1.0: resolution: {integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} @@ -1695,6 +1743,10 @@ packages: engines: {node: '>=4'} hasBin: true + csso@5.0.5: + resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} @@ -1725,6 +1777,10 @@ packages: deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + deepmerge-ts@7.1.5: + resolution: {integrity: sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw==} + engines: {node: '>=16.0.0'} + deepmerge@4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} @@ -1776,6 +1832,9 @@ packages: domutils@3.2.2: resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} + dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + dotenv@16.5.0: resolution: {integrity: sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==} engines: {node: '>=12'} @@ -2270,6 +2329,11 @@ packages: html-escaper@3.0.3: resolution: {integrity: sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==} + html-minifier-terser@7.2.0: + resolution: {integrity: sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==} + engines: {node: ^14.13.1 || >=16.0.0} + hasBin: true + html-void-elements@3.0.0: resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} @@ -2558,6 +2622,9 @@ packages: loupe@3.1.3: resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} + lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} @@ -2638,6 +2705,12 @@ packages: mdast-util-to-string@4.0.0: resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + mdn-data@2.0.28: + resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} + + mdn-data@2.0.30: + resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + mdn-data@2.12.2: resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==} @@ -2826,6 +2899,9 @@ packages: nlcst-to-string@4.0.0: resolution: {integrity: sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==} + no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + node-fetch-native@1.6.6: resolution: {integrity: sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ==} @@ -2900,6 +2976,9 @@ packages: pako@0.2.9: resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==} + param-case@3.0.4: + resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} + parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -2926,6 +3005,9 @@ packages: parse5@7.3.0: resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} + pascal-case@3.1.2: + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + path-browserify@1.0.1: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} @@ -3110,6 +3192,10 @@ packages: rehype@13.0.2: resolution: {integrity: sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==} + relateurl@0.2.7: + resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==} + engines: {node: '>= 0.10'} + remark-directive@4.0.0: resolution: {integrity: sha512-7sxn4RfF1o3izevPV1DheyGDD6X4c9hrGpfdUpm7uC++dqrnJxIZVkk7CoKqcLm0VUMAuOol7Mno3m6g8cfMuA==} @@ -3347,6 +3433,11 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} + svgo@3.3.2: + resolution: {integrity: sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==} + engines: {node: '>=14.0.0'} + hasBin: true + synckit@0.11.6: resolution: {integrity: sha512-2pR2ubZSV64f/vqm9eLPz/KOvR9Dm+Co/5ChLgeHl0yEDRc6h5hXHoxEQH8Y5Ljycozd3p1k5TTSVdzYGkPvLw==} engines: {node: ^14.18.0 || >=16.0.0} @@ -3466,6 +3557,9 @@ packages: uncrypto@0.1.3: resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} + undici-types@6.20.0: + resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} + undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} @@ -4544,7 +4638,6 @@ snapshots: dependencies: '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 - optional: true '@jridgewell/sourcemap-codec@1.5.0': {} @@ -4608,6 +4701,12 @@ snapshots: '@pkgr/core@0.2.4': {} + '@playform/pipe@0.1.3': + dependencies: + '@types/node': 22.13.14 + deepmerge-ts: 7.1.5 + fast-glob: 3.3.3 + '@polka/url@1.0.0-next.29': {} '@quansync/fs@0.1.3': @@ -4735,11 +4834,19 @@ snapshots: dependencies: tslib: 2.8.1 + '@trysound/sax@0.2.0': {} + '@tybys/wasm-util@0.9.0': dependencies: tslib: 2.8.1 optional: true + '@types/css-tree@2.3.10': {} + + '@types/csso@5.0.4': + dependencies: + '@types/css-tree': 2.3.10 + '@types/debug@4.1.12': dependencies: '@types/ms': 2.1.0 @@ -4763,6 +4870,8 @@ snapshots: dependencies: '@types/unist': 3.0.3 + '@types/html-minifier-terser@7.0.2': {} + '@types/json-schema@7.0.15': {} '@types/katex@0.16.7': {} @@ -4790,6 +4899,10 @@ snapshots: '@types/node@17.0.45': {} + '@types/node@22.13.14': + dependencies: + undici-types: 6.20.0 + '@types/node@22.15.18': dependencies: undici-types: 6.21.0 @@ -5338,6 +5451,55 @@ snapshots: astring@1.9.0: {} + astro-compress@2.3.8(@types/node@22.15.18)(jiti@2.4.2)(rollup@4.41.0)(typescript@5.8.3)(yaml@2.8.0): + dependencies: + '@playform/pipe': 0.1.3 + '@types/csso': 5.0.4 + '@types/html-minifier-terser': 7.0.2 + astro: 5.7.13(@types/node@22.15.18)(jiti@2.4.2)(lightningcss@1.29.3)(rollup@4.41.0)(terser@5.39.0)(typescript@5.8.3)(yaml@2.8.0) + commander: 13.1.0 + csso: 5.0.5 + deepmerge-ts: 7.1.5 + fast-glob: 3.3.3 + html-minifier-terser: 7.2.0 + kleur: 4.1.5 + lightningcss: 1.29.3 + sharp: 0.33.5 + svgo: 3.3.2 + terser: 5.39.0 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@netlify/blobs' + - '@planetscale/database' + - '@types/node' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/kv' + - aws4fetch + - db0 + - encoding + - idb-keyval + - ioredis + - jiti + - less + - rollup + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - tsx + - typescript + - uploadthing + - yaml + astro-eslint-parser@1.2.2: dependencies: '@astrojs/compiler': 2.12.0 @@ -5522,8 +5684,7 @@ snapshots: node-releases: 2.0.19 update-browserslist-db: 1.1.3(browserslist@4.24.5) - buffer-from@1.1.2: - optional: true + buffer-from@1.1.2: {} builtin-modules@5.0.0: {} @@ -5531,6 +5692,11 @@ snapshots: callsites@3.1.0: {} + camel-case@4.1.2: + dependencies: + pascal-case: 3.1.2 + tslib: 2.8.1 + camelcase@8.0.0: {} caniuse-lite@1.0.30001718: {} @@ -5590,6 +5756,10 @@ snapshots: ci-info@4.2.0: {} + clean-css@5.3.3: + dependencies: + source-map: 0.6.1 + clean-regexp@1.0.0: dependencies: escape-string-regexp: 1.0.5 @@ -5637,10 +5807,13 @@ snapshots: comma-separated-tokens@2.0.3: {} + commander@10.0.1: {} + commander@13.1.0: {} - commander@2.20.3: - optional: true + commander@2.20.3: {} + + commander@7.2.0: {} commander@8.3.0: {} @@ -5688,6 +5861,16 @@ snapshots: domutils: 3.2.2 nth-check: 2.1.1 + css-tree@2.2.1: + dependencies: + mdn-data: 2.0.28 + source-map-js: 1.2.1 + + css-tree@2.3.1: + dependencies: + mdn-data: 2.0.30 + source-map-js: 1.2.1 + css-tree@3.1.0: dependencies: mdn-data: 2.12.2 @@ -5697,6 +5880,10 @@ snapshots: cssesc@3.0.0: {} + csso@5.0.5: + dependencies: + css-tree: 2.2.1 + csstype@3.1.3: {} debug@3.2.7: @@ -5716,6 +5903,8 @@ snapshots: deep-is@0.1.4: {} + deepmerge-ts@7.1.5: {} + deepmerge@4.3.1: {} defu@6.1.4: {} @@ -5760,6 +5949,11 @@ snapshots: domelementtype: 2.3.0 domhandler: 5.0.3 + dot-case@3.0.4: + dependencies: + no-case: 3.0.4 + tslib: 2.8.1 + dotenv@16.5.0: {} dset@3.1.4: {} @@ -6470,6 +6664,16 @@ snapshots: html-escaper@3.0.3: {} + html-minifier-terser@7.2.0: + dependencies: + camel-case: 4.1.2 + clean-css: 5.3.3 + commander: 10.0.1 + entities: 4.5.0 + param-case: 3.0.4 + relateurl: 0.2.7 + terser: 5.39.0 + html-void-elements@3.0.0: {} htmlparser2@8.0.2: @@ -6653,7 +6857,6 @@ snapshots: lightningcss-linux-x64-musl: 1.29.3 lightningcss-win32-arm64-msvc: 1.29.3 lightningcss-win32-x64-msvc: 1.29.3 - optional: true lilconfig@3.1.3: {} @@ -6712,6 +6915,10 @@ snapshots: loupe@3.1.3: optional: true + lower-case@2.0.2: + dependencies: + tslib: 2.8.1 + lru-cache@10.4.3: {} magic-string@0.30.17: @@ -6943,6 +7150,10 @@ snapshots: dependencies: '@types/mdast': 4.0.4 + mdn-data@2.0.28: {} + + mdn-data@2.0.30: {} + mdn-data@2.12.2: {} mdurl@2.0.0: {} @@ -7290,6 +7501,11 @@ snapshots: dependencies: '@types/nlcst': 2.0.3 + no-case@3.0.4: + dependencies: + lower-case: 2.0.2 + tslib: 2.8.1 + node-fetch-native@1.6.6: {} node-fetch@2.7.0: @@ -7363,6 +7579,11 @@ snapshots: pako@0.2.9: {} + param-case@3.0.4: + dependencies: + dot-case: 3.0.4 + tslib: 2.8.1 + parent-module@1.0.1: dependencies: callsites: 3.1.0 @@ -7400,6 +7621,11 @@ snapshots: dependencies: entities: 6.0.0 + pascal-case@3.1.2: + dependencies: + no-case: 3.0.4 + tslib: 2.8.1 + path-browserify@1.0.1: {} path-exists@4.0.0: {} @@ -7617,6 +7843,8 @@ snapshots: rehype-stringify: 10.0.1 unified: 11.0.5 + relateurl@0.2.7: {} + remark-directive@4.0.0: dependencies: '@types/mdast': 4.0.4 @@ -7811,7 +8039,6 @@ snapshots: '@img/sharp-wasm32': 0.33.5 '@img/sharp-win32-ia32': 0.33.5 '@img/sharp-win32-x64': 0.33.5 - optional: true sharp@0.34.1: dependencies: @@ -7899,10 +8126,8 @@ snapshots: dependencies: buffer-from: 1.1.2 source-map: 0.6.1 - optional: true - source-map@0.6.1: - optional: true + source-map@0.6.1: {} source-map@0.7.4: {} @@ -7974,6 +8199,16 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} + svgo@3.3.2: + dependencies: + '@trysound/sax': 0.2.0 + commander: 7.2.0 + css-select: 5.1.0 + css-tree: 2.3.1 + css-what: 6.1.0 + csso: 5.0.5 + picocolors: 1.1.1 + synckit@0.11.6: dependencies: '@pkgr/core': 0.2.4 @@ -7991,7 +8226,6 @@ snapshots: acorn: 8.14.1 commander: 2.20.3 source-map-support: 0.5.21 - optional: true tiny-inflate@1.0.3: {} @@ -8071,6 +8305,8 @@ snapshots: uncrypto@0.1.3: {} + undici-types@6.20.0: {} + undici-types@6.21.0: {} unicode-properties@1.4.1: diff --git a/src/components/Comments/Waline.astro b/src/components/Comments/Waline.astro index 8aa28c6..96506b3 100644 --- a/src/components/Comments/Waline.astro +++ b/src/components/Comments/Waline.astro @@ -41,6 +41,7 @@ function initWaline() { init({ el: '#waline', serverURL, + // Share comments on posts in different languages path: window.location.pathname.replace(/^\/([a-z]{2}(-[a-z]{2})?)\//, '/'), lang: walineLang, emoji, diff --git a/src/components/Widgets/GithubCard.astro b/src/components/Widgets/GithubCard.astro index bc80520..cbe2eb3 100644 --- a/src/components/Widgets/GithubCard.astro +++ b/src/components/Widgets/GithubCard.astro @@ -4,6 +4,7 @@ function setupGithubCards() { if (githubCards.length === 0) return + // Create an intersection observer to lazy load GitHub repo data when cards enter viewport const observer = new IntersectionObserver((entries) => { entries.forEach((entry) => { if (entry.isIntersecting) { diff --git a/src/components/Widgets/GsapAnimation.astro b/src/components/Widgets/GsapAnimation.astro index ba1b071..f2f232a 100644 --- a/src/components/Widgets/GsapAnimation.astro +++ b/src/components/Widgets/GsapAnimation.astro @@ -10,8 +10,10 @@ function setupPostPageAnimation() { const tocContainer = document.getElementById('toc-container') const isLargeScreen = window.matchMedia('(min-width: 1024px)').matches + const isSmallScreen = window.matchMedia('(max-width: 1535px)').matches - // Post Content + Tags + Comments (First 15 elements) + // Post Content + Tags + Comments + // First 15 elements gsap.from(allElements.slice(0, 15), { opacity: 0, y: '3rem', @@ -20,8 +22,7 @@ function setupPostPageAnimation() { ease: 'power2.out', stagger: 0.05, }) - - // Post Content + Tags + Comments (Rest elements) + // Rest elements as the 16 element if (allElements.length > 15) { gsap.from(allElements.slice(15), { opacity: 0, @@ -32,8 +33,9 @@ function setupPostPageAnimation() { }) } + // Desktop Animations if (isLargeScreen) { - // Desktop Post Date + // Post Date if (dateElement) { gsap.from(dateElement, { opacity: 0, @@ -44,7 +46,7 @@ function setupPostPageAnimation() { }) } - // Desktop TOC Icon + // TOC Icon if (tocIcon) { gsap.from(tocIcon, { opacity: 0, @@ -55,7 +57,7 @@ function setupPostPageAnimation() { }) } - // Desktop Toc List + // Toc List if (tocListChildren.length > 0) { gsap.from(tocListChildren, { opacity: 0, @@ -67,7 +69,7 @@ function setupPostPageAnimation() { }) } - // Desktop Back Button + // Back Button if (backButton) { gsap.from(backButton, { opacity: 0, @@ -78,17 +80,16 @@ function setupPostPageAnimation() { }) } } - else { - // Mobile TOC Container - if (tocContainer) { - gsap.from(tocContainer, { - opacity: 0, - y: '3rem', - duration: 0.5, - delay: 0.1, - ease: 'power2.out', - }) - } + + // Mobile Animation (for screens smaller than 1536px) + if (isSmallScreen && tocContainer) { + gsap.from(tocContainer, { + opacity: 0, + y: '3rem', + duration: 0.5, + delay: 0.1, + ease: 'power2.out', + }) } } diff --git a/src/components/Widgets/TOC.astro b/src/components/Widgets/TOC.astro index 3b5b882..6668cc5 100644 --- a/src/components/Widgets/TOC.astro +++ b/src/components/Widgets/TOC.astro @@ -19,25 +19,30 @@ const filteredHeadings = headings.filter(heading => --- {filteredHeadings.length > 0 && ( + // TOC Container