Compare commits

..

15 Commits

Author SHA1 Message Date
Martin Prokoph
092cef2e24 wiki: update MidnightLib wiki for v1.9.0
Also features various other improvements :)
2025-11-23 13:48:09 +01:00
Martin Prokoph
b84a488af0 chore: update deps 2025-11-22 20:26:26 +01:00
Martin Prokoph
522254fbe4 chore: update stats 2025-08-01 13:23:44 +02:00
Martin Prokoph
91f200dadb wiki: fix missing newline 2025-07-31 11:51:34 +02:00
Martin Prokoph
1e6fb724c3 feat: update BetterLeaves wiki for 9.3 2025-07-31 00:42:37 +02:00
Martin Prokoph
cc9b4ba6e1 test: add citation debug page 2025-07-30 23:45:46 +02:00
Martin Prokoph
b5d4fa1aec feat: update betterleaves script image 2025-07-30 23:45:14 +02:00
Martin Prokoph
810612c4e5 fix: weird gradle info version selector placement 2025-07-30 23:31:36 +02:00
Martin Prokoph
d55cdfa175 feat: create ThisRocks mod page 2025-07-30 23:25:51 +02:00
Martin Prokoph
c580b9e181 feat: improve styling 2025-07-30 23:22:41 +02:00
Martin Prokoph
886b532519 Merge pull request #5 from slonkazoid/patch-1
fix wrong filename in midnightlib wiki
2025-07-20 11:53:25 +02:00
slonkazoid
07d14f50a3 this is case sensitive 2025-06-29 02:51:00 +03:00
Martin Prokoph
8f79dfbd8e fix: change port for matrix delegation 2025-04-28 12:32:10 +02:00
Martin Prokoph
f6192407df feat: add difficulty labels & other utils 2025-04-28 12:16:12 +02:00
Martin Prokoph
e653a3b07a feat: add matrix redirect 2025-04-28 12:13:29 +02:00
30 changed files with 3509 additions and 1774 deletions

View File

@@ -1 +1 @@
[["Map",1,2],"meta::meta",["Map",3,4,5,6],"astro-version","5.5.5","astro-config-digest","{\"root\":{},\"srcDir\":{},\"publicDir\":{},\"outDir\":{},\"cacheDir\":{},\"site\":\"https://www.midnightdust.eu\",\"compressHTML\":true,\"base\":\"/\",\"trailingSlash\":\"ignore\",\"output\":\"static\",\"scopedStyleStrategy\":\"attribute\",\"build\":{\"format\":\"directory\",\"client\":{},\"server\":{},\"assets\":\"_astro\",\"serverEntry\":\"entry.mjs\",\"redirects\":true,\"inlineStylesheets\":\"auto\",\"concurrency\":1},\"server\":{\"open\":false,\"host\":false,\"port\":4321,\"streaming\":true,\"allowedHosts\":[]},\"redirects\":{},\"image\":{\"endpoint\":{\"route\":\"/_image\"},\"service\":{\"entrypoint\":\"astro/assets/services/sharp\",\"config\":{}},\"domains\":[],\"remotePatterns\":[]},\"devToolbar\":{\"enabled\":true},\"markdown\":{\"syntaxHighlight\":{\"type\":\"shiki\",\"excludeLangs\":[\"math\"]},\"shikiConfig\":{\"langs\":[],\"langAlias\":{},\"theme\":\"github-dark\",\"themes\":{},\"wrap\":false,\"transformers\":[]},\"remarkPlugins\":[],\"rehypePlugins\":[],\"remarkRehype\":{},\"gfm\":true,\"smartypants\":true},\"security\":{\"checkOrigin\":true},\"env\":{\"schema\":{},\"validateSecrets\":false},\"experimental\":{\"clientPrerender\":false,\"contentIntellisense\":false,\"responsiveImages\":false,\"serializeConfig\":false,\"headingIdCompat\":false,\"preserveScriptOrder\":false},\"legacy\":{\"collections\":false}}"] [["Map",1,2],"meta::meta",["Map",3,4,5,6],"astro-version","5.16.0","astro-config-digest","{\"root\":{},\"srcDir\":{},\"publicDir\":{},\"outDir\":{},\"cacheDir\":{},\"site\":\"https://www.midnightdust.eu\",\"compressHTML\":true,\"base\":\"/\",\"trailingSlash\":\"ignore\",\"output\":\"static\",\"scopedStyleStrategy\":\"attribute\",\"build\":{\"format\":\"directory\",\"client\":{},\"server\":{},\"assets\":\"_astro\",\"serverEntry\":\"entry.mjs\",\"redirects\":true,\"inlineStylesheets\":\"auto\",\"concurrency\":1},\"server\":{\"open\":false,\"host\":false,\"port\":4321,\"streaming\":true,\"allowedHosts\":[]},\"redirects\":{},\"image\":{\"endpoint\":{\"route\":\"/_image\"},\"service\":{\"entrypoint\":\"astro/assets/services/sharp\",\"config\":{}},\"domains\":[],\"remotePatterns\":[],\"responsiveStyles\":false},\"devToolbar\":{\"enabled\":true},\"markdown\":{\"syntaxHighlight\":{\"type\":\"shiki\",\"excludeLangs\":[\"math\"]},\"shikiConfig\":{\"langs\":[],\"langAlias\":{},\"theme\":\"github-dark\",\"themes\":{},\"wrap\":false,\"transformers\":[]},\"remarkPlugins\":[],\"rehypePlugins\":[],\"remarkRehype\":{},\"gfm\":true,\"smartypants\":true},\"security\":{\"checkOrigin\":true,\"allowedDomains\":[]},\"env\":{\"schema\":{},\"validateSecrets\":false},\"experimental\":{\"clientPrerender\":false,\"contentIntellisense\":false,\"headingIdCompat\":false,\"preserveScriptOrder\":false,\"liveContentCollections\":false,\"csp\":false,\"staticImportMetaEnv\":false,\"chromeDevtoolsWorkspace\":false,\"failOnPrerenderConflict\":false,\"svgo\":false},\"legacy\":{\"collections\":false}}"]

166
.astro/icon.d.ts vendored
View File

