feat(search): use svelte 5

This commit is contained in:
Maciej Jur 2023-12-20 23:16:13 +01:00
parent 2a0560651a
commit ea4897230f
Signed by: kamov
GPG key ID: 191CBFF5F72ECAFD
9 changed files with 368 additions and 216 deletions

View file

@ -1,6 +1,7 @@
import { defineConfig } from 'astro/config';
import mdx from '@astrojs/mdx';
import solid from '@astrojs/solid-js';
import svelte from '@astrojs/svelte';
import pagefind from 'astro-pagefind';
import remarkDirective from 'remark-directive';
import remarkMath from 'remark-math';
@ -35,6 +36,7 @@ export default defineConfig({
},
integrations: [
mdx(),
svelte({ compilerOptions: { runes: true } }),
solid(),
pagefind(),
]

View file

@ -13,6 +13,7 @@
"dependencies": {
"@astrojs/mdx": "^2.0.1",
"@astrojs/solid-js": "^3.0.2",
"@astrojs/svelte": "^5.0.1",
"@citation-js/plugin-bibtex": "^0.7.2",
"@js-temporal/polyfill": "^0.4.4",
"astro": "^4.0.6",
@ -34,6 +35,7 @@
"remark-rehype": "^11.0.0",
"reveal.js": "^5.0.3",
"solid-js": "^1.8.7",
"svelte": "5.0.0-next.26",
"unified": "^11.0.4",
"unist-util-visit": "^5.0.0"
},

View file

@ -11,6 +11,9 @@ dependencies:
'@astrojs/solid-js':
specifier: ^3.0.2
version: 3.0.2(solid-js@1.8.7)(vite@5.0.10)
'@astrojs/svelte':
specifier: ^5.0.1
version: 5.0.1(astro@4.0.6)(svelte@5.0.0-next.26)(typescript@5.3.3)(vite@5.0.10)
'@citation-js/plugin-bibtex':
specifier: ^0.7.2
version: 0.7.2(@citation-js/core@0.7.1)
@ -19,7 +22,7 @@ dependencies:
version: 0.4.4
astro:
specifier: ^4.0.6
version: 4.0.6(sass@1.69.5)
version: 4.0.6(sass@1.69.5)(typescript@5.3.3)
astro-pagefind:
specifier: ^1.3.0
version: 1.3.0(astro@4.0.6)
@ -74,6 +77,9 @@ dependencies:
solid-js:
specifier: ^1.8.7
version: 1.8.7
svelte:
specifier: 5.0.0-next.26
version: 5.0.0-next.26
unified:
specifier: ^11.0.4
version: 11.0.4
@ -152,7 +158,7 @@ packages:
'@astrojs/markdown-remark': 4.0.1
'@mdx-js/mdx': 3.0.0
acorn: 8.11.2
astro: 4.0.6(sass@1.69.5)
astro: 4.0.6(sass@1.69.5)(typescript@5.3.3)
es-module-lexer: 1.4.1
estree-util-visit: 2.0.0
github-slugger: 2.0.0
@ -189,6 +195,23 @@ packages:
- vite
dev: false
/@astrojs/svelte@5.0.1(astro@4.0.6)(svelte@5.0.0-next.26)(typescript@5.3.3)(vite@5.0.10):
resolution: {integrity: sha512-MQvm0VmkiHVBb41hkKvQKtZa2YZqImdJD23dDW6EGhFxRy1GEgJ4Hm6p4T30FXrLPQUoiay/BU5U/lHDd6ZlNg==}
engines: {node: '>=18.14.1'}
peerDependencies:
astro: ^4.0.0
svelte: ^4.0.0 || ^5.0.0-next.1
dependencies:
'@sveltejs/vite-plugin-svelte': 3.0.1(svelte@5.0.0-next.26)(vite@5.0.10)
astro: 4.0.6(sass@1.69.5)(typescript@5.3.3)
svelte: 5.0.0-next.26
svelte2tsx: 0.6.27(svelte@5.0.0-next.26)(typescript@5.3.3)
transitivePeerDependencies:
- supports-color
- typescript
- vite
dev: false
/@astrojs/telemetry@3.0.4:
resolution: {integrity: sha512-A+0c7k/Xy293xx6odsYZuXiaHO0PL+bnDoXOc47sGDF5ffIKdKQGRPFl2NMlCF4L0NqN4Ynbgnaip+pPF0s7pQ==}
engines: {node: '>=18.14.1'}
@ -652,8 +675,17 @@ packages:
dev: true
optional: true
/@esbuild/android-arm64@0.19.9:
resolution: {integrity: sha512-q4cR+6ZD0938R19MyEW3jEsMzbb/1rulLXiNAJQADD/XYp7pT+rOS5JGxvpRW8dFDEfjW4wLgC/3FXIw4zYglQ==}
/@esbuild/aix-ppc64@0.19.10:
resolution: {integrity: sha512-Q+mk96KJ+FZ30h9fsJl+67IjNJm3x2eX+GBWGmocAKgzp27cowCOOqSdscX80s0SpdFXZnIv/+1xD1EctFx96Q==}
engines: {node: '>=12'}
cpu: [ppc64]
os: [aix]
requiresBuild: true
dev: false
optional: true
/@esbuild/android-arm64@0.19.10:
resolution: {integrity: sha512-1X4CClKhDgC3by7k8aOWZeBXQX8dHT5QAMCAQDArCLaYfkppoARvh0fit3X2Qs+MXDngKcHv6XXyQCpY0hkK1Q==}
engines: {node: '>=12'}
cpu: [arm64]
os: [android]
@ -661,8 +693,8 @@ packages:
dev: false
optional: true
/@esbuild/android-arm@0.19.9:
resolution: {integrity: sha512-jkYjjq7SdsWuNI6b5quymW0oC83NN5FdRPuCbs9HZ02mfVdAP8B8eeqLSYU3gb6OJEaY5CQabtTFbqBf26H3GA==}
/@esbuild/android-arm@0.19.10:
resolution: {integrity: sha512-7W0bK7qfkw1fc2viBfrtAEkDKHatYfHzr/jKAHNr9BvkYDXPcC6bodtm8AyLJNNuqClLNaeTLuwURt4PRT9d7w==}
engines: {node: '>=12'}
cpu: [arm]
os: [android]
@ -670,8 +702,8 @@ packages:
dev: false
optional: true
/@esbuild/android-x64@0.19.9:
resolution: {integrity: sha512-KOqoPntWAH6ZxDwx1D6mRntIgZh9KodzgNOy5Ebt9ghzffOk9X2c1sPwtM9P+0eXbefnDhqYfkh5PLP5ULtWFA==}
/@esbuild/android-x64@0.19.10:
resolution: {integrity: sha512-O/nO/g+/7NlitUxETkUv/IvADKuZXyH4BHf/g/7laqKC4i/7whLpB0gvpPc2zpF0q9Q6FXS3TS75QHac9MvVWw==}
engines: {node: '>=12'}
cpu: [x64]
os: [android]
@ -679,8 +711,8 @@ packages:
dev: false
optional: true
/@esbuild/darwin-arm64@0.19.9:
resolution: {integrity: sha512-KBJ9S0AFyLVx2E5D8W0vExqRW01WqRtczUZ8NRu+Pi+87opZn5tL4Y0xT0mA4FtHctd0ZgwNoN639fUUGlNIWw==}
/@esbuild/darwin-arm64@0.19.10:
resolution: {integrity: sha512-YSRRs2zOpwypck+6GL3wGXx2gNP7DXzetmo5pHXLrY/VIMsS59yKfjPizQ4lLt5vEI80M41gjm2BxrGZ5U+VMA==}
engines: {node: '>=12'}
cpu: [arm64]
os: [darwin]
@ -688,8 +720,8 @@ packages:
dev: false
optional: true
/@esbuild/darwin-x64@0.19.9:
resolution: {integrity: sha512-vE0VotmNTQaTdX0Q9dOHmMTao6ObjyPm58CHZr1UK7qpNleQyxlFlNCaHsHx6Uqv86VgPmR4o2wdNq3dP1qyDQ==}
/@esbuild/darwin-x64@0.19.10:
resolution: {integrity: sha512-alfGtT+IEICKtNE54hbvPg13xGBe4GkVxyGWtzr+yHO7HIiRJppPDhOKq3zstTcVf8msXb/t4eavW3jCDpMSmA==}
engines: {node: '>=12'}
cpu: [x64]
os: [darwin]
@ -697,8 +729,8 @@ packages:
dev: false
optional: true
/@esbuild/freebsd-arm64@0.19.9:
resolution: {integrity: sha512-uFQyd/o1IjiEk3rUHSwUKkqZwqdvuD8GevWF065eqgYfexcVkxh+IJgwTaGZVu59XczZGcN/YMh9uF1fWD8j1g==}
/@esbuild/freebsd-arm64@0.19.10:
resolution: {integrity: sha512-dMtk1wc7FSH8CCkE854GyGuNKCewlh+7heYP/sclpOG6Cectzk14qdUIY5CrKDbkA/OczXq9WesqnPl09mj5dg==}
engines: {node: '>=12'}
cpu: [arm64]
os: [freebsd]
@ -706,8 +738,8 @@ packages:
dev: false
optional: true
/@esbuild/freebsd-x64@0.19.9:
resolution: {integrity: sha512-WMLgWAtkdTbTu1AWacY7uoj/YtHthgqrqhf1OaEWnZb7PQgpt8eaA/F3LkV0E6K/Lc0cUr/uaVP/49iE4M4asA==}
/@esbuild/freebsd-x64@0.19.10:
resolution: {integrity: sha512-G5UPPspryHu1T3uX8WiOEUa6q6OlQh6gNl4CO4Iw5PS+Kg5bVggVFehzXBJY6X6RSOMS8iXDv2330VzaObm4Ag==}
engines: {node: '>=12'}
cpu: [x64]
os: [freebsd]
@ -715,8 +747,8 @@ packages:
dev: false
optional: true
/@esbuild/linux-arm64@0.19.9:
resolution: {integrity: sha512-PiPblfe1BjK7WDAKR1Cr9O7VVPqVNpwFcPWgfn4xu0eMemzRp442hXyzF/fSwgrufI66FpHOEJk0yYdPInsmyQ==}
/@esbuild/linux-arm64@0.19.10:
resolution: {integrity: sha512-QxaouHWZ+2KWEj7cGJmvTIHVALfhpGxo3WLmlYfJ+dA5fJB6lDEIg+oe/0//FuyVHuS3l79/wyBxbHr0NgtxJQ==}
engines: {node: '>=12'}
cpu: [arm64]
os: [linux]
@ -724,8 +756,8 @@ packages:
dev: false
optional: true
/@esbuild/linux-arm@0.19.9:
resolution: {integrity: sha512-C/ChPohUYoyUaqn1h17m/6yt6OB14hbXvT8EgM1ZWaiiTYz7nWZR0SYmMnB5BzQA4GXl3BgBO1l8MYqL/He3qw==}
/@esbuild/linux-arm@0.19.10:
resolution: {integrity: sha512-j6gUW5aAaPgD416Hk9FHxn27On28H4eVI9rJ4az7oCGTFW48+LcgNDBN+9f8rKZz7EEowo889CPKyeaD0iw9Kg==}
engines: {node: '>=12'}
cpu: [arm]
os: [linux]
@ -733,8 +765,8 @@ packages:
dev: false
optional: true
/@esbuild/linux-ia32@0.19.9:
resolution: {integrity: sha512-f37i/0zE0MjDxijkPSQw1CO/7C27Eojqb+r3BbHVxMLkj8GCa78TrBZzvPyA/FNLUMzP3eyHCVkAopkKVja+6Q==}
/@esbuild/linux-ia32@0.19.10:
resolution: {integrity: sha512-4ub1YwXxYjj9h1UIZs2hYbnTZBtenPw5NfXCRgEkGb0b6OJ2gpkMvDqRDYIDRjRdWSe/TBiZltm3Y3Q8SN1xNg==}
engines: {node: '>=12'}
cpu: [ia32]
os: [linux]
@ -742,8 +774,8 @@ packages:
dev: false
optional: true
/@esbuild/linux-loong64@0.19.9:
resolution: {integrity: sha512-t6mN147pUIf3t6wUt3FeumoOTPfmv9Cc6DQlsVBpB7eCpLOqQDyWBP1ymXn1lDw4fNUSb/gBcKAmvTP49oIkaA==}
/@esbuild/linux-loong64@0.19.10:
resolution: {integrity: sha512-lo3I9k+mbEKoxtoIbM0yC/MZ1i2wM0cIeOejlVdZ3D86LAcFXFRdeuZmh91QJvUTW51bOK5W2BznGNIl4+mDaA==}
engines: {node: '>=12'}
cpu: [loong64]
os: [linux]
@ -751,8 +783,8 @@ packages:
dev: false
optional: true
/@esbuild/linux-mips64el@0.19.9:
resolution: {integrity: sha512-jg9fujJTNTQBuDXdmAg1eeJUL4Jds7BklOTkkH80ZgQIoCTdQrDaHYgbFZyeTq8zbY+axgptncko3v9p5hLZtw==}
/@esbuild/linux-mips64el@0.19.10:
resolution: {integrity: sha512-J4gH3zhHNbdZN0Bcr1QUGVNkHTdpijgx5VMxeetSk6ntdt+vR1DqGmHxQYHRmNb77tP6GVvD+K0NyO4xjd7y4A==}
engines: {node: '>=12'}
cpu: [mips64el]
os: [linux]
@ -760,8 +792,8 @@ packages:
dev: false
optional: true
/@esbuild/linux-ppc64@0.19.9:
resolution: {integrity: sha512-tkV0xUX0pUUgY4ha7z5BbDS85uI7ABw3V1d0RNTii7E9lbmV8Z37Pup2tsLV46SQWzjOeyDi1Q7Wx2+QM8WaCQ==}
/@esbuild/linux-ppc64@0.19.10:
resolution: {integrity: sha512-tgT/7u+QhV6ge8wFMzaklOY7KqiyitgT1AUHMApau32ZlvTB/+efeCtMk4eXS+uEymYK249JsoiklZN64xt6oQ==}
engines: {node: '>=12'}
cpu: [ppc64]
os: [linux]
@ -769,8 +801,8 @@ packages:
dev: false
optional: true
/@esbuild/linux-riscv64@0.19.9:
resolution: {integrity: sha512-DfLp8dj91cufgPZDXr9p3FoR++m3ZJ6uIXsXrIvJdOjXVREtXuQCjfMfvmc3LScAVmLjcfloyVtpn43D56JFHg==}
/@esbuild/linux-riscv64@0.19.10:
resolution: {integrity: sha512-0f/spw0PfBMZBNqtKe5FLzBDGo0SKZKvMl5PHYQr3+eiSscfJ96XEknCe+JoOayybWUFQbcJTrk946i3j9uYZA==}
engines: {node: '>=12'}
cpu: [riscv64]
os: [linux]
@ -778,8 +810,8 @@ packages:
dev: false
optional: true
/@esbuild/linux-s390x@0.19.9:
resolution: {integrity: sha512-zHbglfEdC88KMgCWpOl/zc6dDYJvWGLiUtmPRsr1OgCViu3z5GncvNVdf+6/56O2Ca8jUU+t1BW261V6kp8qdw==}
/@esbuild/linux-s390x@0.19.10:
resolution: {integrity: sha512-pZFe0OeskMHzHa9U38g+z8Yx5FNCLFtUnJtQMpwhS+r4S566aK2ci3t4NCP4tjt6d5j5uo4h7tExZMjeKoehAA==}
engines: {node: '>=12'}
cpu: [s390x]
os: [linux]
@ -787,8 +819,8 @@ packages:
dev: false
optional: true
/@esbuild/linux-x64@0.19.9:
resolution: {integrity: sha512-JUjpystGFFmNrEHQnIVG8hKwvA2DN5o7RqiO1CVX8EN/F/gkCjkUMgVn6hzScpwnJtl2mPR6I9XV1oW8k9O+0A==}
/@esbuild/linux-x64@0.19.10:
resolution: {integrity: sha512-SpYNEqg/6pZYoc+1zLCjVOYvxfZVZj6w0KROZ3Fje/QrM3nfvT2llI+wmKSrWuX6wmZeTapbarvuNNK/qepSgA==}
engines: {node: '>=12'}
cpu: [x64]
os: [linux]
@ -796,8 +828,8 @@ packages:
dev: false
optional: true
/@esbuild/netbsd-x64@0.19.9:
resolution: {integrity: sha512-GThgZPAwOBOsheA2RUlW5UeroRfESwMq/guy8uEe3wJlAOjpOXuSevLRd70NZ37ZrpO6RHGHgEHvPg1h3S1Jug==}
/@esbuild/netbsd-x64@0.19.10:
resolution: {integrity: sha512-ACbZ0vXy9zksNArWlk2c38NdKg25+L9pr/mVaj9SUq6lHZu/35nx2xnQVRGLrC1KKQqJKRIB0q8GspiHI3J80Q==}
engines: {node: '>=12'}
cpu: [x64]
os: [netbsd]
@ -805,8 +837,8 @@ packages:
dev: false
optional: true
/@esbuild/openbsd-x64@0.19.9:
resolution: {integrity: sha512-Ki6PlzppaFVbLnD8PtlVQfsYw4S9n3eQl87cqgeIw+O3sRr9IghpfSKY62mggdt1yCSZ8QWvTZ9jo9fjDSg9uw==}
/@esbuild/openbsd-x64@0.19.10:
resolution: {integrity: sha512-PxcgvjdSjtgPMiPQrM3pwSaG4kGphP+bLSb+cihuP0LYdZv1epbAIecHVl5sD3npkfYBZ0ZnOjR878I7MdJDFg==}
engines: {node: '>=12'}
cpu: [x64]
os: [openbsd]
@ -814,8 +846,8 @@ packages:
dev: false
optional: true
/@esbuild/sunos-x64@0.19.9:
resolution: {integrity: sha512-MLHj7k9hWh4y1ddkBpvRj2b9NCBhfgBt3VpWbHQnXRedVun/hC7sIyTGDGTfsGuXo4ebik2+3ShjcPbhtFwWDw==}
/@esbuild/sunos-x64@0.19.10:
resolution: {integrity: sha512-ZkIOtrRL8SEJjr+VHjmW0znkPs+oJXhlJbNwfI37rvgeMtk3sxOQevXPXjmAPZPigVTncvFqLMd+uV0IBSEzqA==}
engines: {node: '>=12'}
cpu: [x64]
os: [sunos]
@ -823,8 +855,8 @@ packages:
dev: false
optional: true
/@esbuild/win32-arm64@0.19.9:
resolution: {integrity: sha512-GQoa6OrQ8G08guMFgeXPH7yE/8Dt0IfOGWJSfSH4uafwdC7rWwrfE6P9N8AtPGIjUzdo2+7bN8Xo3qC578olhg==}
/@esbuild/win32-arm64@0.19.10:
resolution: {integrity: sha512-+Sa4oTDbpBfGpl3Hn3XiUe4f8TU2JF7aX8cOfqFYMMjXp6ma6NJDztl5FDG8Ezx0OjwGikIHw+iA54YLDNNVfw==}
engines: {node: '>=12'}
cpu: [arm64]
os: [win32]
@ -832,8 +864,8 @@ packages:
dev: false
optional: true
/@esbuild/win32-ia32@0.19.9:
resolution: {integrity: sha512-UOozV7Ntykvr5tSOlGCrqU3NBr3d8JqPes0QWN2WOXfvkWVGRajC+Ym0/Wj88fUgecUCLDdJPDF0Nna2UK3Qtg==}
/@esbuild/win32-ia32@0.19.10:
resolution: {integrity: sha512-EOGVLK1oWMBXgfttJdPHDTiivYSjX6jDNaATeNOaCOFEVcfMjtbx7WVQwPSE1eIfCp/CaSF2nSrDtzc4I9f8TQ==}
engines: {node: '>=12'}
cpu: [ia32]
os: [win32]
@ -841,8 +873,8 @@ packages:
dev: false
optional: true
/@esbuild/win32-x64@0.19.9:
resolution: {integrity: sha512-oxoQgglOP7RH6iasDrhY+R/3cHrfwIDvRlT4CGChflq6twk8iENeVvMJjmvBb94Ik1Z+93iGO27err7w6l54GQ==}
/@esbuild/win32-x64@0.19.10:
resolution: {integrity: sha512-whqLG6Sc70AbU73fFYvuYzaE4MNMBIlR1Y/IrUeOXFrWHxBEjjbZaQ3IXIQS8wJdAzue2GwYZCjOrgrU1oUHoA==}
engines: {node: '>=12'}
cpu: [x64]
os: [win32]
@ -1283,6 +1315,42 @@ packages:
engines: {node: '>=10'}
dev: false
/@sveltejs/vite-plugin-svelte-inspector@2.0.0(@sveltejs/vite-plugin-svelte@3.0.1)(svelte@5.0.0-next.26)(vite@5.0.10):
resolution: {integrity: sha512-gjr9ZFg1BSlIpfZ4PRewigrvYmHWbDrq2uvvPB1AmTWKuM+dI1JXQSUu2pIrYLb/QncyiIGkFDFKTwJ0XqQZZg==}
engines: {node: ^18.0.0 || >=20}
peerDependencies:
'@sveltejs/vite-plugin-svelte': ^3.0.0
svelte: ^4.0.0 || ^5.0.0-next.0
vite: ^5.0.0
dependencies:
'@sveltejs/vite-plugin-svelte': 3.0.1(svelte@5.0.0-next.26)(vite@5.0.10)
debug: 4.3.4
svelte: 5.0.0-next.26
vite: 5.0.10(sass@1.69.5)
transitivePeerDependencies:
- supports-color
dev: false
/@sveltejs/vite-plugin-svelte@3.0.1(svelte@5.0.0-next.26)(vite@5.0.10):
resolution: {integrity: sha512-CGURX6Ps+TkOovK6xV+Y2rn8JKa8ZPUHPZ/NKgCxAmgBrXReavzFl8aOSCj3kQ1xqT7yGJj53hjcV/gqwDAaWA==}
engines: {node: ^18.0.0 || >=20}
peerDependencies:
svelte: ^4.0.0 || ^5.0.0-next.0
vite: ^5.0.0
dependencies:
'@sveltejs/vite-plugin-svelte-inspector': 2.0.0(@sveltejs/vite-plugin-svelte@3.0.1)(svelte@5.0.0-next.26)(vite@5.0.10)
debug: 4.3.4
deepmerge: 4.3.1
kleur: 4.1.5
magic-string: 0.30.5
svelte: 5.0.0-next.26
svelte-hmr: 0.15.3(svelte@5.0.0-next.26)
vite: 5.0.10(sass@1.69.5)
vitefu: 0.2.5(vite@5.0.10)
transitivePeerDependencies:
- supports-color
dev: false
/@types/acorn@4.0.6:
resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==}
dependencies:
@ -1407,6 +1475,14 @@ packages:
acorn: 8.11.2
dev: false
/acorn-typescript@1.4.12(acorn@8.11.2):
resolution: {integrity: sha512-G/oj3oiBmYlc+6SJZYMRz+SPgSgBWqEXPzhO55dYvT4x8SJM+HkxU5o5OPFstxsMMk1tXPYtYCyd7jUdHZy8Eg==}
peerDependencies:
acorn: '>=8.9.0'
dependencies:
acorn: 8.11.2
dev: false
/acorn@8.11.2:
resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==}
engines: {node: '>=0.4.0'}
@ -1458,6 +1534,12 @@ packages:
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
dev: false
/aria-query@5.3.0:
resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==}
dependencies:
dequal: 2.0.3
dev: false
/array-iterate@2.0.1:
resolution: {integrity: sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==}
dev: false
@ -1473,12 +1555,12 @@ packages:
astro: ^2.0.4 || ^3.0.0
dependencies:
'@pagefind/default-ui': 1.0.4
astro: 4.0.6(sass@1.69.5)
astro: 4.0.6(sass@1.69.5)(typescript@5.3.3)
pagefind: 1.0.4
sirv: 2.0.3
dev: false
/astro@4.0.6(sass@1.69.5):
/astro@4.0.6(sass@1.69.5)(typescript@5.3.3):
resolution: {integrity: sha512-P7CfFqWKzkJozzF6IoOC6qoI2ONndV8P3ULhGDgMiXPL7xVkWI5haTBSpyrcjBx643tVXspIRsSV/v+Cx+CjGw==}
engines: {node: '>=18.14.1', npm: '>=6.14.0'}
hasBin: true
@ -1508,7 +1590,7 @@ packages:
dlv: 1.1.3
dset: 3.1.3
es-module-lexer: 1.4.1
esbuild: 0.19.9
esbuild: 0.19.10
estree-walker: 3.0.3
execa: 8.0.1
fast-glob: 3.3.2
@ -1536,7 +1618,7 @@ packages:
shikiji: 0.6.13
string-width: 7.0.0
strip-ansi: 7.1.0
tsconfck: 3.0.0
tsconfck: 3.0.0(typescript@5.3.3)
unist-util-visit: 5.0.0
vfile: 6.0.1
vite: 5.0.10(sass@1.69.5)
@ -1558,6 +1640,12 @@ packages:
- typescript
dev: false
/axobject-query@4.0.0:
resolution: {integrity: sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==}
dependencies:
dequal: 2.0.3
dev: false
/b4a@1.6.4:
resolution: {integrity: sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==}
requiresBuild: true
@ -1921,6 +2009,10 @@ packages:
dev: false
optional: true
/dedent-js@1.0.1:
resolution: {integrity: sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==}
dev: false
/deep-extend@0.6.0:
resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==}
engines: {node: '>=4.0.0'}
@ -1928,6 +2020,11 @@ packages:
dev: false
optional: true
/deepmerge@4.3.1:
resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
engines: {node: '>=0.10.0'}
dev: false
/dequal@2.0.3:
resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
engines: {node: '>=6'}
@ -2013,34 +2110,35 @@ packages:
resolution: {integrity: sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==}
dev: false
/esbuild@0.19.9:
resolution: {integrity: sha512-U9CHtKSy+EpPsEBa+/A2gMs/h3ylBC0H0KSqIg7tpztHerLi6nrrcoUJAkNCEPumx8yJ+Byic4BVwHgRbN0TBg==}
/esbuild@0.19.10:
resolution: {integrity: sha512-S1Y27QGt/snkNYrRcswgRFqZjaTG5a5xM3EQo97uNBnH505pdzSNe/HLBq1v0RO7iK/ngdbhJB6mDAp0OK+iUA==}
engines: {node: '>=12'}
hasBin: true
requiresBuild: true
optionalDependencies:
'@esbuild/android-arm': 0.19.9
'@esbuild/android-arm64': 0.19.9
'@esbuild/android-x64': 0.19.9
'@esbuild/darwin-arm64': 0.19.9
'@esbuild/darwin-x64': 0.19.9
'@esbuild/freebsd-arm64': 0.19.9
'@esbuild/freebsd-x64': 0.19.9
'@esbuild/linux-arm': 0.19.9
'@esbuild/linux-arm64': 0.19.9
'@esbuild/linux-ia32': 0.19.9
'@esbuild/linux-loong64': 0.19.9
'@esbuild/linux-mips64el': 0.19.9
'@esbuild/linux-ppc64': 0.19.9
'@esbuild/linux-riscv64': 0.19.9
'@esbuild/linux-s390x': 0.19.9
'@esbuild/linux-x64': 0.19.9
'@esbuild/netbsd-x64': 0.19.9
'@esbuild/openbsd-x64': 0.19.9
'@esbuild/sunos-x64': 0.19.9
'@esbuild/win32-arm64': 0.19.9
'@esbuild/win32-ia32': 0.19.9
'@esbuild/win32-x64': 0.19.9
'@esbuild/aix-ppc64': 0.19.10
'@esbuild/android-arm': 0.19.10
'@esbuild/android-arm64': 0.19.10
'@esbuild/android-x64': 0.19.10
'@esbuild/darwin-arm64': 0.19.10
'@esbuild/darwin-x64': 0.19.10
'@esbuild/freebsd-arm64': 0.19.10
'@esbuild/freebsd-x64': 0.19.10
'@esbuild/linux-arm': 0.19.10
'@esbuild/linux-arm64': 0.19.10
'@esbuild/linux-ia32': 0.19.10
'@esbuild/linux-loong64': 0.19.10
'@esbuild/linux-mips64el': 0.19.10
'@esbuild/linux-ppc64': 0.19.10
'@esbuild/linux-riscv64': 0.19.10
'@esbuild/linux-s390x': 0.19.10
'@esbuild/linux-x64': 0.19.10
'@esbuild/netbsd-x64': 0.19.10
'@esbuild/openbsd-x64': 0.19.10
'@esbuild/sunos-x64': 0.19.10
'@esbuild/win32-arm64': 0.19.10
'@esbuild/win32-ia32': 0.19.10
'@esbuild/win32-x64': 0.19.10
dev: false
/escalade@3.1.1:
@ -2058,12 +2156,23 @@ packages:
engines: {node: '>=12'}
dev: false
/esm-env@1.0.0:
resolution: {integrity: sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==}
dev: false
/esprima@4.0.1:
resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
engines: {node: '>=4'}
hasBin: true
dev: false
/esrap@1.2.1:
resolution: {integrity: sha512-dhkcOLfN/aDdMFI1iwPEcy/XqAZzGNfgfEJjZozy2tia6u0dQoZyXzkRshHTckuNsM+c0CYQndY+uRFe3N+AIQ==}
dependencies:
'@jridgewell/sourcemap-codec': 1.4.15
'@types/estree': 1.0.5
dev: false
/estree-util-attach-comments@3.0.0:
resolution: {integrity: sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==}
dependencies:
@ -2710,6 +2819,10 @@ packages:
strip-bom: 3.0.0
dev: false
/locate-character@3.0.0:
resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==}
dev: false
/locate-path@5.0.0:
resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
engines: {node: '>=8'}
@ -2740,6 +2853,12 @@ packages:
resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==}
dev: false
/lower-case@2.0.2:
resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==}
dependencies:
tslib: 2.6.2
dev: false
/lru-cache@5.1.1:
resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
dependencies:
@ -3467,6 +3586,13 @@ packages:
'@types/nlcst': 1.0.4
dev: false
/no-case@3.0.4:
resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==}
dependencies:
lower-case: 2.0.2
tslib: 2.6.2
dev: false
/node-abi@3.52.0:
resolution: {integrity: sha512-JJ98b02z16ILv7859irtXn4oUaFWADtvkzy2c0IAatNVX2Mc9Yoh8z6hZInn3QwvMEYhHuQloYi+TTQy67SIdQ==}
engines: {node: '>=10'}
@ -3658,6 +3784,13 @@ packages:
entities: 4.5.0
dev: false
/pascal-case@3.1.2:
resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==}
dependencies:
no-case: 3.0.4
tslib: 2.6.2
dev: false
/path-exists@4.0.0:
resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
engines: {node: '>=8'}
@ -4387,6 +4520,45 @@ packages:
engines: {node: '>= 0.4'}
dev: false
/svelte-hmr@0.15.3(svelte@5.0.0-next.26):
resolution: {integrity: sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ==}
engines: {node: ^12.20 || ^14.13.1 || >= 16}
peerDependencies:
svelte: ^3.19.0 || ^4.0.0
dependencies:
svelte: 5.0.0-next.26
dev: false
/svelte2tsx@0.6.27(svelte@5.0.0-next.26)(typescript@5.3.3):
resolution: {integrity: sha512-E1uPW1o6VsbRz+nUk3fznZ2lSmCITAJoNu8AYefWSvIwE2pSB01i5sId4RMbWNzfcwCQl1DcgGShCPcldl4rvg==}
peerDependencies:
svelte: ^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0
typescript: ^4.9.4 || ^5.0.0
dependencies:
dedent-js: 1.0.1
pascal-case: 3.1.2
svelte: 5.0.0-next.26
typescript: 5.3.3
dev: false
/svelte@5.0.0-next.26:
resolution: {integrity: sha512-Dd2RfhZT8Ib4mVY2eOOp5r39m6y/H4tfowIOGcotbpqOjWwEpvVHcvLJ9mF/fB+aMaOcljIia4cO62A25zRRiA==}
engines: {node: '>=18'}
dependencies:
'@ampproject/remapping': 2.2.1
'@jridgewell/sourcemap-codec': 1.4.15
acorn: 8.11.2
acorn-typescript: 1.4.12(acorn@8.11.2)
aria-query: 5.3.0
axobject-query: 4.0.0
esm-env: 1.0.0
esrap: 1.2.1
is-reference: 3.0.2
locate-character: 3.0.0
magic-string: 0.30.5
zimmerframe: 1.1.0
dev: false
/sync-fetch@0.4.5:
resolution: {integrity: sha512-esiWJ7ixSKGpd9DJPBTC4ckChqdOjIwJfYhVHkcQ2Gnm41323p1TRmEI+esTQ9ppD+b5opps2OTEGTCGX5kF+g==}
engines: {node: '>=14'}
@ -4469,7 +4641,7 @@ packages:
resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==}
dev: false
/tsconfck@3.0.0:
/tsconfck@3.0.0(typescript@5.3.3):
resolution: {integrity: sha512-w3wnsIrJNi7avf4Zb0VjOoodoO0woEqGgZGQm+LHH9przdUI+XDKsWAXwxHA1DaRTjeuZNcregSzr7RaA8zG9A==}
engines: {node: ^18 || >=20}
hasBin: true
@ -4478,6 +4650,8 @@ packages:
peerDependenciesMeta:
typescript:
optional: true
dependencies:
typescript: 5.3.3
dev: false
/tslib@2.6.2:
@ -4496,6 +4670,12 @@ packages:
engines: {node: '>=12.20'}
dev: false
/typescript@5.3.3:
resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==}
engines: {node: '>=14.17'}
hasBin: true
dev: false
/unherit@3.0.1:
resolution: {integrity: sha512-akOOQ/Yln8a2sgcLj4U0Jmx0R5jpIg2IUyRrWOzmEbjBtGzBdHtSeFKgoEcoH4KYIG/Pb8GQ/BwtYm0GCq1Sqg==}
dev: false
@ -4726,7 +4906,7 @@ packages:
terser:
optional: true
dependencies:
esbuild: 0.19.9
esbuild: 0.19.10
postcss: 8.4.32
rollup: 4.9.1
sass: 1.69.5
@ -4846,6 +5026,10 @@ packages:
engines: {node: '>=12.20'}
dev: false
/zimmerframe@1.1.0:
resolution: {integrity: sha512-+AmV37r9NPUy7KcuG0Fde9AAFSD88kN5pnqvD7Pkp5WLLK0jct7hAtIDXXFDCRk3l5Mc1r2Sth3gfP2ZLE+/Qw==}
dev: false
/zod@3.22.4:
resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==}
dev: false

