@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) • 10.9 kB
JavaScript
import{a as oe}from"./chunk-RYAII766.mjs";import*as t from"react";import{composeRefs as V}from"@radix-ui/react-compose-refs";import*as I from"@radix-ui/react-dialog";import{useId as A}from"@radix-ui/react-id";import{Primitive as x}from"@radix-ui/react-primitive";var _='[cmdk-group=""]',ie='[cmdk-group-items=""]',Se='[cmdk-group-heading=""]',le='[cmdk-item=""]',ae=`${le}:not([aria-disabled="true"])`,J="cmdk-item-select",M="data-value",se="invalid_key",he=(n,o,r)=>oe(n,o,r),Ee={label:"",value:()=>{},filter:()=>!1,item:()=>()=>{},group:()=>()=>{},getDisablePointerSelection:()=>!1,inputId:"",labelId:"",listId:"",listInnerRef:{current:null}},ye={subscribe:()=>()=>{},snapshot:()=>({}),setState:()=>{},emit:()=>{}},Ce={id:""},ce=t.createContext(Ee),ue=t.createContext(ye),de=t.createContext(Ce),G=()=>t.useContext(ce),X=()=>t.useContext(ue),me=t.forwardRef((n,o)=>{let r=T(()=>({search:"",value:n.value??n.defaultValue??"",selectedItemId:void 0,filtered:{count:0,items:new Map,groups:new Set}})),c=T(()=>new Set),s=T(()=>new Map),u=T(()=>new Map),d=T(()=>new Set),p=fe(n),{id:m,label:v,noLabel:E=!1,children:y,value:g,onValueChange:S,filter:H,shouldFilter:ve,loop:ge,disablePointerSelection:be=!1,vimBindings:B=!0,...F}=n,b=A(),Re=A(),Y=A(),D=t.useRef(null),P=He();w(()=>{if(g!==void 0){let e=g.trim();r.current.value=e,R.emit()}},[g]),w(()=>{P(6,Z)},[]);let R=t.useMemo(()=>({subscribe:e=>(d.current.add(e),()=>d.current.delete(e)),snapshot:()=>r.current,setState:(e,l,i)=>{let a=l??"";if(!Object.is(r.current[e],a)){if(r.current[e]=a,e==="search")W(),q(),P(1,U);else if(e==="value"){if(document.activeElement?.hasAttribute("cmdk-input")||document.activeElement?.hasAttribute("cmdk-root")){let f=document.getElementById(m??Y);f?f.focus():document.getElementById(b)?.focus()}if(P(7,()=>{r.current.selectedItemId=k()?.id,R.emit()}),i||P(5,Z),p.current?.value!==void 0){let f=a;p.current.onValueChange?.(f);return}}R.emit()}},emit:()=>{d.current.forEach(e=>e())}}),[]),j=t.useMemo(()=>({value:(e,l,i)=>{l&&l!==u.current.get(e)?.value&&(u.current.set(e,{value:l,keywords:i}),r.current.filtered.items.set(e,Q(l,i)),P(2,()=>{q(),R.emit()}))},item:(e,l)=>(c.current.add(e),l&&(s.current.has(l)?s.current.get(l)?.add(e):s.current.set(l,new Set([e]))),P(3,()=>{W(),q(),r.current.value||U(),R.emit()}),()=>{u.current.delete(e),c.current.delete(e),r.current.filtered.items.delete(e);let i=k();P(4,()=>{W(),i?.getAttribute("id")===e&&U(),R.emit()})}),group:e=>(s.current.has(e)||s.current.set(e,new Set),()=>{u.current.delete(e),s.current.delete(e)}),filter:()=>p.current.shouldFilter??!1,label:v??n["aria-label"]??"",getDisablePointerSelection:()=>p.current.disablePointerSelection??!1,listId:b,inputId:m??Y,labelId:Re,listInnerRef:D}),[]);function Q(e,l){let i=p.current?.filter??he;return e?i(e,r.current.search,l):0}function q(){if(!r.current.search||p.current.shouldFilter===!1)return;let e=r.current.filtered.items,l=[];r.current.filtered.groups.forEach(a=>{let f=s.current.get(a),h=0;f?.forEach(L=>{let K=e.get(L)??0;h=Math.max(K,h)}),l.push([a,h])});let i=D.current;O().sort((a,f)=>{let h=a.getAttribute("id"),L=f.getAttribute("id");return(e.get(L??se)??0)-(e.get(h??se)??0)}).forEach(a=>{let f=a.closest(ie);function h(L){let K=a.parentElement===L?a:a.closest(`${ie} > *`);K&&L?.appendChild(K)}h(f||i)}),l.sort((a,f)=>f[1]-a[1]).forEach(a=>{let f=D.current?.querySelector(`${_}[${M}="${encodeURIComponent(a[0])}"]`);f?.parentElement?.appendChild(f)})}function U(){let e=O().find(l=>l.getAttribute("aria-disabled")!=="true");R.setState("value",e?.getAttribute(M))}function W(){if(!r.current.search||p.current.shouldFilter===!1){r.current.filtered.count=c.current.size;return}r.current.filtered.groups=new Set;let e=0;for(let l of c.current){let i=u.current.get(l)?.value??"",a=u.current.get(l)?.keywords??[],f=Q(i,a);r.current.filtered.items.set(l,f),f>0&&e++}for(let[l,i]of s.current)for(let a of i)if((r.current.filtered.items.get(a)??0)>0){r.current.filtered.groups.add(l);break}r.current.filtered.count=e}function Z(){let e=k();e&&(e.parentElement?.firstChild===e&&e.closest(_)?.querySelector(Se)?.scrollIntoView({block:"nearest"}),e.scrollIntoView({block:"nearest"}))}function k(){return D.current?.querySelector(`${le}[aria-selected="true"]`)??null}function O(){return Array.from(D.current?D.current.querySelectorAll(ae):[])}function $(e){let i=O()[e];i&&R.setState("value",i.getAttribute(M))}function z(e){let l=k(),i=O(),a=i.findIndex(h=>h===l),f=i[a+e];p.current?.loop&&(f=a+e<0?i[i.length-1]:a+e===i.length?i[0]:i[a+e]),f&&R.setState("value",f.getAttribute(M))}function ee(e){let i=k()?.closest(_)??null,a=null;for(;i&&!a;)i=e>0?Te(i,_):Ae(i,_),a=i&&i.querySelector(ae);a?R.setState("value",a.getAttribute(M)):z(e)}let te=()=>$(O().length-1),ne=e=>{e.preventDefault(),e.metaKey?te():e.altKey?ee(1):z(1)},re=e=>{e.preventDefault(),e.metaKey?$(0):e.altKey?ee(-1):z(-1)};return t.createElement(x.div,{ref:o,tabIndex:-1,...F,"cmdk-root":"",onKeyDown:e=>{F.onKeyDown?.(e);let l=e.nativeEvent.isComposing||e.keyCode===229;if(!(e.defaultPrevented||l))switch(e.key){case"n":case"j":{B&&e.ctrlKey&&ne(e);break}case"ArrowDown":{ne(e);break}case"p":case"k":{B&&e.ctrlKey&&re(e);break}case"ArrowUp":{re(e);break}case"Home":{e.preventDefault(),$(0);break}case"End":{e.preventDefault(),te();break}case"Enter":{e.preventDefault();let i=k();if(i){let a=new Event(J);i.dispatchEvent(a)}}}}},!E&&t.createElement("label",{"cmdk-label":"",htmlFor:j.inputId,id:j.labelId,style:_e},v),N(n,e=>t.createElement(ue.Provider,{value:R},t.createElement(ce.Provider,{value:j},e))))}),Ie=t.forwardRef((n,o)=>{let r=A(),c=t.useRef(null),s=t.useContext(de),u=G(),d=fe(n),p=d.current?.forceMount??s?.forceMount;w(()=>{if(!p)return u.item(r,s?.id)},[p]);let m=pe(r,c,[n.value,n.children,c],n.keywords),v=X(),E=C(b=>b.value&&b.value===m.current),y=C(b=>p||u.filter()===!1?!0:b.search?b.filtered.items.get(r)??!1:!0);t.useEffect(()=>{let b=c.current;if(!(!b||n.disabled))return b.addEventListener(J,g),()=>b.removeEventListener(J,g)},[y,n.onSelect,n.disabled]);function g(){S(),m.current&&d.current.onSelect?.(m.current)}function S(){v.setState("value",m.current,!0)}if(!y)return null;let{disabled:H,value:ve,onSelect:ge,forceMount:be,keywords:B,...F}=n;return t.createElement(x.div,{ref:V(c,o),...F,id:r,"cmdk-item":"",role:"option","aria-disabled":!!H,"aria-selected":!!E,"data-disabled":!!H,"data-selected":!!E,onPointerMove:H||u.getDisablePointerSelection()?void 0:S,onClick:H?void 0:g},n.children)}),xe=t.forwardRef((n,o)=>{let{heading:r,children:c,forceMount:s,...u}=n,d=A(),p=t.useRef(null),m=t.useRef(null),v=A(),E=G(),y=C(S=>s||E.filter()===!1?!0:S.search?S.filtered.groups.has(d):!0);w(()=>E.group(d),[]),pe(d,p,[n.value,n.heading,m]);let g=t.useMemo(()=>({id:d,forceMount:s}),[s]);return t.createElement(x.div,{ref:V(p,o),...u,"cmdk-group":"",role:"presentation",hidden:y?void 0:!0},r&&t.createElement("div",{ref:m,"cmdk-group-heading":"","aria-hidden":!0,id:v},r),N(n,S=>t.createElement("div",{"cmdk-group-items":"",role:"group","aria-labelledby":r?v:void 0},t.createElement(de.Provider,{value:g},S))))}),Pe=t.forwardRef((n,o)=>{let{alwaysRender:r,...c}=n,s=t.useRef(null),u=C(d=>!d.search);return!r&&!u?null:t.createElement(x.div,{ref:V(s,o),...c,"cmdk-separator":"",role:"separator"})}),we=t.forwardRef((n,o)=>{let{onValueChange:r,...c}=n,s=n.value!=null,u=X(),d=C(v=>v.search),p=C(v=>v.selectedItemId),m=G();return t.useEffect(()=>{n.value!=null&&u.setState("search",n.value)},[n.value]),t.createElement(x.input,{ref:o,...c,"cmdk-input":"",autoComplete:"off",autoCorrect:"off",spellCheck:!1,"aria-autocomplete":"list",role:"combobox","aria-expanded":!0,"aria-controls":m.listId,"aria-labelledby":m.labelId,"aria-activedescendant":p,id:m.inputId,type:"text",value:s?n.value:d,onChange:v=>{s||u.setState("search",v.target.value),r?.(v.target.value)}})}),De=t.forwardRef((n,o)=>{let{children:r,label:c="Suggestions",...s}=n,u=t.useRef(null),d=t.useRef(null),p=C(v=>v.selectedItemId),m=G();return t.useEffect(()=>{if(d.current&&u.current){let v=d.current,E=u.current,y=0,g=new ResizeObserver(()=>{y=requestAnimationFrame(()=>{let S=v.offsetHeight;E.style.setProperty("--cmdk-list-height",S.toFixed(1)+"px")})});return g.observe(v),()=>{cancelAnimationFrame(y),g.unobserve(v)}}},[]),t.createElement(x.div,{ref:V(u,o),...s,"cmdk-list":"",role:"listbox",tabIndex:-1,"aria-activedescendant":p,"aria-label":c,id:m.listId},N(n,v=>t.createElement("div",{ref:V(d,m.listInnerRef),"cmdk-list-sizer":""},v)))}),ke=t.forwardRef((n,o)=>{let{open:r,onOpenChange:c,overlayClassName:s,contentClassName:u,container:d,...p}=n;return t.createElement(I.Root,{open:r,onOpenChange:c},t.createElement(I.Portal,{container:d},t.createElement(I.Overlay,{"cmdk-overlay":"",className:s}),t.createElement(I.Content,{"aria-label":n.label,"cmdk-dialog":"",className:u},t.createElement(me,{ref:o,...p}))))}),Le=t.forwardRef((n,o)=>C(c=>c.filtered.count===0)?t.createElement(x.div,{ref:o,...n,"cmdk-empty":"",role:"presentation"}):null),Me=t.forwardRef((n,o)=>{let{progress:r,children:c,label:s="Loading...",...u}=n;return t.createElement(x.div,{ref:o,...u,"cmdk-loading":"",role:"progressbar","aria-valuenow":r,"aria-valuemin":0,"aria-valuemax":100,"aria-label":s},N(n,d=>t.createElement("div",{"aria-hidden":!0},d)))}),Ne=Object.assign(me,{List:De,Item:Ie,Input:we,Group:xe,Separator:Pe,Dialog:ke,Empty:Le,Loading:Me});function Te(n,o){let r=n.nextElementSibling;for(;r;){if(r.matches(o))return r;r=r.nextElementSibling}return null}function Ae(n,o){let r=n.previousElementSibling;for(;r;){if(r.matches(o))return r;r=r.previousElementSibling}return null}function fe(n){let o=t.useRef(n);return w(()=>{o.current=n}),o}var w=typeof window>"u"?t.useEffect:t.useLayoutEffect;function T(n){let o=t.useRef(void 0);return o.current===void 0&&(o.current=n()),o}function C(n){let o=X(),r=()=>n(o.snapshot());return t.useSyncExternalStore(o.subscribe,r,r)}function pe(n,o,r,c=[]){let s=t.useRef(void 0),u=G();return w(()=>{let d=(()=>{for(let m of r){if(typeof m=="string")return m.trim();if(m&&typeof m=="object"&&"current"in m)return m.current?m.current.textContent?.trim():s.current}})(),p=c.map(m=>m.trim());u.value(n,d,p),o.current?.setAttribute(M,d??""),s.current=d}),s}var He=()=>{let[n,o]=t.useState(),r=T(()=>new Map);return w(()=>{r.current.forEach(c=>c()),r.current=new Map},[n]),(c,s)=>{r.current.set(c,s),o({})}};function Oe(n){let o=n.type;return typeof o=="function"?o(n.props):"render"in o?o.render(n.props):n}function N({asChild:n,children:o},r){return n&&t.isValidElement(o)?t.cloneElement(Oe(o),{ref:o.ref},r(o.props.children)):r(o)}var _e={position:"absolute",width:"1px",height:"1px",padding:"0",margin:"-1px",overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",borderWidth:"0"};export{he as a,me as b,Ie as c,xe as d,Pe as e,we as f,De as g,ke as h,Le as i,Me as j,Ne as k,C as l};