@onedevcompany/cmdk
Version:
> **Note** > > This is a fork of amazing [cmdk](https://github.com/pacocoursey/cmdk). In their repository, I saw some issues, PRs and discussions not answered in a while, so I decided to fork because I needed some extra features.
2 lines (1 loc) • 12.9 kB
JavaScript
;var He=Object.create;var K=Object.defineProperty;var Ge=Object.getOwnPropertyDescriptor;var Ve=Object.getOwnPropertyNames;var Fe=Object.getPrototypeOf,Ke=Object.prototype.hasOwnProperty;var Be=(e,o)=>{for(var t in o)K(e,t,{get:o[t],enumerable:!0})},le=(e,o,t,i)=>{if(o&&typeof o=="object"||typeof o=="function")for(let a of Ve(o))!Ke.call(e,a)&&a!==t&&K(e,a,{get:()=>o[a],enumerable:!(i=Ge(o,a))||i.enumerable});return e};var ue=(e,o,t)=>(t=e!=null?He(Fe(e)):{},le(o||!e||!e.__esModule?K(t,"default",{value:e,enumerable:!0}):t,e)),Ue=e=>le(K({},"__esModule",{value:!0}),e);var ct={};Be(ct,{Command:()=>nt,CommandDialog:()=>De,CommandEmpty:()=>Me,CommandGroup:()=>Pe,CommandInput:()=>Te,CommandItem:()=>ye,CommandList:()=>xe,CommandLoading:()=>Le,CommandRoot:()=>te,CommandSeparator:()=>Ie,defaultFilter:()=>he,useCommandState:()=>P});module.exports=Ue(ct);var r=ue(require("react")),O=require("@radix-ui/react-compose-refs"),T=ue(require("@radix-ui/react-dialog")),D=require("@radix-ui/react-id"),I=require("@radix-ui/react-primitive");var de=1,je=.9,$e=.8,We=.17,J=.1,z=.999,qe=.9999;var Xe=.99,Ye=/[\\\/_+.#"@\[\(\{&]/,Je=/[\\\/_+.#"@\[\(\{&]/g,ze=/[\s-]/,me=/[\s-]/g;function Q(e,o,t,i,a,s,u){if(s===o.length)return a===e.length?de:Xe;var p=`${a},${s}`;if(u[p]!==void 0)return u[p];for(var f=i.charAt(s),c=t.indexOf(f,a),E=0,g,R,h,y;c>=0;)g=Q(e,o,t,i,c+1,s+1,u),g>E&&(c===a?g*=de:Ye.test(e.charAt(c-1))?(g*=$e,h=e.slice(a,c-1).match(Je),h&&a>0&&(g*=Math.pow(z,h.length))):ze.test(e.charAt(c-1))?(g*=je,y=e.slice(a,c-1).match(me),y&&a>0&&(g*=Math.pow(z,y.length))):(g*=We,a>0&&(g*=Math.pow(z,c-a))),e.charAt(c)!==o.charAt(s)&&(g*=qe)),(g<J&&t.charAt(c-1)===i.charAt(s+1)||i.charAt(s+1)===i.charAt(s)&&t.charAt(c-1)!==i.charAt(s))&&(R=Q(e,o,t,i,c+1,s+2,u),R*J>g&&(g=R*J)),g>E&&(E=g),c=t.indexOf(f,c+1);return u[p]=E,E}function fe(e){return e.toLowerCase().replace(me," ")}function pe(e,o,t){return e=t&&t.length>0?`${e+" "+t.join(" ")}`:e,Q(e,o,fe(e),fe(o),0,0,{})}var H='[cmdk-group=""]',ge='[cmdk-group-items=""]',Qe='[cmdk-group-heading=""]',Ee='[cmdk-item=""]',ve=`${Ee}:not([aria-disabled="true"])`,Z="cmdk-item-select",k="data-value",Re="invalid_key",he=(e,o,t)=>pe(e,o,t),Ze={label:"",value:()=>{},filter:()=>!1,item:()=>()=>{},group:()=>()=>{},getDisablePointerSelection:()=>!1,inputId:"",labelId:"",listId:"",listInnerRef:{current:null}},et={subscribe:()=>()=>{},snapshot:()=>({}),setState:()=>{},emit:()=>{}},tt={id:""},Se=r.createContext(Ze),Ce=r.createContext(et),be=r.createContext(tt),G=()=>r.useContext(Se),ee=()=>r.useContext(Ce),te=r.forwardRef((e,o)=>{let t=A(()=>({search:"",value:e.value??e.defaultValue??"",selectedItemId:void 0,filtered:{count:0,items:new Map,groups:new Set}})),i=A(()=>new Set),a=A(()=>new Map),s=A(()=>new Map),u=A(()=>new Set),p=we(e),{id:f,label:c,noLabel:E=!1,children:g,value:R,onValueChange:h,filter:y,shouldFilter:ke,loop:Ae,disablePointerSelection:Oe=!1,vimBindings:U=!0,...V}=e,S=(0,D.useId)(),Ne=(0,D.useId)(),ne=(0,D.useId)(),L=r.useRef(null),x=at();M(()=>{if(R!==void 0){let n=R.trim();t.current.value=n,C.emit()}},[R]),M(()=>{x(6,oe)},[]);let C=r.useMemo(()=>({subscribe:n=>(u.current.add(n),()=>u.current.delete(n)),snapshot:()=>t.current,setState:(n,m,l)=>{let d=m??"";if(!Object.is(t.current[n],d)){if(t.current[n]=d,n==="search")q(),$(),x(1,W);else if(n==="value"){if(document.activeElement?.hasAttribute("cmdk-input")||document.activeElement?.hasAttribute("cmdk-root")){let v=document.getElementById(f??ne);v?v.focus():document.getElementById(S)?.focus()}if(x(7,()=>{t.current.selectedItemId=w()?.id,C.emit()}),l||x(5,oe),p.current?.value!==void 0){let v=d;p.current.onValueChange?.(v);return}}C.emit()}},emit:()=>{u.current.forEach(n=>n())}}),[]),j=r.useMemo(()=>({value:(n,m,l)=>{m&&m!==s.current.get(n)?.value&&(s.current.set(n,{value:m,keywords:l}),t.current.filtered.items.set(n,re(m,l)),x(2,()=>{$(),C.emit()}))},item:(n,m)=>(i.current.add(n),m&&(a.current.has(m)?a.current.get(m)?.add(n):a.current.set(m,new Set([n]))),x(3,()=>{q(),$(),t.current.value||W(),C.emit()}),()=>{s.current.delete(n),i.current.delete(n),t.current.filtered.items.delete(n);let l=w();x(4,()=>{q(),l?.getAttribute("id")===n&&W(),C.emit()})}),group:n=>(a.current.has(n)||a.current.set(n,new Set),()=>{s.current.delete(n),a.current.delete(n)}),filter:()=>p.current.shouldFilter??!1,label:c??e["aria-label"]??"",getDisablePointerSelection:()=>p.current.disablePointerSelection??!1,listId:S,inputId:f??ne,labelId:Ne,listInnerRef:L}),[]);function re(n,m){let l=p.current?.filter??he;return n?l(n,t.current.search,m):0}function $(){if(!t.current.search||p.current.shouldFilter===!1)return;let n=t.current.filtered.items,m=[];t.current.filtered.groups.forEach(d=>{let v=a.current.get(d),b=0;v?.forEach(_=>{let F=n.get(_)??0;b=Math.max(F,b)}),m.push([d,b])});let l=L.current;N().sort((d,v)=>{let b=d.getAttribute("id"),_=v.getAttribute("id");return(n.get(_??Re)??0)-(n.get(b??Re)??0)}).forEach(d=>{let v=d.closest(ge);function b(_){let F=d.parentElement===_?d:d.closest(`${ge} > *`);F&&_?.appendChild(F)}b(v||l)}),m.sort((d,v)=>v[1]-d[1]).forEach(d=>{let v=L.current?.querySelector(`${H}[${k}="${encodeURIComponent(d[0])}"]`);v?.parentElement?.appendChild(v)})}function W(){let n=N().find(m=>m.getAttribute("aria-disabled")!=="true");C.setState("value",n?.getAttribute(k))}function q(){if(!t.current.search||p.current.shouldFilter===!1){t.current.filtered.count=i.current.size;return}t.current.filtered.groups=new Set;let n=0;for(let m of i.current){let l=s.current.get(m)?.value??"",d=s.current.get(m)?.keywords??[],v=re(l,d);t.current.filtered.items.set(m,v),v>0&&n++}for(let[m,l]of a.current)for(let d of l)if((t.current.filtered.items.get(d)??0)>0){t.current.filtered.groups.add(m);break}t.current.filtered.count=n}function oe(){let n=w();n&&(n.parentElement?.firstChild===n&&n.closest(H)?.querySelector(Qe)?.scrollIntoView({block:"nearest"}),n.scrollIntoView({block:"nearest"}))}function w(){return L.current?.querySelector(`${Ee}[aria-selected="true"]`)??null}function N(){return Array.from(L.current?L.current.querySelectorAll(ve):[])}function X(n){let l=N()[n];l&&C.setState("value",l.getAttribute(k))}function Y(n){let m=w(),l=N(),d=l.findIndex(b=>b===m),v=l[d+n];p.current?.loop&&(v=d+n<0?l[l.length-1]:d+n===l.length?l[0]:l[d+n]),v&&C.setState("value",v.getAttribute(k))}function ae(n){let l=w()?.closest(H)??null,d=null;for(;l&&!d;)l=n>0?rt(l,H):ot(l,H),d=l&&l.querySelector(ve);d?C.setState("value",d.getAttribute(k)):Y(n)}let ie=()=>X(N().length-1),se=n=>{n.preventDefault(),n.metaKey?ie():n.altKey?ae(1):Y(1)},ce=n=>{n.preventDefault(),n.metaKey?X(0):n.altKey?ae(-1):Y(-1)};return r.createElement(I.Primitive.div,{ref:o,tabIndex:-1,...V,"cmdk-root":"",onKeyDown:n=>{V.onKeyDown?.(n);let m=n.nativeEvent.isComposing||n.keyCode===229;if(!(n.defaultPrevented||m))switch(n.key){case"n":case"j":{U&&n.ctrlKey&&se(n);break}case"ArrowDown":{se(n);break}case"p":case"k":{U&&n.ctrlKey&&ce(n);break}case"ArrowUp":{ce(n);break}case"Home":{n.preventDefault(),X(0);break}case"End":{n.preventDefault(),ie();break}case"Enter":{n.preventDefault();let l=w();if(l){let d=new Event(Z);l.dispatchEvent(d)}}}}},!E&&r.createElement("label",{"cmdk-label":"",htmlFor:j.inputId,id:j.labelId,style:st},c),B(e,n=>r.createElement(Ce.Provider,{value:C},r.createElement(Se.Provider,{value:j},n))))}),ye=r.forwardRef((e,o)=>{let t=(0,D.useId)(),i=r.useRef(null),a=r.useContext(be),s=G(),u=we(e),p=u.current?.forceMount??a?.forceMount;M(()=>{if(!p)return s.item(t,a?.id)},[p]);let f=_e(t,i,[e.value,e.children,i],e.keywords),c=ee(),E=P(S=>S.value&&S.value===f.current),g=P(S=>p||s.filter()===!1?!0:S.search?S.filtered.items.get(t)??!1:!0);r.useEffect(()=>{let S=i.current;if(!(!S||e.disabled))return S.addEventListener(Z,R),()=>S.removeEventListener(Z,R)},[g,e.onSelect,e.disabled]);function R(){h(),f.current&&u.current.onSelect?.(f.current)}function h(){c.setState("value",f.current,!0)}if(!g)return null;let{disabled:y,value:ke,onSelect:Ae,forceMount:Oe,keywords:U,...V}=e;return r.createElement(I.Primitive.div,{ref:(0,O.composeRefs)(i,o),...V,id:t,"cmdk-item":"",role:"option","aria-disabled":!!y,"aria-selected":!!E,"data-disabled":!!y,"data-selected":!!E,onPointerMove:y||s.getDisablePointerSelection()?void 0:h,onClick:y?void 0:R},e.children)}),Pe=r.forwardRef((e,o)=>{let{heading:t,children:i,forceMount:a,...s}=e,u=(0,D.useId)(),p=r.useRef(null),f=r.useRef(null),c=(0,D.useId)(),E=G(),g=P(h=>a||E.filter()===!1?!0:h.search?h.filtered.groups.has(u):!0);M(()=>E.group(u),[]),_e(u,p,[e.value,e.heading,f]);let R=r.useMemo(()=>({id:u,forceMount:a}),[a]);return r.createElement(I.Primitive.div,{ref:(0,O.composeRefs)(p,o),...s,"cmdk-group":"",role:"presentation",hidden:g?void 0:!0},t&&r.createElement("div",{ref:f,"cmdk-group-heading":"","aria-hidden":!0,id:c},t),B(e,h=>r.createElement("div",{"cmdk-group-items":"",role:"group","aria-labelledby":t?c:void 0},r.createElement(be.Provider,{value:R},h))))}),Ie=r.forwardRef((e,o)=>{let{alwaysRender:t,...i}=e,a=r.useRef(null),s=P(u=>!u.search);return!t&&!s?null:r.createElement(I.Primitive.div,{ref:(0,O.composeRefs)(a,o),...i,"cmdk-separator":"",role:"separator"})}),Te=r.forwardRef((e,o)=>{let{onValueChange:t,...i}=e,a=e.value!=null,s=ee(),u=P(c=>c.search),p=P(c=>c.selectedItemId),f=G();return r.useEffect(()=>{e.value!=null&&s.setState("search",e.value)},[e.value]),r.createElement(I.Primitive.input,{ref:o,...i,"cmdk-input":"",autoComplete:"off",autoCorrect:"off",spellCheck:!1,"aria-autocomplete":"list",role:"combobox","aria-expanded":!0,"aria-controls":f.listId,"aria-labelledby":f.labelId,"aria-activedescendant":p,id:f.inputId,type:"text",value:a?e.value:u,onChange:c=>{a||s.setState("search",c.target.value),t?.(c.target.value)}})}),xe=r.forwardRef((e,o)=>{let{children:t,label:i="Suggestions",...a}=e,s=r.useRef(null),u=r.useRef(null),p=P(c=>c.selectedItemId),f=G();return r.useEffect(()=>{if(u.current&&s.current){let c=u.current,E=s.current,g=0,R=new ResizeObserver(()=>{g=requestAnimationFrame(()=>{let h=c.offsetHeight;E.style.setProperty("--cmdk-list-height",h.toFixed(1)+"px")})});return R.observe(c),()=>{cancelAnimationFrame(g),R.unobserve(c)}}},[]),r.createElement(I.Primitive.div,{ref:(0,O.composeRefs)(s,o),...a,"cmdk-list":"",role:"listbox",tabIndex:-1,"aria-activedescendant":p,"aria-label":i,id:f.listId},B(e,c=>r.createElement("div",{ref:(0,O.composeRefs)(u,f.listInnerRef),"cmdk-list-sizer":""},c)))}),De=r.forwardRef((e,o)=>{let{open:t,onOpenChange:i,overlayClassName:a,contentClassName:s,container:u,...p}=e;return r.createElement(T.Root,{open:t,onOpenChange:i},r.createElement(T.Portal,{container:u},r.createElement(T.Overlay,{"cmdk-overlay":"",className:a}),r.createElement(T.Content,{"aria-label":e.label,"cmdk-dialog":"",className:s},r.createElement(te,{ref:o,...p}))))}),Me=r.forwardRef((e,o)=>P(i=>i.filtered.count===0)?r.createElement(I.Primitive.div,{ref:o,...e,"cmdk-empty":"",role:"presentation"}):null),Le=r.forwardRef((e,o)=>{let{progress:t,children:i,label:a="Loading...",...s}=e;return r.createElement(I.Primitive.div,{ref:o,...s,"cmdk-loading":"",role:"progressbar","aria-valuenow":t,"aria-valuemin":0,"aria-valuemax":100,"aria-label":a},B(e,u=>r.createElement("div",{"aria-hidden":!0},u)))}),nt=Object.assign(te,{List:xe,Item:ye,Input:Te,Group:Pe,Separator:Ie,Dialog:De,Empty:Me,Loading:Le});function rt(e,o){let t=e.nextElementSibling;for(;t;){if(t.matches(o))return t;t=t.nextElementSibling}return null}function ot(e,o){let t=e.previousElementSibling;for(;t;){if(t.matches(o))return t;t=t.previousElementSibling}return null}function we(e){let o=r.useRef(e);return M(()=>{o.current=e}),o}var M=typeof window>"u"?r.useEffect:r.useLayoutEffect;function A(e){let o=r.useRef(void 0);return o.current===void 0&&(o.current=e()),o}function P(e){let o=ee(),t=()=>e(o.snapshot());return r.useSyncExternalStore(o.subscribe,t,t)}function _e(e,o,t,i=[]){let a=r.useRef(void 0),s=G();return M(()=>{let u=(()=>{for(let f of t){if(typeof f=="string")return f.trim();if(f&&typeof f=="object"&&"current"in f)return f.current?f.current.textContent?.trim():a.current}})(),p=i.map(f=>f.trim());s.value(e,u,p),o.current?.setAttribute(k,u??""),a.current=u}),a}var at=()=>{let[e,o]=r.useState(),t=A(()=>new Map);return M(()=>{t.current.forEach(i=>i()),t.current=new Map},[e]),(i,a)=>{t.current.set(i,a),o({})}};function it(e){let o=e.type;return typeof o=="function"?o(e.props):"render"in o?o.render(e.props):e}function B({asChild:e,children:o},t){return e&&r.isValidElement(o)?r.cloneElement(it(o),{ref:o.ref},t(o.props.children)):t(o)}var st={position:"absolute",width:"1px",height:"1px",padding:"0",margin:"-1px",overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",borderWidth:"0"};0&&(module.exports={Command,CommandDialog,CommandEmpty,CommandGroup,CommandInput,CommandItem,CommandList,CommandLoading,CommandRoot,CommandSeparator,defaultFilter,useCommandState});