View file

@ -1,115 +0,0 @@
import { createResource, createSignal, For, onMount } from "solid-js";
interface Pagefind {
search: (query: string) => Promise<PagefindResponse>;
}
interface PagefindResult {
id: string;
data: () => Promise<PagefindDocument>;
}
interface PagefindResponse {
results: PagefindResult[];
}
interface PagefindDocument {
url: string;
excerpt: string;
filters: {
author: string;
};
meta: {
title: string;
image: string;
};
content: string;
word_count: number;
}
const enum PagefindModule {
LINK = '/pagefind/pagefind.js',
}
const loadPagefind = () => import(/* @vite-ignore */PagefindModule.LINK) as Promise<Pagefind>;
function Result(props: { page: PagefindResult }) {
const [data, setData] = createSignal<PagefindDocument>();
onMount(async () => await props.page.data().then(setData))
return (
<>
{data() && (
<a class="c-search__result" href={data()!.url}>
<header class="c-search__header">
<h2 class="c-search__title">{data()!.meta.title}</h2>
{/* <time class="c-search__date" datetime={dayjs().toISOString()}>{dayjs().format("MMM DD, YYYY")}</time> */}
</header>
<div class="c-search__excerpt" innerHTML={data()!.excerpt}></div>
</a>
) || (
<div>Loading...</div>
)}
</>
)
}
const KEY = 'q' as const;
export default function Search() {
const [query, setQuery] = createSignal('');
// Search
let pagefind: Pagefind;
const [pages] = createResource(query, async (query: string) => await pagefind.search(query));
// Update URL query and history
let debounce: number;
function syncHistory(value: string) {
clearTimeout(debounce);
debounce = setTimeout(() => {
const url = new URL(window.location.href);
(value) ? url.searchParams.set(KEY, value) : url.searchParams.delete(KEY);
window.history.pushState({}, '', url);
}, 1000);
}
// set query to URL param
function sync() {
clearTimeout(debounce);
setQuery(new URLSearchParams(window.location.search).get('q') || '');
}
function onInput(value: string) {
setQuery(value);
syncHistory(value);
}
onMount(async () => {
pagefind = await loadPagefind();
sync();
window.addEventListener('popstate', sync);
});
return (
<article class="c-search">
<h1>Search</h1>
<input class="c-search__input" placeholder="Start typing here!"
value={query()}
onInput={e => onInput(e.target.value)}/>
{query() && (
<section class="c-search__results">
<div>Showing results for "{query()}" ({pages()?.results.length || 0})</div>
{pages() && <For each={pages()!.results}>{(page, i) => (
<Result page={page} />
)}</For>}
</section>
) || (
<div>No results to show yet...</div>
)}
</article>
);
}

