refactor: improve ui (#153)

优化整体的 UI 和布局。

```release-note
None
```
This commit is contained in:
Ryan Wang
2024-07-08 17:05:23 +08:00
committed by GitHub
parent 689e6a3ee5
commit ed652815b9
36 changed files with 311 additions and 313 deletions

View File

@@ -39,10 +39,10 @@
"devDependencies": { "devDependencies": {
"@iconify-json/bx": "^1.1.10", "@iconify-json/bx": "^1.1.10",
"@iconify-json/gg": "^1.1.9", "@iconify-json/gg": "^1.1.9",
"@iconify-json/simple-icons": "^1.1.99", "@iconify-json/simple-icons": "^1.1.105",
"@iconify-json/tabler": "^1.1.109", "@iconify-json/tabler": "^1.1.113",
"@tailwindcss/aspect-ratio": "^0.4.2", "@tailwindcss/aspect-ratio": "^0.4.2",
"@tailwindcss/typography": "^0.5.12", "@tailwindcss/typography": "^0.5.13",
"@types/alpinejs": "^3.13.10", "@types/alpinejs": "^3.13.10",
"@types/node": "18.11.9", "@types/node": "18.11.9",
"@typescript-eslint/eslint-plugin": "^5.62.0", "@typescript-eslint/eslint-plugin": "^5.62.0",
@@ -52,18 +52,18 @@
"eslint-config-prettier": "^8.10.0", "eslint-config-prettier": "^8.10.0",
"eslint-plugin-prettier": "^4.2.1", "eslint-plugin-prettier": "^4.2.1",
"postcss": "^8.4.38", "postcss": "^8.4.38",
"prettier": "^2.8.8", "prettier": "^3.3.1",
"prettier-plugin-tailwindcss": "^0.3.0", "prettier-plugin-tailwindcss": "^0.6.2",
"release-it": "^15.11.0", "release-it": "^15.11.0",
"sass": "^1.74.1", "sass": "^1.77.4",
"tailwindcss": "^3.4.3", "tailwindcss": "^3.4.4",
"tailwindcss-plugin-icons": "^2.2.2", "tailwindcss-plugin-icons": "^2.2.2",
"typescript": "^4.9.5", "typescript": "^5.4.5",
"vite": "^5.2.8" "vite": "^5.2.13"
}, },
"dependencies": { "dependencies": {
"alpinejs": "^3.13.8", "alpinejs": "^3.14.0",
"pupa": "^3.1.0", "pupa": "^3.1.0",
"tocbot": "^4.25.0" "tocbot": "^4.28.2"
} }
} }

355
pnpm-lock.yaml generated
View File

