jccp_a/vuepress/node_modules/@vuepress/plugin-docsearch/lib/client/index.js
hellcat ac91e1fbe4 1
2025-11-12 17:57:30 +08:00

3 lines
3.6 KiB
JavaScript

import{ref as d,isRef as E,computed as h,inject as w,readonly as B,defineComponent as P,h as v,onMounted as I,watch as R}from"vue";import{useRouter as A,useRouteLocale as f,useLang as K}from"vuepress/client";import{isMacOS as _,isiPad as y,deepAssign as m,isFunction as $}from"@vuepress/helper/client";import{useEventListener as O,watchImmediate as k}from"@vueuse/core";import{debounce as T}from"ts-debounce";import{removeLeadingSlash as L,resolveRoutePathFromUrl as F,isString as U}from"vuepress/shared";const x=(e,t)=>{const r=O("keydown",o=>{const{keyboardShortcuts:n={}}=e.value,a=n["Ctrl/Cmd+K"]!==!1&&o.key==="k"&&(_()||y()?o.metaKey:o.ctrlKey),c=n["/"]!==!1&&o.key==="/";(a||c)&&(o.preventDefault(),t(),r())})},V=()=>{const e=A();return{transformItems:t=>t.map(r=>({...r,url:`${__VUEPRESS_BASE__}${L(F(r.url,__DOCSEARCH_INDEX_BASE__))}`})),navigator:{navigate:({itemUrl:t})=>{e.push(t.replace(__VUEPRESS_BASE__,"/"))}},transformSearchClient:t=>({...t,search:T(t.search,500)})}},l=__DOCSEARCH_OPTIONS__,i=d(l),D=Symbol(__VUEPRESS_DEV__?"docsearch":""),j=e=>{E(e)?k(()=>e.value,t=>{i.value=m({},l,t)}):$(e)?k(h(e),t=>{i.value=m({},l,t)}):i.value=m({},l,e)},g=()=>{const e=w(D),t=f();return h(()=>({...e.value,...e.value.locales?.[t.value]}))},q=e=>{e.provide(D,B(i))},H=(e,t=[])=>[`lang:${e}`,...Array.isArray(t)?t:[t]],M=(e,t)=>{const{indices:r,indexName:o,searchParameters:n}=e;return(r??[{name:o??"",searchParameters:n}]).map(a=>{if(U(a))return{name:a,searchParameters:n};const{searchParameters:c,...s}=a;return{...s,searchParameters:{...c,facetFilters:H(t,c?.facetFilters)}}})},N=({buttonText:e="Search",buttonAriaLabel:t=e}={})=>{const r=_()||y();return`<button type="button" aria-label="${t}" aria-keyshortcuts="${r?"Command":"Control"}+k" class="DocSearch DocSearch-Button"><span class="DocSearch-Button-Container"><svg width="20" height="20" viewBox="0 0 24 24" aria-hidden="true" class="DocSearch-Search-Icon"><circle cx="11" cy="11" r="8" stroke="currentColor" fill="none" stroke-width="1.4"></circle><path d="m21 21-4.3-4.3" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"></path></svg><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key DocSearch-Button-Key--${r?"command":"ctrl"}">${r?"⌘":"Ctrl"}</kbd><kbd class="DocSearch-Button-Key DocSearch-Button-Key--pressed">K</kbd></span></button>`},C=()=>{if(document.querySelector(".DocSearch-Modal"))return;const e=new Event("keydown");e.key="k",e.metaKey=!0,window.dispatchEvent(e),setTimeout(C,16)},X=e=>{const t="algolia-preconnect";("requestIdleCallback"in window?window.requestIdleCallback:setTimeout)(()=>{if(document.head.querySelector(`#${t}`))return;const r=document.createElement("link");r.id=t,r.rel="preconnect",r.href=`https://${e}-dsn.algolia.net`,r.crossOrigin="",document.head.appendChild(r)})},z=P({name:"DocSearch",props:{containerId:{type:String,default:"docsearch-container"},options:{type:Object,default:()=>({})}},setup(e){const t=g(),r=V(),o=K(),n=f(),a=d(!1),c=d(!1),s=h(()=>{const{locales:u={},...b}=e.options;return{...t.value,...b,...u[n.value]}}),p=async()=>{if(__VUEPRESS_SSR__)return;const{default:u}=await import("@docsearch/js");u({...r,...s.value,container:`#${e.containerId}`,indices:M(s.value,o.value)}),a.value=!0},S=()=>{c.value||a.value||(c.value=!0,p(),C(),R(n,p))};return x(s,S),I(()=>{X(s.value.appId)}),()=>[v("div",{id:e.containerId,style:{display:a.value?"block":"none"}}),a.value?null:v("div",{onClick:S,innerHTML:N(s.value.translations?.button)})]}});export{z as DocSearch,j as defineDocSearchConfig,q as injectDocSearchConfig,g as useDocSearchOptions};
//# sourceMappingURL=index.js.map