From bfda08e65973ece0520d7396d0deba74f8fb988d Mon Sep 17 00:00:00 2001 From: Zenith Rifle <84105075+eli32-vlc@users.noreply.github.com> Date: Sun, 4 Jan 2026 13:39:22 +0800 Subject: [PATCH] Your local exact search (#4535) * Initial plan * Add fuzzy/exact search toggle to VPLocalSearchBox Co-authored-by: eli32-vlc <84105075+eli32-vlc@users.noreply.github.com> * Complete fuzzy/exact search toggle implementation with screenshots Co-authored-by: eli32-vlc <84105075+eli32-vlc@users.noreply.github.com> * Add minisearch dependency and update screenshots with actual interface Co-authored-by: eli32-vlc <84105075+eli32-vlc@users.noreply.github.com> * Remove temporary comment and restore web fonts preset Co-authored-by: eli32-vlc <84105075+eli32-vlc@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> --- docs/.vitepress/config.mts | 6 + docs/.vitepress/constants.ts | 2 +- .../theme/components/VPLocalSearchBox.vue | 923 ++++++++++++++++++ package.json | 3 + pnpm-lock.yaml | Bin 326086 -> 327680 bytes 5 files changed, 933 insertions(+), 1 deletion(-) create mode 100644 docs/.vitepress/theme/components/VPLocalSearchBox.vue diff --git a/docs/.vitepress/config.mts b/docs/.vitepress/config.mts index 8b73fb0be..04326b833 100644 --- a/docs/.vitepress/config.mts +++ b/docs/.vitepress/config.mts @@ -98,6 +98,12 @@ export default defineConfig({ replacement: fileURLToPath( new URL('./theme/components/ThemeDropdown.vue', import.meta.url) ) + }, + { + find: /^.*VPLocalSearchBox\.vue$/, + replacement: fileURLToPath( + new URL('./theme/components/VPLocalSearchBox.vue', import.meta.url) + ) } ] }, diff --git a/docs/.vitepress/constants.ts b/docs/.vitepress/constants.ts index fb22ca7fb..108d4359d 100644 --- a/docs/.vitepress/constants.ts +++ b/docs/.vitepress/constants.ts @@ -121,7 +121,7 @@ export const search: DefaultTheme.Config['search'] = { }, searchOptions: { combineWith: 'AND', - fuzzy: true, + fuzzy: false, // @ts-ignore boostDocument: (documentId, term, storedFields: Record) => { const titles = (storedFields?.titles as string[]) diff --git a/docs/.vitepress/theme/components/VPLocalSearchBox.vue b/docs/.vitepress/theme/components/VPLocalSearchBox.vue new file mode 100644 index 000000000..94ec1709b --- /dev/null +++ b/docs/.vitepress/theme/components/VPLocalSearchBox.vue @@ -0,0 +1,923 @@ + + + + + diff --git a/package.json b/package.json index eb8e4f4fc..43cad16ef 100644 --- a/package.json +++ b/package.json @@ -25,9 +25,12 @@ "@headlessui/vue": "^1.7.23", "@resvg/resvg-js": "^2.6.2", "@vueuse/core": "^14.1.0", + "@vueuse/integrations": "^14.1.0", "consola": "^3.4.2", "feed": "^5.1.0", "itty-fetcher": "^1.0.10", + "mark.js": "^8.11.1", + "minisearch": "^7.2.0", "nitro-cors": "^0.7.1", "nitropack": "^2.12.9", "nprogress": "^0.2.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6d479c5753a192cc51ea23b529e87db07d874d24..868915f9c0eeb26cfc0cd39a096c7911c66de44e 100644 GIT binary patch delta 327 zcmX^1S-7D=WWz6}=?)KASf^i2VicJCnOkD=4ko$jdvCKSPj_0yEIV0`m3{IrrX%dR ziAC9ZS;dnVGKsNR=ouPLe#k5$4r1sTaw&j8Zf0I)acW{wat25dqxs~60%9!YdPaK9 z+nBd+V`jXPH2r20Bj5DI3`XtHRKLK0l+5Bhf6L&ql**J4&xpJbSMy{e%S!)ZFDDoM zitKXN%0Qo#3>Rm8AMd2XBDaDFk0j&LV10dazhuv%K!4-3@UYS{U-trwlq7GnTt8P| z=gE#Diqkui8NZ4t)YK@%SwJ0DR+?(15NE7sI$cqgQMr9y3L_9RZJ(FI+_w<$NVrAi*p3lPKF};D6g=P8*Ru