@@ -6,14 +6,14 @@ settings:
dependencies: dependencies:
alpinejs: alpinejs:
specifier: ^3.13.8 specifier: ^3.14.0
version: 3.13.8 version: 3.14.1
pupa: pupa:
specifier: ^3.1.0 specifier: ^3.1.0
version: 3.1.0 version: 3.1.0
tocbot: tocbot:
specifier: ^4.25.0 specifier: ^4.28.2
version: 4.25.0 version: 4.28.2
devDependencies: devDependencies:
'@iconify-json/bx': '@iconify-json/bx':
@@ -23,17 +23,17 @@ devDependencies:
specifier: ^1.1.9 specifier: ^1.1.9
version: 1.1.9 version: 1.1.9
'@iconify-json/simple-icons': '@iconify-json/simple-icons':
specifier: ^1.1.99 specifier: ^1.1.105
version: 1.1.99 version: 1.1.108
'@iconify-json/tabler': '@iconify-json/tabler':
specifier: ^1.1.109 specifier: ^1.1.113
version: 1.1.109 version: 1.1.116
'@tailwindcss/aspect-ratio': '@tailwindcss/aspect-ratio':
specifier: ^0.4.2 specifier: ^0.4.2
version: 0.4.2(tailwindcss@3.4.3) version: 0.4.2(tailwindcss@3.4.4)
'@tailwindcss/typography': '@tailwindcss/typography':
specifier: ^0.5.12 specifier: ^0.5.13
version: 0.5.12(tailwindcss@3.4.3) version: 0.5.13(tailwindcss@3.4.4)
'@types/alpinejs': '@types/alpinejs':
specifier: ^3.13.10 specifier: ^3.13.10
version: 3.13.10 version: 3.13.10
@@ -42,10 +42,10 @@ devDependencies:
version: 18.11.9 version: 18.11.9
'@typescript-eslint/eslint-plugin': '@typescript-eslint/eslint-plugin':
specifier: ^5.62.0 specifier: ^5.62.0
version: 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@4.9.5) version: 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@5.5.3)
'@typescript-eslint/parser': '@typescript-eslint/parser':
specifier: ^5.62.0 specifier: ^5.62.0
version: 5.62.0(eslint@8.57.0)(typescript@4.9.5) version: 5.62.0(eslint@8.57.0)(typescript@5.5.3)
autoprefixer: autoprefixer:
specifier: ^10.4.19 specifier: ^10.4.19
version: 10.4.19(postcss@8.4.38) version: 10.4.19(postcss@8.4.38)
@@ -57,34 +57,34 @@ devDependencies:
version: 8.10.0(eslint@8.57.0) version: 8.10.0(eslint@8.57.0)
eslint-plugin-prettier: eslint-plugin-prettier:
specifier: ^4.2.1 specifier: ^4.2.1
version: 4.2.1(eslint-config-prettier@8.10.0)(eslint@8.57.0)(prettier@2.8.8) version: 4.2.1(eslint-config-prettier@8.10.0)(eslint@8.57.0)(prettier@3.3.2)
postcss: postcss:
specifier: ^8.4.38 specifier: ^8.4.38
version: 8.4.38 version: 8.4.38
prettier: prettier:
specifier: ^2.8.8 specifier: ^3.3.1
version: 2.8.8 version: 3.3.2
prettier-plugin-tailwindcss: prettier-plugin-tailwindcss:
specifier: ^0.3.0 specifier: ^0.6.2
version: 0.3.0(prettier@2.8.8) version: 0.6.5(prettier@3.3.2)
release-it: release-it:
specifier: ^15.11.0 specifier: ^15.11.0
version: 15.11.0 version: 15.11.0
sass: sass:
specifier: ^1.74.1 specifier: ^1.77.4
version: 1.74.1 version: 1.77.6
tailwindcss: tailwindcss:
specifier: ^3.4.3 specifier: ^3.4.4
version: 3.4.3 version: 3.4.4
tailwindcss-plugin-icons: tailwindcss-plugin-icons:
specifier: ^2.2.2 specifier: ^2.2.2
version: 2.2.2(tailwindcss@3.4.3) version: 2.2.2(tailwindcss@3.4.4)
typescript: typescript:
specifier: ^4.9.5 specifier: ^5.4.5
version: 4.9.5 version: 5.5.3
vite: vite:
specifier: ^5.2.8 specifier: ^5.2.13
version: 5.2.8(@types/node@18.11.9)(sass@1.74.1) version: 5.3.3(@types/node@18.11.9)(sass@1.77.6)
packages: packages:
@@ -119,8 +119,8 @@ packages:
js-tokens: 4.0.0 js-tokens: 4.0.0
dev: true dev: true
/@esbuild/aix-ppc64@0.20.2: /@esbuild/aix-ppc64@0.21.5:
resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [ppc64] cpu: [ppc64]
os: [aix] os: [aix]
@@ -128,8 +128,8 @@ packages:
dev: true dev: true
optional: true optional: true
/@esbuild/android-arm64@0.20.2: /@esbuild/android-arm64@0.21.5:
resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [arm64] cpu: [arm64]
os: [android] os: [android]
@@ -137,8 +137,8 @@ packages:
dev: true dev: true
optional: true optional: true
/@esbuild/android-arm@0.20.2: /@esbuild/android-arm@0.21.5:
resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [arm] cpu: [arm]
os: [android] os: [android]
@@ -146,8 +146,8 @@ packages:
dev: true dev: true
optional: true optional: true
/@esbuild/android-x64@0.20.2: /@esbuild/android-x64@0.21.5:
resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [x64] cpu: [x64]
os: [android] os: [android]
@@ -155,8 +155,8 @@ packages:
dev: true dev: true
optional: true optional: true
/@esbuild/darwin-arm64@0.20.2: /@esbuild/darwin-arm64@0.21.5:
resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [arm64] cpu: [arm64]
os: [darwin] os: [darwin]
@@ -164,8 +164,8 @@ packages:
dev: true dev: true
optional: true optional: true
/@esbuild/darwin-x64@0.20.2: /@esbuild/darwin-x64@0.21.5:
resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [x64] cpu: [x64]
os: [darwin] os: [darwin]
@@ -173,8 +173,8 @@ packages:
dev: true dev: true
optional: true optional: true
/@esbuild/freebsd-arm64@0.20.2: /@esbuild/freebsd-arm64@0.21.5:
resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [arm64] cpu: [arm64]
os: [freebsd] os: [freebsd]
@@ -182,8 +182,8 @@ packages:
dev: true dev: true
optional: true optional: true
/@esbuild/freebsd-x64@0.20.2: /@esbuild/freebsd-x64@0.21.5:
resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [x64] cpu: [x64]
os: [freebsd] os: [freebsd]
@@ -191,8 +191,8 @@ packages:
dev: true dev: true
optional: true optional: true
/@esbuild/linux-arm64@0.20.2: /@esbuild/linux-arm64@0.21.5:
resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
@@ -200,8 +200,8 @@ packages:
dev: true dev: true
optional: true optional: true
/@esbuild/linux-arm@0.20.2: /@esbuild/linux-arm@0.21.5:
resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [arm] cpu: [arm]
os: [linux] os: [linux]
@@ -209,8 +209,8 @@ packages:
dev: true dev: true
optional: true optional: true
/@esbuild/linux-ia32@0.20.2: /@esbuild/linux-ia32@0.21.5:
resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [ia32] cpu: [ia32]
os: [linux] os: [linux]
@@ -218,8 +218,8 @@ packages:
dev: true dev: true
optional: true optional: true
/@esbuild/linux-loong64@0.20.2: /@esbuild/linux-loong64@0.21.5:
resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [loong64] cpu: [loong64]
os: [linux] os: [linux]
@@ -227,8 +227,8 @@ packages:
dev: true dev: true
optional: true optional: true
/@esbuild/linux-mips64el@0.20.2: /@esbuild/linux-mips64el@0.21.5:
resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [mips64el] cpu: [mips64el]
os: [linux] os: [linux]
@@ -236,8 +236,8 @@ packages:
dev: true dev: true
optional: true optional: true
/@esbuild/linux-ppc64@0.20.2: /@esbuild/linux-ppc64@0.21.5:
resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [ppc64] cpu: [ppc64]
os: [linux] os: [linux]
@@ -245,8 +245,8 @@ packages:
dev: true dev: true
optional: true optional: true
/@esbuild/linux-riscv64@0.20.2: /@esbuild/linux-riscv64@0.21.5:
resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [riscv64] cpu: [riscv64]
os: [linux] os: [linux]
@@ -254,8 +254,8 @@ packages:
dev: true dev: true
optional: true optional: true
/@esbuild/linux-s390x@0.20.2: /@esbuild/linux-s390x@0.21.5:
resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [s390x] cpu: [s390x]
os: [linux] os: [linux]
@@ -263,8 +263,8 @@ packages:
dev: true dev: true
optional: true optional: true
/@esbuild/linux-x64@0.20.2: /@esbuild/linux-x64@0.21.5:
resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
@@ -272,8 +272,8 @@ packages:
dev: true dev: true
optional: true optional: true
/@esbuild/netbsd-x64@0.20.2: /@esbuild/netbsd-x64@0.21.5:
resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [x64] cpu: [x64]
os: [netbsd] os: [netbsd]
@@ -281,8 +281,8 @@ packages:
dev: true dev: true
optional: true optional: true
/@esbuild/openbsd-x64@0.20.2: /@esbuild/openbsd-x64@0.21.5:
resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [x64] cpu: [x64]
os: [openbsd] os: [openbsd]
@@ -290,8 +290,8 @@ packages:
dev: true dev: true
optional: true optional: true
/@esbuild/sunos-x64@0.20.2: /@esbuild/sunos-x64@0.21.5:
resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [x64] cpu: [x64]
os: [sunos] os: [sunos]
@@ -299,8 +299,8 @@ packages:
dev: true dev: true
optional: true optional: true
/@esbuild/win32-arm64@0.20.2: /@esbuild/win32-arm64@0.21.5:
resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [arm64] cpu: [arm64]
os: [win32] os: [win32]
@@ -308,8 +308,8 @@ packages:
dev: true dev: true
optional: true optional: true
/@esbuild/win32-ia32@0.20.2: /@esbuild/win32-ia32@0.21.5:
resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [ia32] cpu: [ia32]
os: [win32] os: [win32]
@@ -317,8 +317,8 @@ packages:
dev: true dev: true
optional: true optional: true
/@esbuild/win32-x64@0.20.2: /@esbuild/win32-x64@0.21.5:
resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [x64] cpu: [x64]
os: [win32] os: [win32]
@@ -404,14 +404,14 @@ packages:
'@iconify/types': 2.0.0 '@iconify/types': 2.0.0
dev: true dev: true
/@iconify-json/simple-icons@1.1.99: /@iconify-json/simple-icons@1.1.108:
resolution: {integrity: sha512-/csVihX/ztkl2j4Vk4JoEJv8DdQHrZafzC5QHe21Y+ztuVglvavjb4yWEn9KQHTitLH2fIMnP8+RSTxu5kdmtw==} resolution: {integrity: sha512-GeC0Oy3j385BgjI0TadEzVbzM/cYjvAot22hJLNal3wKLmf/8t6RtH2PgRiNaK+SxELeDYdSAHocXxw4QoKXYA==}
dependencies: dependencies:
'@iconify/types': 2.0.0 '@iconify/types': 2.0.0
dev: true dev: true
/@iconify-json/tabler@1.1.109: /@iconify-json/tabler@1.1.116:
resolution: {integrity: sha512-74RaBQZQ0761iFTrgmuSH1fovfx0fBKn+txRbRNbRzfh8XWtlAHqKUc3CzvzATMLnVsSRJDxjG3qY4oWH/+opw==} resolution: {integrity: sha512-p+dJ+3L/M2o10REG2lh179Blu5+AA51TFkwuUwY7F+vQsF5Z8DIjyNck3yoBBiCxWqhDhsLzC+p9YO7dWqISmw==}
dependencies: dependencies:
'@iconify/types': 2.0.0 '@iconify/types': 2.0.0
dev: true dev: true
@@ -768,16 +768,16 @@ packages:
defer-to-connect: 2.0.1 defer-to-connect: 2.0.1
dev: true dev: true
/@tailwindcss/aspect-ratio@0.4.2(tailwindcss@3.4.3): /@tailwindcss/aspect-ratio@0.4.2(tailwindcss@3.4.4):
resolution: {integrity: sha512-8QPrypskfBa7QIMuKHg2TA7BqES6vhBrDLOv8Unb6FcFyd3TjKbc6lcmb9UPQHxfl24sXoJ41ux/H7qQQvfaSQ==} resolution: {integrity: sha512-8QPrypskfBa7QIMuKHg2TA7BqES6vhBrDLOv8Unb6FcFyd3TjKbc6lcmb9UPQHxfl24sXoJ41ux/H7qQQvfaSQ==}
peerDependencies: peerDependencies:
tailwindcss: '>=2.0.0 || >=3.0.0 || >=3.0.0-alpha.1' tailwindcss: '>=2.0.0 || >=3.0.0 || >=3.0.0-alpha.1'
dependencies: dependencies:
tailwindcss: 3.4.3 tailwindcss: 3.4.4
dev: true dev: true
/@tailwindcss/typography@0.5.12(tailwindcss@3.4.3): /@tailwindcss/typography@0.5.13(tailwindcss@3.4.4):
resolution: {integrity: sha512-CNwpBpconcP7ppxmuq3qvaCxiRWnbhANpY/ruH4L5qs2GCiVDJXde/pjj2HWPV1+Q4G9+V/etrwUYopdcjAlyg==} resolution: {integrity: sha512-ADGcJ8dX21dVVHIwTRgzrcunY6YY9uSlAHHGVKvkA+vLc5qLwEszvKts40lx7z0qc4clpjclwLeK5rVCV2P/uw==}
peerDependencies: peerDependencies:
tailwindcss: '>=3.0.0 || insiders' tailwindcss: '>=3.0.0 || insiders'
dependencies: dependencies:
@@ -785,7 +785,7 @@ packages:
lodash.isplainobject: 4.0.6 lodash.isplainobject: 4.0.6
lodash.merge: 4.6.2 lodash.merge: 4.6.2
postcss-selector-parser: 6.0.10 postcss-selector-parser: 6.0.10
tailwindcss: 3.4.3 tailwindcss: 3.4.4
dev: true dev: true
/@types/alpinejs@3.13.10: /@types/alpinejs@3.13.10:
@@ -812,7 +812,7 @@ packages:
resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==} resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==}
dev: true dev: true
/@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@4.9.5): /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@5.5.3):
resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies: peerDependencies:
@@ -824,23 +824,23 @@ packages:
optional: true optional: true
dependencies: dependencies:
'@eslint-community/regexpp': 4.4.0 '@eslint-community/regexpp': 4.4.0
'@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@4.9.5) '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.5.3)
'@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/scope-manager': 5.62.0
'@typescript-eslint/type-utils': 5.62.0(eslint@8.57.0)(typescript@4.9.5) '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.0)(typescript@5.5.3)
'@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@4.9.5) '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.5.3)
debug: 4.3.4 debug: 4.3.4
eslint: 8.57.0 eslint: 8.57.0
graphemer: 1.4.0 graphemer: 1.4.0
ignore: 5.2.0 ignore: 5.2.0
natural-compare-lite: 1.4.0 natural-compare-lite: 1.4.0
semver: 7.5.1 semver: 7.5.1
tsutils: 3.21.0(typescript@4.9.5) tsutils: 3.21.0(typescript@5.5.3)
typescript: 4.9.5 typescript: 5.5.3
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
dev: true dev: true
/@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@4.9.5): /@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.5.3):
resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies: peerDependencies:
@@ -852,10 +852,10 @@ packages:
dependencies: dependencies:
'@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/scope-manager': 5.62.0
'@typescript-eslint/types': 5.62.0 '@typescript-eslint/types': 5.62.0
'@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.3)
debug: 4.3.4 debug: 4.3.4
eslint: 8.57.0 eslint: 8.57.0
typescript: 4.9.5 typescript: 5.5.3
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
dev: true dev: true
@@ -868,7 +868,7 @@ packages:
'@typescript-eslint/visitor-keys': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0
dev: true dev: true
/@typescript-eslint/type-utils@5.62.0(eslint@8.57.0)(typescript@4.9.5): /@typescript-eslint/type-utils@5.62.0(eslint@8.57.0)(typescript@5.5.3):
resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies: peerDependencies:
@@ -878,12 +878,12 @@ packages:
typescript: typescript:
optional: true optional: true
dependencies: dependencies:
'@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.3)
'@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@4.9.5) '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.5.3)
debug: 4.3.4 debug: 4.3.4
eslint: 8.57.0 eslint: 8.57.0
tsutils: 3.21.0(typescript@4.9.5) tsutils: 3.21.0(typescript@5.5.3)
typescript: 4.9.5 typescript: 5.5.3
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
dev: true dev: true
@@ -893,7 +893,7 @@ packages:
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
dev: true dev: true
/@typescript-eslint/typescript-estree@5.62.0(typescript@4.9.5): /@typescript-eslint/typescript-estree@5.62.0(typescript@5.5.3):
resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies: peerDependencies:
@@ -908,13 +908,13 @@ packages:
globby: 11.1.0 globby: 11.1.0
is-glob: 4.0.3 is-glob: 4.0.3
semver: 7.5.1 semver: 7.5.1
tsutils: 3.21.0(typescript@4.9.5) tsutils: 3.21.0(typescript@5.5.3)
typescript: 4.9.5 typescript: 5.5.3
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
dev: true dev: true
/@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@4.9.5): /@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.5.3):
resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
peerDependencies: peerDependencies:
@@ -925,7 +925,7 @@ packages:
'@types/semver': 7.3.13 '@types/semver': 7.3.13
'@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/scope-manager': 5.62.0
'@typescript-eslint/types': 5.62.0 '@typescript-eslint/types': 5.62.0
'@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.3)
eslint: 8.57.0 eslint: 8.57.0
eslint-scope: 5.1.1 eslint-scope: 5.1.1
semver: 7.5.1 semver: 7.5.1
@@ -999,8 +999,8 @@ packages:
uri-js: 4.4.1 uri-js: 4.4.1
dev: true dev: true
/alpinejs@3.13.8: /alpinejs@3.14.1:
resolution: {integrity: sha512-XolbBJryCndomtaHd/KHQjQeD/L72FJxy/YhLLFD4Lr7zzGcpcbg+UgXteMR2pYg1KhRUr6V4O3GfN1zJAmRWw==} resolution: {integrity: sha512-ICar8UsnRZAYvv/fCNfNeKMXNoXGUfwHrjx7LqXd08zIP95G2d9bAOuaL97re+1mgt/HojqHsfdOLo/A5LuWgQ==}
dependencies: dependencies:
'@vue/reactivity': 3.1.5 '@vue/reactivity': 3.1.5
dev: false dev: false
@@ -1304,7 +1304,7 @@ packages:
normalize-path: 3.0.0 normalize-path: 3.0.0
readdirp: 3.6.0 readdirp: 3.6.0
optionalDependencies: optionalDependencies:
fsevents: 2.3.2 fsevents: 2.3.3
dev: true dev: true
/ci-info@3.5.0: /ci-info@3.5.0:
@@ -1626,35 +1626,35 @@ packages:
is-symbol: 1.0.4 is-symbol: 1.0.4
dev: true dev: true
/esbuild@0.20.2: /esbuild@0.21.5:
resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==}
engines: {node: '>=12'} engines: {node: '>=12'}
hasBin: true hasBin: true
requiresBuild: true requiresBuild: true
optionalDependencies: optionalDependencies:
'@esbuild/aix-ppc64': 0.20.2 '@esbuild/aix-ppc64': 0.21.5
'@esbuild/android-arm': 0.20.2 '@esbuild/android-arm': 0.21.5
'@esbuild/android-arm64': 0.20.2 '@esbuild/android-arm64': 0.21.5
'@esbuild/android-x64': 0.20.2 '@esbuild/android-x64': 0.21.5
'@esbuild/darwin-arm64': 0.20.2 '@esbuild/darwin-arm64': 0.21.5
'@esbuild/darwin-x64': 0.20.2 '@esbuild/darwin-x64': 0.21.5
'@esbuild/freebsd-arm64': 0.20.2 '@esbuild/freebsd-arm64': 0.21.5
'@esbuild/freebsd-x64': 0.20.2 '@esbuild/freebsd-x64': 0.21.5
'@esbuild/linux-arm': 0.20.2 '@esbuild/linux-arm': 0.21.5
'@esbuild/linux-arm64': 0.20.2 '@esbuild/linux-arm64': 0.21.5
'@esbuild/linux-ia32': 0.20.2 '@esbuild/linux-ia32': 0.21.5
'@esbuild/linux-loong64': 0.20.2 '@esbuild/linux-loong64': 0.21.5
'@esbuild/linux-mips64el': 0.20.2 '@esbuild/linux-mips64el': 0.21.5
'@esbuild/linux-ppc64': 0.20.2 '@esbuild/linux-ppc64': 0.21.5
'@esbuild/linux-riscv64': 0.20.2 '@esbuild/linux-riscv64': 0.21.5
'@esbuild/linux-s390x': 0.20.2 '@esbuild/linux-s390x': 0.21.5
'@esbuild/linux-x64': 0.20.2 '@esbuild/linux-x64': 0.21.5
'@esbuild/netbsd-x64': 0.20.2 '@esbuild/netbsd-x64': 0.21.5
'@esbuild/openbsd-x64': 0.20.2 '@esbuild/openbsd-x64': 0.21.5
'@esbuild/sunos-x64': 0.20.2 '@esbuild/sunos-x64': 0.21.5
'@esbuild/win32-arm64': 0.20.2 '@esbuild/win32-arm64': 0.21.5
'@esbuild/win32-ia32': 0.20.2 '@esbuild/win32-ia32': 0.21.5
'@esbuild/win32-x64': 0.20.2 '@esbuild/win32-x64': 0.21.5
dev: true dev: true
/escalade@3.1.1: /escalade@3.1.1:
@@ -1703,7 +1703,7 @@ packages:
eslint: 8.57.0 eslint: 8.57.0
dev: true dev: true
/eslint-plugin-prettier@4.2.1(eslint-config-prettier@8.10.0)(eslint@8.57.0)(prettier@2.8.8): /eslint-plugin-prettier@4.2.1(eslint-config-prettier@8.10.0)(eslint@8.57.0)(prettier@3.3.2):
resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==} resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==}
engines: {node: '>=12.0.0'} engines: {node: '>=12.0.0'}
peerDependencies: peerDependencies:
@@ -1716,7 +1716,7 @@ packages:
dependencies: dependencies:
eslint: 8.57.0 eslint: 8.57.0
eslint-config-prettier: 8.10.0(eslint@8.57.0) eslint-config-prettier: 8.10.0(eslint@8.57.0)
prettier: 2.8.8 prettier: 3.3.2
prettier-linter-helpers: 1.0.0 prettier-linter-helpers: 1.0.0
dev: true dev: true
@@ -1999,14 +1999,6 @@ packages:
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
dev: true dev: true
/fsevents@2.3.2:
resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
os: [darwin]
requiresBuild: true
dev: true
optional: true
/fsevents@2.3.3: /fsevents@2.3.3:
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
@@ -2095,6 +2087,7 @@ packages:
/glob@7.1.6: /glob@7.1.6:
resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==}
deprecated: Glob versions prior to v9 are no longer supported
dependencies: dependencies:
fs.realpath: 1.0.0 fs.realpath: 1.0.0
inflight: 1.0.6 inflight: 1.0.6
@@ -3183,6 +3176,10 @@ packages:
resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
dev: true dev: true
/picocolors@1.0.1:
resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==}
dev: true
/picomatch@2.3.1: /picomatch@2.3.1:
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
engines: {node: '>=8.6'} engines: {node: '>=8.6'}
@@ -3276,6 +3273,15 @@ packages:
source-map-js: 1.2.0 source-map-js: 1.2.0
dev: true dev: true
/postcss@8.4.39:
resolution: {integrity: sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==}
engines: {node: ^10 || ^12 || >=14}
dependencies:
nanoid: 3.3.7
picocolors: 1.0.1
source-map-js: 1.2.0
dev: true
/prelude-ls@1.1.2: /prelude-ls@1.1.2:
resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==}
engines: {node: '>= 0.8.0'} engines: {node: '>= 0.8.0'}
@@ -3293,16 +3299,16 @@ packages:
fast-diff: 1.2.0 fast-diff: 1.2.0
dev: true dev: true
/prettier-plugin-tailwindcss@0.3.0(prettier@2.8.8): /prettier-plugin-tailwindcss@0.6.5(prettier@3.3.2):
resolution: {integrity: sha512-009/Xqdy7UmkcTBpwlq7jsViDqXAYSOMLDrHAdTMlVZOrKfM2o9Ci7EMWTMZ7SkKBFTG04UM9F9iM2+4i6boDA==} resolution: {integrity: sha512-axfeOArc/RiGHjOIy9HytehlC0ZLeMaqY09mm8YCkMzznKiDkwFzOpBvtuhuv3xG5qB73+Mj7OCe2j/L1ryfuQ==}
engines: {node: '>=12.17.0'} engines: {node: '>=14.21.3'}
peerDependencies: peerDependencies:
'@ianvs/prettier-plugin-sort-imports': '*' '@ianvs/prettier-plugin-sort-imports': '*'
'@prettier/plugin-pug': '*' '@prettier/plugin-pug': '*'
'@shopify/prettier-plugin-liquid': '*' '@shopify/prettier-plugin-liquid': '*'
'@shufo/prettier-plugin-blade': '*'
'@trivago/prettier-plugin-sort-imports': '*' '@trivago/prettier-plugin-sort-imports': '*'
prettier: '>=2.2.0' '@zackad/prettier-plugin-twig-melody': '*'
prettier: ^3.0
prettier-plugin-astro: '*' prettier-plugin-astro: '*'
prettier-plugin-css-order: '*' prettier-plugin-css-order: '*'
prettier-plugin-import-sort: '*' prettier-plugin-import-sort: '*'
@@ -3310,9 +3316,9 @@ packages:
prettier-plugin-marko: '*' prettier-plugin-marko: '*'
prettier-plugin-organize-attributes: '*' prettier-plugin-organize-attributes: '*'
prettier-plugin-organize-imports: '*' prettier-plugin-organize-imports: '*'
prettier-plugin-sort-imports: '*'
prettier-plugin-style-order: '*' prettier-plugin-style-order: '*'
prettier-plugin-svelte: '*' prettier-plugin-svelte: '*'
prettier-plugin-twig-melody: '*'
peerDependenciesMeta: peerDependenciesMeta:
'@ianvs/prettier-plugin-sort-imports': '@ianvs/prettier-plugin-sort-imports':
optional: true optional: true
@@ -3320,10 +3326,10 @@ packages:
optional: true optional: true
'@shopify/prettier-plugin-liquid': '@shopify/prettier-plugin-liquid':
optional: true optional: true
'@shufo/prettier-plugin-blade':
optional: true
'@trivago/prettier-plugin-sort-imports': '@trivago/prettier-plugin-sort-imports':
optional: true optional: true
'@zackad/prettier-plugin-twig-melody':
optional: true
prettier-plugin-astro: prettier-plugin-astro:
optional: true optional: true
prettier-plugin-css-order: prettier-plugin-css-order:
@@ -3338,19 +3344,19 @@ packages:
optional: true optional: true
prettier-plugin-organize-imports: prettier-plugin-organize-imports:
optional: true optional: true
prettier-plugin-sort-imports:
optional: true
prettier-plugin-style-order: prettier-plugin-style-order:
optional: true optional: true
prettier-plugin-svelte: prettier-plugin-svelte:
optional: true optional: true
prettier-plugin-twig-melody:
optional: true
dependencies: dependencies:
prettier: 2.8.8 prettier: 3.3.2
dev: true dev: true
/prettier@2.8.8: /prettier@3.3.2:
resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} resolution: {integrity: sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==}
engines: {node: '>=10.13.0'} engines: {node: '>=14'}
hasBin: true hasBin: true
dev: true dev: true
@@ -3645,14 +3651,14 @@ packages:
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
dev: true dev: true
/sass@1.74.1: /sass@1.77.6:
resolution: {integrity: sha512-w0Z9p/rWZWelb88ISOLyvqTWGmtmu2QJICqDBGyNnfG4OUnPX9BBjjYIXUpXCMOOg5MQWNpqzt876la1fsTvUA==} resolution: {integrity: sha512-ByXE1oLD79GVq9Ht1PeHWCPMPB8XHpBuz1r85oByKHjZY6qV6rWnQovQzXJXuQ/XyE1Oj3iPk3lo28uzaRA2/Q==}
engines: {node: '>=14.0.0'} engines: {node: '>=14.0.0'}
hasBin: true hasBin: true
dependencies: dependencies:
chokidar: 3.5.3 chokidar: 3.5.3
immutable: 4.3.4 immutable: 4.3.4
source-map-js: 1.0.2 source-map-js: 1.2.0
dev: true dev: true
/semver-diff@4.0.0: /semver-diff@4.0.0:
@@ -3738,11 +3744,6 @@ packages:
smart-buffer: 4.2.0 smart-buffer: 4.2.0
dev: true dev: true
/source-map-js@1.0.2:
resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
engines: {node: '>=0.10.0'}
dev: true
/source-map-js@1.2.0: /source-map-js@1.2.0:
resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
@@ -3869,16 +3870,16 @@ packages:
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
dev: true dev: true
/tailwindcss-plugin-icons@2.2.2(tailwindcss@3.4.3): /tailwindcss-plugin-icons@2.2.2(tailwindcss@3.4.4):
resolution: {integrity: sha512-PSqlQgHIrhCgijAJaFSkKkPdf6UY1omEVUKUu+aFGPeWHiQ/8xVn50dprAUl7Tg9+nsyU9pumM2mbQYgbYlmKQ==} resolution: {integrity: sha512-PSqlQgHIrhCgijAJaFSkKkPdf6UY1omEVUKUu+aFGPeWHiQ/8xVn50dprAUl7Tg9+nsyU9pumM2mbQYgbYlmKQ==}
peerDependencies: peerDependencies:
tailwindcss: 3.x tailwindcss: 3.x
dependencies: dependencies:
tailwindcss: 3.4.3 tailwindcss: 3.4.4
dev: true dev: true
/tailwindcss@3.4.3: /tailwindcss@3.4.4:
resolution: {integrity: sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==} resolution: {integrity: sha512-ZoyXOdJjISB7/BcLTR6SEsLgKtDStYyYZVLsUtWChO4Ps20CBad7lfJKVDiejocV4ME1hLmyY0WJE3hSDcmQ2A==}
engines: {node: '>=14.0.0'} engines: {node: '>=14.0.0'}
hasBin: true hasBin: true
dependencies: dependencies:
@@ -3948,8 +3949,8 @@ packages:
is-number: 7.0.0 is-number: 7.0.0
dev: true dev: true
/tocbot@4.25.0: /tocbot@4.28.2:
resolution: {integrity: sha512-kE5wyCQJ40hqUaRVkyQ4z5+4juzYsv/eK+aqD97N62YH0TxFhzJvo22RUQQZdO3YnXAk42ZOfOpjVdy+Z0YokA==} resolution: {integrity: sha512-/MaSa9xI6mIo84IxqqliSCtPlH0oy7sLcY9s26qPMyH/2CxtZ2vNAXYlIdEQ7kjAkCQnc0rbLygf//F5c663oQ==}
dev: false dev: false
/tr46@0.0.3: /tr46@0.0.3:
@@ -3968,14 +3969,14 @@ packages:
resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==}
dev: true dev: true
/tsutils@3.21.0(typescript@4.9.5): /tsutils@3.21.0(typescript@5.5.3):
resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==}
engines: {node: '>= 6'} engines: {node: '>= 6'}
peerDependencies: peerDependencies:
typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta'
dependencies: dependencies:
tslib: 1.14.1 tslib: 1.14.1
typescript: 4.9.5 typescript: 5.5.3
dev: true dev: true
/type-check@0.3.2: /type-check@0.3.2:
@@ -4018,9 +4019,9 @@ packages:
is-typedarray: 1.0.0 is-typedarray: 1.0.0
dev: true dev: true
/typescript@4.9.5: /typescript@5.5.3:
resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} resolution: {integrity: sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==}
engines: {node: '>=4.2.0'} engines: {node: '>=14.17'}
hasBin: true hasBin: true
dev: true dev: true
@@ -4100,8 +4101,8 @@ packages:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
dev: true dev: true
/vite@5.2.8(@types/node@18.11.9)(sass@1.74.1): /vite@5.3.3(@types/node@18.11.9)(sass@1.77.6):
resolution: {integrity: sha512-OyZR+c1CE8yeHw5V5t59aXsUPPVTHMDjEZz8MgguLL/Q7NblxhZUlTu9xSPqlsUO/y+X7dlU05jdhvyycD55DA==} resolution: {integrity: sha512-NPQdeCU0Dv2z5fu+ULotpuq5yfCS1BzKUIPhNbP3YBfAMGJXbt2nS+sbTFu+qchaqWTD+H3JK++nRwr6XIcp6A==}
engines: {node: ^18.0.0 || >=20.0.0} engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true hasBin: true
peerDependencies: peerDependencies:
@@ -4129,10 +4130,10 @@ packages:
optional: true optional: true
dependencies: dependencies:
'@types/node': 18.11.9 '@types/node': 18.11.9
esbuild: 0.20.2 esbuild: 0.21.5
postcss: 8.4.38 postcss: 8.4.39
rollup: 4.14.1 rollup: 4.14.1
sass: 1.74.1 sass: 1.77.6
optionalDependencies: optionalDependencies:
fsevents: 2.3.3 fsevents: 2.3.3
dev: true dev: true

