Documentation for my projects & stuff, build using 11ty.
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

feat: add all pages from old docs

+1689 -1
+32
eleventy.config.js
··· 1 1 import path from "node:path"; 2 2 3 3 import * as sass from "sass"; 4 + import htmlmin from "html-minifier-terser"; 5 + 6 + import { IdAttributePlugin } from "@11ty/eleventy"; 7 + 8 + import syntaxHighlight from "@11ty/eleventy-plugin-syntaxhighlight"; 9 + import eleventyNavigationPlugin from "@11ty/eleventy-navigation"; 10 + import tableOfContents from "eleventy-plugin-toc"; 4 11 5 12 export default async function (eleventyConfig) { 6 13 eleventyConfig.setInputDirectory("src"); 7 14 15 + eleventyConfig.addPassthroughCopy({ 16 + "src/public": "/", 17 + }); 18 + 8 19 // Extensions 9 20 eleventyConfig.addExtension("scss", { 10 21 outputFileExtension: "css", ··· 20 31 21 32 let result = sass.compileString(inputContent, { 22 33 loadPaths: [parsed.dir || ".", this.config.dir.includes], 34 + style: "compressed", 23 35 }); 24 36 this.addDependencies(inputPath, result.loadedUrls); 25 37 ··· 31 43 32 44 // File formats 33 45 eleventyConfig.addTemplateFormats("scss"); 46 + 47 + // Transforms 48 + eleventyConfig.addTransform("htmlmin", function (content) { 49 + if ((this.page.outputPath || "").endsWith(".html")) { 50 + let minified = htmlmin.minify(content, { 51 + removeComments: true, 52 + collapseWhitespace: true, 53 + }); 54 + 55 + return minified; 56 + } 57 + 58 + return content; 59 + }); 60 + 61 + // Plugins 62 + eleventyConfig.addPlugin(IdAttributePlugin); 63 + eleventyConfig.addPlugin(syntaxHighlight); 64 + eleventyConfig.addPlugin(eleventyNavigationPlugin); 65 + eleventyConfig.addPlugin(tableOfContents); 34 66 }
+5
package.json
··· 10 10 "keywords": [], 11 11 "author": "", 12 12 "license": "ISC", 13 + "type": "module", 13 14 "packageManager": "pnpm@10.32.1", 14 15 "dependencies": { 15 16 "@11ty/eleventy": "^3.1.5", 17 + "@11ty/eleventy-navigation": "^1.0.5", 18 + "@11ty/eleventy-plugin-syntaxhighlight": "^5.0.2", 19 + "eleventy-plugin-toc": "^1.1.5", 20 + "html-minifier-terser": "^7.2.0", 16 21 "sass": "^1.99.0" 17 22 } 18 23 }
+356
pnpm-lock.yaml
··· 11 11 '@11ty/eleventy': 12 12 specifier: ^3.1.5 13 13 version: 3.1.5 14 + '@11ty/eleventy-navigation': 15 + specifier: ^1.0.5 16 + version: 1.0.5 17 + '@11ty/eleventy-plugin-syntaxhighlight': 18 + specifier: ^5.0.2 19 + version: 5.0.2 20 + eleventy-plugin-toc: 21 + specifier: ^1.1.5 22 + version: 1.1.5 23 + html-minifier-terser: 24 + specifier: ^7.2.0 25 + version: 7.2.0 14 26 sass: 15 27 specifier: ^1.99.0 16 28 version: 1.99.0 ··· 28 40 engines: {node: '>=18'} 29 41 hasBin: true 30 42 43 + '@11ty/eleventy-navigation@1.0.5': 44 + resolution: {integrity: sha512-zb6xe29cM9viSdYtZywKIkJw2HIROyBINdBcFWC9uD0c/jYOTAex5nwy3HNEuh5t6/Ld/S9V4gEizfmeYuYpCQ==} 45 + 31 46 '@11ty/eleventy-plugin-bundle@3.0.7': 32 47 resolution: {integrity: sha512-QK1tRFBhQdZASnYU8GMzpTdsMMFLVAkuU0gVVILqNyp09xJJZb81kAS3AFrNrwBCsgLxTdWHJ8N64+OTTsoKkA==} 33 48 engines: {node: '>=18'} 34 49 50 + '@11ty/eleventy-plugin-syntaxhighlight@5.0.2': 51 + resolution: {integrity: sha512-T6xVVRDJuHlrFMHbUiZkHjj5o1IlLzZW+1IL9eUsyXFU7rY2ztcYhZew/64vmceFFpQwzuSfxQOXxTJYmKkQ+A==} 52 + 35 53 '@11ty/eleventy-utils@2.0.7': 36 54 resolution: {integrity: sha512-6QE+duqSQ0GY9rENXYb4iPR4AYGdrFpqnmi59tFp9VrleOl0QSh8VlBr2yd6dlhkdtj7904poZW5PvGr9cMiJQ==} 37 55 engines: {node: '>=18'} ··· 52 70 '@11ty/recursive-copy@4.0.4': 53 71 resolution: {integrity: sha512-oI7m8pa7/IAU/3lqRU9vjBbs20iKFo7x+1K9kT3aVira6scc1X9MjBdgLCHzLJeJ7iB6wydioA+kr9/qPnvmlQ==} 54 72 engines: {node: '>=18'} 73 + 74 + '@jridgewell/gen-mapping@0.3.13': 75 + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} 76 + 77 + '@jridgewell/resolve-uri@3.1.2': 78 + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 79 + engines: {node: '>=6.0.0'} 80 + 81 + '@jridgewell/source-map@0.3.11': 82 + resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==} 83 + 84 + '@jridgewell/sourcemap-codec@1.5.5': 85 + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} 86 + 87 + '@jridgewell/trace-mapping@0.3.31': 88 + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} 55 89 56 90 '@parcel/watcher-android-arm64@2.5.6': 57 91 resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==} ··· 190 224 resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} 191 225 engines: {node: '>=8'} 192 226 227 + boolbase@1.0.0: 228 + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} 229 + 193 230 brace-expansion@1.1.13: 194 231 resolution: {integrity: sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==} 195 232 ··· 197 234 resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 198 235 engines: {node: '>=8'} 199 236 237 + buffer-from@1.1.2: 238 + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} 239 + 240 + camel-case@4.1.2: 241 + resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} 242 + 243 + cheerio-select@2.1.0: 244 + resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} 245 + 246 + cheerio@1.2.0: 247 + resolution: {integrity: sha512-WDrybc/gKFpTYQutKIK6UvfcuxijIZfMfXaYm8NMsPQxSYvf+13fXUJ4rztGGbJcBQ/GF55gvrZ0Bc0bj/mqvg==} 248 + engines: {node: '>=20.18.1'} 249 + 200 250 chokidar@3.6.0: 201 251 resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} 202 252 engines: {node: '>= 8.10.0'} ··· 205 255 resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} 206 256 engines: {node: '>= 14.16.0'} 207 257 258 + clean-css@5.3.3: 259 + resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==} 260 + engines: {node: '>= 10.0'} 261 + 208 262 commander@10.0.1: 209 263 resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} 210 264 engines: {node: '>=14'} 211 265 266 + commander@2.20.3: 267 + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} 268 + 212 269 commander@5.1.0: 213 270 resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} 214 271 engines: {node: '>= 6'} 215 272 216 273 concat-map@0.0.1: 217 274 resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 275 + 276 + css-select@5.2.2: 277 + resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} 278 + 279 + css-what@6.2.2: 280 + resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} 281 + engines: {node: '>= 6'} 218 282 219 283 debug@2.6.9: 220 284 resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} ··· 247 311 248 312 dom-serializer@1.4.1: 249 313 resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} 314 + 315 + dom-serializer@2.0.0: 316 + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} 250 317 251 318 domelementtype@2.3.0: 252 319 resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} ··· 255 322 resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} 256 323 engines: {node: '>= 4'} 257 324 325 + domhandler@5.0.3: 326 + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} 327 + engines: {node: '>= 4'} 328 + 258 329 domutils@2.8.0: 259 330 resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} 331 + 332 + domutils@3.2.2: 333 + resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} 334 + 335 + dot-case@3.0.4: 336 + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} 260 337 261 338 ee-first@1.1.1: 262 339 resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} 263 340 341 + eleventy-plugin-toc@1.1.5: 342 + resolution: {integrity: sha512-Fo5AZZSBH8CKvz0axJQA9nmnTFOflAMFrngaKER4rOz3C6oDwqxK8N+kNFepmIsieTPkrH+iREWLJ+/9j5JjUg==} 343 + 264 344 encodeurl@2.0.0: 265 345 resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} 266 346 engines: {node: '>= 0.8'} 347 + 348 + encoding-sniffer@0.2.1: 349 + resolution: {integrity: sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==} 267 350 268 351 entities@2.2.0: 269 352 resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} ··· 278 361 279 362 entities@6.0.1: 280 363 resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} 364 + engines: {node: '>=0.12'} 365 + 366 + entities@7.0.1: 367 + resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} 281 368 engines: {node: '>=0.12'} 282 369 283 370 errno@1.0.0: ··· 349 436 resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} 350 437 engines: {node: '>=6.0'} 351 438 439 + html-minifier-terser@7.2.0: 440 + resolution: {integrity: sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==} 441 + engines: {node: ^14.13.1 || >=16.0.0} 442 + hasBin: true 443 + 444 + htmlparser2@10.1.0: 445 + resolution: {integrity: sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==} 446 + 352 447 htmlparser2@7.2.0: 353 448 resolution: {integrity: sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==} 354 449 ··· 359 454 http-errors@2.0.1: 360 455 resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} 361 456 engines: {node: '>= 0.8'} 457 + 458 + iconv-lite@0.6.3: 459 + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} 460 + engines: {node: '>=0.10.0'} 362 461 363 462 immutable@5.1.5: 364 463 resolution: {integrity: sha512-t7xcm2siw+hlUM68I+UEOK+z84RzmN59as9DZ7P1l0994DKUWV7UXBMQZVxaoMSRQ+PBZbHCOoBt7a2wxOMt+A==} ··· 433 532 list-to-array@1.1.0: 434 533 resolution: {integrity: sha512-+dAZZ2mM+/m+vY9ezfoueVvrgnHIGi5FvgSymbIgJOFwiznWyA59mav95L+Mc6xPtL3s9gm5eNTlNtxJLbNM1g==} 435 534 535 + lower-case@2.0.2: 536 + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} 537 + 436 538 luxon@3.7.2: 437 539 resolution: {integrity: sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==} 438 540 engines: {node: '>=12'} ··· 479 581 ms@2.1.3: 480 582 resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 481 583 584 + no-case@3.0.4: 585 + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} 586 + 482 587 node-addon-api@7.1.1: 483 588 resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} 484 589 ··· 489 594 resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 490 595 engines: {node: '>=0.10.0'} 491 596 597 + nth-check@2.1.1: 598 + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} 599 + 492 600 nunjucks@3.2.4: 493 601 resolution: {integrity: sha512-26XRV6BhkgK0VOxfbU5cQI+ICFUtMLixv1noZn1tGU38kQH5A5nmmbk/O45xdyBhD1esk47nKrY0mvQpZIhRjQ==} 494 602 engines: {node: '>= 6.9.0'} ··· 503 611 resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} 504 612 engines: {node: '>= 0.8'} 505 613 614 + param-case@3.0.4: 615 + resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} 616 + 506 617 parse-srcset@1.0.2: 507 618 resolution: {integrity: sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==} 508 619 620 + parse5-htmlparser2-tree-adapter@7.1.0: 621 + resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==} 622 + 623 + parse5-parser-stream@7.1.2: 624 + resolution: {integrity: sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==} 625 + 626 + parse5@7.3.0: 627 + resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} 628 + 509 629 parseurl@1.3.3: 510 630 resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} 511 631 engines: {node: '>= 0.8'} 632 + 633 + pascal-case@3.1.2: 634 + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} 512 635 513 636 picomatch@2.3.2: 514 637 resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} ··· 539 662 resolution: {integrity: sha512-7Hc+IvlQ7hlaIfQFZnxlRl0jnpWq2qwibORBhQYIb0QbNtuicc5ZxvKkVT71HJ4Py1wSZ/3VR1r8LfkCtoCzhw==} 540 663 engines: {node: '>=12.0.0'} 541 664 665 + prismjs@1.30.0: 666 + resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} 667 + engines: {node: '>=6'} 668 + 542 669 prr@1.0.1: 543 670 resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} 544 671 ··· 557 684 readdirp@4.1.2: 558 685 resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} 559 686 engines: {node: '>= 14.18.0'} 687 + 688 + relateurl@0.2.7: 689 + resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==} 690 + engines: {node: '>= 0.10'} 691 + 692 + safer-buffer@2.1.2: 693 + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} 560 694 561 695 sass@1.99.0: 562 696 resolution: {integrity: sha512-kgW13M54DUB7IsIRM5LvJkNlpH+WhMpooUcaWGFARkF1Tc82v9mIWkCbCYf+MBvpIUBSeSOTilpZjEPr2VYE6Q==} ··· 594 728 resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 595 729 engines: {node: '>=0.10.0'} 596 730 731 + source-map-support@0.5.21: 732 + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} 733 + 734 + source-map@0.6.1: 735 + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 736 + engines: {node: '>=0.10.0'} 737 + 597 738 sprintf-js@1.0.3: 598 739 resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} 599 740 ··· 609 750 resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==} 610 751 engines: {node: '>=0.10.0'} 611 752 753 + terser@5.46.1: 754 + resolution: {integrity: sha512-vzCjQO/rgUuK9sf8VJZvjqiqiHFaZLnOiimmUuOKODxWL8mm/xua7viT7aqX7dgPY60otQjUotzFMmCB4VdmqQ==} 755 + engines: {node: '>=10'} 756 + hasBin: true 757 + 612 758 tinyglobby@0.2.15: 613 759 resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} 614 760 engines: {node: '>=12.0.0'} ··· 621 767 resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} 622 768 engines: {node: '>=0.6'} 623 769 770 + tslib@2.8.1: 771 + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 772 + 624 773 uc.micro@2.1.0: 625 774 resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} 626 775 776 + undici@7.24.7: 777 + resolution: {integrity: sha512-H/nlJ/h0ggGC+uRL3ovD+G0i4bqhvsDOpbDv7At5eFLlj2b41L8QliGbnl2H7SnDiYhENphh1tQFJZf+MyfLsQ==} 778 + engines: {node: '>=20.18.1'} 779 + 627 780 unpipe@1.0.0: 628 781 resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} 629 782 engines: {node: '>= 0.8'} ··· 631 784 urlpattern-polyfill@10.1.0: 632 785 resolution: {integrity: sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw==} 633 786 787 + whatwg-encoding@3.1.1: 788 + resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} 789 + engines: {node: '>=18'} 790 + deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation 791 + 792 + whatwg-mimetype@4.0.0: 793 + resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} 794 + engines: {node: '>=18'} 795 + 634 796 ws@8.20.0: 635 797 resolution: {integrity: sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==} 636 798 engines: {node: '>=10.0.0'} ··· 675 837 - supports-color 676 838 - utf-8-validate 677 839 840 + '@11ty/eleventy-navigation@1.0.5': 841 + dependencies: 842 + dependency-graph: 1.0.0 843 + 678 844 '@11ty/eleventy-plugin-bundle@3.0.7(posthtml@0.16.7)': 679 845 dependencies: 680 846 '@11ty/eleventy-utils': 2.0.7 ··· 684 850 - posthtml 685 851 - supports-color 686 852 853 + '@11ty/eleventy-plugin-syntaxhighlight@5.0.2': 854 + dependencies: 855 + prismjs: 1.30.0 856 + 687 857 '@11ty/eleventy-utils@2.0.7': {} 688 858 689 859 '@11ty/eleventy@3.1.5': ··· 742 912 minimatch: 3.1.5 743 913 slash: 3.0.0 744 914 915 + '@jridgewell/gen-mapping@0.3.13': 916 + dependencies: 917 + '@jridgewell/sourcemap-codec': 1.5.5 918 + '@jridgewell/trace-mapping': 0.3.31 919 + 920 + '@jridgewell/resolve-uri@3.1.2': {} 921 + 922 + '@jridgewell/source-map@0.3.11': 923 + dependencies: 924 + '@jridgewell/gen-mapping': 0.3.13 925 + '@jridgewell/trace-mapping': 0.3.31 926 + 927 + '@jridgewell/sourcemap-codec@1.5.5': {} 928 + 929 + '@jridgewell/trace-mapping@0.3.31': 930 + dependencies: 931 + '@jridgewell/resolve-uri': 3.1.2 932 + '@jridgewell/sourcemap-codec': 1.5.5 933 + 745 934 '@parcel/watcher-android-arm64@2.5.6': 746 935 optional: true 747 936 ··· 850 1039 851 1040 binary-extensions@2.3.0: {} 852 1041 1042 + boolbase@1.0.0: {} 1043 + 853 1044 brace-expansion@1.1.13: 854 1045 dependencies: 855 1046 balanced-match: 1.0.2 ··· 859 1050 dependencies: 860 1051 fill-range: 7.1.1 861 1052 1053 + buffer-from@1.1.2: {} 1054 + 1055 + camel-case@4.1.2: 1056 + dependencies: 1057 + pascal-case: 3.1.2 1058 + tslib: 2.8.1 1059 + 1060 + cheerio-select@2.1.0: 1061 + dependencies: 1062 + boolbase: 1.0.0 1063 + css-select: 5.2.2 1064 + css-what: 6.2.2 1065 + domelementtype: 2.3.0 1066 + domhandler: 5.0.3 1067 + domutils: 3.2.2 1068 + 1069 + cheerio@1.2.0: 1070 + dependencies: 1071 + cheerio-select: 2.1.0 1072 + dom-serializer: 2.0.0 1073 + domhandler: 5.0.3 1074 + domutils: 3.2.2 1075 + encoding-sniffer: 0.2.1 1076 + htmlparser2: 10.1.0 1077 + parse5: 7.3.0 1078 + parse5-htmlparser2-tree-adapter: 7.1.0 1079 + parse5-parser-stream: 7.1.2 1080 + undici: 7.24.7 1081 + whatwg-mimetype: 4.0.0 1082 + 862 1083 chokidar@3.6.0: 863 1084 dependencies: 864 1085 anymatch: 3.1.3 ··· 875 1096 dependencies: 876 1097 readdirp: 4.1.2 877 1098 1099 + clean-css@5.3.3: 1100 + dependencies: 1101 + source-map: 0.6.1 1102 + 878 1103 commander@10.0.1: {} 879 1104 1105 + commander@2.20.3: {} 1106 + 880 1107 commander@5.1.0: {} 881 1108 882 1109 concat-map@0.0.1: {} 883 1110 1111 + css-select@5.2.2: 1112 + dependencies: 1113 + boolbase: 1.0.0 1114 + css-what: 6.2.2 1115 + domhandler: 5.0.3 1116 + domutils: 3.2.2 1117 + nth-check: 2.1.1 1118 + 1119 + css-what@6.2.2: {} 1120 + 884 1121 debug@2.6.9: 885 1122 dependencies: 886 1123 ms: 2.0.0 ··· 902 1139 domhandler: 4.3.1 903 1140 entities: 2.2.0 904 1141 1142 + dom-serializer@2.0.0: 1143 + dependencies: 1144 + domelementtype: 2.3.0 1145 + domhandler: 5.0.3 1146 + entities: 4.5.0 1147 + 905 1148 domelementtype@2.3.0: {} 906 1149 907 1150 domhandler@4.3.1: 908 1151 dependencies: 909 1152 domelementtype: 2.3.0 910 1153 1154 + domhandler@5.0.3: 1155 + dependencies: 1156 + domelementtype: 2.3.0 1157 + 911 1158 domutils@2.8.0: 912 1159 dependencies: 913 1160 dom-serializer: 1.4.1 914 1161 domelementtype: 2.3.0 915 1162 domhandler: 4.3.1 916 1163 1164 + domutils@3.2.2: 1165 + dependencies: 1166 + dom-serializer: 2.0.0 1167 + domelementtype: 2.3.0 1168 + domhandler: 5.0.3 1169 + 1170 + dot-case@3.0.4: 1171 + dependencies: 1172 + no-case: 3.0.4 1173 + tslib: 2.8.1 1174 + 917 1175 ee-first@1.1.1: {} 1176 + 1177 + eleventy-plugin-toc@1.1.5: 1178 + dependencies: 1179 + cheerio: 1.2.0 918 1180 919 1181 encodeurl@2.0.0: {} 1182 + 1183 + encoding-sniffer@0.2.1: 1184 + dependencies: 1185 + iconv-lite: 0.6.3 1186 + whatwg-encoding: 3.1.1 920 1187 921 1188 entities@2.2.0: {} 922 1189 ··· 926 1193 927 1194 entities@6.0.1: {} 928 1195 1196 + entities@7.0.1: {} 1197 + 929 1198 errno@1.0.0: 930 1199 dependencies: 931 1200 prr: 1.0.1 ··· 986 1255 section-matter: 1.0.0 987 1256 strip-bom-string: 1.0.0 988 1257 1258 + html-minifier-terser@7.2.0: 1259 + dependencies: 1260 + camel-case: 4.1.2 1261 + clean-css: 5.3.3 1262 + commander: 10.0.1 1263 + entities: 4.5.0 1264 + param-case: 3.0.4 1265 + relateurl: 0.2.7 1266 + terser: 5.46.1 1267 + 1268 + htmlparser2@10.1.0: 1269 + dependencies: 1270 + domelementtype: 2.3.0 1271 + domhandler: 5.0.3 1272 + domutils: 3.2.2 1273 + entities: 7.0.1 1274 + 989 1275 htmlparser2@7.2.0: 990 1276 dependencies: 991 1277 domelementtype: 2.3.0 ··· 1002 1288 setprototypeof: 1.2.0 1003 1289 statuses: 2.0.2 1004 1290 toidentifier: 1.0.1 1291 + 1292 + iconv-lite@0.6.3: 1293 + dependencies: 1294 + safer-buffer: 2.1.2 1005 1295 1006 1296 immutable@5.1.5: {} 1007 1297 ··· 1059 1349 1060 1350 list-to-array@1.1.0: {} 1061 1351 1352 + lower-case@2.0.2: 1353 + dependencies: 1354 + tslib: 2.8.1 1355 + 1062 1356 luxon@3.7.2: {} 1063 1357 1064 1358 markdown-it@14.1.1: ··· 1096 1390 1097 1391 ms@2.1.3: {} 1098 1392 1393 + no-case@3.0.4: 1394 + dependencies: 1395 + lower-case: 2.0.2 1396 + tslib: 2.8.1 1397 + 1099 1398 node-addon-api@7.1.1: 1100 1399 optional: true 1101 1400 ··· 1107 1406 1108 1407 normalize-path@3.0.0: {} 1109 1408 1409 + nth-check@2.1.1: 1410 + dependencies: 1411 + boolbase: 1.0.0 1412 + 1110 1413 nunjucks@3.2.4(chokidar@3.6.0): 1111 1414 dependencies: 1112 1415 a-sync-waterfall: 1.0.1 ··· 1119 1422 dependencies: 1120 1423 ee-first: 1.1.1 1121 1424 1425 + param-case@3.0.4: 1426 + dependencies: 1427 + dot-case: 3.0.4 1428 + tslib: 2.8.1 1429 + 1122 1430 parse-srcset@1.0.2: {} 1123 1431 1432 + parse5-htmlparser2-tree-adapter@7.1.0: 1433 + dependencies: 1434 + domhandler: 5.0.3 1435 + parse5: 7.3.0 1436 + 1437 + parse5-parser-stream@7.1.2: 1438 + dependencies: 1439 + parse5: 7.3.0 1440 + 1441 + parse5@7.3.0: 1442 + dependencies: 1443 + entities: 6.0.1 1444 + 1124 1445 parseurl@1.3.3: {} 1125 1446 1447 + pascal-case@3.1.2: 1448 + dependencies: 1449 + no-case: 3.0.4 1450 + tslib: 2.8.1 1451 + 1126 1452 picomatch@2.3.2: {} 1127 1453 1128 1454 picomatch@4.0.4: {} ··· 1148 1474 posthtml-parser: 0.11.0 1149 1475 posthtml-render: 3.0.0 1150 1476 1477 + prismjs@1.30.0: {} 1478 + 1151 1479 prr@1.0.1: {} 1152 1480 1153 1481 punycode.js@2.3.1: {} ··· 1160 1488 1161 1489 readdirp@4.1.2: {} 1162 1490 1491 + relateurl@0.2.7: {} 1492 + 1493 + safer-buffer@2.1.2: {} 1494 + 1163 1495 sass@1.99.0: 1164 1496 dependencies: 1165 1497 chokidar: 4.0.3 ··· 1201 1533 1202 1534 source-map-js@1.2.1: {} 1203 1535 1536 + source-map-support@0.5.21: 1537 + dependencies: 1538 + buffer-from: 1.1.2 1539 + source-map: 0.6.1 1540 + 1541 + source-map@0.6.1: {} 1542 + 1204 1543 sprintf-js@1.0.3: {} 1205 1544 1206 1545 ssri@11.0.0: ··· 1211 1550 1212 1551 strip-bom-string@1.0.0: {} 1213 1552 1553 + terser@5.46.1: 1554 + dependencies: 1555 + '@jridgewell/source-map': 0.3.11 1556 + acorn: 8.16.0 1557 + commander: 2.20.3 1558 + source-map-support: 0.5.21 1559 + 1214 1560 tinyglobby@0.2.15: 1215 1561 dependencies: 1216 1562 fdir: 6.5.0(picomatch@4.0.4) ··· 1222 1568 1223 1569 toidentifier@1.0.1: {} 1224 1570 1571 + tslib@2.8.1: {} 1572 + 1225 1573 uc.micro@2.1.0: {} 1226 1574 1575 + undici@7.24.7: {} 1576 + 1227 1577 unpipe@1.0.0: {} 1228 1578 1229 1579 urlpattern-polyfill@10.1.0: {} 1580 + 1581 + whatwg-encoding@3.1.1: 1582 + dependencies: 1583 + iconv-lite: 0.6.3 1584 + 1585 + whatwg-mimetype@4.0.0: {} 1230 1586 1231 1587 ws@8.20.0: {}
+37
src/_includes/main.njk
··· 1 + <!DOCTYPE html> 2 + <html lang="en"> 3 + <head> 4 + <meta charset="UTF-8" /> 5 + 6 + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 7 + 8 + <title>TheClashFruit's Docs &bull; {{ title }}</title> 9 + 10 + <link rel="stylesheet" href="/css/style.css" /> 11 + 12 + <link rel="icon" href="/favicon.svg" /> 13 + </head> 14 + <body> 15 + <header> 16 + <h1>TheClashFruit's Docs</h1> 17 + </header> 18 + 19 + <aside> 20 + <nav> 21 + {{ collections.all | eleventyNavigation | eleventyNavigationToHtml | safe }} 22 + </nav> 23 + </aside> 24 + 25 + <main> 26 + <h2> 27 + {{ title }} 28 + </h2> 29 + 30 + <article>{{ content | safe }}</article> 31 + </main> 32 + 33 + {% if content | toc %} 34 + <aside>{{ content | toc }}</aside> 35 + {% endif %} 36 + </body> 37 + </html>
+54
src/_includes/mod.njk
··· 1 + <!DOCTYPE html> 2 + <html lang="en"> 3 + <head> 4 + <meta charset="UTF-8" /> 5 + 6 + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 7 + 8 + <title>TheClashFruit's Docs &bull; {{ title }}</title> 9 + 10 + <link rel="stylesheet" href="/css/style.css" /> 11 + 12 + <link rel="icon" href="/favicon.svg" /> 13 + </head> 14 + <body> 15 + <header> 16 + <h1>TheClashFruit's Docs</h1> 17 + </header> 18 + 19 + <aside> 20 + <nav> 21 + {{ collections.all | eleventyNavigation | eleventyNavigationToHtml | safe }} 22 + </nav> 23 + </aside> 24 + 25 + <main> 26 + <div class="modTitle"> 27 + <h2> 28 + {{ title }} 29 + </h2> 30 + <p> 31 + {{ description }} 32 + </p> 33 + </div> 34 + 35 + <div class="modDownloads"> 36 + <ul> 37 + {% for download in mod.downloads %} 38 + <li> 39 + <a href="{{download.link}}" target="_blank">{{download.platform}}</a> 40 + </li> 41 + {% endfor %} 42 + </ul> 43 + </div 44 + 45 + <hr /> 46 + 47 + <article>{{ content | safe }}</article> 48 + </main> 49 + 50 + {% if content | toc %} 51 + <aside>{{ content | toc }}</aside> 52 + {% endif %} 53 + </body> 54 + </html>
+238
src/css/_typography.scss
··· 1 + // Cantarell 2 + @font-face { 3 + font-family: "Cantarell"; 4 + font-style: normal; 5 + font-weight: 100 800; 6 + font-stretch: 100%; 7 + src: 8 + local("Cantarell Regular"), 9 + local("Cantarell-Regular"), 10 + url("/fonts/cantarell.woff2") format("woff2"), 11 + url("/fonts/cantarell.woff") format("woff"); 12 + font-display: swap; 13 + } 14 + 15 + // Monaspace 16 + @font-face { 17 + font-family: "Monaspace Radon"; 18 + font-style: normal; 19 + font-weight: 100 800; 20 + font-stretch: 100%; 21 + src: 22 + local("Monaspace Radon"), 23 + local("Monaspace-Radon"), 24 + url("/fonts/monaspace-radon.woff2") format("woff2"), 25 + url("/fonts/monaspace-radon.woff") format("woff"); 26 + font-display: swap; 27 + } 28 + 29 + :root { 30 + --fontCantarell: "Cantarell"; 31 + --fontMonaspaceRadon: "Monaspace Radon"; 32 + } 33 + 34 + body { 35 + font-family: var(--fontCantarell), sans-serif; 36 + 37 + font-size: 100%; 38 + font-weight: 400; 39 + 40 + line-height: 1.5; 41 + } 42 + 43 + ::selection { 44 + background: color-mix(var(--primary) 25%, transparent 75%); 45 + } 46 + 47 + h1, 48 + h2, 49 + h3, 50 + h4, 51 + h5, 52 + h6 { 53 + font-family: var(--fontCantarell), sans-serif; 54 + font-weight: 500; 55 + 56 + margin-bottom: 8px; 57 + } 58 + 59 + h1 { 60 + font-size: 200%; 61 + } 62 + 63 + h2 { 64 + font-size: 180%; 65 + } 66 + 67 + h3 { 68 + font-size: 160%; 69 + } 70 + 71 + h4 { 72 + font-size: 140%; 73 + } 74 + 75 + h5 { 76 + font-size: 125%; 77 + } 78 + 79 + h6 { 80 + font-size: 110%; 81 + } 82 + 83 + p { 84 + margin-bottom: 8px; 85 + 86 + text-align: justify; 87 + text-justify: inter-word; 88 + 89 + &:last-child { 90 + margin-bottom: 0; 91 + } 92 + } 93 + 94 + small { 95 + font-size: 80%; 96 + } 97 + 98 + pre, 99 + code { 100 + font-family: var(--fontMonaspaceRadon), monospace; 101 + } 102 + 103 + pre { 104 + padding: 16px; 105 + 106 + margin-bottom: 8px; 107 + 108 + width: 100%; 109 + overflow: auto; 110 + 111 + background: var(--surfaceContainerLow); 112 + 113 + border: 1px solid var(--outlineVariant); 114 + border-radius: 16px; 115 + 116 + &:last-child { 117 + margin-bottom: 0; 118 + } 119 + } 120 + 121 + button, 122 + input, 123 + textarea { 124 + font-family: inherit; 125 + font-size: 100%; 126 + 127 + color: inherit; 128 + } 129 + 130 + input, 131 + textarea { 132 + background: none; 133 + 134 + padding: 12px; 135 + 136 + outline: 1px solid transparent; 137 + outline-offset: -1px; 138 + 139 + border: 1px solid var(--outlineVariant); 140 + border-radius: 12px; 141 + 142 + width: 100%; 143 + 144 + transition: 0.24s cubic-bezier(0.34, 1.56, 0.64, 1); 145 + 146 + &:hover, 147 + &:active, 148 + &:focus { 149 + outline-width: 2px; 150 + outline-color: var(--primary); 151 + } 152 + } 153 + 154 + ul { 155 + list-style: inside; 156 + } 157 + 158 + ol { 159 + list-style: inside decimal; 160 + } 161 + 162 + img { 163 + max-width: 100%; 164 + } 165 + 166 + blockquote { 167 + padding: 16px; 168 + 169 + background: var(--secondaryContainer); 170 + color: var(--onSecondaryContainer); 171 + 172 + border-left: 4px solid var(--primary); 173 + border-radius: 16px; 174 + 175 + margin-bottom: 8px; 176 + } 177 + 178 + hr { 179 + margin-bottom: 8px; 180 + 181 + border: none; 182 + border-bottom: 1px solid var(--outlineVariant); 183 + } 184 + 185 + button { 186 + display: flex; 187 + 188 + align-items: center; 189 + justify-content: center; 190 + 191 + gap: 12px; 192 + 193 + font-weight: 400; 194 + 195 + background: var(--primary); 196 + color: var(--onPrimary); 197 + 198 + border: 1px solid transparent; 199 + border-radius: 8px; 200 + 201 + padding: 8px 12px; 202 + 203 + cursor: pointer; 204 + 205 + transition: all 0.15s cubic-bezier(0.34, 1.56, 0.64, 1); 206 + 207 + &:hover, 208 + &:focus { 209 + scale: 1.025; 210 + } 211 + 212 + &:active { 213 + scale: 1.01; 214 + 215 + border-radius: 12px; 216 + } 217 + 218 + &:disabled { 219 + background: var(--surfaceDim); 220 + color: var(--onSurface); 221 + 222 + &:hover { 223 + scale: 1; 224 + } 225 + } 226 + } 227 + 228 + a { 229 + color: var(--primary); 230 + 231 + transition: 0.24s cubic-bezier(0.34, 1.56, 0.64, 1); 232 + 233 + text-decoration-thickness: 1px; 234 + 235 + &:hover { 236 + text-decoration-thickness: 3px; 237 + } 238 + }
+106
src/css/style.scss
··· 1 1 @use "theme"; 2 + @use "typography"; 3 + 4 + * { 5 + padding: 0; 6 + margin: 0; 7 + 8 + box-sizing: border-box; 9 + 10 + scrollbar-color: var(--primary) var(--surface); 11 + scrollbar-gutter: stable; 12 + } 13 + 14 + body { 15 + background: var(--surface); 16 + color: var(--onSurface); 17 + 18 + min-height: 100svh; 19 + max-width: 80ch; 20 + 21 + margin: 0 auto; 22 + padding: 16px; 23 + 24 + > main { 25 + margin-bottom: 16px; 26 + 27 + min-height: calc(100dvh - 75px - 50px - (2 * 16px)); 28 + 29 + @media (max-width: 769px) { 30 + min-height: calc(100dvh - 75px - 106px - 60px - (2 * 16px)); 31 + } 32 + 33 + ul, 34 + ol { 35 + margin-bottom: 8px; 36 + 37 + &:last-child { 38 + margin-bottom: 0; 39 + } 40 + } 41 + } 42 + } 43 + 44 + nav { 45 + > ul { 46 + margin-left: 8px; 47 + } 48 + } 49 + 50 + ul, 51 + ol { 52 + ul, 53 + ol { 54 + margin-left: 16px; 55 + } 56 + } 57 + 58 + aside { 59 + position: absolute; 60 + 61 + left: calc(50% - ((80ch) / 2) - (250px)); 62 + 63 + width: 250px; 64 + } 65 + 66 + // @view-transition 67 + // CSS only solution is chromium only :( 68 + 69 + main { 70 + view-transition-name: main; 71 + } 72 + 73 + @keyframes scale-in { 74 + from { 75 + transform: scale(0.96); 76 + opacity: 0; 77 + } 78 + 79 + to { 80 + transform: scale(1); 81 + opacity: 1; 82 + } 83 + } 84 + 85 + @keyframes scale-out { 86 + from { 87 + transform: scale(1); 88 + opacity: 1; 89 + } 90 + 91 + to { 92 + transform: scale(0.96); 93 + opacity: 0; 94 + } 95 + } 96 + 97 + ::view-transition-new(main) { 98 + animation: scale-in 0.24s cubic-bezier(0.34, 1.56, 0.64, 1) both; 99 + } 100 + 101 + ::view-transition-old(main) { 102 + animation: scale-out 0.24s cubic-bezier(0.34, 1.56, 0.64, 1) both; 103 + } 104 + 105 + @view-transition { 106 + navigation: auto; 107 + }
+57
src/ddg/actions.md
··· 1 + --- 2 + layout: main.njk 3 + title: Actions 4 + 5 + eleventyNavigation: 6 + key: Actions 7 + parent: Data Driven GUIs 8 + --- 9 + 10 + An action looks something like this: 11 + 12 + ```json 13 + { 14 + "type": "ddg:open_screen", 15 + "action": { 16 + "screen": "ddg:screen/example.xml", 17 + "title": "Hello, World!" 18 + } 19 + } 20 + ``` 21 + 22 + ### Advanced 23 + 24 + #### Actions with Classes (Coming Soon™) 25 + 26 + You can call classes that implement `JavaAction`. This is useful for actions that require more complex logic or state. 27 + 28 + Example: 29 + ```json 30 + { 31 + "type": "ddg:java_action", 32 + "parent": "ddg:editbox_value", 33 + "action": { 34 + "class": "me.theclashfruit.ddg.example.EditBoxValueAction" 35 + } 36 + } 37 + ``` 38 + 39 + `EditBoxValueAction.java`: 40 + ```java 41 + package me.theclashfruit.ddg.example; 42 + 43 + import java.util.HashMap; 44 + import java.util.Map; 45 + 46 + import me.theclashfruit.ddg.api.action.JavaAction; 47 + 48 + public class EditBoxValueAction implements JavaAction { 49 + @Override 50 + public Map<String, Runnable> getFields() { 51 + Map<String, Runnable> action = new HashMap<>(); 52 + action.put("returns", () -> "Hello World!"); 53 + 54 + return action; 55 + } 56 + } 57 + ```
+26
src/ddg/components/button.md
··· 1 + --- 2 + layout: main.njk 3 + title: Button 4 + 5 + eleventyNavigation: 6 + key: Button 7 + parent: Components 8 + --- 9 + 10 + Just a silly little button. 11 + 12 + ## Example 13 + 14 + ```xml 15 + <Button action="ddg:close_menu">Close</Button> 16 + ``` 17 + ## Attributes 18 + 19 + | Attribute | Type | Description | 20 + |-----------|--------------|---------------------------------------------------| 21 + | `position`| `(int; int)` | The position of the button in the menu. | 22 + | `action` | `string` | The action to perform when the button is clicked. | 23 + | `width` | `int` | The width of the button in pixels. | 24 + | `height` | `int` | The height of the button in pixels. | 25 + 26 + \* Required.
+33
src/ddg/components/editbox.md
··· 1 + --- 2 + layout: main.njk 3 + title: EditBox 4 + 5 + eleventyNavigation: 6 + key: EditBox 7 + parent: Components 8 + --- 9 + 10 + An edit box for entering text. 11 + 12 + ## Example 13 + 14 + ```xml 15 + <EditBox id="config" width="300" height="200" placeholder="Enter you thoughts here..." /> 16 + ``` 17 + 18 + ## Attributes 19 + 20 + | Attribute | Type | Description | 21 + |----------------|--------------------------|-------------------------------------------| 22 + | `position` | `(int; int)` | The position of the edit box in the menu. | 23 + | `id` | `string` | The id of the edit box. | 24 + | `width`* | `int` | The width of the edit box in pixels. | 25 + | `height`* | `int` | The height of the edit box in pixels. | 26 + | `placeholder`* | `string` | The placeholder text for the edit box. | 27 + | `value` | `string` or `action`[^1] | The default value of the edit box. | 28 + 29 + \* Required. 30 + 31 + --- 32 + 33 + [^1]: An action that inherits from `ddg:editbox_value` can be used to set the value of the edit box. The action must return a string.
+26
src/ddg/components/grid.md
··· 1 + --- 2 + layout: main.njk 3 + title: Grid 4 + 5 + eleventyNavigation: 6 + key: Grid 7 + parent: Components 8 + --- 9 + 10 + A grid layout for arranging components in a menu. 11 + 12 + ## Example 13 + 14 + ```xml 15 + <Grid row-gap="8"> 16 + ... 17 + </Grid> 18 + ``` 19 + ## Attributes 20 + 21 + | Attribute | Type | Description | 22 + |-----------------------------------|--------------|---------------------------------------------------| 23 + | `position` | `(int; int)` | The position of the grid in the menu. | 24 + | `gap` or `row-gap` & `column-gap` | `int` | The gap between the rows & columns in the grid. | 25 + 26 + \* Required.
+22
src/ddg/components/index.md
··· 1 + --- 2 + layout: main.njk 3 + title: Components 4 + 5 + eleventyNavigation: 6 + key: Components 7 + parent: Data Driven GUIs 8 + --- 9 + 10 + A list of components that can be used in the menu. 11 + 12 + * [Button](button) 13 + * [EditBox](editbox) 14 + * [Grid](grid) 15 + * [Layout](layout) 16 + * [Tab](tab) 17 + * [TabLayout](tablayout) 18 + * [Text](text) 19 + 20 + ## Descriptor Components 21 + 22 + Descriptor components are components that can only be used inside of a specific parent component. For example, `Tabs` and `Pages` can only be used inside of `TabLayout`. They are not standalone components and cannot be used outside of their designated parent component.
+33
src/ddg/components/layout.md
··· 1 + --- 2 + layout: main.njk 3 + title: Layout 4 + 5 + eleventyNavigation: 6 + key: Layout 7 + parent: Components 8 + --- 9 + 10 + Either a `HorizontalLayout` or a `VerticalLayout`. 11 + 12 + ## Example 13 + 14 + ```xml 15 + <HorizontalLayout gap="8"> 16 + <!-- ... --> 17 + </HorizontalLayout> 18 + ``` 19 + 20 + ```xml 21 + <VerticalLayout> 22 + <!-- ... --> 23 + </VerticalLayout> 24 + ``` 25 + 26 + ## Attributes 27 + 28 + | Attribute | Type | Description | 29 + |-----------|--------------|---------------------------------------------| 30 + | `position`| `(int; int)` | The position of the layout in the menu. | 31 + | `gap` | `int` | The gap between the elements in the layout. | 32 + 33 + \* Required.
+28
src/ddg/components/tab.md
··· 1 + --- 2 + layout: main.njk 3 + title: Tab 4 + 5 + eleventyNavigation: 6 + key: Tab 7 + parent: Components 8 + --- 9 + 10 + A tab button component. 11 + 12 + > Note: Not yet available. This is a work in progress and will be available in a future release. 13 + 14 + ## Example 15 + 16 + ```xml 17 + <Tab action="ddg:close_menu">Tab Title</Tab> 18 + ``` 19 + ## Attributes 20 + 21 + | Attribute | Type | Description | 22 + |-----------|--------------|------------------------------------------------| 23 + | `position`| `(int; int)` | The position of the tab in the menu. | 24 + | `action` | `string` | The action to perform when the tab is clicked. | 25 + | `width` | `int` | The width of the tab in pixels. | 26 + | `height` | `int` | The height of the tab in pixels. | 27 + 28 + \* Required.
+42
src/ddg/components/tablayout.md
··· 1 + --- 2 + layout: main.njk 3 + title: TabLayout 4 + 5 + eleventyNavigation: 6 + key: TabLayout 7 + parent: Components 8 + --- 9 + 10 + A layout for arranging components in a tabbed interface. 11 + 12 + > Note: Not yet available. This is a work in progress and will be available in a future release. 13 + 14 + ## Example 15 + 16 + ```xml 17 + <TabLayout> 18 + <Tabs> 19 + <Tab id="one">Tab 1</Tab> 20 + <Tab id="two">Tab 2</Tab> 21 + </Tabs> 22 + <Pages> 23 + <HorizontalLayout id="one"> 24 + <Text>Content for Tab 1</Text> 25 + </HorizontalLayout> 26 + <VerticalLayout id="two"> 27 + <Text>Content for Tab 2</Text> 28 + </VerticalLayout> 29 + </Pages> 30 + </TabLayout> 31 + ``` 32 + 33 + > **Note**: `Tabs` and `Pages` are so called "[descriptor](/ddg/components/#descriptor-components)" components and thus can only be used inside of `TabLayout`. 34 + 35 + ## Attributes 36 + 37 + | Attribute | Type | Description | 38 + |-----------|--------------|---------------------------------------------| 39 + | `position`| `(int; int)` | The position of the layout in the menu. | 40 + | `gap` | `int` | The gap between the elements in the layout. | 41 + 42 + \* Required.
+23
src/ddg/components/text.md
··· 1 + --- 2 + layout: main.njk 3 + title: Text 4 + 5 + eleventyNavigation: 6 + key: Text 7 + parent: Components 8 + --- 9 + 10 + Some text. 11 + 12 + ## Example 13 + 14 + ```xml 15 + <Text>Close</Text> 16 + ``` 17 + ## Attributes 18 + 19 + | Attribute | Type | Description | 20 + |-----------|--------------|---------------------------------------------------| 21 + | `position`| `(int; int)` | The position of the text in the menu. | 22 + 23 + \* Required.
+81
src/ddg/index.md
··· 1 + --- 2 + layout: main.njk 3 + title: Data Driven GUIs 4 + 5 + eleventyNavigation: 6 + key: Data Driven GUIs 7 + --- 8 + 9 + Developer docs for the Data Driven GUIs mod. 10 + 11 + ## Getting Started 12 + 13 + ### Import The Library 14 + 15 + Add the repository and dependency to your `build.gradle.kts`: 16 + 17 + <details> 18 + <summary>Stable (Releases Repo)</summary> 19 + 20 + ```kotlin 21 + maven { 22 + name = "TheClashFruit's Maven Releases" 23 + url = uri("https://mvn.theclashfruit.me/releases") 24 + } 25 + ``` 26 + </details> 27 + 28 + <details> 29 + <summary>Beta, Alpha (Snapshots Repo)</summary> 30 + 31 + ```kotlin 32 + maven { 33 + name = "TheClashFruit's Maven Snapshots" 34 + url = uri("https://mvn.theclashfruit.me/snapshots") 35 + } 36 + ``` 37 + </details> 38 + 39 + ```kotlin 40 + implementation("me.theclashfruit:ddg-$mc_version-fabric:$version") 41 + ``` 42 + 43 + ## Creating a GUI 44 + 45 + The menus are stored in `data/modid/screen/<menu_name>.xml` and the actions are stored in `data/modid/action/<action>.json`. 46 + 47 + An example menu would look like this: 48 + ```xml 49 + <Root> <!-- Evaluated like html and puts elements bellow one another. (Uhh I forgor so not yet™) --> 50 + <Button postion="(10;10)" width="100" height="20">Either a translation key or a string.</Button> 51 + <!-- ^^^^^^^^^^^^^^^^^ If a position is defined it fill be a "fixed" element. --> 52 + <Button action="modid:action">Another button</Button> <!-- The default button size is `200x20`. --> 53 + <!-- ^^^^^^^^^^^^^^^^^^^^^ Actions can be defined with action and the id for the action file. --> 54 + 55 + <Text>Some text</Text> 56 + </Root> 57 + ``` 58 + 59 + > You can kind of think of it like a web page, where the root element is the body and the elements are like divs, buttons, inputs and paragraphs. 60 + 61 + Some built in action types are: 62 + * `ddg:open_menu` - Opens a menu. 63 + <!-- 64 + * `ddg:close_menu` - Closes the current menu. &mdash; Can also be called directly from the menu. 65 + * `ddg:run_command` - Runs a command. 66 + --> 67 + 68 + ## Opening a Menu From a Server 69 + 70 + **From a mod using the mod's api**: 71 + ```java 72 + ServerPlayNetworking.send(player, new OpenCustomScreenPayload(Identifier.of("modid", "menu_name"), "title")); 73 + ``` 74 + 75 + **With a command with the mod installed**: 76 + ```plaintext 77 + /ddg open <screen> <title> [<player>] 78 + 79 + # Example: 80 + /ddg open modid:screen/menu_name.xml "Title" 81 + ```
+9 -1
src/index.md
··· 1 - # Hello, World! 1 + --- 2 + layout: main.njk 3 + title: Home 4 + 5 + eleventyNavigation: 6 + key: Home 7 + --- 8 + 9 + Here you will be able to find the documentation for my projects.
+36
src/kotrinth/facets.md
··· 1 + --- 2 + layout: main.njk 3 + title: Facets 4 + 5 + eleventyNavigation: 6 + key: Facets 7 + parent: Kotrinth 8 + --- 9 + 10 + Modrinth uses their so-called facets for filtering search results. 11 + 12 + ### Usage 13 + 14 + ```kotlin 15 + package com.example 16 + 17 + import me.theclashfruit.kotrinth.v2.Kotrinth 18 + import me.theclashfruit.kotrinth.util.Facet 19 + import me.theclashfruit.kotrinth.enums.ProjectType 20 + import me.theclashfruit.kotrinth.enums.Operation 21 + 22 + suspend fun main() { 23 + // ... 24 + 25 + val facets = Facet.builder() 26 + .and(Facet.ProjectType, ProjectType.Mod) 27 + .or(Facet.Version, "1.20", "1.20.1") 28 + .exclude(Facet.Category, "forge") 29 + .op(Facet.Downloads, Operation.GreaterOrEqual, 10) 30 + .build() 31 + 32 + println(kotrinth.search( 33 + facets = facets 34 + )) 35 + } 36 + ```
+90
src/kotrinth/index.md
··· 1 + --- 2 + layout: main.njk 3 + title: Kotrinth 4 + 5 + badges: 6 + - url: https://img.shields.io/maven-metadata/v?metadataUrl=https%3A%2F%2Fmvn.theclashfruit.me%2Fsnapshots%2Fme%2Ftheclashfruit%2Fkotrinth%2Fmaven-metadata.xml&label=Snapshots%20Version 7 + alt: Snapshots 8 + - url: https://img.shields.io/maven-metadata/v?metadataUrl=https%3A%2F%2Fmvn.theclashfruit.me%2Freleases%2Fme%2Ftheclashfruit%2Fkotrinth%2Fmaven-metadata.xml&label=Releases%20Version 9 + alt: Releases 10 + 11 + eleventyNavigation: 12 + key: Kotrinth 13 + --- 14 + 15 + A Modrinth API wrapper for Kotlin. 16 + 17 + ## Getting Started 18 + 19 + ### Usage 20 + 21 + #### Import Kotrinth 22 + 23 + Add the repository and dependency to your `build.gradle.kts`: 24 + 25 + <details> 26 + <summary>Beta, Alpha (Snapshots Repo)</summary> 27 + 28 + ```kotlin 29 + maven { 30 + name = "TheClashFruit's Maven Snapshots" 31 + url = uri("https://mvn.theclashfruit.me/snapshots") 32 + } 33 + ``` 34 + </details> 35 + 36 + <details> 37 + <summary>Stable (Releases Repo)</summary> 38 + 39 + ```kotlin 40 + maven { 41 + name = "TheClashFruit's Maven Releases" 42 + url = uri("https://mvn.theclashfruit.me/releases") 43 + } 44 + ``` 45 + </details> 46 + 47 + ```kotlin 48 + implementation("me.theclashfruit:kotrinth:$version") 49 + ``` 50 + 51 + #### Example 52 + 53 + ```kotlin 54 + package com.example 55 + 56 + import me.theclashfruit.kotrinth.Kotrinth 57 + 58 + suspend fun main() { 59 + // Create a new Kotrinth instance. 60 + val kotrinth = Kotrinth( 61 + appName = "Example", 62 + appVersion = "1.0.0", 63 + appContact = "admin@example.com" 64 + ) 65 + 66 + // Get a user by their username. 67 + val user = kotrinth.v2.user("TheClashFruit") 68 + 69 + // Print the user's id. 70 + println(user.id) 71 + } 72 + ``` 73 + 74 + --- 75 + 76 + ### Cloning 77 + 78 + This repository doesn't use any special stuff, so we can clone it in to old-fashioned way of `git clone https://github.com/TheClashFruit/Kotrinth.git`. 79 + 80 + ### Building 81 + 82 + Building is also straight forward, open the project in your desired code editor, IDE or just a terminal then just run `./gradlew build` in a terminal. 83 + 84 + ## Contributing 85 + 86 + You can read the [CONTRIBUTING.md](https://github.com/TheClashFruit/Kotrinth/blob/main/CONTRIBUTING.md) file for details on the project's code of conduct, and the process for submitting pull requests to this project, have fun! 87 + 88 + ## License 89 + 90 + This project is licensed under MIT, if you want to learn more check the [LICENSE](https://github.com/TheClashFruit/Kotrinth/blob/main/LICENSE) file.
+84
src/kotrinth/oauth.md
··· 1 + --- 2 + layout: main.njk 3 + title: OAuth 4 + 5 + eleventyNavigation: 6 + key: OAuth 7 + parent: Kotrinth 8 + --- 9 + 10 + > OAuth is going to be in Modrinth's v3 api which is currently 11 + > under development, thus marking it experimental. 12 + 13 + Using Modrinth's OAuth with Kotrinth. 14 + 15 + ## Setup Guide 16 + 17 + ### 1. Set Up the OAuth Class 18 + 19 + ```kotlin 20 + package com.example 21 + 22 + import me.theclashfruit.kotrinth.v2.Kotrinth 23 + import me.theclashfruit.kotrinth.experimental.OAuth 24 + 25 + suspend fun main() { 26 + // ... 27 + 28 + // Create a new OAuth instance. 29 + val oauth = OAuth( 30 + kotrinth, 31 + clientId = "...", 32 + clientSecret = "..." 33 + ) 34 + } 35 + ``` 36 + 37 + ### 2. Create the Auth Uri 38 + 39 + ```kotlin 40 + package com.example 41 + 42 + import me.theclashfruit.kotrinth.v2.Kotrinth 43 + import me.theclashfruit.kotrinth.experimental.OAuth 44 + import me.theclashfruit.kotrinth.enums.Scope 45 + 46 + suspend fun main() { 47 + // ... 48 + 49 + // Create the uri. 50 + val uri = oauth.createAuthUrl( 51 + "https://example.com/api/auth", 52 + setOf( 53 + Scope.USER_READ_EMAIL, 54 + Scope.USER_READ, 55 + Scope.USER_WRITE 56 + ) 57 + ) 58 + 59 + // Print the uri. 60 + println(uri) 61 + } 62 + ``` 63 + 64 + ### 3. Get the Auth Token 65 + 66 + ```kotlin 67 + package com.example 68 + 69 + import me.theclashfruit.kotrinth.v2.Kotrinth 70 + import me.theclashfruit.kotrinth.experimental.OAuth 71 + import me.theclashfruit.kotrinth.enums.Scope 72 + 73 + suspend fun main() { 74 + // ... 75 + 76 + // Get the auth token. 77 + val res = oauth.token("https://example.com/api/auth", code) 78 + 79 + // Print the token. 80 + if (res != null) { 81 + println(res.accessToken) 82 + } 83 + } 84 + ```
+31
src/kotrinth/search.md
··· 1 + --- 2 + layout: main.njk 3 + title: Search 4 + 5 + eleventyNavigation: 6 + key: Search 7 + parent: Kotrinth 8 + --- 9 + 10 + Modrinth's search is quite robust but a bit complex. 11 + 12 + ### Usage 13 + 14 + ```kotlin 15 + package com.example 16 + 17 + import me.theclashfruit.kotrinth.v2.Kotrinth 18 + import me.theclashfruit.kotrinth.enums.Sort 19 + 20 + suspend fun main() { 21 + // ... 22 + 23 + println(kotrinth.search( 24 + query = "create mod", 25 + [[[facets = facets]]](/kotrinth/facets), 26 + index = Sort.Relevance, 27 + offset = 0, 28 + limit = 25 29 + )) 30 + } 31 + ```
+35
src/mods/cc.md
··· 1 + --- 2 + layout: mod.njk 3 + 4 + title: Cluttered Creative 5 + description: Unable to find anything in the new inventory layout? Well then this mod is for you! It brings the old creative inventory layout (pre 1.19.3) to 1.20+. 6 + 7 + mod: 8 + game: minecraft 9 + downloads: 10 + - platform: Modrinth 11 + link: https://modrinth.com/mod/cluttered-creative 12 + - platform: CurseForge 13 + link: https://www.curseforge.com/minecraft/mc-mods/cluttered-creative 14 + 15 + eleventyNavigation: 16 + key: Cluttered Creative 17 + parent: Mods 18 + --- 19 + 20 + ## FAQ 21 + 22 + ### Mod Compatibility 23 + Probably not compatible with mods that add items to the default item groups, however a compatibility layer is planned. 24 + 25 + ### Missing Items 26 + I'm doing my best to include all items including new ones from 1.20 but I might miss some so please report them on the issues page or my Discord server. 27 + 28 + ## Known Issues 29 + 30 + ### Custom Item Groups 31 + If there is only one custom item group then the page selector will not show, most likely due to the fact that this inventory has one less tab. I'm working on a fix. 32 + 33 + ## Screenshot 34 + 35 + ![Building Blocks](https://cdn.modrinth.com/data/Fs6mB0ic/images/2ec749beb057d36edb6da9ff34519014e7449b76.png)
+73
src/mods/create-piss-n-shit.md
··· 1 + --- 2 + layout: mod.njk 3 + 4 + title: 'Create: Piss & Shit' 5 + description: A Create add-on that adds piss and shit to the game with interesting mechanics! 6 + 7 + mod: 8 + game: minecraft 9 + downloads: 10 + - platform: Modrinth 11 + link: https://modrinth.com/mod/create-pns 12 + - platform: CurseForge 13 + link: https://www.curseforge.com/minecraft/mc-mods/create-pns 14 + 15 + eleventyNavigation: 16 + key: 'Create: Piss & Shit' 17 + parent: Mods 18 + --- 19 + 20 + ## Blocks & Items 21 + 22 + * Piss 23 + * Piss Bucket 24 + * Piss Bottle 25 + * Shit 26 + * Holy Shit 27 + * Shit Block 28 + * Mechanical Toilet 29 + 30 + 31 + <!-- ## Effects 32 + 33 + * Diarrhea - Makes you need to shit more. 34 + * Constipation - Makes you unable to shit. --> 35 + 36 + ## Advancements 37 + 38 + * Shitty Encounter - Obtain some shit by emptying your bowels or stumbling upon some. 39 + * The Pope - Sanctify a piece of shit. 40 + * Shit³ - Craft a block of shit. 41 + * Chemical Attack - Craft a shit candle. 42 + * Yellow Liquid - Obtain a bottle of piss. 43 + * Piss³ - Obtain a bucket of piss. 44 + * Mechanical Marvel - Craft a mechanical toilet. 45 + <!-- * It Sucks - Connect a mechanical toilet to rotational power. --> 46 + * Flush(ed) - Use your newly operational mechanical toilet. <!-- :flushed: --> 47 + 48 + ## Testimonials 49 + 50 + > C:P&S Revolutionized how I can unload my constipated character. 51 + > \- [@lupancham](https://lupancham.net/) 52 + 53 + > “It’s actually made with piss & shit” 54 + > \- [@polycord](https://http.cat/404) 55 + 56 + > "I did not consent to having this testimonial included" 57 + > "also that's disgusting" 58 + > \- [@rowandev](https://modrinth.com/user/RowanDev) 59 + 60 + > This mod significantly improves my game performance 61 + > \- [@worldwidepixel](https://worldwidepixel.ca) 62 + 63 + > Approved by Pridecraft Studios 64 + > \- [@blrryfacee](https://blurry.gay) 65 + 66 + Thanks for the [CRSS](https://crss.cc) discord members for reviewing the mod! 67 + 68 + ## FAQ 69 + 70 + * Forge when? 71 + * never 72 + * Is this for real? 73 + * yes
+38
src/mods/ddg.md
··· 1 + --- 2 + layout: mod.njk 3 + 4 + title: Data Driven GUIs 5 + description: A library to make making GUIs easier using xml & json files. 6 + 7 + mod: 8 + game: minecraft 9 + downloads: 10 + - platform: Modrinth 11 + link: https://modrinth.com/mod/ddg 12 + - platform: CurseForge 13 + link: https://www.curseforge.com/minecraft/mc-mods/ddg 14 + 15 + eleventyNavigation: 16 + title: Data Driven GUIs 17 + key: ddg 18 + parent: Mods 19 + --- 20 + 21 + This mod mainly aims to make making GUIs as painless as possible, but with this it also allows resource packs to modify GUIs or even create new ones. The mod however currently doesn't allow the modification of the default GUIs in Minecraft. 22 + 23 + ### Features 24 + 25 + * **XML Based GUIs**: Write your GUIs like you would a web page. 26 + * **JSON Based Actions**: Make buttons do actions. 27 + * **Uses Built-in Widgets**: No web rendering shenanigans. 28 + * **Custom Server Packet**: Offers servers to open custom GUIs they have created with their resourcepacks. 29 + 30 + ### Usage 31 + 32 + #### For Users 33 + 34 + You just need to install this mod if a mod depends on it or a server requires you to do so. 35 + 36 + #### For Developers 37 + 38 + It's a straight forward proceess to depend on this mod and you can learn more at https://docs.theclashfruit.me/ddg.
+9
src/mods/index.md
··· 1 + --- 2 + layout: main.njk 3 + title: Mods 4 + 5 + eleventyNavigation: 6 + key: Mods 7 + --- 8 + 9 + Just a little category for my mods.
+69
src/mods/lattice.md
··· 1 + --- 2 + layout: mod.njk 3 + 4 + title: Lattice 5 + description: A Simple (for now) Discord chat bridge for Hytale. 6 + 7 + mod: 8 + game: hytale 9 + downloads: 10 + - platform: Modtale 11 + link: https://modtale.net/mod/lattice 12 + - platform: CurseForge 13 + link: https://www.curseforge.com/hytale/mods/lattice 14 + 15 + eleventyNavigation: 16 + key: Lattice 17 + parent: Mods 18 + --- 19 + 20 + ## Setup 21 + 22 + Required Dependencies: 23 + - [PlaceholderAPI](https://placeholderapi.com/downloads/) 24 + - [TinyMessage](https://github.com/Zoltus/TinyMessage) 25 + 26 + Download the Player placeholders for PlaceholderAPI: `/papi ecloud download Player`. 27 + 28 + ### 1. Install The Mod 29 + 30 + Put the jar file into the `mods` folder. 31 + 32 + Then run the server with mod installed to generate the config file, it should generate it at `mods/TheClashFruit_Lattice/Lattice.json`. 33 + 34 + The config file should look something like this: 35 + 36 + ```json 37 + { 38 + "Enabled": false, 39 + "Discord": { 40 + "Token": "your_token_here", 41 + "ChannelId": "", 42 + "WebhookId": "", 43 + "Messages": { 44 + "Join": "%s joined %s.", 45 + "Leave": "%s left." 46 + } 47 + }, 48 + "ChatPrefix": "[Discord]", 49 + "ChatPrefixColour": "#5865F2" 50 + } 51 + ``` 52 + 53 + ### 2. Create a Discord Bot 54 + 55 + Create your bot on the discord developer portal and also enable `Message Content Intent` for your bot then paste the token into the config where it says `your_token_here`. 56 + 57 + Don't forget to invite your bot, here is a template for the invite link: `https://discord.com/oauth2/authorize?client_id={client_id}&permissions=536938496&scope=bot+applications.commands`; Just replace `{client_id}` with your bot's client id. 58 + 59 + ### 3. Create a Channel & Webhook 60 + 61 + Create your channel and copy its id into the channel id in the config. Then go into the settings for the channel and create a webhook and copy it's url, which should look something like `https://discord.com/api/webhooks/1460971511903948851/ydte1zUhNKBVzvpUlsAyGDrdAb83HvYRIl_KiDYhgKJ1x4kgMNCfMfAl3TGklrsegGmo`[^1], copy it's numerical part, here it's `1460971511903948851` and paste it into the config for the `WebhookId`. 62 + 63 + ### 4. Restart The Server 64 + 65 + Set `Enabled` to true and restart the server and chat with people on Discord :3 66 + 67 + (I suck at writing docs) 68 + 69 + [^1]: No that webhook is deleted and I also mangled the token a bit :3
+16
src/public/favicon.svg
··· 1 + <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> 2 + <path d="M11.0002 20C9.24428 20.0053 7.55048 19.3505 6.25474 18.1654C4.959 16.9803 4.15599 15.3515 4.00496 13.6021C3.85393 11.8527 4.36591 10.1104 5.43937 8.72074C6.51283 7.33112 8.06935 6.3957 9.80022 6.1C15.5002 5 17.0002 4.48 19.0002 2C20.0002 4 21.0002 6.18 21.0002 10C21.0002 15.5 16.2202 20 11.0002 20Z" stroke="#565992" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 3 + <path d="M2 21C2 18 3.85 15.64 7.08 15C9.5 14.52 12 13 13 12" stroke="#565992" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 4 + 5 + <style> 6 + path { 7 + stroke: #565992; 8 + } 9 + 10 + @media (prefers-color-scheme: dark) { 11 + path { 12 + stroke: #BFC1FF; 13 + } 14 + } 15 + </style> 16 + </svg>
src/public/fonts/cantarell.woff

This is a binary file and will not be displayed.

src/public/fonts/cantarell.woff2

This is a binary file and will not be displayed.

src/public/fonts/monaspace-radon.woff

This is a binary file and will not be displayed.

src/public/fonts/monaspace-radon.woff2

This is a binary file and will not be displayed.