View file

@ -1,17 +0,0 @@
import { createSignal } from "solid-js"
export default function Tab(props: any) {
const [state, setState] = createSignal(false);
const toggle = () => setState(!state());
return (
<section class="c-tab" classList={{active: state()}}>
<button class="c-tab__button" onClick={toggle}>
<img class="chevron" src="/static/svg/chevron.svg" alt=""/>
<span class="title">{props.title}</span>
</button>
{state() && <div>{props.children}</div>}
</section>
)
}

View file

@ -1,6 +0,0 @@
<script lang="ts">
const test = "XD";
</script>
<h1>{test}</h1>

26
src/components/search/pagefind.d.ts vendored Normal file
View file

@ -0,0 +1,26 @@
interface Pagefind {
search: (query: string) => Promise<PagefindResponse>;
}
interface PagefindResult {
id: string;
data: () => Promise<PagefindDocument>;
}
interface PagefindResponse {
results: PagefindResult[];
}
interface PagefindDocument {
url: string;
excerpt: string;
filters: {
author: string;
};
meta: {
title: string;
image: string;
};
content: string;
word_count: number;
}

View file

@ -0,0 +1,76 @@
<script lang="ts">
import type { ChangeEventHandler } from 'svelte/elements';
let client = $state<Pagefind>();
let query = $state<string>('');
let result = $derived(client?.search(query));
function handler(): ChangeEventHandler<HTMLInputElement> {
let debounce: number | undefined;
return event => {
clearTimeout(debounce);
const value = event.currentTarget.value;
const url = new URL(window.location.href);
(value)
? url.searchParams.set('q', value)
: url.searchParams.delete('q');
debounce = setTimeout(() => window.history.pushState({}, '', url), 1000);
}
}
function sync() {
const params = new URLSearchParams(window.location.search);
query = params.get('q') || '';
}
const require = (path: string) => import(/* @vite-ignore */path);
$effect(() => {
sync();
require('/pagefind/pagefind.js').then(pf => client = pf);
});
</script>
<svelte:window on:popstate={sync}/>
{#snippet tile(data: PagefindDocument)}
<a class="c-search__result" href={data.url}>
<header class="c-search__header">
<h2 class="c-search__title">
{data.meta.title}
</h2>
</header>
<div class="c-search__excerpt">
{@html data.excerpt}
</div>
</a>
{/snippet}
<article class="c-search">
<h1>Search</h1>
<input class="c-search__input" placeholder="Start typing here!"
bind:value={query}
on:input={handler()}/>
{#if query && result}
{#await result}
Loading...
{:then {results}}
<section class="c-search__results">
<div>Showing results for "{query}" ({results.length})</div>
{#each results as page (page.id)}
{#await page.data()}
Loading...
{:then page}
{@render tile(page)}
{/await}
{/each}
</section>
{/await}
{:else}
<div>No results to show yet...</div>
{/if}
</article>

View file

@ -1,10 +1,10 @@
---
import Base from "../layouts/Base.astro";
import Search from "../components/Search";
import SiteSearch from '@components/search/search.svelte';
---
<Base>
<main>
<Search client:load/>
<SiteSearch client:load/>
</main>
</Base>