View File

@@ -1,5 +1,5 @@
module.exports = { module.exports = {
plugins: [require("prettier-plugin-tailwindcss")], plugins: ["prettier-plugin-tailwindcss"],
printWidth: 120, printWidth: 120,
tabWidth: 2, tabWidth: 2,
useTabs: false, useTabs: false,

View File

@@ -44,7 +44,7 @@ export default (key: string, group: string, plural: string): upvoteState => ({
group: group, group: group,
plural: plural, plural: plural,
name: name, name: name,
}) }),
); );
}, },
}); });

View File

@@ -10,15 +10,6 @@ module.exports = {
8: "8", 8: "8",
}, },
}, },
container: {
padding: {
DEFAULT: "1rem",
sm: "2rem",
lg: "4rem",
xl: "5rem",
"2xl": "6rem",
},
},
}, },
plugins: [ plugins: [
require("@tailwindcss/aspect-ratio"), require("@tailwindcss/aspect-ratio"),

View File

@@ -1,4 +1,4 @@
<!DOCTYPE html> <!doctype html>
<html <html
xmlns:th="https://www.thymeleaf.org" xmlns:th="https://www.thymeleaf.org"
th:replace="~{modules/layout :: html(title = '归档 - ' + ${site.title}, hero = null, content = ~{::content}, head = null, footer = null, sidebar = ~{::sidebar}, contentClass = '')}" th:replace="~{modules/layout :: html(title = '归档 - ' + ${site.title}, hero = null, content = ~{::content}, head = null, footer = null, sidebar = ~{::sidebar}, contentClass = '')}"
@@ -12,14 +12,14 @@
<div class="grid grid-cols-12 gap-4"> <div class="grid grid-cols-12 gap-4">
<div class="col-span-12 sm:col-span-3"> <div class="col-span-12 sm:col-span-3">
<h2 <h2
class="sticky top-16 mt-2 text-lg font-medium dark:text-slate-50" class="sticky top-20 mt-2 text-lg font-medium dark:text-slate-50"
th:text="|${archive.year} 年 ${month.month} 月|" th:text="|${archive.year} 年 ${month.month} 月|"
></h2> ></h2>
</div> </div>
<div class="col-span-12 sm:col-span-9"> <div class="col-span-12 sm:col-span-9">
<th:block th:each="post : ${month.posts}"> <th:block th:each="post : ${month.posts}">
<div <div
class="my-2 rounded border border-gray-300 bg-white shadow-sm hover:border-gray-400 hover:shadow dark:border-slate-600 dark:bg-slate-700 dark:hover:border-slate-700" class="my-2 rounded-xl border border-gray-300 bg-white shadow-sm hover:border-gray-400 hover:shadow dark:border-slate-600 dark:bg-slate-700 dark:hover:border-slate-700"
> >
<div class="relative flex flex-col gap-2 p-4"> <div class="relative flex flex-col gap-2 p-4">
<div class="flex min-w-0 flex-wrap items-center justify-between gap-4"> <div class="flex min-w-0 flex-wrap items-center justify-between gap-4">
@@ -58,7 +58,7 @@
> >
</a> </a>
</div> </div>
<div class="line-clamp-6 text-sm font-light dark:text-slate-200"> <div class="line-clamp-2 text-sm font-light dark:text-slate-200">
<th:block th:text="${post.status.excerpt}"></th:block> <th:block th:text="${post.status.excerpt}"></th:block>
</div> </div>
</div> </div>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,4 +1,4 @@
<!DOCTYPE html> <!doctype html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />

View File

@@ -1,4 +1,4 @@
<!DOCTYPE html> <!doctype html>
<html <html
xmlns:th="https://www.thymeleaf.org" xmlns:th="https://www.thymeleaf.org"
th:replace="~{modules/layout :: html(title = |作者:${author.spec.displayName} - ${site.title}|, hero = ~{::hero}, content = ~{::content}, head = null, footer = null, sidebar = null, contentClass = null)}" th:replace="~{modules/layout :: html(title = |作者:${author.spec.displayName} - ${site.title}|, hero = ~{::hero}, content = ~{::content}, head = null, footer = null, sidebar = null, contentClass = null)}"

View File

@@ -1,4 +1,4 @@
<!DOCTYPE html> <!doctype html>
<html <html
xmlns:th="https://www.thymeleaf.org" xmlns:th="https://www.thymeleaf.org"
th:replace="~{modules/layout :: html(title = '分类:' + ${category.spec.displayName} + ' - ' + ${site.title}, hero = null, content = ~{::content}, head = null, footer = null, sidebar = null, contentClass = null)}" th:replace="~{modules/layout :: html(title = '分类:' + ${category.spec.displayName} + ' - ' + ${site.title}, hero = null, content = ~{::content}, head = null, footer = null, sidebar = null, contentClass = null)}"

View File

@@ -1,4 +1,4 @@
<!DOCTYPE html> <!doctype html>
<html <html
xmlns:th="https://www.thymeleaf.org" xmlns:th="https://www.thymeleaf.org"
th:replace="~{modules/layout :: html(title = ${error.status} + ' | ' + ${#strings.defaultString(error.title, 'Internal server error')} + ' - ' +${site.title}, hero = null, header = null, content = ~{::content}, head = null, footer = null, sidebar = null, contentClass = null)}" th:replace="~{modules/layout :: html(title = ${error.status} + ' | ' + ${#strings.defaultString(error.title, 'Internal server error')} + ' - ' +${site.title}, hero = null, header = null, content = ~{::content}, head = null, footer = null, sidebar = null, contentClass = null)}"

View File

@@ -1,4 +1,4 @@
<!DOCTYPE html> <!doctype html>
<html <html
xmlns:th="https://www.thymeleaf.org" xmlns:th="https://www.thymeleaf.org"
th:replace="~{modules/layout :: html(title = ${site.title}, hero = null, content = ~{::content}, head = null, footer = null, sidebar = null, contentClass = null)}" th:replace="~{modules/layout :: html(title = ${site.title}, hero = null, content = ~{::content}, head = null, footer = null, sidebar = null, contentClass = null)}"

View File

@@ -1,4 +1,4 @@
<!DOCTYPE html> <!doctype html>
<html <html
xmlns:th="https://www.thymeleaf.org" xmlns:th="https://www.thymeleaf.org"
th:replace="~{modules/layout :: html(title = '链接 - ' + ${site.title}, hero = null, content = ~{::content}, head = null, footer = null, sidebar = ~{::sidebar}, contentClass = '')}" th:replace="~{modules/layout :: html(title = '链接 - ' + ${site.title}, hero = null, content = ~{::content}, head = null, footer = null, sidebar = ~{::sidebar}, contentClass = '')}"

View File

@@ -2,7 +2,7 @@
<li> <li>
<a <a
href="/" href="/"
class="inline-flex cursor-pointer items-center rounded px-2 py-1 font-medium text-gray-500 transition-all hover:bg-gray-100 hover:text-gray-900 hover:shadow-sm dark:text-slate-200 dark:hover:bg-slate-700 dark:hover:text-slate-50" class="inline-flex cursor-pointer items-center rounded px-3 py-1 font-medium text-gray-500 transition-all hover:bg-gray-100 hover:text-gray-900 hover:shadow-sm dark:text-slate-200 dark:hover:bg-slate-700 dark:hover:text-slate-50"
th:classappend="${category == null} ? '!text-gray-900 !bg-gray-100 dark:!bg-slate-700 dark:!text-slate-50'" th:classappend="${category == null} ? '!text-gray-900 !bg-gray-100 dark:!bg-slate-700 dark:!text-slate-50'"
> >
<span class="truncate text-base"> 全部 </span> <span class="truncate text-base"> 全部 </span>
@@ -18,7 +18,7 @@
> >
<a <a
th:href="@{${categoryItem.status.permalink}}" th:href="@{${categoryItem.status.permalink}}"
class="inline-flex cursor-pointer items-center gap-1 rounded px-2 py-1 font-medium text-gray-500 transition-all hover:bg-gray-100 hover:text-gray-900 hover:shadow-sm dark:text-slate-200 dark:hover:bg-slate-700 dark:hover:text-slate-50" class="inline-flex cursor-pointer items-center gap-1 rounded px-3 py-1 font-medium text-gray-500 transition-all hover:bg-gray-100 hover:text-gray-900 hover:shadow-sm dark:text-slate-200 dark:hover:bg-slate-700 dark:hover:text-slate-50"
th:classappend="${category} and ${category.metadata.name == categoryItem.metadata.name} ? '!text-gray-900 !bg-gray-100 dark:!bg-slate-700 dark:!text-slate-50'" th:classappend="${category} and ${category.metadata.name == categoryItem.metadata.name} ? '!text-gray-900 !bg-gray-100 dark:!bg-slate-700 dark:!text-slate-50'"
> >
<span class="truncate text-base" th:text="${categoryItem.spec.displayName}"> </span> <span class="truncate text-base" th:text="${categoryItem.spec.displayName}"> </span>

View File

@@ -1,9 +1,9 @@
<ul th:fragment="next (categories)" class="my-3 ml-3 space-y-1 border-l pl-2"> <ul th:fragment="next (categories)" class="my-3 ml-3 space-y-1 border-l pl-2 dark:border-slate-700">
<li th:fragment="single (categories)" th:each="category : ${categories}"> <li th:fragment="single (categories)" th:each="category : ${categories}">
<a <a
th:href="@{${category.status.permalink}}" th:href="@{${category.status.permalink}}"
th:title="${category.spec.displayName}" th:title="${category.spec.displayName}"
class="group flex items-center justify-between rounded px-1.5 py-1 transition-all hover:bg-gray-100 dark:hover:bg-slate-700" class="group flex items-center justify-between rounded px-2 py-1 transition-all hover:bg-gray-100 dark:hover:bg-slate-700"
> >
<span class="text-sm opacity-80 dark:text-slate-50" th:text="${category.spec.displayName}"> </span> <span class="text-sm opacity-80 dark:text-slate-50" th:text="${category.spec.displayName}"> </span>
<span <span

View File

@@ -11,35 +11,37 @@
/> />
</a> </a>
</div> </div>
<div class="relative col-span-2 flex flex-col gap-2 p-4"> <div class="relative col-span-2 grid h-full grid-cols-1 content-between gap-2 p-4">
<div <div class="space-y-2">
th:if="${not #lists.isEmpty(post.categories)} or ${not #lists.isEmpty(post.tags)}" <div
class="flex flex-wrap items-center gap-2" th:if="${not #lists.isEmpty(post.categories)} or ${not #lists.isEmpty(post.tags)}"
> class="flex flex-wrap items-center gap-2"
<a
th:if="${#lists.size(post.categories)} gt 0"
th:href="@{${post.categories[0].status.permalink}}"
th:title="${post.categories[0].spec.displayName}"
th:text="${post.categories[0].spec.displayName}"
class="mr-1 text-sm font-medium text-gray-800 hover:text-gray-900 dark:text-slate-500 dark:hover:text-slate-600"
> >
</a> <a
<a th:if="${#lists.size(post.categories)} gt 0"
th:each="tag : ${post.tags}" th:href="@{${post.categories[0].status.permalink}}"
th:href="@{${tag.status.permalink}}" th:title="${post.categories[0].spec.displayName}"
th:title="${tag.spec.displayName}" th:text="${post.categories[0].spec.displayName}"
th:text="|#${tag.spec.displayName}|" class="mr-1 text-sm font-medium text-gray-800 hover:text-gray-900 dark:text-slate-500 dark:hover:text-slate-600"
class="cursor-pointer text-sm italic text-gray-600 hover:text-gray-900 dark:text-slate-400 dark:hover:text-slate-500" >
</a>
<a
th:each="tag : ${post.tags}"
th:href="@{${tag.status.permalink}}"
th:title="${tag.spec.displayName}"
th:text="|#${tag.spec.displayName}|"
class="cursor-pointer text-sm italic text-gray-600 hover:text-gray-900 dark:text-slate-400 dark:hover:text-slate-500"
>
</a>
</div>
<h1
class="line-clamp-2 cursor-pointer text-2xl font-medium transition-all hover:text-gray-500 hover:underline dark:text-slate-50 dark:hover:text-white"
> >
</a> <a th:href="@{${post.status.permalink}}" th:text="${post.spec.title}"></a>
</h1>
<p class="font-sm line-clamp-6 font-light dark:text-slate-200" th:text="${post.status.excerpt}"></p>
</div> </div>
<h1 <div class="mt-4 flex items-center justify-start gap-2">
class="line-clamp-2 cursor-pointer text-2xl font-medium transition-all hover:text-gray-500 hover:underline dark:text-slate-50 dark:hover:text-white"
>
<a th:href="@{${post.status.permalink}}" th:text="${post.spec.title}"></a>
</h1>
<p class="font-sm line-clamp-6 font-light dark:text-slate-200" th:text="${post.status.excerpt}"></p>
<div class="mt-4 flex flex-1 items-center justify-start gap-2">
<a th:href="@{${post.owner.permalink}}" th:title="${post.owner.displayName}"> <a th:href="@{${post.owner.permalink}}" th:title="${post.owner.displayName}">
<img <img
th:src="${post.owner.avatar ?: #theme.assets('/images/default-avatar.svg')}" th:src="${post.owner.avatar ?: #theme.assets('/images/default-avatar.svg')}"

View File

@@ -1,5 +1,5 @@
<footer th:if="${theme.config.footer.style == 'style_1'}" class="mt-10 bg-white py-8 dark:bg-slate-800"> <footer th:if="${theme.config.footer.style == 'style_1'}" class="mt-10 bg-white py-8 dark:bg-slate-800">
<div class="container mx-auto sm:flex sm:items-center sm:justify-between"> <div class="max-w-7xl px-4 lg:px-6 mx-auto sm:flex sm:items-center sm:justify-between">
<a href="/" class="mb-4 flex items-center justify-center sm:mb-0 sm:justify-start"> <a href="/" class="mb-4 flex items-center justify-center sm:mb-0 sm:justify-start">
<img <img
th:if="${not #strings.isEmpty(theme.config.footer.logo)} or ${not #strings.isEmpty(site.logo)}" th:if="${not #strings.isEmpty(theme.config.footer.logo)} or ${not #strings.isEmpty(site.logo)}"
@@ -32,7 +32,7 @@
</div> </div>
<hr class="my-6 border-gray-100 dark:border-slate-700 sm:mx-auto lg:my-8" /> <hr class="my-6 border-gray-100 dark:border-slate-700 sm:mx-auto lg:my-8" />
<div class="space-y-1"> <div class="space-y-1">
<span class="container mx-auto block text-center text-sm text-gray-500 dark:text-slate-300"> <span class="max-w-7xl px-4 lg:px-6 mx-auto block text-center text-sm text-gray-500 dark:text-slate-300">
<a <a
href="https://beian.miit.gov.cn/" href="https://beian.miit.gov.cn/"
class="hover:underline" class="hover:underline"
@@ -43,7 +43,7 @@
</span> </span>
<div <div
th:if="${not #strings.isEmpty(theme.config.beian.gongan_text)}" th:if="${not #strings.isEmpty(theme.config.beian.gongan_text)}"
class="container mx-auto block text-center text-sm text-gray-500 dark:text-slate-300" class="max-w-7xl px-4 lg:px-6 mx-auto block text-center text-sm text-gray-500 dark:text-slate-300"
> >
<p class="flex items-center justify-center gap-1"> <p class="flex items-center justify-center gap-1">
<img th:src="@{/assets/images/gongan_beian.png}" class="size-4" alt="gongan_beian" /> <img th:src="@{/assets/images/gongan_beian.png}" class="size-4" alt="gongan_beian" />
@@ -56,20 +56,20 @@
></a> ></a>
</p> </p>
</div> </div>
<span class="container mx-auto block text-center text-sm text-gray-500 dark:text-slate-300"> <span class="max-w-7xl px-4 lg:px-6 mx-auto block text-center text-sm text-gray-500 dark:text-slate-300">
© ©
<th:block th:text="${#dates.format(new java.util.Date().getTime(), 'yyyy')}" /> <th:block th:text="${#dates.format(new java.util.Date().getTime(), 'yyyy')}" />
<a href="/" class="hover:underline" th:text="${site.title}"></a>. All Rights Reserved. Powered by <a href="/" class="hover:underline" th:text="${site.title}"></a>. All Rights Reserved. Powered by
<a href="https://halo.run" class="hover:underline" target="_blank">Halo</a>. <a href="https://halo.run" class="hover:underline" target="_blank">Halo</a>.
</span> </span>
<span class="container mx-auto block text-center text-sm text-gray-500 dark:text-slate-300"> <span class="max-w-7xl px-4 lg:px-6 mx-auto block text-center text-sm text-gray-500 dark:text-slate-300">
<halo:footer /> <halo:footer />
</span> </span>
</div> </div>
</footer> </footer>
<footer th:if="${theme.config.footer.style == 'style_2'}" class="mt-10 bg-white py-8 dark:bg-slate-800"> <footer th:if="${theme.config.footer.style == 'style_2'}" class="mt-10 bg-white py-8 dark:bg-slate-800">
<div class="container mx-auto md:flex md:justify-between md:gap-10"> <div class="max-w-7xl px-4 lg:px-6 mx-auto md:flex md:justify-between md:gap-10">
<div class="mb-6 max-w-full md:mb-0 md:max-w-md"> <div class="mb-6 max-w-full md:mb-0 md:max-w-md">
<a href="/" class="mb-6 flex items-center"> <a href="/" class="mb-6 flex items-center">
<img <img
@@ -114,7 +114,7 @@
</div> </div>
</div> </div>
<hr class="my-6 border-gray-200 dark:border-slate-700 sm:mx-auto lg:my-8" /> <hr class="my-6 border-gray-200 dark:border-slate-700 sm:mx-auto lg:my-8" />
<div class="container mx-auto flex flex-col sm:flex-row sm:items-center sm:justify-between"> <div class="max-w-7xl px-4 lg:px-6 mx-auto flex flex-col sm:flex-row sm:items-center sm:justify-between">
<div class="flex flex-col space-y-1 text-center sm:text-left"> <div class="flex flex-col space-y-1 text-center sm:text-left">
<span class="text-sm text-gray-500 dark:text-slate-300 sm:text-center"> <span class="text-sm text-gray-500 dark:text-slate-300 sm:text-center">
© ©

View File

@@ -1,10 +1,10 @@
<header <header
id="header-menu" id="header-menu"
class="sticky top-0 z-10 flex h-14 bg-white py-3 shadow-sm transition-all dark:bg-gray-800" class="sticky top-0 z-10 flex h-16 bg-white py-3 shadow-sm transition-all dark:bg-gray-800"
x-data="{ open : false }" x-data="{ open : false }"
th:with="menu = ${menuFinder.getPrimary()}" th:with="menu = ${menuFinder.getPrimary()}"
> >
<div class="container mx-auto flex h-full justify-between"> <div class="max-w-7xl w-full px-4 lg:px-6 mx-auto flex h-full justify-between">
<div class="flex h-full items-center gap-6"> <div class="flex h-full items-center gap-6">
<div class="mr-2 h-full"> <div class="mr-2 h-full">
<a href="/" class="inline-flex h-full items-center"> <a href="/" class="inline-flex h-full items-center">

View File

@@ -7,12 +7,12 @@
> >
<th:block th:switch="${theme.config.layout.header_widget}"> <th:block th:switch="${theme.config.layout.header_widget}">
<th:block th:case="latest_post" th:with="posts = ${postFinder.list(1,1)}"> <th:block th:case="latest_post" th:with="posts = ${postFinder.list(1,1)}">
<div class="container mx-auto py-6" th:if="${posts.total gt 0}"> <div class="max-w-7xl px-4 lg:px-6 mx-auto py-6" th:if="${posts.total gt 0}">
<th:block th:replace="~{modules/featured-post-card :: featured-post-card(post=${posts.items[0]})}" /> <th:block th:replace="~{modules/featured-post-card :: featured-post-card(post=${posts.items[0]})}" />
</div> </div>
</th:block> </th:block>
<th:block th:case="latest_post_grid" th:with="posts = ${postFinder.list(1,5)}"> <th:block th:case="latest_post_grid" th:with="posts = ${postFinder.list(1,5)}">
<div class="container mx-auto grid grid-cols-1 gap-3 py-6 sm:grid-cols-5" th:if="${posts.total gt 0}"> <div class="max-w-7xl px-4 lg:px-6 mx-auto grid grid-cols-1 gap-3 py-6 sm:grid-cols-5" th:if="${posts.total gt 0}">
<div class="col-span-1 sm:col-span-3"> <div class="col-span-1 sm:col-span-3">
<th:block <th:block
th:replace="~{modules/post-card :: post-card(post=${posts.items[0]},cover=true,animation=false,border=false,direction='row')}" th:replace="~{modules/post-card :: post-card(post=${posts.items[0]},cover=true,animation=false,border=false,direction='row')}"
@@ -30,7 +30,7 @@
</div> </div>
</th:block> </th:block>
<th:block th:case="site_title"> <th:block th:case="site_title">
<div class="container mx-auto flex h-full flex-col items-center justify-center gap-3 py-6"> <div class="max-w-7xl px-4 lg:px-6 mx-auto flex h-full flex-col items-center justify-center gap-3 py-6">
<span class="text-5xl text-white" th:text="${site.title}"></span> <span class="text-5xl text-white" th:text="${site.title}"></span>
<span class="text-sm font-light text-white opacity-50" th:text="${site.subtitle}"></span> <span class="text-sm font-light text-white opacity-50" th:text="${site.subtitle}"></span>
</div> </div>

View File

@@ -1,4 +1,4 @@
<!DOCTYPE html> <!doctype html>
<html lang="en" th:fragment="html (title,hero,content,head,footer,sidebar,contentClass)"> <html lang="en" th:fragment="html (title,hero,content,head,footer,sidebar,contentClass)">
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
@@ -22,8 +22,8 @@
<th:block th:unless="${hero != null}"> <th:block th:unless="${hero != null}">
<th:block th:replace="~{modules/hero :: hero(isHome = true, cover = null, title = null)}" /> <th:block th:replace="~{modules/hero :: hero(isHome = true, cover = null, title = null)}" />
</th:block> </th:block>
<section class="container mx-auto mt-6 grid grid-cols-4 gap-6" th:classappend="${contentClass}"> <section class="max-w-7xl px-4 lg:px-6 mx-auto mt-6 flex gap-6" th:classappend="${contentClass}">
<div class="z-0 col-span-4 sm:col-span-3"> <div class="z-0 min-w-0 flex-1 shrink">
<th:block th:replace="${content}" /> <th:block th:replace="${content}" />
</div> </div>
<th:block th:if="${sidebar != null}"> <th:block th:if="${sidebar != null}">

View File

@@ -21,43 +21,45 @@
</div> </div>
</div> </div>
<div <div
class="relative flex flex-col gap-2 p-4" class="relative grid h-full grid-cols-1 content-between gap-2 p-4 col-span-3"
th:with="list_layout=${theme.config.layout.post_list_layout}" th:with="list_layout=${theme.config.layout.post_list_layout}"
th:classappend="${direction == 'column' ? 'col-span-3' : ''}" th:classappend="${#strings.isEmpty(post.spec.cover) ? 'col-span-5' : ''}"
> >
<div <div class="space-y-2">
th:if="${not #lists.isEmpty(post.categories)} or ${not #lists.isEmpty(post.tags)}" <div
class="flex flex-wrap items-center gap-2" th:if="${not #lists.isEmpty(post.categories)} or ${not #lists.isEmpty(post.tags)}"
> class="flex flex-wrap items-center gap-2"
<a
th:if="${#lists.size(post.categories)} gt 0"
th:href="@{${post.categories[0].status.permalink}}"
th:title="${post.categories[0].spec.displayName}"
th:text="${post.categories[0].spec.displayName}"
class="mr-1 text-sm font-medium text-gray-800 hover:text-gray-900 dark:text-slate-500 dark:hover:text-slate-600"
> >
</a> <a
<a th:if="${#lists.size(post.categories)} gt 0"
th:each="tag : ${post.tags}" th:href="@{${post.categories[0].status.permalink}}"
th:href="@{${tag.status.permalink}}" th:title="${post.categories[0].spec.displayName}"
th:title="${tag.spec.displayName}" th:text="${post.categories[0].spec.displayName}"
th:text="|#${tag.spec.displayName}|" class="mr-1 text-sm font-medium text-gray-800 hover:text-gray-900 dark:text-slate-500 dark:hover:text-slate-600"
class="cursor-pointer text-sm italic text-gray-600 hover:text-gray-900 dark:text-slate-400 dark:hover:text-slate-500" >
</a>
<a
th:each="tag : ${post.tags}"
th:href="@{${tag.status.permalink}}"
th:title="${tag.spec.displayName}"
th:text="|#${tag.spec.displayName}|"
class="cursor-pointer text-sm italic text-gray-600 hover:text-gray-900 dark:text-slate-400 dark:hover:text-slate-500"
>
</a>
</div>
<h1
class="line-clamp-2 cursor-pointer text-2xl font-medium transition-all hover:text-gray-500 hover:underline dark:text-slate-50 dark:hover:text-white"
th:classappend="|${direction == 'column' ? 'sm:line-clamp-2' : ''} ${list_layout == 'grid_2' ? 'sm:line-clamp-3' : ''} ${list_layout == 'grid_3' ? 'sm:line-clamp-4' : ''}|"
> >
</a> <a th:href="@{${post.status.permalink}}" th:text="${post.spec.title}" th:title="${post.spec.title}"></a>
</h1>
<p
class="font-sm line-clamp-2 font-light dark:text-slate-200"
th:text="${post.status.excerpt}"
th:classappend="${list_layout == 'grid_3' ? 'sm:line-clamp-3' : ''}"
></p>
</div> </div>
<h1 <div class="mt-4 flex items-center justify-start gap-2">
class="line-clamp-2 cursor-pointer text-2xl font-medium transition-all hover:text-gray-500 hover:underline dark:text-slate-50 dark:hover:text-white"
th:classappend="|${direction == 'column' ? 'sm:line-clamp-2' : ''} ${list_layout == 'grid_2' ? 'sm:line-clamp-3' : ''} ${list_layout == 'grid_3' ? 'sm:line-clamp-4' : ''}|"
>
<a th:href="@{${post.status.permalink}}" th:text="${post.spec.title}" th:title="${post.spec.title}"></a>
</h1>
<p
class="font-sm line-clamp-6 font-light dark:text-slate-200"
th:text="${post.status.excerpt}"
th:classappend="${list_layout == 'grid_3' ? ' sm:line-clamp-8' : ''}"
></p>
<div class="mt-4 flex flex-1 items-center justify-start gap-2">
<a th:href="@{${post.owner.permalink}}" th:title="${post.owner.displayName}"> <a th:href="@{${post.owner.permalink}}" th:title="${post.owner.displayName}">
<img <img
th:src="${post.owner.avatar ?: #theme.assets('/images/default-avatar.svg')}" th:src="${post.owner.avatar ?: #theme.assets('/images/default-avatar.svg')}"

View File

@@ -1,4 +1,4 @@
<aside th:fragment="sidebar (prepend)" class="z-0 col-span-1 hidden h-full flex-col gap-6 sm:flex"> <aside th:fragment="sidebar (prepend)" class="z-0 hidden h-full w-72 flex-none flex-col gap-6 md:flex">
<th:block th:with="widgets = ${theme.config.sidebar.widgets} "> <th:block th:with="widgets = ${theme.config.sidebar.widgets} ">
<th:block th:if="${prepend != null}"> <th:block th:if="${prepend != null}">
<th:block th:replace="${prepend}" /> <th:block th:replace="${prepend}" />

View File

@@ -8,8 +8,8 @@
th:each="tagItem,tagStat: ${tags}" th:each="tagItem,tagStat: ${tags}"
th:href="@{${tagItem.status.permalink}}" th:href="@{${tagItem.status.permalink}}"
th:title="${tagItem.spec.displayName}" th:title="${tagItem.spec.displayName}"
class="rounded bg-gray-100 px-1 py-0.5 text-sm text-gray-900 hover:bg-gray-200 dark:bg-slate-600 dark:text-slate-50 dark:hover:bg-slate-700 dark:hover:text-slate-100" class="inline-flex items-center gap-x-1.5 rounded-full border border-gray-200 bg-white px-2.5 py-1 text-xs font-medium text-gray-800 shadow-sm hover:border-indigo-400 dark:bg-slate-700 dark:text-slate-200 dark:border-slate-800 dark:hover:border-indigo-200"
th:classappend="(${tag} and ${tag.metadata.name == tagItem.metadata.name}) or (not ${tag} and ${tagStat.index == 0}) ? '!bg-gray-200 dark:!bg-slate-700 dark:!text-slate-100 ring-2 ring-gray-300 dark:ring-slate-600' : ''" th:classappend="(${tag} and ${tag.metadata.name == tagItem.metadata.name}) or (not ${tag} and ${tagStat.index == 0}) ? '!border-indigo-400 dark:!border-indigo-200' : ''"
> >
<th:block th:text="|#${tagItem.spec.displayName}|" /> <th:block th:text="|#${tagItem.spec.displayName}|" />
<sup th:text="${tagItem.status.visiblePostCount}"></sup> <sup th:text="${tagItem.status.visiblePostCount}"></sup>

View File

@@ -1,5 +1,5 @@
<div <div
class="w-full cursor-pointer overflow-hidden rounded-xl bg-white p-3 shadow transition-all duration-500 hover:shadow-md dark:bg-slate-800" class="w-full overflow-hidden rounded-xl bg-white p-3 shadow transition-all duration-500 hover:shadow-md dark:bg-slate-800"
> >
<h2 class="inline-flex items-center gap-2 text-base dark:text-slate-50"> <h2 class="inline-flex items-center gap-2 text-base dark:text-slate-50">
<span class="i-tabler-category text-lg"></span> <span class="i-tabler-category text-lg"></span>

View File

@@ -1,5 +1,5 @@
<div <div
class="w-full cursor-pointer overflow-hidden rounded-xl bg-white p-3 shadow transition-all duration-500 hover:shadow-md dark:bg-slate-800" class="w-full overflow-hidden rounded-xl bg-white p-3 shadow transition-all duration-500 hover:shadow-md dark:bg-slate-800"
> >
<h2 class="inline-flex items-center gap-2 text-base dark:text-slate-50"> <h2 class="inline-flex items-center gap-2 text-base dark:text-slate-50">
<span class="i-tabler-message-circle text-lg"></span> <span class="i-tabler-message-circle text-lg"></span>

View File

@@ -1,5 +1,5 @@
<div <div
class="w-full cursor-pointer overflow-hidden rounded-xl bg-white p-3 shadow transition-all duration-500 hover:shadow-md dark:bg-slate-800" class="w-full overflow-hidden rounded-xl bg-white p-3 shadow transition-all duration-500 hover:shadow-md dark:bg-slate-800"
> >
<h2 class="inline-flex items-center gap-2 text-base dark:text-slate-50"> <h2 class="inline-flex items-center gap-2 text-base dark:text-slate-50">
<span class="i-tabler-stairs-up text-lg text-red-600 dark:text-red-700"></span> <span class="i-tabler-stairs-up text-lg text-red-600 dark:text-red-700"></span>

View File

@@ -1,5 +1,5 @@
<div <div
class="w-full cursor-pointer overflow-hidden rounded-xl bg-white p-3 shadow transition-all duration-500 hover:shadow-md dark:bg-slate-800" class="w-full overflow-hidden rounded-xl bg-white p-3 shadow transition-all duration-500 hover:shadow-md dark:bg-slate-800"
th:with="stats = ${siteStatsFinder.getStats()}" th:with="stats = ${siteStatsFinder.getStats()}"
> >
<div class="flex flex-col items-center justify-center gap-4"> <div class="flex flex-col items-center justify-center gap-4">

View File

@@ -1,5 +1,5 @@
<div <div
class="w-full cursor-pointer overflow-hidden rounded-xl bg-white p-3 shadow transition-all duration-500 hover:shadow-md dark:bg-slate-800" class="w-full overflow-hidden rounded-xl bg-white p-3 shadow transition-all duration-500 hover:shadow-md dark:bg-slate-800"
> >
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<h2 class="inline-flex items-center gap-2 text-base dark:text-slate-50"> <h2 class="inline-flex items-center gap-2 text-base dark:text-slate-50">
@@ -19,7 +19,7 @@
th:each="tag : ${tags}" th:each="tag : ${tags}"
th:href="@{${tag.status.permalink}}" th:href="@{${tag.status.permalink}}"
th:title="${tag.spec.displayName}" th:title="${tag.spec.displayName}"
class="rounded bg-gray-100 px-1 py-0.5 text-sm text-gray-900 hover:bg-gray-200 dark:bg-slate-600 dark:text-slate-50 dark:hover:bg-slate-700 dark:hover:text-slate-100" class="inline-flex items-center gap-x-1.5 rounded-full border border-gray-200 bg-white px-2.5 py-1 text-xs font-medium text-gray-800 shadow-sm hover:border-indigo-400 dark:bg-slate-700 dark:text-slate-200 dark:border-slate-800 dark:hover:border-indigo-200"
> >
<th:block th:text="|#${tag.spec.displayName}|" /> <th:block th:text="|#${tag.spec.displayName}|" />
<sup th:text="${tag.status.visiblePostCount}"></sup> <sup th:text="${tag.status.visiblePostCount}"></sup>

View File

@@ -1,4 +1,4 @@
<!DOCTYPE html> <!doctype html>
<html <html
xmlns:th="https://www.thymeleaf.org" xmlns:th="https://www.thymeleaf.org"
th:replace="~{modules/layout :: html(title = '瞬间 - ' + ${site.title}, hero = null, content = ~{::content}, head = null, footer = null, sidebar = ~{::sidebar}, contentClass = '')}" th:replace="~{modules/layout :: html(title = '瞬间 - ' + ${site.title}, hero = null, content = ~{::content}, head = null, footer = null, sidebar = ~{::sidebar}, contentClass = '')}"

View File

@@ -1,4 +1,4 @@
<!DOCTYPE html> <!doctype html>
<html <html
xmlns:th="https://www.thymeleaf.org" xmlns:th="https://www.thymeleaf.org"
th:replace="~{modules/layout :: html(title = ${singlePage.spec.title} + ' - ' + ${site.title}, hero = ~{::hero}, content = ~{::content}, head = ~{::head}, footer = ~{::footer}, sidebar = null, contentClass = ${theme.config.layout.content_header} and ${not #strings.isEmpty(singlePage.spec.cover)} ? '!-mt-20' : '')}" th:replace="~{modules/layout :: html(title = ${singlePage.spec.title} + ' - ' + ${site.title}, hero = ~{::hero}, content = ~{::content}, head = ~{::head}, footer = ~{::footer}, sidebar = null, contentClass = ${theme.config.layout.content_header} and ${not #strings.isEmpty(singlePage.spec.cover)} ? '!-mt-20' : '')}"
@@ -15,9 +15,12 @@
<div class="rounded-xl bg-white p-4 dark:bg-slate-800"> <div class="rounded-xl bg-white p-4 dark:bg-slate-800">
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<div class="inline-flex items-center justify-start gap-2"> <div class="inline-flex items-center justify-start gap-2">
<a th:href="@{${singlePage.owner.permalink}}" th:title="${singlePage.owner.displayName}"> <a
th:unless="${#strings.isEmpty(singlePage.owner.avatar)}"
th:href="@{${singlePage.owner.permalink}}"
th:title="${singlePage.owner.displayName}"
>
<img <img
th:if="${not #strings.isEmpty(singlePage.owner.avatar)}"
th:src="${singlePage.owner.avatar}" th:src="${singlePage.owner.avatar}"
th:alt="${singlePage.owner.displayName}" th:alt="${singlePage.owner.displayName}"
class="size-10 rounded-full" class="size-10 rounded-full"

View File

@@ -1,4 +1,4 @@
<!DOCTYPE html> <!doctype html>
<html <html
xmlns:th="https://www.thymeleaf.org" xmlns:th="https://www.thymeleaf.org"
th:replace="~{modules/layout :: html(title = '图库 - ' + ${site.title}, hero = null, content = ~{::content}, head = null, footer = null, sidebar = ~{::sidebar}, contentClass = '')}" th:replace="~{modules/layout :: html(title = '图库 - ' + ${site.title}, hero = null, content = ~{::content}, head = null, footer = null, sidebar = ~{::sidebar}, contentClass = '')}"

View File

@@ -1,4 +1,4 @@
<!DOCTYPE html> <!doctype html>
<html <html
xmlns:th="https://www.thymeleaf.org" xmlns:th="https://www.thymeleaf.org"
th:replace="~{modules/layout :: html(title = ${post.spec.title} + ' - ' + ${site.title}, hero = ~{::hero}, content = ~{::content}, head = ~{::head}, footer = ~{::footer}, sidebar = ~{::sidebar}, contentClass = ${theme.config.layout.content_header} and ${not #strings.isEmpty(post.spec.cover)} ? '!-mt-20' : '')}" th:replace="~{modules/layout :: html(title = ${post.spec.title} + ' - ' + ${site.title}, hero = ~{::hero}, content = ~{::content}, head = ~{::head}, footer = ~{::footer}, sidebar = ~{::sidebar}, contentClass = ${theme.config.layout.content_header} and ${not #strings.isEmpty(post.spec.cover)} ? '!-mt-20' : '')}"
@@ -37,13 +37,12 @@
class="flex flex-col items-center justify-between gap-2 sm:flex-row" class="flex flex-col items-center justify-between gap-2 sm:flex-row"
> >
<div class="flex w-full items-center justify-start gap-2"> <div class="flex w-full items-center justify-start gap-2">
<a th:href="@{${post.owner.permalink}}" th:title="${post.owner.displayName}"> <a
<img th:unless="${#strings.isEmpty(post.owner.avatar)}"
th:if="${not #strings.isEmpty(post.owner.avatar)}" th:href="@{${post.owner.permalink}}"
th:src="${post.owner.avatar}" th:title="${post.owner.displayName}"
class="size-10 rounded-full" >
th:alt="${post.owner.displayName}" <img th:src="${post.owner.avatar}" class="size-10 rounded-full" th:alt="${post.owner.displayName}" />
/>
</a> </a>
<div class="flex flex-col gap-0.5"> <div class="flex flex-col gap-0.5">
<a <a

View File

@@ -1,4 +1,4 @@
<!DOCTYPE html> <!doctype html>
<html <html
xmlns:th="https://www.thymeleaf.org" xmlns:th="https://www.thymeleaf.org"
th:replace="~{modules/layout :: html(title = '标签:' + ${tag.spec.displayName} + ' - ' + ${site.title}, hero = null, content = ~{::content}, head = null, footer = null, sidebar = null, contentClass = null)}" th:replace="~{modules/layout :: html(title = '标签:' + ${tag.spec.displayName} + ' - ' + ${site.title}, hero = null, content = ~{::content}, head = null, footer = null, sidebar = null, contentClass = null)}"

View File

@@ -1,4 +1,4 @@
<!DOCTYPE html> <!doctype html>
<html <html
xmlns:th="https://www.thymeleaf.org" xmlns:th="https://www.thymeleaf.org"
th:replace="~{modules/layout :: html(title = '标签 - ' + ${site.title}, hero = null, content = ~{::content}, head = null, footer = null, sidebar = null, contentClass = null)}" th:replace="~{modules/layout :: html(title = '标签 - ' + ${site.title}, hero = null, content = ~{::content}, head = null, footer = null, sidebar = null, contentClass = null)}"