@@ -1,5 +1,5 @@
// Automatically generated by astro-icon // Automatically generated by astro-icon
// 8e7429c946c12d2c48e5c45083ba2275bd979b675d70e184ce0a9174f7985787 // aef5c6dc2b1a9c7ed9b06ef4d34a9a2a16624fa1781f2db707f5c45905e9edb0
declare module 'virtual:astro-icon' { declare module 'virtual:astro-icon' {
export type Icon = export type Icon =
@@ -1387,6 +1387,7 @@ declare module 'virtual:astro-icon' {
| "ion:logo-steam" | "ion:logo-steam"
| "ion:logo-stencil" | "ion:logo-stencil"
| "ion:logo-tableau" | "ion:logo-tableau"
| "ion:logo-threads"
| "ion:logo-tiktok" | "ion:logo-tiktok"
| "ion:logo-trapeze" | "ion:logo-trapeze"
| "ion:logo-tumblr" | "ion:logo-tumblr"
@@ -2704,6 +2705,7 @@ declare module 'virtual:astro-icon' {
| "line-md:bell-loop" | "line-md:bell-loop"
| "line-md:bell-twotone" | "line-md:bell-twotone"
| "line-md:bell-twotone-loop" | "line-md:bell-twotone-loop"
| "line-md:bluesky"
| "line-md:brake" | "line-md:brake"
| "line-md:brake-abs" | "line-md:brake-abs"
| "line-md:brake-abs-filled" | "line-md:brake-abs-filled"
@@ -3629,6 +3631,7 @@ declare module 'virtual:astro-icon' {
| "line-md:thumbs-up-filled" | "line-md:thumbs-up-filled"
| "line-md:thumbs-up-twotone" | "line-md:thumbs-up-twotone"
| "line-md:tiktok" | "line-md:tiktok"
| "line-md:trash"
| "line-md:turn-left" | "line-md:turn-left"
| "line-md:turn-right" | "line-md:turn-right"
| "line-md:turn-sharp-left" | "line-md:turn-sharp-left"
@@ -17754,9 +17757,11 @@ declare module 'virtual:astro-icon' {
| "simple-icons:7zip" | "simple-icons:7zip"
| "simple-icons:99designs" | "simple-icons:99designs"
| "simple-icons:9gag" | "simple-icons:9gag"
| "simple-icons:abb"
| "simple-icons:abbott" | "simple-icons:abbott"
| "simple-icons:abbrobotstudio" | "simple-icons:abbrobotstudio"
| "simple-icons:abbvie" | "simple-icons:abbvie"
| "simple-icons:abdownloadmanager"
| "simple-icons:abletonlive" | "simple-icons:abletonlive"
| "simple-icons:aboutdotme" | "simple-icons:aboutdotme"
| "simple-icons:abstract" | "simple-icons:abstract"
@@ -17769,12 +17774,15 @@ declare module 'virtual:astro-icon' {
| "simple-icons:acer" | "simple-icons:acer"
| "simple-icons:acm" | "simple-icons:acm"
| "simple-icons:actigraph" | "simple-icons:actigraph"
| "simple-icons:activeloop"
| "simple-icons:activision" | "simple-icons:activision"
| "simple-icons:activitypub" | "simple-icons:activitypub"
| "simple-icons:actix" | "simple-icons:actix"
| "simple-icons:actualbudget" | "simple-icons:actualbudget"
| "simple-icons:acura" | "simple-icons:acura"
| "simple-icons:ada"
| "simple-icons:adafruit" | "simple-icons:adafruit"
| "simple-icons:adaway"
| "simple-icons:adblock" | "simple-icons:adblock"
| "simple-icons:adblockplus" | "simple-icons:adblockplus"
| "simple-icons:addthis" | "simple-icons:addthis"
@@ -17858,6 +17866,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:alienware" | "simple-icons:alienware"
| "simple-icons:aliexpress" | "simple-icons:aliexpress"
| "simple-icons:alipay" | "simple-icons:alipay"
| "simple-icons:alist"
| "simple-icons:allegro" | "simple-icons:allegro"
| "simple-icons:alliedmodders" | "simple-icons:alliedmodders"
| "simple-icons:allocine" | "simple-icons:allocine"
@@ -17917,6 +17926,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:angularuniversal" | "simple-icons:angularuniversal"
| "simple-icons:anilist" | "simple-icons:anilist"
| "simple-icons:animalplanet" | "simple-icons:animalplanet"
| "simple-icons:animedotjs"
| "simple-icons:ankermake" | "simple-icons:ankermake"
| "simple-icons:anki" | "simple-icons:anki"
| "simple-icons:ansible" | "simple-icons:ansible"
@@ -17925,6 +17935,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:anta" | "simple-icons:anta"
| "simple-icons:antdesign" | "simple-icons:antdesign"
| "simple-icons:antena3" | "simple-icons:antena3"
| "simple-icons:antennapod"
| "simple-icons:anthropic" | "simple-icons:anthropic"
| "simple-icons:antv" | "simple-icons:antv"
| "simple-icons:anycubic" | "simple-icons:anycubic"
@@ -17934,11 +17945,13 @@ declare module 'virtual:astro-icon' {
| "simple-icons:apache" | "simple-icons:apache"
| "simple-icons:apacheairflow" | "simple-icons:apacheairflow"
| "simple-icons:apacheant" | "simple-icons:apacheant"
| "simple-icons:apacheavro"
| "simple-icons:apachecassandra" | "simple-icons:apachecassandra"
| "simple-icons:apachecloudstack" | "simple-icons:apachecloudstack"
| "simple-icons:apachecordova" | "simple-icons:apachecordova"
| "simple-icons:apachecouchdb" | "simple-icons:apachecouchdb"
| "simple-icons:apachedolphinscheduler" | "simple-icons:apachedolphinscheduler"
| "simple-icons:apachedoris"
| "simple-icons:apachedruid" | "simple-icons:apachedruid"
| "simple-icons:apacheecharts" | "simple-icons:apacheecharts"
| "simple-icons:apacheflink" | "simple-icons:apacheflink"
@@ -18050,9 +18063,11 @@ declare module 'virtual:astro-icon' {
| "simple-icons:autoprefixer" | "simple-icons:autoprefixer"
| "simple-icons:autozone" | "simple-icons:autozone"
| "simple-icons:avajs" | "simple-icons:avajs"
| "simple-icons:avaloniaui"
| "simple-icons:avast" | "simple-icons:avast"
| "simple-icons:avianca" | "simple-icons:avianca"
| "simple-icons:avira" | "simple-icons:avira"
| "simple-icons:avm"
| "simple-icons:awesomelists" | "simple-icons:awesomelists"
| "simple-icons:awesomewm" | "simple-icons:awesomewm"
| "simple-icons:awsamplify" | "simple-icons:awsamplify"
@@ -18063,6 +18078,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:awssecretsmanager" | "simple-icons:awssecretsmanager"
| "simple-icons:awwwards" | "simple-icons:awwwards"
| "simple-icons:axios" | "simple-icons:axios"
| "simple-icons:axisbank"
| "simple-icons:azureartifacts" | "simple-icons:azureartifacts"
| "simple-icons:azuredataexplorer" | "simple-icons:azuredataexplorer"
| "simple-icons:azuredevops" | "simple-icons:azuredevops"
@@ -18076,6 +18092,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:backbonedotjs" | "simple-icons:backbonedotjs"
| "simple-icons:backendless" | "simple-icons:backendless"
| "simple-icons:backstage" | "simple-icons:backstage"
| "simple-icons:backstage-casting"
| "simple-icons:badgr" | "simple-icons:badgr"
| "simple-icons:badoo" | "simple-icons:badoo"
| "simple-icons:baidu" | "simple-icons:baidu"
@@ -18115,6 +18132,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:bentoml" | "simple-icons:bentoml"
| "simple-icons:bereal" | "simple-icons:bereal"
| "simple-icons:betfair" | "simple-icons:betfair"
| "simple-icons:betterauth"
| "simple-icons:betterdiscord" | "simple-icons:betterdiscord"
| "simple-icons:betterstack" | "simple-icons:betterstack"
| "simple-icons:bevy" | "simple-icons:bevy"
@@ -18141,11 +18159,13 @@ declare module 'virtual:astro-icon' {
| "simple-icons:bittorrent" | "simple-icons:bittorrent"
| "simple-icons:bitwarden" | "simple-icons:bitwarden"
| "simple-icons:bitwig" | "simple-icons:bitwig"
| "simple-icons:black"
| "simple-icons:blackberry" | "simple-icons:blackberry"
| "simple-icons:blackmagicdesign" | "simple-icons:blackmagicdesign"
| "simple-icons:blazemeter" | "simple-icons:blazemeter"
| "simple-icons:blazor" | "simple-icons:blazor"
| "simple-icons:blender" | "simple-icons:blender"
| "simple-icons:blibli"
| "simple-icons:blockbench" | "simple-icons:blockbench"
| "simple-icons:blockchaindotcom" | "simple-icons:blockchaindotcom"
| "simple-icons:blogger" | "simple-icons:blogger"
@@ -18161,9 +18181,11 @@ declare module 'virtual:astro-icon' {
| "simple-icons:boat" | "simple-icons:boat"
| "simple-icons:boehringeringelheim" | "simple-icons:boehringeringelheim"
| "simple-icons:boeing" | "simple-icons:boeing"
| "simple-icons:bohemiainteractive"
| "simple-icons:bombardier" | "simple-icons:bombardier"
| "simple-icons:bookalope" | "simple-icons:bookalope"
| "simple-icons:bookbub" | "simple-icons:bookbub"
| "simple-icons:bookingdotcom"
| "simple-icons:bookmeter" | "simple-icons:bookmeter"
| "simple-icons:bookmyshow" | "simple-icons:bookmyshow"
| "simple-icons:bookstack" | "simple-icons:bookstack"
@@ -18180,6 +18202,8 @@ declare module 'virtual:astro-icon' {
| "simple-icons:box" | "simple-icons:box"
| "simple-icons:boxysvg" | "simple-icons:boxysvg"
| "simple-icons:braintree" | "simple-icons:braintree"
| "simple-icons:braintrust"
| "simple-icons:brandfetch"
| "simple-icons:brandfolder" | "simple-icons:brandfolder"
| "simple-icons:brave" | "simple-icons:brave"
| "simple-icons:breaker" | "simple-icons:breaker"
@@ -18207,6 +18231,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:bulma" | "simple-icons:bulma"
| "simple-icons:bun" | "simple-icons:bun"
| "simple-icons:bungie" | "simple-icons:bungie"
| "simple-icons:bunnydotnet"
| "simple-icons:bunq" | "simple-icons:bunq"
| "simple-icons:burgerking" | "simple-icons:burgerking"
| "simple-icons:burpsuite" | "simple-icons:burpsuite"
@@ -18239,6 +18264,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:capacitor" | "simple-icons:capacitor"
| "simple-icons:caprover" | "simple-icons:caprover"
| "simple-icons:cardano" | "simple-icons:cardano"
| "simple-icons:cardmarket"
| "simple-icons:carlsberggroup" | "simple-icons:carlsberggroup"
| "simple-icons:carrd" | "simple-icons:carrd"
| "simple-icons:carrefour" | "simple-icons:carrefour"
@@ -18264,6 +18290,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:chainguard" | "simple-icons:chainguard"
| "simple-icons:chainlink" | "simple-icons:chainlink"
| "simple-icons:chakraui" | "simple-icons:chakraui"
| "simple-icons:changedetection"
| "simple-icons:channel4" | "simple-icons:channel4"
| "simple-icons:charles" | "simple-icons:charles"
| "simple-icons:chartdotjs" | "simple-icons:chartdotjs"
@@ -18285,7 +18312,6 @@ declare module 'virtual:astro-icon' {
| "simple-icons:chinasouthernairlines" | "simple-icons:chinasouthernairlines"
| "simple-icons:chocolatey" | "simple-icons:chocolatey"
| "simple-icons:chromatic" | "simple-icons:chromatic"
| "simple-icons:chromecast"
| "simple-icons:chromewebstore" | "simple-icons:chromewebstore"
| "simple-icons:chrysler" | "simple-icons:chrysler"
| "simple-icons:chupachups" | "simple-icons:chupachups"
@@ -18323,6 +18349,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:cloudflareworkers" | "simple-icons:cloudflareworkers"
| "simple-icons:cloudfoundry" | "simple-icons:cloudfoundry"
| "simple-icons:cloudinary" | "simple-icons:cloudinary"
| "simple-icons:cloudnativebuild"
| "simple-icons:cloudron" | "simple-icons:cloudron"
| "simple-icons:cloudsmith" | "simple-icons:cloudsmith"
| "simple-icons:cloudways" | "simple-icons:cloudways"
@@ -18334,6 +18361,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:cnes" | "simple-icons:cnes"
| "simple-icons:cnet" | "simple-icons:cnet"
| "simple-icons:cnn" | "simple-icons:cnn"
| "simple-icons:cobalt"
| "simple-icons:cocacola" | "simple-icons:cocacola"
| "simple-icons:cockpit" | "simple-icons:cockpit"
| "simple-icons:cockroachlabs" | "simple-icons:cockroachlabs"
@@ -18361,6 +18389,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:codepen" | "simple-icons:codepen"
| "simple-icons:codeproject" | "simple-icons:codeproject"
| "simple-icons:coder" | "simple-icons:coder"
| "simple-icons:coderabbit"
| "simple-icons:codereview" | "simple-icons:codereview"
| "simple-icons:codersrank" | "simple-icons:codersrank"
| "simple-icons:coderwall" | "simple-icons:coderwall"
@@ -18410,6 +18439,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:convertio" | "simple-icons:convertio"
| "simple-icons:cookiecutter" | "simple-icons:cookiecutter"
| "simple-icons:coolermaster" | "simple-icons:coolermaster"
| "simple-icons:coolify"
| "simple-icons:coop" | "simple-icons:coop"
| "simple-icons:copaairlines" | "simple-icons:copaairlines"
| "simple-icons:coppel" | "simple-icons:coppel"
@@ -18460,6 +18490,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:cultura" | "simple-icons:cultura"
| "simple-icons:curl" | "simple-icons:curl"
| "simple-icons:curseforge" | "simple-icons:curseforge"
| "simple-icons:cursor"
| "simple-icons:customink" | "simple-icons:customink"
| "simple-icons:cyberdefenders" | "simple-icons:cyberdefenders"
| "simple-icons:cycling74" | "simple-icons:cycling74"
@@ -18510,6 +18541,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:deepgram" | "simple-icons:deepgram"
| "simple-icons:deepin" | "simple-icons:deepin"
| "simple-icons:deepl" | "simple-icons:deepl"
| "simple-icons:deepmind"
| "simple-icons:deepnote" | "simple-icons:deepnote"
| "simple-icons:deezer" | "simple-icons:deezer"
| "simple-icons:delicious" | "simple-icons:delicious"
@@ -18551,16 +18583,19 @@ declare module 'virtual:astro-icon' {
| "simple-icons:directus" | "simple-icons:directus"
| "simple-icons:discogs" | "simple-icons:discogs"
| "simple-icons:discord" | "simple-icons:discord"
| "simple-icons:discorddotjs"
| "simple-icons:discourse" | "simple-icons:discourse"
| "simple-icons:discover" | "simple-icons:discover"
| "simple-icons:disqus" | "simple-icons:disqus"
| "simple-icons:disroot" | "simple-icons:disroot"
| "simple-icons:distrobox"
| "simple-icons:distrokid" | "simple-icons:distrokid"
| "simple-icons:django" | "simple-icons:django"
| "simple-icons:dji" | "simple-icons:dji"
| "simple-icons:dlib" | "simple-icons:dlib"
| "simple-icons:dlna" | "simple-icons:dlna"
| "simple-icons:dm" | "simple-icons:dm"
| "simple-icons:dmm"
| "simple-icons:docker" | "simple-icons:docker"
| "simple-icons:docsdotrs" | "simple-icons:docsdotrs"
| "simple-icons:docsify" | "simple-icons:docsify"
@@ -18570,6 +18605,8 @@ declare module 'virtual:astro-icon' {
| "simple-icons:dogecoin" | "simple-icons:dogecoin"
| "simple-icons:doi" | "simple-icons:doi"
| "simple-icons:dolby" | "simple-icons:dolby"
| "simple-icons:dolibarr"
| "simple-icons:dolphin"
| "simple-icons:doordash" | "simple-icons:doordash"
| "simple-icons:dota2" | "simple-icons:dota2"
| "simple-icons:dotenv" | "simple-icons:dotenv"
@@ -18660,10 +18697,11 @@ declare module 'virtual:astro-icon' {
| "simple-icons:emby" | "simple-icons:emby"
| "simple-icons:emirates" | "simple-icons:emirates"
| "simple-icons:emlakjet" | "simple-icons:emlakjet"
| "simple-icons:empirekred"
| "simple-icons:endeavouros" | "simple-icons:endeavouros"
| "simple-icons:engadget" | "simple-icons:engadget"
| "simple-icons:enpass" | "simple-icons:enpass"
| "simple-icons:ens"
| "simple-icons:ente"
| "simple-icons:enterprisedb" | "simple-icons:enterprisedb"
| "simple-icons:envato" | "simple-icons:envato"
| "simple-icons:envoyproxy" | "simple-icons:envoyproxy"
@@ -18693,6 +18731,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:eventbrite" | "simple-icons:eventbrite"
| "simple-icons:eventstore" | "simple-icons:eventstore"
| "simple-icons:evernote" | "simple-icons:evernote"
| "simple-icons:everydotorg"
| "simple-icons:excalidraw" | "simple-icons:excalidraw"
| "simple-icons:exercism" | "simple-icons:exercism"
| "simple-icons:exordo" | "simple-icons:exordo"
@@ -18763,6 +18802,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:fireship" | "simple-icons:fireship"
| "simple-icons:firewalla" | "simple-icons:firewalla"
| "simple-icons:first" | "simple-icons:first"
| "simple-icons:fishaudio"
| "simple-icons:fishshell" | "simple-icons:fishshell"
| "simple-icons:fitbit" | "simple-icons:fitbit"
| "simple-icons:fite" | "simple-icons:fite"
@@ -18781,6 +18821,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:flipkart" | "simple-icons:flipkart"
| "simple-icons:floatplane" | "simple-icons:floatplane"
| "simple-icons:flood" | "simple-icons:flood"
| "simple-icons:floorp"
| "simple-icons:fluentbit" | "simple-icons:fluentbit"
| "simple-icons:fluentd" | "simple-icons:fluentd"
| "simple-icons:fluke" | "simple-icons:fluke"
@@ -18792,6 +18833,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:fmod" | "simple-icons:fmod"
| "simple-icons:fnac" | "simple-icons:fnac"
| "simple-icons:folium" | "simple-icons:folium"
| "simple-icons:folo"
| "simple-icons:fonoma" | "simple-icons:fonoma"
| "simple-icons:fontawesome" | "simple-icons:fontawesome"
| "simple-icons:fontbase" | "simple-icons:fontbase"
@@ -18801,6 +18843,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:ford" | "simple-icons:ford"
| "simple-icons:forestry" | "simple-icons:forestry"
| "simple-icons:forgejo" | "simple-icons:forgejo"
| "simple-icons:formbricks"
| "simple-icons:formik" | "simple-icons:formik"
| "simple-icons:formspree" | "simple-icons:formspree"
| "simple-icons:formstack" | "simple-icons:formstack"
@@ -18830,7 +18873,11 @@ declare module 'virtual:astro-icon' {
| "simple-icons:freenas" | "simple-icons:freenas"
| "simple-icons:freenet" | "simple-icons:freenet"
| "simple-icons:freepik" | "simple-icons:freepik"
| "simple-icons:freetube"
| "simple-icons:fresh" | "simple-icons:fresh"
| "simple-icons:freshrss"
| "simple-icons:frigate"
| "simple-icons:fritz"
| "simple-icons:frontendmentor" | "simple-icons:frontendmentor"
| "simple-icons:frontify" | "simple-icons:frontify"
| "simple-icons:fsecure" | "simple-icons:fsecure"
@@ -18857,7 +18904,9 @@ declare module 'virtual:astro-icon' {
| "simple-icons:gameloft" | "simple-icons:gameloft"
| "simple-icons:gamemaker" | "simple-icons:gamemaker"
| "simple-icons:gamescience" | "simple-icons:gamescience"
| "simple-icons:gandi"
| "simple-icons:garmin" | "simple-icons:garmin"
| "simple-icons:garudalinux"
| "simple-icons:gatling" | "simple-icons:gatling"
| "simple-icons:gatsby" | "simple-icons:gatsby"
| "simple-icons:gcore" | "simple-icons:gcore"
@@ -18880,6 +18929,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:giphy" | "simple-icons:giphy"
| "simple-icons:git" | "simple-icons:git"
| "simple-icons:gitbook" | "simple-icons:gitbook"
| "simple-icons:gitcode"
| "simple-icons:gitconnected" | "simple-icons:gitconnected"
| "simple-icons:gitea" | "simple-icons:gitea"
| "simple-icons:gitee" | "simple-icons:gitee"
@@ -18939,6 +18989,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:googlecalendar" | "simple-icons:googlecalendar"
| "simple-icons:googlecampaignmanager360" | "simple-icons:googlecampaignmanager360"
| "simple-icons:googlecardboard" | "simple-icons:googlecardboard"
| "simple-icons:googlecast"
| "simple-icons:googlechat" | "simple-icons:googlechat"
| "simple-icons:googlechrome" | "simple-icons:googlechrome"
| "simple-icons:googlechronicle" | "simple-icons:googlechronicle"
@@ -18984,10 +19035,13 @@ declare module 'virtual:astro-icon' {
| "simple-icons:googlesheets" | "simple-icons:googlesheets"
| "simple-icons:googleslides" | "simple-icons:googleslides"
| "simple-icons:googlestreetview" | "simple-icons:googlestreetview"
| "simple-icons:googlesummerofcode"
| "simple-icons:googletagmanager" | "simple-icons:googletagmanager"
| "simple-icons:googletasks" | "simple-icons:googletasks"
| "simple-icons:googletranslate" | "simple-icons:googletranslate"
| "simple-icons:googletv"
| "simple-icons:gotomeeting" | "simple-icons:gotomeeting"
| "simple-icons:gplv3"
| "simple-icons:grab" | "simple-icons:grab"
| "simple-icons:gradio" | "simple-icons:gradio"
| "simple-icons:gradle" | "simple-icons:gradle"
@@ -19005,6 +19059,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:greatlearning" | "simple-icons:greatlearning"
| "simple-icons:greenhouse" | "simple-icons:greenhouse"
| "simple-icons:greensock" | "simple-icons:greensock"
| "simple-icons:greptimedb"
| "simple-icons:griddotai" | "simple-icons:griddotai"
| "simple-icons:gridsome" | "simple-icons:gridsome"
| "simple-icons:grocy" | "simple-icons:grocy"
@@ -19012,7 +19067,9 @@ declare module 'virtual:astro-icon' {
| "simple-icons:groupon" | "simple-icons:groupon"
| "simple-icons:grubhub" | "simple-icons:grubhub"
| "simple-icons:grunt" | "simple-icons:grunt"
| "simple-icons:gsap"
| "simple-icons:gsk" | "simple-icons:gsk"
| "simple-icons:gsma"
| "simple-icons:gsmarenadotcom" | "simple-icons:gsmarenadotcom"
| "simple-icons:gstreamer" | "simple-icons:gstreamer"
| "simple-icons:gtk" | "simple-icons:gtk"
@@ -19026,6 +19083,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:gurobi" | "simple-icons:gurobi"
| "simple-icons:gusto" | "simple-icons:gusto"
| "simple-icons:gutenberg" | "simple-icons:gutenberg"
| "simple-icons:h2database"
| "simple-icons:h3" | "simple-icons:h3"
| "simple-icons:habr" | "simple-icons:habr"
| "simple-icons:hackaday" | "simple-icons:hackaday"
@@ -19050,8 +19108,11 @@ declare module 'virtual:astro-icon' {
| "simple-icons:hasura" | "simple-icons:hasura"
| "simple-icons:hatenabookmark" | "simple-icons:hatenabookmark"
| "simple-icons:haveibeenpwned" | "simple-icons:haveibeenpwned"
| "simple-icons:havells"
| "simple-icons:haxe" | "simple-icons:haxe"
| "simple-icons:haystack"
| "simple-icons:hbo" | "simple-icons:hbo"
| "simple-icons:hbomax"
| "simple-icons:hcl" | "simple-icons:hcl"
| "simple-icons:hdfcbank" | "simple-icons:hdfcbank"
| "simple-icons:headlessui" | "simple-icons:headlessui"
@@ -19060,6 +19121,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:hearth" | "simple-icons:hearth"
| "simple-icons:hearthisdotat" | "simple-icons:hearthisdotat"
| "simple-icons:hedera" | "simple-icons:hedera"
| "simple-icons:hedgedoc"
| "simple-icons:helium" | "simple-icons:helium"
| "simple-icons:helix" | "simple-icons:helix"
| "simple-icons:hellofresh" | "simple-icons:hellofresh"
@@ -19070,7 +19132,9 @@ declare module 'virtual:astro-icon' {
| "simple-icons:hepsiemlak" | "simple-icons:hepsiemlak"
| "simple-icons:here" | "simple-icons:here"
| "simple-icons:hermes" | "simple-icons:hermes"
| "simple-icons:heroicgameslauncher"
| "simple-icons:heroku" | "simple-icons:heroku"
| "simple-icons:heroui"
| "simple-icons:hetzner" | "simple-icons:hetzner"
| "simple-icons:hevy" | "simple-icons:hevy"
| "simple-icons:hexlet" | "simple-icons:hexlet"
@@ -19161,12 +19225,14 @@ declare module 'virtual:astro-icon' {
| "simple-icons:iheartradio" | "simple-icons:iheartradio"
| "simple-icons:ikea" | "simple-icons:ikea"
| "simple-icons:iledefrancemobilites" | "simple-icons:iledefrancemobilites"
| "simple-icons:ilovepdf"
| "simple-icons:imagedotsc" | "simple-icons:imagedotsc"
| "simple-icons:imagej" | "simple-icons:imagej"
| "simple-icons:imdb" | "simple-icons:imdb"
| "simple-icons:imessage" | "simple-icons:imessage"
| "simple-icons:imgur" | "simple-icons:imgur"
| "simple-icons:immer" | "simple-icons:immer"
| "simple-icons:immersivetranslate"
| "simple-icons:immich" | "simple-icons:immich"
| "simple-icons:imou" | "simple-icons:imou"
| "simple-icons:improvmx" | "simple-icons:improvmx"
@@ -19177,6 +19243,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:inductiveautomation" | "simple-icons:inductiveautomation"
| "simple-icons:inertia" | "simple-icons:inertia"
| "simple-icons:infiniti" | "simple-icons:infiniti"
| "simple-icons:infinityfree"
| "simple-icons:influxdb" | "simple-icons:influxdb"
| "simple-icons:infomaniak" | "simple-icons:infomaniak"
| "simple-icons:infoq" | "simple-icons:infoq"
@@ -19187,6 +19254,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:inkdrop" | "simple-icons:inkdrop"
| "simple-icons:inkscape" | "simple-icons:inkscape"
| "simple-icons:inoreader" | "simple-icons:inoreader"
| "simple-icons:inquirer"
| "simple-icons:insomnia" | "simple-icons:insomnia"
| "simple-icons:inspire" | "simple-icons:inspire"
| "simple-icons:insta360" | "simple-icons:insta360"
@@ -19209,6 +19277,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:internetexplorer" | "simple-icons:internetexplorer"
| "simple-icons:intigriti" | "simple-icons:intigriti"
| "simple-icons:intuit" | "simple-icons:intuit"
| "simple-icons:invidious"
| "simple-icons:invision" | "simple-icons:invision"
| "simple-icons:invoiceninja" | "simple-icons:invoiceninja"
| "simple-icons:iobroker" | "simple-icons:iobroker"
@@ -19221,6 +19290,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:irobot" | "simple-icons:irobot"
| "simple-icons:isc2" | "simple-icons:isc2"
| "simple-icons:iscsquared" | "simple-icons:iscsquared"
| "simple-icons:isro"
| "simple-icons:issuu" | "simple-icons:issuu"
| "simple-icons:istio" | "simple-icons:istio"
| "simple-icons:itchdotio" | "simple-icons:itchdotio"
@@ -19239,6 +19309,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:javascript" | "simple-icons:javascript"
| "simple-icons:jbl" | "simple-icons:jbl"
| "simple-icons:jcb" | "simple-icons:jcb"
| "simple-icons:jdoodle"
| "simple-icons:jeep" | "simple-icons:jeep"
| "simple-icons:jekyll" | "simple-icons:jekyll"
| "simple-icons:jellyfin" | "simple-icons:jellyfin"
@@ -19302,6 +19373,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:katana" | "simple-icons:katana"
| "simple-icons:kaufland" | "simple-icons:kaufland"
| "simple-icons:kde" | "simple-icons:kde"
| "simple-icons:kdeneon"
| "simple-icons:kdenlive" | "simple-icons:kdenlive"
| "simple-icons:kdeplasma" | "simple-icons:kdeplasma"
| "simple-icons:kedro" | "simple-icons:kedro"
@@ -19310,7 +19382,9 @@ declare module 'virtual:astro-icon' {
| "simple-icons:keepassxc" | "simple-icons:keepassxc"
| "simple-icons:keeper" | "simple-icons:keeper"
| "simple-icons:keeweb" | "simple-icons:keeweb"
| "simple-icons:kenmei"
| "simple-icons:kentico" | "simple-icons:kentico"
| "simple-icons:keploy"
| "simple-icons:keras" | "simple-icons:keras"
| "simple-icons:keybase" | "simple-icons:keybase"
| "simple-icons:keycdn" | "simple-icons:keycdn"
@@ -19354,8 +19428,10 @@ declare module 'virtual:astro-icon' {
| "simple-icons:kong" | "simple-icons:kong"
| "simple-icons:kongregate" | "simple-icons:kongregate"
| "simple-icons:konva" | "simple-icons:konva"
| "simple-icons:koreader"
| "simple-icons:kotlin" | "simple-icons:kotlin"
| "simple-icons:koyeb" | "simple-icons:koyeb"
| "simple-icons:kred"
| "simple-icons:krita" | "simple-icons:krita"
| "simple-icons:ktm" | "simple-icons:ktm"
| "simple-icons:ktor" | "simple-icons:ktor"
@@ -19370,6 +19446,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:kuula" | "simple-icons:kuula"
| "simple-icons:kx" | "simple-icons:kx"
| "simple-icons:kyocera" | "simple-icons:kyocera"
| "simple-icons:labex"
| "simple-icons:labview" | "simple-icons:labview"
| "simple-icons:lada" | "simple-icons:lada"
| "simple-icons:lamborghini" | "simple-icons:lamborghini"
@@ -19454,6 +19531,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:linuxserver" | "simple-icons:linuxserver"
| "simple-icons:lionair" | "simple-icons:lionair"
| "simple-icons:liquibase" | "simple-icons:liquibase"
| "simple-icons:listenhub"
| "simple-icons:listmonk" | "simple-icons:listmonk"
| "simple-icons:lit" | "simple-icons:lit"
| "simple-icons:litecoin" | "simple-icons:litecoin"
@@ -19461,11 +19539,14 @@ declare module 'virtual:astro-icon' {
| "simple-icons:litiengine" | "simple-icons:litiengine"
| "simple-icons:livechat" | "simple-icons:livechat"
| "simple-icons:livejournal" | "simple-icons:livejournal"
| "simple-icons:livekit"
| "simple-icons:livewire" | "simple-icons:livewire"
| "simple-icons:llvm" | "simple-icons:llvm"
| "simple-icons:lmms" | "simple-icons:lmms"
| "simple-icons:lobsters" | "simple-icons:lobsters"
| "simple-icons:local" | "simple-icons:local"
| "simple-icons:localsend"
| "simple-icons:localxpose"
| "simple-icons:lodash" | "simple-icons:lodash"
| "simple-icons:logitech" | "simple-icons:logitech"
| "simple-icons:logitechg" | "simple-icons:logitechg"
@@ -19482,6 +19563,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:lottiefiles" | "simple-icons:lottiefiles"
| "simple-icons:ltspice" | "simple-icons:ltspice"
| "simple-icons:lua" | "simple-icons:lua"
| "simple-icons:luau"
| "simple-icons:lubuntu" | "simple-icons:lubuntu"
| "simple-icons:lucia" | "simple-icons:lucia"
| "simple-icons:lucid" | "simple-icons:lucid"
@@ -19490,6 +19572,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:lufthansa" | "simple-icons:lufthansa"
| "simple-icons:lumen" | "simple-icons:lumen"
| "simple-icons:lunacy" | "simple-icons:lunacy"
| "simple-icons:luogu"
| "simple-icons:lutris" | "simple-icons:lutris"
| "simple-icons:lvgl" | "simple-icons:lvgl"
| "simple-icons:lydia" | "simple-icons:lydia"
@@ -19497,6 +19580,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:maas" | "simple-icons:maas"
| "simple-icons:macos" | "simple-icons:macos"
| "simple-icons:macpaw" | "simple-icons:macpaw"
| "simple-icons:macports"
| "simple-icons:macys" | "simple-icons:macys"
| "simple-icons:magasinsu" | "simple-icons:magasinsu"
| "simple-icons:magento" | "simple-icons:magento"
@@ -19519,6 +19603,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:mamp" | "simple-icons:mamp"
| "simple-icons:man" | "simple-icons:man"
| "simple-icons:manageiq" | "simple-icons:manageiq"
| "simple-icons:mangaupdates"
| "simple-icons:manjaro" | "simple-icons:manjaro"
| "simple-icons:mantine" | "simple-icons:mantine"
| "simple-icons:mapbox" | "simple-icons:mapbox"
@@ -19583,6 +19668,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:metabase" | "simple-icons:metabase"
| "simple-icons:metacritic" | "simple-icons:metacritic"
| "simple-icons:metafilter" | "simple-icons:metafilter"
| "simple-icons:metager"
| "simple-icons:metasploit" | "simple-icons:metasploit"
| "simple-icons:meteor" | "simple-icons:meteor"
| "simple-icons:metro" | "simple-icons:metro"
@@ -19590,6 +19676,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:metrodemadrid" | "simple-icons:metrodemadrid"
| "simple-icons:metrodeparis" | "simple-icons:metrodeparis"
| "simple-icons:mewe" | "simple-icons:mewe"
| "simple-icons:mezmo"
| "simple-icons:mg" | "simple-icons:mg"
| "simple-icons:microbit" | "simple-icons:microbit"
| "simple-icons:microdotblog" | "simple-icons:microdotblog"
@@ -19620,6 +19707,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:microstrategy" | "simple-icons:microstrategy"
| "simple-icons:midi" | "simple-icons:midi"
| "simple-icons:migadu" | "simple-icons:migadu"
| "simple-icons:mihon"
| "simple-icons:mihoyo" | "simple-icons:mihoyo"
| "simple-icons:mikrotik" | "simple-icons:mikrotik"
| "simple-icons:milanote" | "simple-icons:milanote"
@@ -19629,12 +19717,14 @@ declare module 'virtual:astro-icon' {
| "simple-icons:minetest" | "simple-icons:minetest"
| "simple-icons:mingww64" | "simple-icons:mingww64"
| "simple-icons:mini" | "simple-icons:mini"
| "simple-icons:minimax"
| "simple-icons:minio" | "simple-icons:minio"
| "simple-icons:mintlify" | "simple-icons:mintlify"
| "simple-icons:minutemailer" | "simple-icons:minutemailer"
| "simple-icons:miraheze" | "simple-icons:miraheze"
| "simple-icons:miro" | "simple-icons:miro"
| "simple-icons:misskey" | "simple-icons:misskey"
| "simple-icons:mistralai"
| "simple-icons:mitsubishi" | "simple-icons:mitsubishi"
| "simple-icons:mix" | "simple-icons:mix"
| "simple-icons:mixcloud" | "simple-icons:mixcloud"
@@ -19646,6 +19736,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:mocha" | "simple-icons:mocha"
| "simple-icons:mockserviceworker" | "simple-icons:mockserviceworker"
| "simple-icons:modal" | "simple-icons:modal"
| "simple-icons:modelcontextprotocol"
| "simple-icons:modin" | "simple-icons:modin"
| "simple-icons:modrinth" | "simple-icons:modrinth"
| "simple-icons:modx" | "simple-icons:modx"
@@ -19696,6 +19787,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:myanimelist" | "simple-icons:myanimelist"
| "simple-icons:myget" | "simple-icons:myget"
| "simple-icons:myob" | "simple-icons:myob"
| "simple-icons:myshows"
| "simple-icons:myspace" | "simple-icons:myspace"
| "simple-icons:mysql" | "simple-icons:mysql"
| "simple-icons:n26" | "simple-icons:n26"
@@ -19721,6 +19813,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:near" | "simple-icons:near"
| "simple-icons:nebula" | "simple-icons:nebula"
| "simple-icons:nec" | "simple-icons:nec"
| "simple-icons:nederlandsespoorwegen"
| "simple-icons:neo4j" | "simple-icons:neo4j"
| "simple-icons:neovim" | "simple-icons:neovim"
| "simple-icons:neptune" | "simple-icons:neptune"
@@ -19732,6 +19825,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:neteasecloudmusic" | "simple-icons:neteasecloudmusic"
| "simple-icons:netflix" | "simple-icons:netflix"
| "simple-icons:netgear" | "simple-icons:netgear"
| "simple-icons:netim"
| "simple-icons:netlify" | "simple-icons:netlify"
| "simple-icons:nette" | "simple-icons:nette"
| "simple-icons:netto" | "simple-icons:netto"
@@ -19739,9 +19833,11 @@ declare module 'virtual:astro-icon' {
| "simple-icons:newbalance" | "simple-icons:newbalance"
| "simple-icons:newegg" | "simple-icons:newegg"
| "simple-icons:newjapanprowrestling" | "simple-icons:newjapanprowrestling"
| "simple-icons:newpipe"
| "simple-icons:newrelic" | "simple-icons:newrelic"
| "simple-icons:newyorktimes" | "simple-icons:newyorktimes"
| "simple-icons:nexon" | "simple-icons:nexon"
| "simple-icons:nextbike"
| "simple-icons:nextbilliondotai" | "simple-icons:nextbilliondotai"
| "simple-icons:nextcloud" | "simple-icons:nextcloud"
| "simple-icons:nextdns" | "simple-icons:nextdns"
@@ -19749,7 +19845,6 @@ declare module 'virtual:astro-icon' {
| "simple-icons:nextdotjs" | "simple-icons:nextdotjs"
| "simple-icons:nextflow" | "simple-icons:nextflow"
| "simple-icons:nextra" | "simple-icons:nextra"
| "simple-icons:nextui"
| "simple-icons:nexusmods" | "simple-icons:nexusmods"
| "simple-icons:nfc" | "simple-icons:nfc"
| "simple-icons:nfcore" | "simple-icons:nfcore"
@@ -19758,6 +19853,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:ngrok" | "simple-icons:ngrok"
| "simple-icons:ngrx" | "simple-icons:ngrx"
| "simple-icons:nhl" | "simple-icons:nhl"
| "simple-icons:nhost"
| "simple-icons:niantic" | "simple-icons:niantic"
| "simple-icons:nicehash" | "simple-icons:nicehash"
| "simple-icons:niconico" | "simple-icons:niconico"
@@ -19772,6 +19868,8 @@ declare module 'virtual:astro-icon' {
| "simple-icons:nintendoswitch" | "simple-icons:nintendoswitch"
| "simple-icons:nissan" | "simple-icons:nissan"
| "simple-icons:nixos" | "simple-icons:nixos"
| "simple-icons:nobaralinux"
| "simple-icons:nodebb"
| "simple-icons:nodedotjs" | "simple-icons:nodedotjs"
| "simple-icons:nodemon" | "simple-icons:nodemon"
| "simple-icons:nodered" | "simple-icons:nodered"
@@ -19783,6 +19881,8 @@ declare module 'virtual:astro-icon' {
| "simple-icons:normalizedotcss" | "simple-icons:normalizedotcss"
| "simple-icons:norton" | "simple-icons:norton"
| "simple-icons:norwegian" | "simple-icons:norwegian"
| "simple-icons:note"
| "simple-icons:notebooklm"
| "simple-icons:notepadplusplus" | "simple-icons:notepadplusplus"
| "simple-icons:notion" | "simple-icons:notion"
| "simple-icons:notist" | "simple-icons:notist"
@@ -19834,6 +19934,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:ollama" | "simple-icons:ollama"
| "simple-icons:omadacloud" | "simple-icons:omadacloud"
| "simple-icons:oneplus" | "simple-icons:oneplus"
| "simple-icons:onestream"
| "simple-icons:onlyfans" | "simple-icons:onlyfans"
| "simple-icons:onlyoffice" | "simple-icons:onlyoffice"
| "simple-icons:onnx" | "simple-icons:onnx"
@@ -19849,6 +19950,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:openbugbounty" | "simple-icons:openbugbounty"
| "simple-icons:opencollective" | "simple-icons:opencollective"
| "simple-icons:opencontainersinitiative" | "simple-icons:opencontainersinitiative"
| "simple-icons:opencritic"
| "simple-icons:opencv" | "simple-icons:opencv"
| "simple-icons:openfaas" | "simple-icons:openfaas"
| "simple-icons:opengl" | "simple-icons:opengl"
@@ -19886,6 +19988,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:opsgenie" | "simple-icons:opsgenie"
| "simple-icons:opslevel" | "simple-icons:opslevel"
| "simple-icons:optimism" | "simple-icons:optimism"
| "simple-icons:optuna"
| "simple-icons:oracle" | "simple-icons:oracle"
| "simple-icons:orange" | "simple-icons:orange"
| "simple-icons:orcid" | "simple-icons:orcid"
@@ -19897,6 +20000,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:osf" | "simple-icons:osf"
| "simple-icons:osgeo" | "simple-icons:osgeo"
| "simple-icons:oshkosh" | "simple-icons:oshkosh"
| "simple-icons:osmand"
| "simple-icons:osmc" | "simple-icons:osmc"
| "simple-icons:osu" | "simple-icons:osu"
| "simple-icons:otto" | "simple-icons:otto"
@@ -19906,6 +20010,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:ovh" | "simple-icons:ovh"
| "simple-icons:owasp" | "simple-icons:owasp"
| "simple-icons:owncloud" | "simple-icons:owncloud"
| "simple-icons:oxc"
| "simple-icons:oxygen" | "simple-icons:oxygen"
| "simple-icons:oyo" | "simple-icons:oyo"
| "simple-icons:p5dotjs" | "simple-icons:p5dotjs"
@@ -19915,6 +20020,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:paddle" | "simple-icons:paddle"
| "simple-icons:paddlepaddle" | "simple-icons:paddlepaddle"
| "simple-icons:paddypower" | "simple-icons:paddypower"
| "simple-icons:padlet"
| "simple-icons:pagekit" | "simple-icons:pagekit"
| "simple-icons:pagerduty" | "simple-icons:pagerduty"
| "simple-icons:pagespeedinsights" | "simple-icons:pagespeedinsights"
@@ -19937,11 +20043,13 @@ declare module 'virtual:astro-icon' {
| "simple-icons:passport" | "simple-icons:passport"
| "simple-icons:pastebin" | "simple-icons:pastebin"
| "simple-icons:patreon" | "simple-icons:patreon"
| "simple-icons:payback"
| "simple-icons:paychex" | "simple-icons:paychex"
| "simple-icons:payhip" | "simple-icons:payhip"
| "simple-icons:payloadcms" | "simple-icons:payloadcms"
| "simple-icons:payoneer" | "simple-icons:payoneer"
| "simple-icons:paypal" | "simple-icons:paypal"
| "simple-icons:paysafe"
| "simple-icons:paytm" | "simple-icons:paytm"
| "simple-icons:pcgamingwiki" | "simple-icons:pcgamingwiki"
| "simple-icons:pdm" | "simple-icons:pdm"
@@ -19994,6 +20102,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:pinescript" | "simple-icons:pinescript"
| "simple-icons:pinetwork" | "simple-icons:pinetwork"
| "simple-icons:pingdom" | "simple-icons:pingdom"
| "simple-icons:pinia"
| "simple-icons:pino" | "simple-icons:pino"
| "simple-icons:pinterest" | "simple-icons:pinterest"
| "simple-icons:pioneerdj" | "simple-icons:pioneerdj"
@@ -20077,6 +20186,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:preact" | "simple-icons:preact"
| "simple-icons:precommit" | "simple-icons:precommit"
| "simple-icons:prefect" | "simple-icons:prefect"
| "simple-icons:premid"
| "simple-icons:premierleague" | "simple-icons:premierleague"
| "simple-icons:prepbytes" | "simple-icons:prepbytes"
| "simple-icons:prestashop" | "simple-icons:prestashop"
@@ -20098,6 +20208,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:privateinternetaccess" | "simple-icons:privateinternetaccess"
| "simple-icons:probot" | "simple-icons:probot"
| "simple-icons:processingfoundation" | "simple-icons:processingfoundation"
| "simple-icons:processon"
| "simple-icons:processwire" | "simple-icons:processwire"
| "simple-icons:producthunt" | "simple-icons:producthunt"
| "simple-icons:progate" | "simple-icons:progate"
@@ -20158,8 +20269,10 @@ declare module 'virtual:astro-icon' {
| "simple-icons:qlik" | "simple-icons:qlik"
| "simple-icons:qmk" | "simple-icons:qmk"
| "simple-icons:qnap" | "simple-icons:qnap"
| "simple-icons:qodo"
| "simple-icons:qq" | "simple-icons:qq"
| "simple-icons:qt" | "simple-icons:qt"
| "simple-icons:quad9"
| "simple-icons:qualcomm" | "simple-icons:qualcomm"
| "simple-icons:qualtrics" | "simple-icons:qualtrics"
| "simple-icons:qualys" | "simple-icons:qualys"
@@ -20187,18 +20300,22 @@ declare module 'virtual:astro-icon' {
| "simple-icons:racket" | "simple-icons:racket"
| "simple-icons:radar" | "simple-icons:radar"
| "simple-icons:radarr" | "simple-icons:radarr"
| "simple-icons:radiofrance"
| "simple-icons:radiopublic" | "simple-icons:radiopublic"
| "simple-icons:radixui" | "simple-icons:radixui"
| "simple-icons:radstudio" | "simple-icons:radstudio"
| "simple-icons:railway" | "simple-icons:railway"
| "simple-icons:rainmeter" | "simple-icons:rainmeter"
| "simple-icons:rainyun"
| "simple-icons:rakuten" | "simple-icons:rakuten"
| "simple-icons:rakutenkobo"
| "simple-icons:ram" | "simple-icons:ram"
| "simple-icons:rancher" | "simple-icons:rancher"
| "simple-icons:rapid" | "simple-icons:rapid"
| "simple-icons:rarible" | "simple-icons:rarible"
| "simple-icons:rasa" | "simple-icons:rasa"
| "simple-icons:raspberrypi" | "simple-icons:raspberrypi"
| "simple-icons:ratatui"
| "simple-icons:ravelry" | "simple-icons:ravelry"
| "simple-icons:ray" | "simple-icons:ray"
| "simple-icons:raycast" | "simple-icons:raycast"
@@ -20266,6 +20383,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:retropie" | "simple-icons:retropie"
| "simple-icons:revanced" | "simple-icons:revanced"
| "simple-icons:revealdotjs" | "simple-icons:revealdotjs"
| "simple-icons:revenuecat"
| "simple-icons:reverbnation" | "simple-icons:reverbnation"
| "simple-icons:revoltdotchat" | "simple-icons:revoltdotchat"
| "simple-icons:revolut" | "simple-icons:revolut"
@@ -20299,6 +20417,8 @@ declare module 'virtual:astro-icon' {
| "simple-icons:rockylinux" | "simple-icons:rockylinux"
| "simple-icons:roku" | "simple-icons:roku"
| "simple-icons:roll20" | "simple-icons:roll20"
| "simple-icons:rollbar"
| "simple-icons:rolldown"
| "simple-icons:rollsroyce" | "simple-icons:rollsroyce"
| "simple-icons:rollupdotjs" | "simple-icons:rollupdotjs"
| "simple-icons:rome" | "simple-icons:rome"
@@ -20385,6 +20505,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:scrumalliance" | "simple-icons:scrumalliance"
| "simple-icons:scrutinizerci" | "simple-icons:scrutinizerci"
| "simple-icons:scylladb" | "simple-icons:scylladb"
| "simple-icons:seafile"
| "simple-icons:seagate" | "simple-icons:seagate"
| "simple-icons:searxng" | "simple-icons:searxng"
| "simple-icons:seat" | "simple-icons:seat"
@@ -20410,6 +20531,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:sentry" | "simple-icons:sentry"
| "simple-icons:sepa" | "simple-icons:sepa"
| "simple-icons:sequelize" | "simple-icons:sequelize"
| "simple-icons:servbay"
| "simple-icons:serverfault" | "simple-icons:serverfault"
| "simple-icons:serverless" | "simple-icons:serverless"
| "simple-icons:session" | "simple-icons:session"
@@ -20446,6 +20568,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:simkl" | "simple-icons:simkl"
| "simple-icons:simpleanalytics" | "simple-icons:simpleanalytics"
| "simple-icons:simpleicons" | "simple-icons:simpleicons"
| "simple-icons:simplelocalize"
| "simple-icons:simplelogin" | "simple-icons:simplelogin"
| "simple-icons:simplenote" | "simple-icons:simplenote"
| "simple-icons:simplex" | "simple-icons:simplex"
@@ -20456,6 +20579,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:sitepoint" | "simple-icons:sitepoint"
| "simple-icons:siyuan" | "simple-icons:siyuan"
| "simple-icons:skaffold" | "simple-icons:skaffold"
| "simple-icons:skeleton"
| "simple-icons:sketch" | "simple-icons:sketch"
| "simple-icons:sketchfab" | "simple-icons:sketchfab"
| "simple-icons:sketchup" | "simple-icons:sketchup"
@@ -20478,6 +20602,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:smartthings" | "simple-icons:smartthings"
| "simple-icons:smashdotgg" | "simple-icons:smashdotgg"
| "simple-icons:smashingmagazine" | "simple-icons:smashingmagazine"
| "simple-icons:smoothcomp"
| "simple-icons:smrt" | "simple-icons:smrt"
| "simple-icons:smugmug" | "simple-icons:smugmug"
| "simple-icons:snapchat" | "simple-icons:snapchat"
@@ -20504,6 +20629,9 @@ declare module 'virtual:astro-icon' {
| "simple-icons:sonarcloud" | "simple-icons:sonarcloud"
| "simple-icons:sonarlint" | "simple-icons:sonarlint"
| "simple-icons:sonarqube" | "simple-icons:sonarqube"
| "simple-icons:sonarqubecloud"
| "simple-icons:sonarqubeforide"
| "simple-icons:sonarqubeserver"
| "simple-icons:sonarr" | "simple-icons:sonarr"
| "simple-icons:sonarsource" | "simple-icons:sonarsource"
| "simple-icons:sonatype" | "simple-icons:sonatype"
@@ -20625,6 +20753,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:subversion" | "simple-icons:subversion"
| "simple-icons:suckless" | "simple-icons:suckless"
| "simple-icons:sui" | "simple-icons:sui"
| "simple-icons:suitest"
| "simple-icons:sumologic" | "simple-icons:sumologic"
| "simple-icons:suno" | "simple-icons:suno"
| "simple-icons:sunrise" | "simple-icons:sunrise"
@@ -20649,6 +20778,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:swift" | "simple-icons:swift"
| "simple-icons:swiggy" | "simple-icons:swiggy"
| "simple-icons:swiper" | "simple-icons:swiper"
| "simple-icons:swisscows"
| "simple-icons:swr" | "simple-icons:swr"
| "simple-icons:symantec" | "simple-icons:symantec"
| "simple-icons:symbolab" | "simple-icons:symbolab"
@@ -20698,6 +20828,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:telefonica" | "simple-icons:telefonica"
| "simple-icons:telegram" | "simple-icons:telegram"
| "simple-icons:telegraph" | "simple-icons:telegraph"
| "simple-icons:telenor"
| "simple-icons:telequebec" | "simple-icons:telequebec"
| "simple-icons:temporal" | "simple-icons:temporal"
| "simple-icons:tensorflow" | "simple-icons:tensorflow"
@@ -20727,9 +20858,11 @@ declare module 'virtual:astro-icon' {
| "simple-icons:themoviedatabase" | "simple-icons:themoviedatabase"
| "simple-icons:thenorthface" | "simple-icons:thenorthface"
| "simple-icons:theodinproject" | "simple-icons:theodinproject"
| "simple-icons:theplanetarysociety"
| "simple-icons:theregister" | "simple-icons:theregister"
| "simple-icons:thesoundsresource" | "simple-icons:thesoundsresource"
| "simple-icons:thespritersresource" | "simple-icons:thespritersresource"
| "simple-icons:thestorygraph"
| "simple-icons:thewashingtonpost" | "simple-icons:thewashingtonpost"
| "simple-icons:theweatherchannel" | "simple-icons:theweatherchannel"
| "simple-icons:thingiverse" | "simple-icons:thingiverse"
@@ -20768,6 +20901,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:todoist" | "simple-icons:todoist"
| "simple-icons:toggl" | "simple-icons:toggl"
| "simple-icons:toggltrack" | "simple-icons:toggltrack"
| "simple-icons:tokio"
| "simple-icons:tokyometro" | "simple-icons:tokyometro"
| "simple-icons:toll" | "simple-icons:toll"
| "simple-icons:toml" | "simple-icons:toml"
@@ -20802,6 +20936,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:treehouse" | "simple-icons:treehouse"
| "simple-icons:trello" | "simple-icons:trello"
| "simple-icons:trendmicro" | "simple-icons:trendmicro"
| "simple-icons:tresorit"
| "simple-icons:treyarch" | "simple-icons:treyarch"
| "simple-icons:tricentis" | "simple-icons:tricentis"
| "simple-icons:trilium" | "simple-icons:trilium"
@@ -20834,8 +20969,10 @@ declare module 'virtual:astro-icon' {
| "simple-icons:turso" | "simple-icons:turso"
| "simple-icons:tuta" | "simple-icons:tuta"
| "simple-icons:tutanota" | "simple-icons:tutanota"
| "simple-icons:tuxedocomputers"
| "simple-icons:tv4play" | "simple-icons:tv4play"
| "simple-icons:tvtime" | "simple-icons:tvtime"
| "simple-icons:twenty"
| "simple-icons:twilio" | "simple-icons:twilio"
| "simple-icons:twinkly" | "simple-icons:twinkly"
| "simple-icons:twinmotion" | "simple-icons:twinmotion"
@@ -20887,6 +21024,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:unraid" | "simple-icons:unraid"
| "simple-icons:unrealengine" | "simple-icons:unrealengine"
| "simple-icons:unsplash" | "simple-icons:unsplash"
| "simple-icons:unstop"
| "simple-icons:untangle" | "simple-icons:untangle"
| "simple-icons:untappd" | "simple-icons:untappd"
| "simple-icons:upcloud" | "simple-icons:upcloud"
@@ -20899,6 +21037,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:uptimekuma" | "simple-icons:uptimekuma"
| "simple-icons:uptobox" | "simple-icons:uptobox"
| "simple-icons:upwork" | "simple-icons:upwork"
| "simple-icons:uservoice"
| "simple-icons:usps" | "simple-icons:usps"
| "simple-icons:utorrent" | "simple-icons:utorrent"
| "simple-icons:uv" | "simple-icons:uv"
@@ -20911,6 +21050,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:vala" | "simple-icons:vala"
| "simple-icons:valorant" | "simple-icons:valorant"
| "simple-icons:valve" | "simple-icons:valve"
| "simple-icons:vanillaextract"
| "simple-icons:vapor" | "simple-icons:vapor"
| "simple-icons:vault" | "simple-icons:vault"
| "simple-icons:vaultwarden" | "simple-icons:vaultwarden"
@@ -20942,6 +21082,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:viblo" | "simple-icons:viblo"
| "simple-icons:victoriametrics" | "simple-icons:victoriametrics"
| "simple-icons:victronenergy" | "simple-icons:victronenergy"
| "simple-icons:vikunja"
| "simple-icons:vim" | "simple-icons:vim"
| "simple-icons:vimeo" | "simple-icons:vimeo"
| "simple-icons:vimeolivestream" | "simple-icons:vimeolivestream"
@@ -20953,6 +21094,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:virustotal" | "simple-icons:virustotal"
| "simple-icons:visa" | "simple-icons:visa"
| "simple-icons:visualbasic" | "simple-icons:visualbasic"
| "simple-icons:visualparadigm"
| "simple-icons:visualstudio" | "simple-icons:visualstudio"
| "simple-icons:visualstudioappcenter" | "simple-icons:visualstudioappcenter"
| "simple-icons:visualstudiocode" | "simple-icons:visualstudiocode"
@@ -20970,6 +21112,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:vlcmediaplayer" | "simple-icons:vlcmediaplayer"
| "simple-icons:vmware" | "simple-icons:vmware"
| "simple-icons:vodafone" | "simple-icons:vodafone"
| "simple-icons:voelkner"
| "simple-icons:voidlinux" | "simple-icons:voidlinux"
| "simple-icons:voipdotms" | "simple-icons:voipdotms"
| "simple-icons:volkswagen" | "simple-icons:volkswagen"
@@ -20984,6 +21127,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:vtex" | "simple-icons:vtex"
| "simple-icons:vuedotjs" | "simple-icons:vuedotjs"
| "simple-icons:vuetify" | "simple-icons:vuetify"
| "simple-icons:vueuse"
| "simple-icons:vulkan" | "simple-icons:vulkan"
| "simple-icons:vultr" | "simple-icons:vultr"
| "simple-icons:vyond" | "simple-icons:vyond"
@@ -21038,11 +21182,13 @@ declare module 'virtual:astro-icon' {
| "simple-icons:wellfound" | "simple-icons:wellfound"
| "simple-icons:wellsfargo" | "simple-icons:wellsfargo"
| "simple-icons:wemo" | "simple-icons:wemo"
| "simple-icons:weread"
| "simple-icons:westerndigital" | "simple-icons:westerndigital"
| "simple-icons:westernunion" | "simple-icons:westernunion"
| "simple-icons:wetransfer" | "simple-icons:wetransfer"
| "simple-icons:wezterm" | "simple-icons:wezterm"
| "simple-icons:wgpu" | "simple-icons:wgpu"
| "simple-icons:what3words"
| "simple-icons:whatsapp" | "simple-icons:whatsapp"
| "simple-icons:wheniwork" | "simple-icons:wheniwork"
| "simple-icons:whitesource" | "simple-icons:whitesource"
@@ -21056,6 +21202,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:wikimediafoundation" | "simple-icons:wikimediafoundation"
| "simple-icons:wikipedia" | "simple-icons:wikipedia"
| "simple-icons:wikiquote" | "simple-icons:wikiquote"
| "simple-icons:wikisource"
| "simple-icons:wikiversity" | "simple-icons:wikiversity"
| "simple-icons:wikivoyage" | "simple-icons:wikivoyage"
| "simple-icons:winamp" | "simple-icons:winamp"
@@ -21065,6 +21212,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:windows95" | "simple-icons:windows95"
| "simple-icons:windowsterminal" | "simple-icons:windowsterminal"
| "simple-icons:windowsxp" | "simple-icons:windowsxp"
| "simple-icons:windsurf"
| "simple-icons:wine" | "simple-icons:wine"
| "simple-icons:winmate" | "simple-icons:winmate"
| "simple-icons:wipro" | "simple-icons:wipro"
@@ -21118,6 +21266,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:xstate" | "simple-icons:xstate"
| "simple-icons:xubuntu" | "simple-icons:xubuntu"
| "simple-icons:xyflow" | "simple-icons:xyflow"
| "simple-icons:yaak"
| "simple-icons:yabai" | "simple-icons:yabai"
| "simple-icons:yahoo" | "simple-icons:yahoo"
| "simple-icons:yale" | "simple-icons:yale"
@@ -21160,6 +21309,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:zebratechnologies" | "simple-icons:zebratechnologies"
| "simple-icons:zedindustries" | "simple-icons:zedindustries"
| "simple-icons:zelle" | "simple-icons:zelle"
| "simple-icons:zenbrowser"
| "simple-icons:zend" | "simple-icons:zend"
| "simple-icons:zendesk" | "simple-icons:zendesk"
| "simple-icons:zendframework" | "simple-icons:zendframework"
@@ -21183,6 +21333,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:zod" | "simple-icons:zod"
| "simple-icons:zoho" | "simple-icons:zoho"
| "simple-icons:zoiper" | "simple-icons:zoiper"
| "simple-icons:zola"
| "simple-icons:zomato" | "simple-icons:zomato"
| "simple-icons:zoom" | "simple-icons:zoom"
| "simple-icons:zorin" | "simple-icons:zorin"
@@ -21193,7 +21344,10 @@ declare module 'virtual:astro-icon' {
| "simple-icons:zyte" | "simple-icons:zyte"
| "simple-icons:airbrakedotio" | "simple-icons:airbrakedotio"
| "simple-icons:amazonaws" | "simple-icons:amazonaws"
| "simple-icons:chromecast"
| "simple-icons:d3dotjs" | "simple-icons:d3dotjs"
| "simple-icons:empirekred"
| "simple-icons:nextui"
| "simple-icons:nuxtdotjs" | "simple-icons:nuxtdotjs"
| "simple-icons:renovatebot" | "simple-icons:renovatebot"
| "simple-icons:rstudio" | "simple-icons:rstudio"
@@ -21201,5 +21355,7 @@ declare module 'virtual:astro-icon' {
| "simple-icons:tmobile" | "simple-icons:tmobile"
| "simple-icons:windows11" | "simple-icons:windows11"
| "double-arrow-slider" | "double-arrow-slider"
| "linux"; | "fabric"
| "linux"
| "neoforge";
} }

View File

@@ -4,14 +4,27 @@ import tailwind from '@astrojs/tailwind';
import icon from "astro-icon"; import icon from "astro-icon";
import alpinejs from "@astrojs/alpinejs"; import alpinejs from "@astrojs/alpinejs";
import rehypeCitation from 'rehype-citation';
// https://astro.build/config // https://astro.build/config
export default defineConfig({ export default defineConfig({
site: 'https://www.midnightdust.eu', site: 'https://www.midnightdust.eu',
compressHTML: true, compressHTML: true,
integrations: [mdx(), icon(), tailwind({ integrations: [
applyBaseStyles: false mdx(
}), alpinejs()], {rehypePlugins: [[rehypeCitation, {
bibliography: "https://raw.githubusercontent.com/timlrx/rehype-citation/main/test/references-data.bib",
linkCitations: true,
showTooltips: true,
inlineClass: ["citation"],
csl: "https://raw.githubusercontent.com/citation-style-language/styles/master/acm-sig-proceedings.csl"
}]]}
),
icon(),
tailwind({
applyBaseStyles: false
}
), alpinejs()],
vite: { vite: {
css: { css: {
preprocessorOptions: { preprocessorOptions: {
@@ -21,4 +34,4 @@ export default defineConfig({
} }
} }
} }
}); });

4172
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -11,7 +11,7 @@
"preview": "astro preview" "preview": "astro preview"
}, },
"devDependencies": { "devDependencies": {
"@astrojs/mdx": "^4.2.2", "@astrojs/mdx": "^4.3.12",
"@astrojs/partytown": "^2.1.4", "@astrojs/partytown": "^2.1.4",
"@astrojs/tailwind": "^6.0.2", "@astrojs/tailwind": "^6.0.2",
"@iconify-json/ion": "^1.2.2", "@iconify-json/ion": "^1.2.2",
@@ -21,7 +21,7 @@
"@typescript-eslint/eslint-plugin": "^8.28.0", "@typescript-eslint/eslint-plugin": "^8.28.0",
"@typescript-eslint/parser": "^8.28.0", "@typescript-eslint/parser": "^8.28.0",
"accessible-astro-components": "^2.4.0", "accessible-astro-components": "^2.4.0",
"astro": "^5.5.5", "astro": "^5.16.0",
"astro-compress": "^2.3.6", "astro-compress": "^2.3.6",
"astro-icon": "^1.1.5", "astro-icon": "^1.1.5",
"eslint": "^9.23.0", "eslint": "^9.23.0",
@@ -35,9 +35,10 @@
"tailwindcss": "^3.4.17" "tailwindcss": "^3.4.17"
}, },
"dependencies": { "dependencies": {
"@astrojs/alpinejs": "^0.4.4", "@astrojs/alpinejs": "^0.4.9",
"@types/alpinejs": "^3.13.11", "@types/alpinejs": "^3.13.11",
"alpinejs": "^3.14.9", "alpinejs": "^3.14.9",
"rehype-citation": "^2.3.1",
"vanilla-tilt": "^1.8.1" "vanilla-tilt": "^1.8.1"
} }
} }

View File

@@ -0,0 +1,3 @@
{
"m.server": "matrix.midnightdust.eu:443"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 456 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 346 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 708 KiB

After

Width:  |  Height:  |  Size: 621 KiB

View File

@@ -6,7 +6,10 @@
@font-face { @font-face {
font-family: 'Open Sans'; font-family: 'Open Sans';
src: local('Open Sans ExtraBold'), local('OpenSans-ExtraBold'), url('/fonts/OpenSans-ExtraBold.woff2') format('woff2'), src:
local('Open Sans ExtraBold'),
local('OpenSans-ExtraBold'),
url('/fonts/OpenSans-ExtraBold.woff2') format('woff2'),
url('/fonts/OpenSans-ExtraBold.woff') format('woff'); url('/fonts/OpenSans-ExtraBold.woff') format('woff');
font-weight: bold; font-weight: bold;
font-style: normal; font-style: normal;
@@ -15,7 +18,10 @@
@font-face { @font-face {
font-family: 'Open Sans'; font-family: 'Open Sans';
src: local('Open Sans Bold'), local('OpenSans-Bold'), url('/fonts/OpenSans-Bold.woff2') format('woff2'), src:
local('Open Sans Bold'),
local('OpenSans-Bold'),
url('/fonts/OpenSans-Bold.woff2') format('woff2'),
url('/fonts/OpenSans-Bold.woff') format('woff'); url('/fonts/OpenSans-Bold.woff') format('woff');
font-weight: bold; font-weight: bold;
font-style: normal; font-style: normal;
@@ -24,7 +30,10 @@
@font-face { @font-face {
font-family: 'Open Sans'; font-family: 'Open Sans';
src: local('Open Sans Italic'), local('OpenSans-Italic'), url('/fonts/OpenSans-Italic.woff2') format('woff2'), src:
local('Open Sans Italic'),
local('OpenSans-Italic'),
url('/fonts/OpenSans-Italic.woff2') format('woff2'),
url('/fonts/OpenSans-Italic.woff') format('woff'); url('/fonts/OpenSans-Italic.woff') format('woff');
font-weight: normal; font-weight: normal;
font-style: italic; font-style: italic;
@@ -33,7 +42,10 @@
@font-face { @font-face {
font-family: 'Open Sans'; font-family: 'Open Sans';
src: local('Open Sans Regular'), local('OpenSans-Regular'), url('/fonts/OpenSans-Regular.woff2') format('woff2'), src:
local('Open Sans Regular'),
local('OpenSans-Regular'),
url('/fonts/OpenSans-Regular.woff2') format('woff2'),
url('/fonts/OpenSans-Regular.woff') format('woff'); url('/fonts/OpenSans-Regular.woff') format('woff');
font-weight: normal; font-weight: normal;
font-style: normal; font-style: normal;
@@ -88,11 +100,11 @@ body {
} }
h1 { h1 {
font-size: 2.25rem; font-size: 3rem;
line-height: 3.375rem; line-height: 3.375rem;
@include breakpoint(medium) { @include breakpoint(medium) {
font-size: 3rem; font-size: 4rem;
line-height: 3.625rem; line-height: 3.625rem;
} }
} }

View File

@@ -0,0 +1,21 @@
---
interface Props {
vertical?: boolean
}
const { vertical = false } = Astro.props
// Inspired by: https://tw-elements.com/docs/standard/content-styles/dividers/
---
{!vertical ?
<hr class="my-12 h-px border-t-0 bg-transparent bg-gradient-to-r from-transparent via-neutral-500 to-transparent opacity-25 dark:via-neutral-400" />
:
<div class="flex flex-1">
<slot name="left">
<p class="pe-6">Left</p>
</slot>
<div class="h-[250px] min-h-[1em] w-px self-stretch bg-gradient-to-tr from-transparent via-neutral-500 to-transparent opacity-25 dark:via-neutral-400"></div>
<slot name="right">
<p class="ps-6">Right</p>
</slot>
</div>
}

View File

@@ -1,20 +1,54 @@
--- ---
const { text, url_gh, url_mr, url_cf, url_wiki = "", mod = "default" } = Astro.props const { text, url_gh, url_mr, url_cf, url_wiki = '', mod = 'default', icon = '' } = Astro.props
import { Icon } from 'astro-icon/components' import { Icon } from 'astro-icon/components'
--- ---
<div class="container rellax" data-rellax-speed="-1.5"> <div class="rellax container" data-rellax-speed="-1.5">
<div class={"call-to-action mt-24 mb-32 flex flex-col items-center gap-12 rounded-xl p-12 md:p-24 " + mod}> <div class={'call-to-action mt-24 mb-32 flex flex-col items-center gap-12 rounded-xl p-12 md:p-24 ' + mod}>
<h2 class="text-center text-3xl md:text-5xl">{text}</h2> <h2 class="text-center text-3xl md:text-5xl">
{icon != '' ? <Icon class='inline pr-2 align-bottom' name={icon} /> : ''}{text}
</h2>
<div class="flex flex-col gap-3 min-[800px]:flex-row"> <div class="flex flex-col gap-3 min-[800px]:flex-row">
{(url_mr != '') ? <a href={url_mr} class={"button has-icon text-lg " + mod+"-button-primary"}> {
<Icon name="simple-icons:modrinth" />Modrinth</a> : ''} url_mr != '' ? (
{(url_cf != '') ? <a href={url_cf} class={"button has-icon text-lg " + mod+"-button-primary"}> <a href={url_mr} class={'button has-icon text-lg ' + mod + '-button-primary'}>
<Icon name="simple-icons:curseforge" />CurseForge</a> : ''} <Icon name="simple-icons:modrinth" />
{(url_gh != '') ? <a href={url_gh} class={"button has-icon text-lg " + mod+"-button-primary"}> Modrinth
<Icon name="simple-icons:github" />GitHub</a> : ''} </a>
{(url_wiki != '') ? <a href={url_wiki} class={"button has-icon color-secondary text-lg " + mod+"-button-secondary"}> ) : (
<Icon name="ion:library" />Visit the new Wiki!</a> : ''} ''
)
}
{
url_cf != '' ? (
<a href={url_cf} class={'button has-icon text-lg ' + mod + '-button-primary'}>
<Icon name="simple-icons:curseforge" />
CurseForge
</a>
) : (
''
)
}
{
url_gh != '' ? (
<a href={url_gh} class={'button has-icon text-lg ' + mod + '-button-primary'}>
<Icon name="simple-icons:github" />
GitHub
</a>
) : (
''
)
}
{
url_wiki != '' ? (
<a href={url_wiki} class={'button has-icon color-secondary text-lg ' + mod + '-button-secondary'}>
<Icon name="ion:library" />
Visit the new Wiki!
</a>
) : (
''
)
}
</div> </div>
</div> </div>
</div> </div>
@@ -26,7 +60,7 @@ import { Icon } from 'astro-icon/components'
} }
.midnightcontrols { .midnightcontrols {
color: var(--neutral-100); color: var(--neutral-100);
background-image: linear-gradient(40deg, #E302A4, #9400C6); background-image: linear-gradient(40deg, #e302a4, #9400c6);
} }
.midnightcontrols-button-primary { .midnightcontrols-button-primary {
background-color: #ff6fff; background-color: #ff6fff;
@@ -45,7 +79,9 @@ import { Icon } from 'astro-icon/components'
border: 3px solid var(--neutral-900); border: 3px solid var(--neutral-900);
border-radius: 3px; border-radius: 3px;
text-decoration: none; text-decoration: none;
transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out; transition:
color 0.15s ease-in-out,
background-color 0.15s ease-in-out;
&:where(:hover, :focus) { &:where(:hover, :focus) {
color: var(--neutral-100); color: var(--neutral-100);
@@ -53,4 +89,14 @@ import { Icon } from 'astro-icon/components'
text-decoration: underline; text-decoration: underline;
} }
} }
.neoforge {
color: var(--neutral-100);
background-image: linear-gradient(40deg, #d7742f, #ee5577);
}
.neoforge-button-primary {
background-color: #ee5577;
}
.neoforge-button-secondary {
background-color: #d7742f;
}
</style> </style>

View File

@@ -0,0 +1,53 @@
---
interface Props {
previous?: {
name: string
url: string
label?: string
icon?: string
}
next?: {
name: string
url: string
label?: string
icon?: string
}
}
const { previous, next } = Astro.props
import { Icon } from 'astro-icon/components'
import BlurryDivider from './BlurryDivider.astro'
---
<section class="w-full">
<BlurryDivider />
<div class="w-fit md:w-full flex flex-col md:flex-row mx-auto">
{
previous ?
<a class={`max-w-96 button has-icon ml-0 mt-3 content-left lg:mt-0 lg:ml-3 rounded-md text-white hover:cursor-pointer appearance-none h-16`} href={previous.url}>
<div class="flex">
<Icon name={previous.icon ? previous.icon : 'line-md:arrow-left'} class="mr-2 shrink-0" />
<div class="leading-5">
<p class="text-xs font-thin">{previous.label ? previous.label : "Previous Page"}</p>
<p class="line-clamp-2">{previous.name}</p>
</div>
</div>
</a>
: ''
}
<div class="flex-grow hidden md:block" />
{
next ?
<a class={`max-w-96 button has-icon bg-[var(--action-color)] ml-0 mt-3 lg:mt-0 lg:ml-3 rounded-md text-white hover:cursor-pointer appearance-none h-16`} href={next.url}>
<div class="flex">
<div class="leading-5">
<p class="text-xs font-thin">{next.label ? next.label : "Next Page"}</p>
<p class="line-clamp-2">{next.name}</p>
</div>
<Icon name={next.icon ? next.icon : 'line-md:arrow-right'} class="shrink-0" />
</div>
</a>
: ''
}
</div>
</section>

View File

@@ -38,21 +38,32 @@ import { Icon } from 'astro-icon/components'
class CustomTabs extends HTMLElement { class CustomTabs extends HTMLElement {
connectedCallback() { connectedCallback() {
const buttons = this.querySelectorAll('button.tab'); const buttons = this.querySelectorAll('button.tab');
const targets = document.querySelectorAll('[data-tab-condition]')
buttons.forEach((button) => { buttons.forEach((button) => {
button.addEventListener('click', () => { button.addEventListener('click', () => {
buttons.forEach((but) => { buttons.forEach((but) => {
but?.classList.remove('color-secondary'); but?.classList.remove('color-secondary');
const div = document.getElementById(but.id.replace('-tab', ''));
div?.classList.add('hidden');
but.setAttribute('data-active', 'false'); but.setAttribute('data-active', 'false');
}) })
const tabDiv = document.getElementById(button.id.replace('-tab', ''));
button?.classList.add('color-secondary'); button?.classList.add('color-secondary');
tabDiv?.classList.remove('hidden');
button.setAttribute('data-active', 'true'); button.setAttribute('data-active', 'true');
this.updateTargets(targets)
}); });
}); });
this.updateTargets(targets)
}
updateTargets(targets: NodeListOf<Element>) {
targets.forEach((target) => {
const tabCondition = target.getAttribute('data-tab-condition');
const tabDiv = document.getElementById(tabCondition+'-tab');
if (tabDiv == null || !tabDiv.hasAttribute('data-active') || tabDiv.getAttribute('data-active') == 'false')
target.classList.add('hidden');
else
target.classList.remove('hidden');
})
} }
} }
@@ -78,4 +89,4 @@ import { Icon } from 'astro-icon/components'
border: 2px dashed var(--action-color); border: 2px dashed var(--action-color);
border-radius: 8px; border-radius: 8px;
} }
</style> </style>

View File

@@ -0,0 +1,31 @@
---
export default interface Props {
difficulty: 'easy' | 'medium' | 'advanced' | 'hard'
}
enum DifficultyName {
easy = "Easy",
medium = "Medium",
advanced = "Advanced",
hard = "Hard"
}
const { difficulty } = Astro.props
---
<span class={`difficulty-${difficulty} inline-block whitespace-nowrap rounded-[0.27rem] bg-primary-100 px-[0.65em] pb-[0.25em] pt-[0.35em] text-center align-middle text-[0.5em] font-bold leading-none text-black dark:text-black`}>
{ DifficultyName[difficulty] }
</span>
<style lang="scss">
.difficulty-easy {
background-color: rgb(134 239 172);
}
.difficulty-medium {
background-color: rgb(254 240 138);
}
.difficulty-advanced {
background-color: rgb(196 181 253);
}
.difficulty-hard {
background-color: rgb(252 165 165);
}
</style>

View File

@@ -6,14 +6,14 @@ const { modid } = Astro.props
--- ---
<gradle-version modid={modid}> <gradle-version modid={modid}>
<div class="wrapper"> <div>
<label for="loader-selector" class="sr-only">Select the Modloader</label> <label for="loader-selector" class="sr-only">Select the Modloader</label>
<select <select
name="loader-selector" name="loader-selector"
id="loader-selector" id="loader-selector"
class="selector cursor-pointer rounded-md pl-3 pr-2 py-1.5 border-2 dark:border-green-300 dark:bg-neutral-800 dark:text-white focus-visible:outline-none" class="selector cursor-pointer rounded-md pl-3 pr-2 py-1.5 border-2 dark:border-green-300 dark:bg-neutral-800 dark:text-white focus-visible:outline-none"
aria-label="Choose the Modloader"> aria-label="Choose the Modloader">
</select> </select>
<label for="version-selector" class="sr-only">Select the Version</label> <label for="version-selector" class="sr-only">Select the Version</label>
<select <select
@@ -32,7 +32,7 @@ class VersionInfo {
versionList: any; versionList: any;
finishedArray: any; finishedArray: any;
modInfo: any; modInfo: any;
selectedLoader: string; selectedLoader: string;
selectedVersion: string; selectedVersion: string;
@@ -73,7 +73,7 @@ class VersionInfo {
* */ * */
loadVersionList() { loadVersionList() {
let selectedLoader = this.selectedLoader; let selectedLoader = this.selectedLoader;
let versionMap = Object.keys(this.finishedArray).reduce(function(map, value) { let versionMap = Object.keys(this.finishedArray).reduce(function(map, value) {
if (value.startsWith(selectedLoader)) { if (value.startsWith(selectedLoader)) {
const version = value.split("+")[1]; const version = value.split("+")[1];
if (!Object.values(map).includes(version)) { if (!Object.values(map).includes(version)) {
@@ -82,13 +82,35 @@ class VersionInfo {
} }
return map; return map;
}, {}); }, {});
let versionList = Object.keys(versionMap).sort().reverse();
// Based on: https://medium.com/geekculture/sorting-an-array-of-semantic-versions-in-typescript-55d65d411df2
const compareSemanticVersions = (a: string, b: string) => {
// 1. Split the strings into their parts.
const a1 = a.split('.');
const b1 = b.split('.');
// 2. Contingency in case there's a 4th or 5th version
const len = Math.min(a1.length, b1.length);
// 3. Look through each version number and compare.
for (let i = 0; i < len; i++) {
const a2 = +a1[i]||0;
const b2 = +b1[i]||0;
if (a2 !== b2) {
return a2 < b2 ? 1 : -1;
}
}
// 4. We hit this if the all checked versions so far are equal
return b1.length - a1.length;
};
let versionList = Object.keys(versionMap).sort(compareSemanticVersions);
versionList = versionList.filter((version) => !version.includes("w") // Sorts out snapshots versionList = versionList.filter((version) => !version.includes("w") // Sorts out snapshots
&& (!version.includes("-") || !versionList.includes(version.split("-")[0]) // Sorts out pre-releases/release candidates for releases that are already out && (!version.includes("-") || !versionList.includes(version.split("-")[0]) // Sorts out pre-releases/release candidates for releases that are already out
)); ));
return versionList; return versionList;
} }
/** /**
* Loads the version info from Modrinth * Loads the version info from Modrinth
* @param modid The ID of the mod * @param modid The ID of the mod
@@ -119,13 +141,13 @@ class VersionElement extends HTMLElement {
connectedCallback() { connectedCallback() {
var modid = this.getAttribute("modid"); var modid = this.getAttribute("modid");
if (modid == null) return; if (modid == null) return;
// Get the gradle.properties code block // Get the gradle.properties code block
const versionLabel = document.getElementById("resulting-version"); const versionLabel = document.getElementById("resulting-version");
// Get the 2 selectors defined above // Get the 2 selectors defined above
const loaderSelector = document.getElementById("loader-selector"); const loaderSelector = document.getElementById("loader-selector");
const versionSelector = document.getElementById("version-selector"); const versionSelector = document.getElementById("version-selector");
VersionInfo.load(modid).then((versionInfo) => { VersionInfo.load(modid).then((versionInfo) => {
if (loaderSelector instanceof HTMLSelectElement) { if (loaderSelector instanceof HTMLSelectElement) {
versionInfo.loaderList.forEach((loader: string) => { versionInfo.loaderList.forEach((loader: string) => {
@@ -159,7 +181,7 @@ class VersionElement extends HTMLElement {
}); });
} }
} }
// Tell the browser to use our VersionElement class for <gradle-version> elements. // Tell the browser to use our VersionElement class for <gradle-version> elements.
customElements.define('gradle-version', VersionElement); customElements.define('gradle-version', VersionElement);

View File

@@ -23,6 +23,9 @@ import { Icon } from 'astro-icon/components'
<li class="submenu-item"> <li class="submenu-item">
<a href="/midnightcontrols/">MidnightControls</a> <a href="/midnightcontrols/">MidnightControls</a>
</li> </li>
<li class="submenu-item">
<a href="/thisrocks/">This Rocks!</a>
</li>
</ul> </ul>
</li> </li>
<li class="menu-item has-dropdown"> <li class="menu-item has-dropdown">

4
src/icons/fabric.svg Normal file
View File

@@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" clip-rule="evenodd" viewBox="0 0 24 24">
<path fill="none" d="M0 0h24v24H0z"></path>
<path fill="none" stroke="currentColor" stroke-width="23" d="m820 761-85.6-87.6c-4.6-4.7-10.4-9.6-25.9 1-19.9 13.6-8.4 21.9-5.2 25.4 8.2 9 84.1 89 97.2 104 2.5 2.8-20.3-22.5-6.5-39.7 5.4-7 18-12 26-3 6.5 7.3 10.7 18-3.4 29.7-24.7 20.4-102 82.4-127 103-12.5 10.3-28.5 2.3-35.8-6-7.5-8.9-30.6-34.6-51.3-58.2-5.5-6.3-4.1-19.6 2.3-25 35-30.3 91.9-73.8 111.9-90.8" transform="matrix(.08671 0 0 .0867 -49.8 -56)"></path>
</svg>

After

Width:  |  Height:  |  Size: 639 B

3
src/icons/neoforge.svg Normal file
View File

@@ -0,0 +1,3 @@
<svg enable-background="new 0 0 24 24" version="1.1" viewBox="0 0 24 24" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
<g fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"><path d="m12 19.2v2m0-2v2"></path><path d="m8.4 1.3c0.5 1.5 0.7 3 0.1 4.6-0.2 0.5-0.9 1.5-1.6 1.5m8.7-6.1c-0.5 1.5-0.7 3-0.1 4.6 0.2 0.6 0.9 1.5 1.6 1.5"></path><path d="m3.6 15.8h-1.7m18.5 0h1.7"></path><path d="m3.2 12.1h-1.7m19.3 0h1.8"></path><path d="m8.1 12.7v1.6m7.8-1.6v1.6"></path><path d="m10.8 18h1.2m0 1.2-1.2-1.2m2.4 0h-1.2m0 1.2 1.2-1.2"></path><path d="m4 9.7c-0.5 1.2-0.8 2.4-0.8 3.7 0 3.1 2.9 6.3 5.3 8.2 0.9 0.7 2.2 1.1 3.4 1.1m0.1-17.8c-1.1 0-2.1 0.2-3.2 0.7m11.2 4.1c0.5 1.2 0.8 2.4 0.8 3.7 0 3.1-2.9 6.3-5.3 8.2-0.9 0.7-2.2 1.1-3.4 1.1m-0.1-17.8c1.1 0 2.1 0.2 3.2 0.7"></path><path d="m4 9.7c-0.2-1.8-0.3-3.7 0.5-5.5s2.2-2.6 3.9-3m11.6 8.5c0.2-1.9 0.3-3.7-0.5-5.5s-2.2-2.6-3.9-3"></path><path d="m12 21.2-2.4 0.4m2.4-0.4 2.4 0.4"></path></g>
</svg>

After

Width:  |  Height:  |  Size: 1001 B

View File

@@ -106,6 +106,26 @@ const {
} }
} }
} }
.citation {
font-size: 90%;
line-height: 90%;
font-style: italic;
padding-left: 0.2rem;
a, a:not(.button):visited {
color: var(--font-color);
}
}
.references {
&:before {
content: "Sources:";
font-size: 120%;
color: var(--primary-200);
text-decoration: underline;
}
border: 2px var(--primary-200) dotted;
border-radius: 0.75rem;
padding: 0.6rem;
}
</style> </style>
</body> </body>
</html> </html>

View File

@@ -6,7 +6,7 @@ import blogPosts from '../../../public/blog/blog-posts.json'
export async function getStaticPaths({ paginate }) { export async function getStaticPaths({ paginate }) {
//const response = await fetch('https://jsonplaceholder.typicode.com/posts') //const response = await fetch('https://jsonplaceholder.typicode.com/posts')
//const data = await response.json() //const data = await response.json()
const data = blogPosts; const data = blogPosts
return paginate(data, { pageSize: 6 }) return paginate(data, { pageSize: 6 })
} }
@@ -14,31 +14,21 @@ export async function getStaticPaths({ paginate }) {
const { page } = Astro.props const { page } = Astro.props
--- ---
<DefaultLayout <DefaultLayout title="Blog" description="Just my personal blog, where I write about cool projects and endeavours.">
title="Blog"
description="Just my personal blog, where I write about cool projects and endeavours."
>
<section class="my-12"> <section class="my-12">
<div class="space-content container"> <div class="space-content container">
<h1>Blog</h1> <h1>Blog</h1>
<p class="text-2xl"> <p class="text-2xl">Just my personal blog, where I write about cool projects and endeavours.</p>
Just my personal blog, where I write about cool projects and endeavours.
</p>
</div> </div>
</section> </section>
<section class="my-12"> <section class="my-12">
<div class="container"> <div class="container">
<p class="text-sm"><em>Post {page.start + 1} through {page.end + 1} of {page.total} total posts</em></p> <p class="text-sm"><em>Posts {page.start + 1}-{page.end + 1} of {page.total} total posts</em></p>
<ul class="my-3"> <ul class="my-3">
{ {
page.data.map((post) => ( page.data.map((post) => (
<li> <li>
<Card <Card url={'/blog/' + post.postId} title={post.title} footer={'Published: ' + post.date} img={post.img}>
url={'/blog/' + post.postId}
title={post.title}
footer={'Published: ' + post.date}
img={post.img}
>
{post.body} {post.body}
</Card> </Card>
</li> </li>
@@ -59,7 +49,7 @@ const { page } = Astro.props
</section> </section>
</DefaultLayout> </DefaultLayout>
<style lang="scss"> <style lang="scss" is:global>
ul { ul {
display: grid; display: grid;
grid-template-columns: 1fr; grid-template-columns: 1fr;
@@ -74,4 +64,73 @@ const { page } = Astro.props
grid-template-columns: repeat(3, 1fr); grid-template-columns: repeat(3, 1fr);
} }
} }
.pagination a,
.pagination .disabled {
border-radius: 0.75rem;
}
.pagination li:nth-child(1) span, .pagination li:nth-child(5) span {
border-style: dotted;
}
.pagination li:nth-child(2) span, .pagination li:nth-child(4) span {
border-style: dashed;
}
.card {
transition: inset 0.15s ease-in-out;
overflow: visible;
position: relative;
width: calc(100% - 0.5rem);
padding: 2rem;
> * {
position: relative;
z-index: 2;
}
&::before,
&::after {
content: '';
position: absolute;
}
&::before {
inset: 0;
background-color: var(--background);
border: 3px solid var(--neutral-700);
border-radius: 1rem;
box-shadow: 0 0 0 6px var(--background);
z-index: 1;
}
&::after {
background-color: var(--action-color);
inset: 1rem -0.85rem -0.85rem 1rem;
border-radius: 1rem;
z-index: 0;
}
&, &::after {
transition: background-color 0.15s linear;
}
&:hover,
&:focus-within {
box-shadow: 0 0 0 0rem var(--action-color);
a:not(.button) {
color: var(--primary-100);
}
&::after {
background-color: var(--primary-100);
}
}
}
:global(.card [data-icon]) {
height: auto;
width: 4rem;
color: var(--action-color);
}
:global(.darkmode .card::before) {
background-color: var(--dark-100);
box-shadow: 0 0 0 6px var(--dark-100);
}
</style> </style>

12
src/pages/blog/test.mdx Normal file
View File

@@ -0,0 +1,12 @@
---
layout: ../../layouts/BlogLayout.astro
title: Citation test
author: Martin Prokoph
date: 30th November 2024
---
### This is a test for citations
Hello world [see @Nash1950 pp 12-13; @Nash1951]
Thanks for reading!
~ Motschen

View File

@@ -10,11 +10,11 @@ import Counter from '../components/Counter.astro'
<div class="container"> <div class="container">
<h2 class="mb-16 text-6xl">Statistics</h2> <h2 class="mb-16 text-6xl">Statistics</h2>
<div class="grid grid-cols-1 gap-12 sm:grid-cols-2 md:grid-cols-3"> <div class="grid grid-cols-1 gap-12 sm:grid-cols-2 md:grid-cols-3">
<Counter icon="ion:star" count="570+" title="Stars in Total" sub="On GitHub" /> <Counter icon="ion:star" count="600+" title="Stars in Total" sub="On GitHub" />
<Counter icon="ion:download" count="100+ Million" title="Total Downloads" sub="Modrinth & CurseForge" /> <Counter icon="ion:download" count="180+ Million" title="Total Downloads" sub="Modrinth & CurseForge" />
<Counter icon="ion:code-slash" count="5+" title="Years" sub="Development experience" /> <Counter icon="ion:code-slash" count="7+" title="Years" sub="Development experience" />
</div> </div>
</div> </div>
</section> </section>
</DefaultLayout> </DefaultLayout>
<a class="hidden" rel="me" href="https://planetearth.social/@motschen">Mastodon</a> <a class="hidden" rel="me" href="https://planetearth.social/@motschen">Mastodon</a>

View File

@@ -6,28 +6,33 @@ import ContentMedia from '../components/ContentMedia.astro'
--- ---
<DefaultLayout title="MidnightControls"> <DefaultLayout title="MidnightControls">
<h2 class="my-8 text-6xl text-center">MidnightControls</h2> <h1 class="my-8 text-center">MidnightControls</h1>
<ContentMedia imgSrc="/midnightcontrols/feature-touchscreen.webp"> <ContentMedia imgSrc="/midnightcontrols/feature-touchscreen.webp">
<h2>Play Minecraft whichever way <span class="bg-clip-text text-transparent bg-gradient-to-r from-pink-500 to-violet-500">you</span> want!</h2> <h2>
Play Minecraft whichever way <span
class="bg-gradient-to-r from-pink-500 to-violet-500 bg-clip-text text-transparent">you</span
> want!
</h2>
<p class="text-2xl"> <p class="text-2xl">
MidnightControls allows the use of controllers, touchscreens and even eye trackers!<br> MidnightControls allows the use of controllers, touchscreens and even eye trackers!<br />
Minecraft Java was never more accessible. Minecraft Java was never more accessible.
</p> </p>
</ContentMedia> </ContentMedia>
<ContentMedia imgSrc="/midnightcontrols/automobility.png" reverseImg={true}> <ContentMedia imgSrc="/midnightcontrols/automobility.png" reverseImg={true}>
<h2>Broad mod compatibility</h2> <h2>Broad mod compatibility</h2>
<p class="text-2xl"> <p class="text-2xl">
Many Fabric and Quilt mods are compatible with MidnightControls right out of the box.<br> Many Fabric and Quilt mods are compatible with MidnightControls right out of the box.<br />
The mod also exposes an API, allowing developers to easily add controller support to complex mods.<br> The mod also exposes an API, allowing developers to easily add controller support to complex mods.<br />
<p>Shown here is <a href="https://modrinth.com/mod/automobility">Automobility</a>, go check it out!</p> <p>Shown here is <a href="https://modrinth.com/mod/automobility">Automobility</a>, go check it out!</p>
</p> </p>
</ContentMedia> </ContentMedia>
<section> <section>
<div class="container"> <div class="container">
<h2 class="mb-16 text-6xl">Features</h2> <h1 class="mb-16">Features</h1>
<div class="grid grid-cols-1 gap-12 md:grid-cols-2 lg:grid-cols-3"> <div class="grid grid-cols-1 gap-12 md:grid-cols-2 lg:grid-cols-3">
<Feature icon="ion:game-controller-outline" title="Controller Support"> <Feature icon="ion:game-controller-outline" title="Controller Support">
Use your favorite controller to play your favorite game.<br>Many controllers are supported without any configuration! Use your favorite controller to play your favorite game.<br />Many controllers are supported without any
configuration!
</Feature> </Feature>
<Feature icon="ion:finger-print-outline" title="Touchscreen Support"> <Feature icon="ion:finger-print-outline" title="Touchscreen Support">
You only have a touchscreen? No problem! The only thing missing is multitouch support. You only have a touchscreen? No problem! The only thing missing is multitouch support.
@@ -36,10 +41,12 @@ import ContentMedia from '../components/ContentMedia.astro'
Eye Trackers are a great way for people with disabilities to still be able to enjoy this great game! Eye Trackers are a great way for people with disabilities to still be able to enjoy this great game!
</Feature> </Feature>
<Feature icon="ion:options-outline" title="Configurable"> <Feature icon="ion:options-outline" title="Configurable">
The MidnightLib-powered config is full of exciting features.<br>Use the advanced config screen for even more of them! The MidnightLib-powered config is full of exciting features.<br />Use the advanced config screen for even more
of them!
</Feature> </Feature>
<Feature icon="ion:people-outline" title="Splitscreen"> <Feature icon="ion:people-outline" title="Splitscreen">
Invite your homies and loved ones for a local splitscreen Minecraft session! Consult the wiki for setup instructions. Invite your homies and loved ones for a local splitscreen Minecraft session! Consult the wiki for setup
instructions.
</Feature> </Feature>
<Feature icon="ion:happy-outline" title="Great Community"> <Feature icon="ion:happy-outline" title="Great Community">
MidnightControls has an amazing community that is always willing to help with any trouble! MidnightControls has an amazing community that is always willing to help with any trouble!
@@ -47,21 +54,27 @@ import ContentMedia from '../components/ContentMedia.astro'
</div> </div>
</div> </div>
</section> </section>
<CallToAction text="Start using MidnightControls right now!" <CallToAction
url_gh="https://github.com/TeamMidnightDust/MidnightControls" text="Start using MidnightControls right now!"
url_mr="https://modrinth.com/mod/midnightcontrols" url_gh="https://github.com/TeamMidnightDust/MidnightControls"
url_cf="https://www.curseforge.com/minecraft/mc-mods/midnightcontrols" url_mr="https://modrinth.com/mod/midnightcontrols"
url_wiki="/wiki/midnightcontrols" url_cf="https://www.curseforge.com/minecraft/mc-mods/midnightcontrols"
mod="midnightcontrols" url_wiki="/wiki/midnightcontrols"
mod="midnightcontrols"
/> />
<section> <section>
<div class="container"> <div class="container">
<h2 class="my-32 text-6xl text-center">MidnightControlsExtra</h2> <h1 class="my-32 text-center">MidnightControlsExtra</h1>
<ContentMedia imgSrc="/midnightcontrols/front-block-placing.webp"> <ContentMedia imgSrc="/midnightcontrols/front-block-placing.webp">
<h2>You want even <span class="bg-clip-text text-transparent bg-gradient-to-r from-green-500 to-cyan-500">more</span>?</h2> <h2>
You want even <span class="bg-gradient-to-r from-green-500 to-cyan-500 bg-clip-text text-transparent"
>more</span
>?
</h2>
<p class="text-2xl"> <p class="text-2xl">
We got you!<br/> <br/> We got you!<br />
MidnightControlsExtra provides useful features that might trigger anticheats.<br/> <br />
MidnightControlsExtra provides useful features that might trigger anticheats.<br />
Front block placing, anyone? Front block placing, anyone?
</p> </p>
</ContentMedia> </ContentMedia>
@@ -70,7 +83,7 @@ import ContentMedia from '../components/ContentMedia.astro'
Place those pesky blocks almost as fast as Sonic would! Place those pesky blocks almost as fast as Sonic would!
</Feature> </Feature>
<Feature icon="ion:share-outline" title="Front Block Placing"> <Feature icon="ion:share-outline" title="Front Block Placing">
Place blocks in front of you without sneaking up to the edge of the block.<br/>Just like on Bedrock! Place blocks in front of you without sneaking up to the edge of the block.<br />Just like on Bedrock!
</Feature> </Feature>
<Feature icon="ion:layers-outline" title="Vertical Reacharound"> <Feature icon="ion:layers-outline" title="Vertical Reacharound">
Easily place something below the block you are standing on! Easily place something below the block you are standing on!
@@ -78,9 +91,10 @@ import ContentMedia from '../components/ContentMedia.astro'
</div> </div>
</div> </div>
</section> </section>
<CallToAction text="Download MidnightControlsExtra!" <CallToAction
url_gh="https://github.com/TeamMidnightDust/MidnightControlsExtra" text="Download MidnightControlsExtra!"
url_mr="https://modrinth.com/mod/midnightcontrols-extra" url_gh="https://github.com/TeamMidnightDust/MidnightControlsExtra"
url_cf="https://www.curseforge.com/minecraft/mc-mods/midnightcontrolsextra" url_mr="https://modrinth.com/mod/midnightcontrols-extra"
url_cf="https://www.curseforge.com/minecraft/mc-mods/midnightcontrolsextra"
/> />
</DefaultLayout> </DefaultLayout>

View File

@@ -6,29 +6,32 @@ import ContentMedia from '../components/ContentMedia.astro'
--- ---
<DefaultLayout title="MidnightLib"> <DefaultLayout title="MidnightLib">
<h2 class="my-8 text-6xl text-center">MidnightLib</h2> <h1 class="my-8 text-center">MidnightLib</h1>
<ContentMedia imgSrc="/midnightlib/midnightlib-example-code.webp"> <ContentMedia imgSrc="/midnightlib/midnightlib-example-code.webp">
<h2>Implement configurations easier than ever before!</h2> <h2>Implement configurations easier than ever before!</h2>
<p class="text-2xl"> <p class="text-2xl">
Just create Java fields, annotate them with <span class="bg-clip-text text-transparent bg-gradient-to-r from-yellow-500 to-orange-500 font-mono">@Entry</span>, Just create Java fields, annotate them with <span
maybe add some more additional options, and boom! <br> class="bg-gradient-to-r from-yellow-500 to-orange-500 bg-clip-text font-mono text-transparent">@Entry</span
This example can be found <a href="https://github.com/TeamMidnightDust/MidnightLib/blob/architectury/MidnightConfigExample.java" >, maybe add some more additional options, and boom! <br />
>here</a>, and helps you get started (almost) faster than speed of light! This example can be found <a
href="https://github.com/TeamMidnightDust/MidnightLib/blob/architectury/MidnightConfigExample.java">here</a
>, and helps you get started (almost) faster than speed of light!
</p> </p>
</ContentMedia> </ContentMedia>
<ContentMedia imgSrc="/midnightlib/midnightlib-example.png" reverseImg={true}> <ContentMedia imgSrc="/midnightlib/midnightlib-example.png" reverseImg={true}>
<h2>User-friendly config screens</h2> <h2>User-friendly config screens</h2>
<p class="text-2xl"> <p class="text-2xl">
Configuration screens are automatically created from config classes.<br> Configuration screens are automatically created from config classes.<br />
Here's one generated from a class similar to the one from above! Here's one generated from a class similar to the one from above!
</p> </p>
</ContentMedia> </ContentMedia>
<section> <section>
<div class="container"> <div class="container">
<h2 class="mb-16 text-6xl">Features</h2> <h1 class="mb-16">Features</h1>
<div class="grid grid-cols-1 gap-12 md:grid-cols-2 lg:grid-cols-3"> <div class="grid grid-cols-1 gap-12 md:grid-cols-2 lg:grid-cols-3">
<Feature icon="ion:leaf-outline" title="Lightweight"> <Feature icon="ion:leaf-outline" title="Lightweight">
Size of the .jar is currently just 50KB.<br>Everything essential for the config (including GUI) is only 30KB! Size of the .jar is currently just 50KB.<br />Everything essential for the config (including GUI) is only
30KB!
</Feature> </Feature>
<Feature icon="ion:cafe-outline" title="JiJ-able"> <Feature icon="ion:cafe-outline" title="JiJ-able">
Bundle MidnightLib with your mod with ease. Gone are the days of installing dependencies manually! Bundle MidnightLib with your mod with ease. Gone are the days of installing dependencies manually!
@@ -48,10 +51,11 @@ import ContentMedia from '../components/ContentMedia.astro'
</div> </div>
</div> </div>
</section> </section>
<CallToAction text="Start using MidnightLib right now!" <CallToAction
url_gh="https://github.com/TeamMidnightDust/MidnightLib" text="Start using MidnightLib right now!"
url_mr="https://modrinth.com/mod/midnightlib" url_gh="https://github.com/TeamMidnightDust/MidnightLib"
url_cf="https://www.curseforge.com/minecraft/mc-mods/midnightlib" url_mr="https://modrinth.com/mod/midnightlib"
url_wiki="/wiki/midnightlib" url_cf="https://www.curseforge.com/minecraft/mc-mods/midnightlib"
url_wiki="/wiki/midnightlib"
/> />
</DefaultLayout> </DefaultLayout>

56
src/pages/thisrocks.astro Normal file
View File

@@ -0,0 +1,56 @@
---
import DefaultLayout from '../layouts/DefaultLayout.astro'
import BlurryDivider from '../components/BlurryDivider.astro'
import CallToAction from '../components/CallToAction.astro'
import ContentMedia from '../components/ContentMedia.astro'
---
<DefaultLayout title="This Rocks!">
<h1 class="my-8 text-center">This Rocks!</h1>
<ContentMedia imgSrc="/thisrocks/thisrocks_plains.png">
<h2>
Enhance your world generation with <span
class="bg-gradient-to-r from-green-500 to-yellow-500 bg-clip-text text-transparent">detailed</span
> natural blocks.
</h2>
<p class="text-2xl">
Are you bored of staring at endless empty plains and beaches?<br />
This Rocks is on its way to rescue you!
</p>
</ContentMedia>
<ContentMedia imgSrc="/thisrocks/thisrocks_sea.png" reverseImg={true}>
<h2>
Enjoy nature on <span class="bg-gradient-to-r from-purple-500 to-orange-500 bg-clip-text text-transparent"
>vanilla</span
>
clients!
</h2>
<p class="text-2xl">
Thanks to the Polymer library, newer versions of the mod allow anyone to join the server and enjoy the pretty
decorations.<br />
No client mods required!<br />
<p>
Only available in the Fabric version. Find more serverside mods <a href="https://modrinth.com/mods?q=polymer"
>here</a
>
.
</p>
</p>
</ContentMedia>
<BlurryDivider />
<CallToAction
text="Start using This Rocks on Fabric right now!"
icon="fabric"
url_gh="https://github.com/TeamMidnightDust/ThisRocks"
url_mr="https://modrinth.com/mod/this-rocks"
url_cf="https://www.curseforge.com/minecraft/mc-mods/this-rocks"
/>
<CallToAction
text="Are you on (Neo-)Forge? Here you go!"
icon="neoforge"
url_gh="https://github.com/Mrbysco/ThisRocksForge"
url_mr="https://modrinth.com/mod/this-rocks-forge"
url_cf="https://www.curseforge.com/minecraft/mc-mods/this-rocks-forge"
mod="neoforge"
/>
</DefaultLayout>

View File

@@ -8,46 +8,48 @@ import { Image } from 'astro:assets';
import { Icon } from 'astro-icon/components' import { Icon } from 'astro-icon/components'
import { Notification } from 'accessible-astro-components' import { Notification } from 'accessible-astro-components'
import CustomTabs from "../../components/CustomTabs.astro" import CustomTabs from "../../components/CustomTabs.astro"
import Difficulty from "../../components/Difficulty.astro"
import BlurryDivider from "../../components/BlurryDivider.astro"
import pythonCodeImage from '../../assets/betterleaves/script.png'; import pythonCodeImage from '../../assets/betterleaves/script.png';
import ingameImage from '../../assets/betterleaves/ingame.png'; import ingameImage from '../../assets/betterleaves/ingame.png';
# Better Leaves Wiki # Better Leaves Wiki
Welcome to the Better Leaves wiki. Welcome to the Better Leaves wiki.
This documentation aims to help you create your own flavour for any texturepack or mod. This documentation aims to help you create your own flavour for any texturepack or mod.
<br/> <br/>
<ImageComparison firstTitle="Python Code" secondTitle="In-Game" sliderColor='var(--action-color)' sliderShadowColor='var(--action-color)'> <ImageComparison firstTitle="Python Code" secondTitle="In-Game" sliderColor='var(--action-color)' sliderShadowColor='var(--action-color)'>
<Image slot="first-image" width="1920" height="1080" alt="A screenshot showing the Python script code" src={pythonCodeImage}/> <Image slot="first-image" width="1920" height="1080" alt="A screenshot showing the Python script code" src={pythonCodeImage}/>
<Image slot="second-image" width="1920" height="1080" alt="A screenshot of the Better Leaves resourcepack in action" src={ingameImage}/> <Image slot="second-image" width="1920" height="1080" alt="A screenshot of the Better Leaves resourcepack in action" src={ingameImage}/>
</ImageComparison> </ImageComparison>
## Getting Started ## Getting Started <Difficulty difficulty="easy" />
First of all, you need to download the contents of the GitHub repository. First of all, you need to download the contents of the GitHub repository.
To do so, you can either download the [zip file](https://github.com/TeamMidnightDust/BetterLeavesLite/archive/refs/heads/main.zip), or just execute To do so, you can either download the [zip file](https://github.com/TeamMidnightDust/BetterLeavesLite/archive/refs/heads/main.zip), or just execute
```bash ```bash
git clone https://github.com/TeamMidnightDust/BetterLeavesLite.git git clone https://github.com/TeamMidnightDust/BetterLeavesLite.git
``` ```
in a terminal window. in a terminal window.
## Texturepacks ## Texturepacks <Difficulty difficulty="easy" />
You can easily create a build for any texturepack. You can easily create a build for any texturepack.
Just add the pack (as a .zip file or folder) to the input/texturepacks/ folder. Just add the pack (as a .zip file or folder) to the input/texturepacks/ folder.
After that, follow the <a href="#building">Building</a> section to get your flavour! After that, follow the <a href="#building">Building</a> section to get your flavour!
<center><img alt="An overview of the input folder" src="/betterleaves/input-folder.png" width="500"></img></center> <center><img alt="An overview of the input folder" src="/betterleaves/input-folder.png" width="500"></img></center>
<p class="text-center italic">The input folder is all you have to worry about</p> <p class="text-center italic">The input folder is all you have to worry about</p>
## Mods ## Mods <Difficulty difficulty="easy" />
In simple cases, it is enough to put the mod file in the /input/mods folder and continue with the <a href="#building">Building</a> section. In simple cases, it is enough to put the mod file in the /input/mods folder and continue with the <a href="#building">Building</a> section.
<center><img alt="An overview of the input/mods folder, showing the automatic unpacking process" src="/betterleaves/mods-unpacking.png" width="500"></img></center> <center><img alt="An overview of the input/mods folder, showing the automatic unpacking process" src="/betterleaves/mods-unpacking.png" width="500"></img></center>
<p class="text-center italic">Put the .jar file into input/mods, and the script will take care of extracting all textures with "leaves" in their name. <p class="text-center italic">Put the .jar file into input/mods, and the script will take care of extracting all textures with "leaves" in their name.
<br/>The _temp folder is purely symbolic here, it will only exist for a few milliseconds during the extraction process.</p> <br/>The _temp folder is purely symbolic here, it will only exist for a few milliseconds during the extraction process.</p>
## Building ## Building <Difficulty difficulty="medium" />
To build your flavour of the pack, you need to have Python installed on your system. To build your flavour of the pack, you need to have Python installed on your system.
You can get it on any modern operating system. You can get it on any modern operating system.
<CustomTabs tabs={[{ <CustomTabs tabs={[{
name: `Windows`, name: `Windows`,
@@ -63,26 +65,26 @@ You can get it on any modern operating system.
icon: 'simple-icons:apple', icon: 'simple-icons:apple',
id: 'macos' id: 'macos'
}]}> }]}>
<div id="windows" data-active="true"> <div data-tab-condition="windows">
Download the latest stable Python 3 release from the official <a href="https://www.python.org/downloads/windows/">website</a><br/> Download the latest stable Python 3 release from the official <a href="https://www.python.org/downloads/windows/">website</a><br/>
or using winget in PowerShell: or using winget in PowerShell:
<br/> <br/>
```bash ```bash
winget install -e --id Python.Python.3.13.1 winget install -e --id Python.Python.3.13.1
``` ```
</div> </div>
<div id="linux" class="hidden"> <div data-tab-condition="linux" class="hidden">
On most systems, Python should already be installed by default.<br/> On most systems, Python should already be installed by default.<br/>
Else, just install Python using your distro's package manager. Else, just install Python using your distro's package manager.
<br/> <br/>
Arch Linux: Arch Linux:
```bash ```bash
pacman -S python pacman -S python
``` ```
</div> </div>
<div id="macos" class="hidden"> <div data-tab-condition="macos" class="hidden">
In case you haven't already, install Homebrew according to the <a href="https://brew.sh/">official instructions</a>.<br/> In case you haven't already, install Homebrew according to the <a href="https://brew.sh/">official instructions</a>.<br/>
Now, you can just install python using the following command: Now, you can just install python using the following command:
<br/> <br/>
```bash ```bash
brew install python brew install python
@@ -90,8 +92,8 @@ You can get it on any modern operating system.
</div> </div>
</CustomTabs> </CustomTabs>
Now that you have python installed, head back into the BetterLeavesLite directory. Now that you have python installed, head back into the BetterLeavesLite directory.
Here, you should now open a terminal window and run Here, you should now open a terminal window and run
```bash ```bash
pip install -r requirements.txt pip install -r requirements.txt
``` ```
@@ -99,12 +101,12 @@ To build the pack, execute the script using the following command:
```bash ```bash
python3 gen_pack.py 1.0 Your Edition python3 gen_pack.py 1.0 Your Edition
``` ```
Replace "1.0" with your desired version number and "Your Edition" with the name you'd like to appear in the resourcepack description ingame. Replace "1.0" with your desired version number and "Your Edition" with the name you'd like to appear in the resourcepack description ingame.
And in no time, the script will generate a ready-to-use zip file with your desired content. And in no time, the script will generate a ready-to-use zip file with your desired content.
## (Advanced) Irregularities and Missing Textures ## Irregularities and Missing Textures <Difficulty difficulty="advanced" />
If you see missing textures when trying your freshly-built pack, the mod you're adding support for has a more complicated asset structure. If you see missing textures when trying your freshly-built pack, the mod you're adding support for has a more complicated asset structure.
In these cases, you unfortunately have to manually configure exceptions in the /input/overrides.json file. In these cases, you unfortunately have to manually configure exceptions in the /input/overrides.json file.
```json ```json
{ {
// Leaves that should not be tinted based on the biome they're in // Leaves that should not be tinted based on the biome they're in
@@ -132,6 +134,71 @@ In these cases, you unfortunately have to manually configure exceptions in the /
"dynamicTreesNamespaces": { "dynamicTreesNamespaces": {
"minecraft": "dynamictrees", "minecraft": "dynamictrees",
"aether": "dtaether" "aether": "dtaether"
},
// Force-generate (non-bushy) item models for various blocks
"generateItemModels": [
"biomesoplenty:rainbow_birch_leaves",
"betterend:lacugrove_leaves"
],
// Specify blocks that share the same models
"blockStateCopies": {
"minecraft:oak_leaves": [
"twilightforest:twilight_oak_leaves",
"dynamictrees:oak_undergrowth_leaves"
]
},
// A list of textures that will not be treated as leaf blocks (useful for texture stitching)
"compileOnly": [
"minecraft:block/snow"
]
}
```
<BlurryDivider />
## The .betterleaves.json format
### Block States <Difficulty difficulty="advanced" />
Sometimes, you want models to only apply to specific block states.
This is also useful in cases where you want to combine multiple leaf variant textures into a single blockstate file (in that case, set state to "").
`input/assets/eternal_starlight/northland_leaves.betterleaves.json`:
```json
{
"blockStateData": {
"block": "eternal_starlight:northland_leaves",
"state": "snowy=false"
} }
} }
``` ```
### Sprite Overrides <Difficulty difficulty="advanced" />
You can override the sprites used in the model. Currently, top and bottom faces of the leaf model will default to the regular texture, but can be overridden this way.
`input/assets/eternal_starlight/northland_leaves_snowy.betterleaves.json`:
```json
{
"spriteOverrides": {
"top": "minecraft:block/snow",
"bottom": "eternal_starlight:block/northland_leaves"
}
...
}
```
### Texture Stitching <Difficulty difficulty="hard" />
Some leaves have textures that consist of different halves for example Blue Wisteria Leaves from Environmental.
This is where texture stitching comes in.
<center><img style="image-rendering: pixelated" alt="Showcase of the texture stitching layout" src="/betterleaves/demo_blue_wisteria_leaves_top.png" width="400"></img></center>
<p class="text-center italic">Texture stitching allows you to use custom sub-textures while generating the bushy texture</p>
`input/assets/environmental/blue_wisteria_leaves_top.betterleaves.json`:
```json
{
"textureStitching": {
"1-3": "environmental:block/wisteria_leaves",
// Unspecified parts will use the regular leaf texture
"7-9": "environmental:block/blue_wisteria_leaves"
}
...
}
```

View File

@@ -4,45 +4,123 @@ title: MidnightLib Wiki
--- ---
import GradleVersionInfo from '../../components/GradleVersionInfo.astro' import GradleVersionInfo from '../../components/GradleVersionInfo.astro'
import CustomTabs from "../../components/CustomTabs.astro"
import { Icon } from 'astro-icon/components' import { Icon } from 'astro-icon/components'
import { Notification } from 'accessible-astro-components' import { Notification } from 'accessible-astro-components'
# MidnightLib Wiki # MidnightLib Wiki
Welcome to the MidnightLib wiki. Thanks for showing interest in our library! Welcome to the MidnightLib wiki. Thanks for showing interest in our library!
This documentation aims to show you how to use the config system and the other features the library provides. This documentation aims to show you how to use the config system and the other features the library provides.
Use the tabs on the right side to switch between the different pages. Use the tabs on the right side to switch between the different pages.
Explore MidnightLib's features on this page: Explore MidnightLib's features on this page:
[Get to know the features](/midnightlib) [Get to know the features](/midnightlib)
To use the library in your mods, just edit `build.gradle` and `gradle.properties` as seen below: To use the library in your mods, just edit `build.gradle` and `gradle.properties` as seen below:
### `build.gradle` <h3 data-tab-condition="kotlin">`build.gradle.kts (Kotlin DSL)`</h3>
```java <h3 data-tab-condition="groovy" class="hidden">`build.gradle (Groovy DSL)`</h3>
repositories { <h3 data-tab-condition="kotlin-legacy" class="hidden">`build.gradle.kts (Kotlin DSL)`</h3>
[... other repos ...] <h3 data-tab-condition="groovy-legacy" class="hidden">`build.gradle (Groovy DSL)`</h3>
maven { <CustomTabs tabs={[
url = "https://api.modrinth.com/maven" {
} name: `build.gradle.kts`,
id: 'kotlin',
icon: 'simple-icons:kotlin',
active: true
},
{
name: `build.gradle`,
icon: 'simple-icons:apachegroovy',
id: 'groovy'
},
{
name: `build.gradle.kts (Legacy)`,
id: 'kotlin-legacy',
icon: 'simple-icons:kotlin'
},
{
name: `build.gradle (Legacy)`,
icon: 'simple-icons:apachegroovy',
id: 'groovy-legacy'
} }
dependencies { ]}>
[... other dependencies ...] <div data-tab-condition="kotlin" data-active="true">
modImplementation include ("maven.modrinth:midnightlib:${project.midnightlib_version}") ```kotlin
} repositories {
``` // other repos...
maven("https://maven.midnightdust.eu/releases")
}
dependencies {
// other dependencies...
val midnightlib = "eu.midnightdust:midnightlib:${project.midnightlib_version}"
modImplementation(midnightlib)
include(midnightlib)
}
```
</div>
<div data-tab-condition="groovy" class="hidden">
```groovy
repositories {
// other repos...
maven {
url = "https://maven.midnightdust.eu/releases"
}
}
dependencies {
// other dependencies...
modImplementation include ("eu.midnightdust:midnightlib:${project.midnightlib_version}")
}
```
</div>
<div data-tab-condition="kotlin-legacy" class="hidden">
```kotlin
repositories {
// other repos...
maven("https://api.modrinth.com/maven")
}
dependencies {
// other dependencies...
val midnightlib = "maven.modrinth:midnightlib:${project.midnightlib_version}"
modImplementation(midnightlib)
include(midnightlib)
}
```
</div>
<div data-tab-condition="groovy-legacy" class="hidden">
```groovy
repositories {
// other repos...
maven {
url = "https://api.modrinth.com/maven"
}
}
dependencies {
// other dependencies...
modImplementation include ("maven.modrinth:midnightlib:${project.midnightlib_version}")
}
```
</div>
</CustomTabs>
<Notification type="warning">
<Icon name="ion:information-circle-outline" />
<p>
<strong>Legacy:</strong> For versions below 1.9.0, use the Modrinth maven repo provided in the legacy tabs.
</p>
</Notification>
### `gradle.properties` ### `gradle.properties`
<GradleVersionInfo modid='midnightlib' /> <GradleVersionInfo modid='midnightlib' />
<Notification type="info"> <Notification type="info">
<Icon name="ion:information-circle-outline" /> <Icon name="ion:information-circle-outline" />
<p> <p>
<strong>Info:</strong> You should always pick the version that suits your modloader and Minecraft version best. <strong>Info:</strong> You should always pick the version that suits your modloader and Minecraft version best.
Forge support is retired in favor of NeoForge. Forge support for 1.21+ is retired in favor of NeoForge.
</p> </p>
</Notification> </Notification>
### `YourConfigClass.java` ### `YourConfigClass.java`
To get started with implementing the config, you must create a public class that extends MidnightConfig. To get started with implementing the config, you must create a public class that extends MidnightConfig.
In this class, your variables can be stored and accessed. Here you can see the contents of an example config class: In this class, your variables can be stored and accessed. Here you can see the contents of an example config class:
```java ```java
package eu.midnightdust.fabric.example.config; package eu.midnightdust.fabric.example.config;
@@ -147,7 +225,7 @@ public class MidnightConfigExample extends MidnightConfig {
public static int imposter = 16777215; // - Entries without an @Entry or @Comment annotation are ignored public static int imposter = 16777215; // - Entries without an @Entry or @Comment annotation are ignored
} }
``` ```
### `assets/modid/lang/`**`en_US.json`** ### `assets/modid/lang/`**`en_us.json`**
The .json language file for your config class could look similar to this: The .json language file for your config class could look similar to this:
```json ```json
{ {
@@ -188,22 +266,22 @@ The .json language file for your config class could look similar to this:
### `YourModInitializer.java` ### `YourModInitializer.java`
To initialize the config you **have** to call: To initialize the config you **have** to call:
```java ```java
MidnightConfig.init("modid", MidnightConfigExample.class); MidnightConfig.init("modid", MidnightConfigExample.class);
``` ```
in your ModInitializer. in your ModInitializer.
If you want it to show up properly in ModMenu, be sure to do so in the main initializer (instead of the client/dedicated server one). If you want it to show up properly in ModMenu, be sure to do so in the main initializer (instead of the client/dedicated server one).
To get an instance of the config screen you can call: To get an instance of the config screen you can call:
```java ```java
MidnightConfig.getScreen(parent, "modid"); MidnightConfig.getScreen(parent, "modid");
``` ```
### `ModMenuInit.java` ### `ModMenuInit.java`
If you don't use the whole library and therefore not the automatic ModMenu integration, the code in your ModMenu integration class would look something like this: If you don't use the whole library and therefore not the automatic ModMenu integration, the code in your ModMenu integration class would look something like this:
```java ```java
@Override @Override
public ConfigScreenFactory<?> getModConfigScreenFactory() { public ConfigScreenFactory<?> getModConfigScreenFactory() {
return parent -> MidnightConfig.getScreen(parent, "modid"); return parent -> MidnightConfig.getScreen(parent, "modid");
} }
``` ```

View File

@@ -3,60 +3,109 @@ layout: ../../layouts/MarkdownLayout.astro
title: PictureSign Wiki title: PictureSign Wiki
--- ---
import CustomTabs from "../../components/CustomTabs.astro"
import { Icon } from 'astro-icon/components' import { Icon } from 'astro-icon/components'
import { Notification } from 'accessible-astro-components' import { Notification } from 'accessible-astro-components'
# PictureSign Wiki # PictureSign Wiki
Welcome to the PictureSign wiki. Welcome to the PictureSign wiki.
This documentation aims to help you make your world come alive using signs. This documentation aims to help you make your world come alive using signs.
Explore PictureSign's features on this page: Explore PictureSign's features on this page:
[Get to know the features](/picturesign) [Get to know the features](/picturesign)
### Placing a picture ### Placing a picture
This mod works using signs to store picture information, making it 100% client-sided the mod works on every server! This mod works using signs to store picture information, making it 100% client-sided the mod works on every server!
To start, place a picture and click on the icon in the bottom-right. To start, place a picture and click on the icon in the bottom-right.
Great! You have now opened the helper interface. Here, you can add a URL to your desired media and customize various options! Great! You have now opened the helper interface. Here, you can add a URL to your desired media and customize various options!
<center><img alt="An image of the PictureSign helper interface" src="/picturesign/helper-gui.webp" width="900"></img></center> <center><img alt="An image of the PictureSign helper interface" src="/picturesign/helper-gui.webp" width="900"></img></center>
<p class="text-center italic">An image of the PictureSign helper interface</p> <p class="text-center italic">An image of the PictureSign helper interface</p>
### Using GIFs, video and audio ### Using GIFs, video and audio
To use the Multimedia capabilities of this mod, first make sure you have installed the [WATERMeDIA](https://modrinth.com/mod/watermedia) mod, as well as [VLC media player](https://www.videolan.org/vlc/) on your system. To use the Multimedia capabilities of this mod, first make sure you have installed the [WATERMeDIA](https://modrinth.com/mod/watermedia) mod, as well as [VLC media player](https://www.videolan.org/vlc/) on your system.
These components allow the video and audio support of PictureSign to work properly. These components allow the video and audio support of PictureSign to work properly.
GIF support does not neccessarily need VLC, just WATERMeDIA. GIF support does not neccessarily need VLC, just WATERMeDIA.
### Setting up pictures ### Setting up pictures
Pictures can come from various sources: Pictures can come from various sources:
- Websites (Recommended): [Imgur](https://imgur.com/), [ImgBB](https://ibb.co/), [PictShare](https://pictshare.net/), [Freeimage](https://iili.io/) <CustomTabs tabs={[
- Only these websites will work by default. This is a security measure. {
- Resourcepack Textures: Use prefix <span class="bg-clip-text text-transparent bg-gradient-to-r from-green-500 to-blue-500 font-mono">rp:</span> (".png" is optional) name: `Websites`,
id: 'source-websites',
icon: 'mdi:web-box',
active: true
},
{
name: `Resourcepack Textures`,
id: 'source-respack',
icon: 'mdi:zip-box'
},
{
name: `Local files`,
id: 'source-local',
icon: 'mdi:file-cabinet'
}
]}>
<div data-tab-condition="source-websites">
- [Imgur](https://imgur.com/), [ImgBB](https://ibb.co/), [PictShare](https://pictshare.net/), [Freeimage](https://iili.io/)
- Only these websites will work by default.
- This is a security measure.
</div>
<div data-tab-condition="source-respack" class="hidden">
- Use prefix <span class="bg-clip-text text-transparent bg-gradient-to-r from-green-500 to-blue-500 font-mono">rp:</span> (".png" is optional)
- Texture from Vanilla: e.g. "rp:textures/block/diamond_block.png" - Texture from Vanilla: e.g. "rp:textures/block/diamond_block.png"
- Texture from a Mod: e.g. "rp:picturesign:textures/gui/sprites/icon/picturesign" - Texture from a Mod: e.g. "rp:picturesign:textures/gui/sprites/icon/picturesign"
- Local files: Use prefix <span class="bg-clip-text text-transparent bg-gradient-to-r from-green-500 to-blue-500 font-mono">file:</span> </div>
<div data-tab-condition="source-local" class="hidden">
- Use prefix <span class="bg-clip-text text-transparent bg-gradient-to-r from-green-500 to-blue-500 font-mono">file:</span>
- File in your Minecraft folder: e.g. "file:./config/picturesign/image.png" - File in your Minecraft folder: e.g. "file:./config/picturesign/image.png"
- File on your Hard drive: e.g. "file:C:/Users/Motschen/Pictures/image.png" (Windows) or "file:/home/motschen/Pictures/image.png" (Linux/MacOS) - File on your Hard drive: e.g. "file:C:/Users/Motschen/Pictures/image.png" (Windows) or "file:/home/motschen/Pictures/image.png" (Linux/MacOS)
</div>
</CustomTabs>
<Notification type="info"> <Notification type="info">
<Icon name="ion:information-circle-outline" /> <Icon name="ion:information-circle-outline" />
<p> <p>
<strong>Info:</strong> Avoid using local files to load pictures. <strong>Info:</strong> Avoid using local files to load pictures.
They will not be visible by other players, exept if their instance also includes the files. They will not be visible by other players, exept if their instance also includes the files.
</p> </p>
</Notification> </Notification>
### Setting up GIFs ### Setting up GIFs
GIFs can currently only come from one source: GIFs can currently only come from one source:
- Websites: [Imgur](https://imgur.com/), [Tenor](https://tenor.com/) <CustomTabs tabs={[
{
name: `Websites`,
id: 'source-websites-dummy',
icon: 'mdi:web-box',
active: true
}
]}>
<div>
- [Imgur](https://imgur.com/), [Tenor](https://tenor.com/)
- Only these websites will work by default. This is a security measure. - Only these websites will work by default. This is a security measure.
</div>
</CustomTabs>
### Setting up videos and audios ### Setting up videos and audios
Multimedia can currently only come from one source: Multimedia can currently only come from one source:
- Websites: [YouTube](https://youtube.com/), [Vimeo](https://vimeo.com/) <CustomTabs tabs={[
{
name: `Websites`,
id: 'source-websites-dummy',
icon: 'mdi:web-box',
active: true
}
]}>
<div>
- [YouTube](https://youtube.com/), [Vimeo](https://vimeo.com/)
- Only these websites will work by default. This is a security measure. - Only these websites will work by default. This is a security measure.
</div>
</CustomTabs>
### (Advanced) Changing multimedia properties via JSON ### (Advanced) Changing multimedia properties via JSON
You can specify a volume as well as setting custom start and end times for multimedia using json files. You can specify a volume as well as setting custom start and end times for multimedia using json files.
An example JSON would look like this: An example JSON would look like this:
```json ```json
{ {
@@ -68,5 +117,16 @@ An example JSON would look like this:
``` ```
Upload your JSON file to one of the following sources: Upload your JSON file to one of the following sources:
- Websites: [GitHub](https://github.com/), [GitHub Gists](https://gist.github.com/), [JSON Keeper](https://www.jsonkeeper.com/), [n:point](https://npoint.io/), [JSONsilo](https://jsonsilo.com/) <CustomTabs tabs={[
- Only these websites will work by default. This is a security measure. {
name: `Websites`,
id: 'source-websites-dummy',
icon: 'mdi:web-box',
active: true
}
]}>
<div>
- [GitHub](https://github.com/), [GitHub Gists](https://gist.github.com/), [JSON Keeper](https://www.jsonkeeper.com/), [n:point](https://npoint.io/), [JSONsilo](https://jsonsilo.com/)
- Only these websites will work by default. This is a security measure.
</div>
</CustomTabs>