vue-command-kit 0.1.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +87 -292
- package/dist/__tests__/CommandDialog.test.d.ts +1 -0
- package/dist/__tests__/CommandInput.test.d.ts +1 -0
- package/dist/__tests__/CommandItem.test.d.ts +1 -0
- package/dist/__tests__/CommandList.test.d.ts +1 -0
- package/dist/__tests__/highlight.test.d.ts +1 -0
- package/dist/__tests__/injectStrict.test.d.ts +1 -0
- package/dist/__tests__/parseShortcut.test.d.ts +1 -0
- package/dist/__tests__/useCommandMenu.test.d.ts +1 -0
- package/dist/__tests__/useCommandRoot.test.d.ts +1 -0
- package/dist/types.d.ts +13 -0
- package/dist/useCommandMenu.d.ts +10 -1
- package/dist/useCommandRoot.d.ts +3 -0
- package/dist/utils/highlight.d.ts +9 -0
- package/dist/utils/shortcut.d.ts +12 -0
- package/dist/vue-cmdk.js +415 -339
- package/dist/vue-cmdk.umd.cjs +1 -1
- package/package.json +28 -1
package/dist/vue-cmdk.umd.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(f,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue")):typeof define=="function"&&define.amd?define(["exports","vue"],e):(f=typeof globalThis<"u"?globalThis:f||self,e(f.VueCmdk={},f.Vue))})(this,(function(f,e){"use strict";const P={"⌘":"metaKey","⌃":"ctrlKey","⌥":"altKey","⇧":"shiftKey"},R=/^([⌘⌃⌥⇧]+)(.+)$/;function j(o){if(!o)return null;const t=R.exec(o);if(!t)return{key:o.toLowerCase()};const[,n,s]=t,r={};for(const a of n){const m=P[a];m&&(r[m]=!0)}return{...r,key:s.toLowerCase()}}function G(o,t){return t?o.key.toLowerCase()===t.key&&!!o.metaKey==!!t.metaKey&&!!o.ctrlKey==!!t.ctrlKey&&!!o.altKey==!!t.altKey&&!!o.shiftKey==!!t.shiftKey:!1}function L(o,t){const n=e.ref(!1),s=e.ref(""),r=e.ref(0),a=e.ref([]),m=()=>{n.value=!n.value},c=()=>{n.value=!0,r.value=0},l=()=>{n.value=!1,s.value=""};function d(i,p){if(!p.trim())return i;const u=p.toLowerCase();return i.filter(y=>{var g,A;return!!(y.value.toLowerCase().includes(u)||(g=y.label)!=null&&g.toLowerCase().includes(u)||(A=y.keywords)!=null&&A.some(he=>he.toLowerCase().includes(u)))})}function h(i){const p=new Map;for(const y of i){const g=y.group||"__ungrouped__";p.has(g)||p.set(g,[]),p.get(g).push(y)}const u=[];p.has("__ungrouped__")&&(u.push({heading:"",items:p.get("__ungrouped__")}),p.delete("__ungrouped__"));for(const[y,g]of p)u.push({heading:y,items:g});return u}const k=e.computed(()=>{if(o){const i=o(a.value,s.value);if(i!==null)return i}return d(a.value,s.value)}),B=e.computed(()=>h(k.value));function ue(){const i=k.value.length;i!==0&&(r.value=(r.value+1)%i)}function fe(){const i=k.value.length;i!==0&&(r.value=(r.value-1+i)%i)}function pe(){var p;const i=k.value[r.value];i&&!i.disabled&&((p=i.onSelect)==null||p.call(i,i),l())}function F(i){var p;for(const u of a.value){if(u.disabled||!u.shortcut)continue;const y=j(u.shortcut);if(G(i,y)){i.preventDefault(),i.stopPropagation(),(p=u.onSelect)==null||p.call(u,u),t==null||t(u),l();return}}}let _=null;return e.watch(a,i=>{_&&(_(),_=null),i.some(u=>u.shortcut)&&typeof window<"u"&&(window.addEventListener("keydown",F),_=()=>window.removeEventListener("keydown",F))},{immediate:!0,flush:"post"}),e.onUnmounted(()=>{_&&_()}),{visible:n,searchQuery:s,activeIndex:r,items:a,toggle:m,open:c,close:l,defaultFilter:d,groupItems:h,filteredItems:k,groupedItems:B,selectNext:ue,selectPrev:fe,selectCurrent:pe}}const C=Symbol("cmdk-state"),M=Symbol("cmdk-loading"),x=Symbol("cmdk-close-on-select"),S=Symbol("cmdk-select-handler"),Q=Symbol("cmdk-item-index-map");function T(o,t,n){const{filter:s,loading:r=!1,closeOnSelect:a=!0}=o,m=L(s,d=>{t("select",d),a&&m.close()});e.provide(C,m),e.provide(M,()=>r),e.provide(x,()=>a),e.provide(S,d=>{t("select",d),a&&m.close()});const c=e.computed(()=>{const d=new Map;return m.filteredItems.value.forEach((h,k)=>d.set(h.value,k)),d});e.provide(Q,()=>c.value);function l(d){t("select",d),a&&m.close()}return{state:m,handleSelect:l}}const q={"data-cmdk-root":"",role:"combobox","aria-expanded":"true","aria-haspopup":"listbox"},K=e.defineComponent({__name:"CommandMenu",props:{visible:{type:Boolean},searchQuery:{},placeholder:{default:"Type a command or search..."},filter:{},autoFocus:{type:Boolean,default:!0},closeOnSelect:{type:Boolean,default:!0},loading:{type:Boolean}},emits:["update:visible","update:searchQuery","select"],setup(o,{expose:t,emit:n}){const s=o,r=n,{state:a,handleSelect:m}=T({filter:s.filter,loading:s.loading,closeOnSelect:s.closeOnSelect},r);return a.visible.value=s.visible??!0,a.searchQuery.value=s.searchQuery??"",e.provide("cmdk-filter",s.filter),e.watch(()=>s.visible,c=>{c!==void 0&&(a.visible.value=c)}),e.watch(a.visible,c=>r("update:visible",c)),e.watch(()=>s.searchQuery,c=>{c!==void 0&&(a.searchQuery.value=c)}),e.watch(a.searchQuery,c=>r("update:searchQuery",c)),t({open:a.open,close:a.close,toggle:a.toggle,searchQuery:a.searchQuery,items:a.items,filteredItems:a.filteredItems}),(c,l)=>(e.openBlock(),e.createElementBlock("div",q,[e.renderSlot(c.$slots,"default",{items:e.unref(a).items,filteredItems:e.unref(a).filteredItems,searchQuery:e.unref(a).searchQuery,selectNext:e.unref(a).selectNext,selectPrev:e.unref(a).selectPrev,selectCurrent:e.unref(a).selectCurrent,handleSelect:e.unref(m)})]))}});function b(o,t){const n=e.inject(o);if(!n)throw new Error(`[vue-cmdk] <${t}> must be used inside <CommandMenu> or <CommandDialog>.`);return n}const U=["value","placeholder","autofocus"],E=e.defineComponent({__name:"CommandInput",props:{placeholder:{default:"Type a command or search..."},autoFocus:{type:Boolean,default:!0}},setup(o,{expose:t}){const n=b(C,"CommandInput"),s=e.inject(S,()=>{}),r=e.ref(null);t({inputRef:r});function a(c){n.searchQuery.value=c.target.value,n.activeIndex.value=0}function m(c){var l;if(c.key==="ArrowDown")c.preventDefault(),n.selectNext();else if(c.key==="ArrowUp")c.preventDefault(),n.selectPrev();else if(c.key==="Enter"){c.preventDefault();const d=n.filteredItems.value[n.activeIndex.value];d&&!d.disabled&&((l=d.onSelect)==null||l.call(d,d),s(d))}}return(c,l)=>(e.openBlock(),e.createElementBlock("input",{ref_key:"inputRef",ref:r,"data-cmdk-input":"",value:e.unref(n).searchQuery.value,placeholder:o.placeholder,role:"searchbox",autocomplete:"off",autocorrect:"off",spellcheck:"false",autofocus:o.autoFocus,onInput:a,onKeydown:m},null,40,U))}}),z={key:0,"data-cmdk-empty":""},w=e.defineComponent({__name:"CommandEmpty",setup(o){const t=b(C,"CommandEmpty");return(n,s)=>e.unref(t).searchQuery.value&&e.unref(t).filteredItems.value.length===0?(e.openBlock(),e.createElementBlock("div",z,[e.renderSlot(n.$slots,"default",{},()=>[s[0]||(s[0]=e.createElementVNode("span",null,"No results found.",-1))])])):e.createCommentVNode("",!0)}}),H={key:0,"data-cmdk-loading":""},I=e.defineComponent({__name:"CommandLoading",props:{loading:{type:Boolean,default:!1}},setup(o){return(t,n)=>o.loading?(e.openBlock(),e.createElementBlock("div",H,[e.renderSlot(t.$slots,"default",{},()=>[n[0]||(n[0]=e.createElementVNode("span",null,"Loading...",-1))])])):e.createCommentVNode("",!0)}}),X={"data-cmdk-group":"",role:"group"},J={key:0,"data-cmdk-group-heading":"",role:"presentation"},W={"data-cmdk-group-items":"",role:"group"},N=e.defineComponent({__name:"CommandGroup",props:{heading:{}},setup(o){return(t,n)=>(e.openBlock(),e.createElementBlock("div",X,[o.heading?(e.openBlock(),e.createElementBlock("div",J,e.toDisplayString(o.heading),1)):e.createCommentVNode("",!0),e.createElementVNode("div",W,[e.renderSlot(t.$slots,"default")])]))}}),Y=["aria-selected","aria-disabled","data-value"],Z={key:0,"data-cmdk-item-icon":""},v={"data-cmdk-item-label":""},ee={key:1,"data-cmdk-item-shortcut":""},$=e.defineComponent({__name:"CommandItem",props:{value:{},label:{},keywords:{},shortcut:{},disabled:{type:Boolean,default:!1},icon:{},onSelect:{}},setup(o){const t=o,n=b(C,"CommandItem"),s=e.inject(Q,()=>new Map),r=e.computed(()=>({value:t.value,label:t.label,keywords:t.keywords,shortcut:t.shortcut,disabled:t.disabled,icon:t.icon,onSelect:t.onSelect})),a=e.computed(()=>{const d=n.filteredItems.value[n.activeIndex.value];return(d==null?void 0:d.value)===t.value}),m=e.inject(x,()=>!0),c=e.inject(S,()=>{});function l(){var d;t.disabled||((d=t.onSelect)==null||d.call(t,r.value),c(r.value),m()&&n.close())}return(d,h)=>(e.openBlock(),e.createElementBlock("div",{"data-cmdk-item":"",role:"option","aria-selected":a.value,"aria-disabled":o.disabled,"data-value":o.value,class:e.normalizeClass({active:a.value,disabled:o.disabled}),onClick:l,onPointerenter:h[0]||(h[0]=()=>{const k=e.unref(s)().get(o.value);k!==void 0&&(e.unref(n).activeIndex.value=k)})},[e.renderSlot(d.$slots,"default",{item:r.value,active:a.value},()=>[o.icon?(e.openBlock(),e.createElementBlock("span",Z,[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(o.icon)))])):e.createCommentVNode("",!0),e.createElementVNode("span",v,e.toDisplayString(o.label||o.value),1),o.shortcut?(e.openBlock(),e.createElementBlock("span",ee,e.toDisplayString(o.shortcut),1)):e.createCommentVNode("",!0)])],42,Y))}}),te=(o,t)=>{const n=o.__vccOpts||o;for(const[s,r]of t)n[s]=r;return n},oe={},ne={"data-cmdk-separator":"",role:"separator"};function ae(o,t){return e.openBlock(),e.createElementBlock("div",ne)}const D=te(oe,[["render",ae]]),le={"data-cmdk-list":"",role:"listbox"},ce={"aria-live":"polite","aria-atomic":"true",class:"sr-only"},V=e.defineComponent({__name:"CommandList",setup(o){const t=b(C,"CommandList"),n=e.inject(M,()=>!1),s=e.computed(()=>t.groupedItems.value);return(r,a)=>(e.openBlock(),e.createElementBlock("div",le,[e.createElementVNode("div",ce,[e.unref(t).searchQuery.value&&e.unref(t).filteredItems.value.length===0?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode("No results found")],64)):e.unref(n)()?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode("Loading")],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(e.unref(t).filteredItems.value.length)+" items",1)],64))]),e.createVNode(w),e.createVNode(I,{loading:e.unref(n)()},null,8,["loading"]),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.value,m=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:m.heading||"__ungrouped__"},[e.createVNode(N,{heading:m.heading},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.items,c=>(e.openBlock(),e.createBlock($,{key:c.value,value:c.value,label:c.label,shortcut:c.shortcut,disabled:c.disabled,icon:c.icon,"on-select":c.onSelect},null,8,["value","label","shortcut","disabled","icon","on-select"]))),128))]),_:2},1032,["heading"]),m!==s.value[s.value.length-1]?(e.openBlock(),e.createBlock(D,{key:0})):e.createCommentVNode("",!0)],64))),128))]))}}),re={"data-cmdk-dialog-wrapper":""},se={"data-cmdk-dialog-header":""},de={"data-cmdk-dialog-body":""},ie={key:0,"data-cmdk-dialog-footer":""},O=e.defineComponent({__name:"CommandDialog",props:{items:{default:()=>[]},visible:{type:Boolean,default:!1},searchQuery:{},placeholder:{default:"Type a command or search..."},filter:{},autoFocus:{type:Boolean,default:!0},closeOnSelect:{type:Boolean,default:!0},loading:{type:Boolean,default:!1}},emits:["update:visible","update:searchQuery","select"],setup(o,{emit:t}){const n=o,s=t,{state:r}=T({filter:n.filter,loading:n.loading,closeOnSelect:n.closeOnSelect},s),a=e.ref(null);e.watch(()=>n.items,l=>{r.items.value=l},{immediate:!0}),e.watch(()=>n.visible,l=>{r.visible.value=l},{immediate:!0}),e.watch(()=>n.searchQuery,l=>{l!==void 0&&(r.searchQuery.value=l)}),e.watch(r.searchQuery,l=>s("update:searchQuery",l)),e.watch(r.visible,async l=>{var d,h;s("update:visible",l),l&&(await e.nextTick(),(h=(d=a.value)==null?void 0:d.inputRef)==null||h.focus())});function m(l){l.target===l.currentTarget&&r.close()}function c(l){if(l.key==="Escape"&&(l.preventDefault(),r.close()),l.key==="Tab"){const h=l.currentTarget.querySelectorAll('input, button, [href], select, textarea, [tabindex]:not([tabindex="-1"])');if(h.length===0)return;const k=h[0],B=h[h.length-1];l.shiftKey?document.activeElement===k&&(l.preventDefault(),B.focus()):document.activeElement===B&&(l.preventDefault(),k.focus())}}return(l,d)=>(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[e.createVNode(e.Transition,{name:"cmdk-dialog"},{default:e.withCtx(()=>[e.unref(r).visible.value?(e.openBlock(),e.createElementBlock("div",{key:0,"data-cmdk-dialog":"",onKeydown:c},[e.createElementVNode("div",{"data-cmdk-dialog-mask":"",onClick:m}),e.createElementVNode("div",re,[e.createElementVNode("div",se,[e.renderSlot(l.$slots,"header",{},()=>[e.createVNode(E,{ref_key:"commandInputRef",ref:a,placeholder:o.placeholder,"auto-focus":o.autoFocus},null,8,["placeholder","auto-focus"])])]),e.createElementVNode("div",de,[e.renderSlot(l.$slots,"body",{},()=>[e.createVNode(V)])]),l.$slots.footer?(e.openBlock(),e.createElementBlock("div",ie,[e.renderSlot(l.$slots,"footer")])):e.createCommentVNode("",!0)])],32)):e.createCommentVNode("",!0)]),_:3})]))}}),me={Menu:K,Dialog:O,Input:E,List:V,Group:N,Item:$,Empty:w,Separator:D,Loading:I};f.Command=me,f.CommandDialog=O,f.CommandEmpty=w,f.CommandGroup=N,f.CommandInput=E,f.CommandItem=$,f.CommandList=V,f.CommandLoading=I,f.CommandMenu=K,f.CommandSeparator=D,f.useCommandMenu=L,Object.defineProperty(f,Symbol.toStringTag,{value:"Module"})}));
|
|
1
|
+
(function(k,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue")):typeof define=="function"&&define.amd?define(["exports","vue"],e):(k=typeof globalThis<"u"?globalThis:k||self,e(k.VueCmdk={},k.Vue))})(this,(function(k,e){"use strict";const v={"⌘":"metaKey","⌃":"ctrlKey","⌥":"altKey","⇧":"shiftKey"},U=/^([⌘⌃⌥⇧]+)(.+)$/;function z(a){if(!a)return null;const t=U.exec(a);if(!t)return{key:a.toLowerCase()};const[,n,d]=t,s={};for(const l of n){const u=v[l];u&&(s[u]=!0)}return{...s,key:d.toLowerCase()}}function H(a,t){return t?a.key.toLowerCase()===t.key&&!!a.metaKey==!!t.metaKey&&!!a.ctrlKey==!!t.ctrlKey&&!!a.altKey==!!t.altKey&&!!a.shiftKey==!!t.shiftKey:!1}const N="__ungrouped__";function Q(a,t){const n=typeof a=="function"?{filter:a}:a??{},{filter:d,shouldFilter:s=!0,loop:l=!0}=n,u=e.ref(!1),r=e.ref(""),o=e.ref(0),f=e.ref(),m=e.ref([]),_=()=>{u.value=!u.value},c=()=>{u.value=!0,o.value=0},C=()=>{u.value=!1,r.value=""};function g(i,h){if(!h.trim())return i;const p=h.toLowerCase();return i.filter(y=>{var b,G;return!!(y.forceMount||y.value.toLowerCase().includes(p)||(b=y.label)!=null&&b.toLowerCase().includes(p)||(G=y.keywords)!=null&&G.some(be=>be.toLowerCase().includes(p)))})}function I(i){const h=new Map;for(const y of i){const b=y.group||N;h.has(b)?h.get(b).push(y):h.set(b,[y])}const p=[];h.has(N)&&(p.push({heading:"",items:h.get(N)}),h.delete(N));for(const y of[...h.keys()].sort())p.push({heading:y,items:h.get(y)});return p}const S=e.computed(()=>{if(d){const i=d(m.value,r.value);if(i!==null)return i}return s?g(m.value,r.value):m.value}),ge=e.computed(()=>I(S.value));function _e(){const i=S.value.length;i!==0&&(l?o.value=(o.value+1)%i:o.value=Math.min(o.value+1,i-1))}function Ce(){const i=S.value.length;i!==0&&(l?o.value=(o.value-1+i)%i:o.value=Math.max(o.value-1,0))}function Be(){var h;const i=S.value[o.value];i&&!i.disabled&&(f.value=i.value,(h=i.onSelect)==null||h.call(i,i),t==null||t(i),C())}function j(i){var h;for(const p of m.value){if(p.disabled||!p.shortcut)continue;const y=z(p.shortcut);if(H(i,y)){i.preventDefault(),i.stopPropagation(),f.value=p.value,(h=p.onSelect)==null||h.call(p,p),t==null||t(p),C();return}}}let B=null;return e.watch(m,i=>{B&&(B(),B=null),i.some(p=>p.shortcut)&&typeof window<"u"&&(window.addEventListener("keydown",j),B=()=>window.removeEventListener("keydown",j))},{immediate:!0}),e.onUnmounted(()=>{B&&B()}),{visible:u,searchQuery:r,activeIndex:o,selectedValue:f,items:m,toggle:_,open:c,close:C,defaultFilter:g,groupItems:I,filteredItems:S,groupedItems:ge,selectNext:_e,selectPrev:Ce,selectCurrent:Be}}const E=Symbol("cmdk-state"),K=Symbol("cmdk-loading"),X=Symbol("cmdk-close-on-select"),$=Symbol("cmdk-select-handler"),O=Symbol("cmdk-item-index-map");function R(a,t,n){const{filter:d,loading:s=!1,closeOnSelect:l=!0,shouldFilter:u=!0,loop:r=!0}=a,f=Q({filter:d,shouldFilter:u,loop:r},c=>{t("select",c),t("update:value",c.value),l&&f.close()});e.watch(()=>a.value,c=>{c!==void 0&&(f.selectedValue.value=c)},{immediate:!0}),e.provide(E,f),e.provide(K,()=>s),e.provide(X,()=>l),e.provide($,c=>{t("select",c),t("update:value",c.value),l&&f.close()});const m=e.computed(()=>{const c=new Map;return f.filteredItems.value.forEach((C,g)=>c.set(C.value,g)),c});e.provide(O,()=>m.value);function _(c){t("select",c),t("update:value",c.value),l&&f.close()}return{state:f,handleSelect:_}}const Y=["aria-expanded","aria-label"],P=e.defineComponent({__name:"CommandMenu",props:{visible:{type:Boolean,default:!1},searchQuery:{},placeholder:{default:"Type a command or search..."},filter:{},autoFocus:{type:Boolean,default:!0},closeOnSelect:{type:Boolean,default:!0},loading:{type:Boolean},label:{},shouldFilter:{type:Boolean,default:!0},loop:{type:Boolean,default:!0},value:{}},emits:["update:visible","update:searchQuery","update:value","select"],setup(a,{expose:t,emit:n}){const d=a,s=n,{state:l,handleSelect:u}=R({filter:d.filter,loading:d.loading,closeOnSelect:d.closeOnSelect,shouldFilter:d.shouldFilter,loop:d.loop,value:d.value},s);return e.watch(()=>d.visible,r=>{r!==void 0&&(l.visible.value=r)},{immediate:!0}),e.watch(l.visible,r=>s("update:visible",r)),e.watch(()=>d.searchQuery,r=>{r!==void 0&&(l.searchQuery.value=r)}),e.watch(l.searchQuery,r=>s("update:searchQuery",r)),t({open:l.open,close:l.close,toggle:l.toggle,searchQuery:l.searchQuery,items:l.items,filteredItems:l.filteredItems}),(r,o)=>(e.openBlock(),e.createElementBlock("div",{"data-cmdk-root":"",role:"combobox","aria-expanded":e.unref(l).visible.value,"aria-label":a.label??"Command menu","aria-haspopup":"listbox"},[e.renderSlot(r.$slots,"default",{items:e.unref(l).items,filteredItems:e.unref(l).filteredItems,searchQuery:e.unref(l).searchQuery,selectNext:e.unref(l).selectNext,selectPrev:e.unref(l).selectPrev,selectCurrent:e.unref(l).selectCurrent,handleSelect:e.unref(u)})],8,Y))}});function w(a,t){const n=e.inject(a);if(n==null)throw new Error(`[vue-cmdk] <${t}> must be used inside <CommandMenu> or <CommandDialog>.`);return n}const q=["value","placeholder","aria-activedescendant","autofocus"],D=e.defineComponent({__name:"CommandInput",props:{placeholder:{default:"Type a command or search..."},autoFocus:{type:Boolean,default:!0}},setup(a,{expose:t}){const n=w(E,"CommandInput"),d=e.inject($,()=>{}),s=e.ref(null);t({inputRef:s});const l=e.computed(()=>{const o=n.filteredItems.value[n.activeIndex.value];return o?`cmdk-item-${o.value}`:void 0});function u(o){const f=o.target;f&&(n.searchQuery.value=f.value,n.activeIndex.value=0)}function r(o){var f;if(o.key==="ArrowDown")o.preventDefault(),n.selectNext();else if(o.key==="ArrowUp")o.preventDefault(),n.selectPrev();else if(o.key==="Enter"){o.preventDefault();const m=n.filteredItems.value[n.activeIndex.value];m&&!m.disabled&&((f=m.onSelect)==null||f.call(m,m),d(m))}}return(o,f)=>(e.openBlock(),e.createElementBlock("input",{ref_key:"inputRef",ref:s,"data-cmdk-input":"",value:e.unref(n).searchQuery.value,placeholder:a.placeholder,role:"searchbox","aria-activedescendant":l.value,autocomplete:"off",autocorrect:"off",spellcheck:"false",autofocus:a.autoFocus,onInput:u,onKeydown:r},null,40,q))}}),J={key:0,"data-cmdk-empty":""},L=e.defineComponent({__name:"CommandEmpty",setup(a){const t=w(E,"CommandEmpty");return(n,d)=>e.unref(t).searchQuery.value&&e.unref(t).filteredItems.value.length===0?(e.openBlock(),e.createElementBlock("div",J,[e.renderSlot(n.$slots,"default",{},()=>[d[0]||(d[0]=e.createElementVNode("span",null,"No results found.",-1))])])):e.createCommentVNode("",!0)}}),W={key:0,"data-cmdk-loading":""},V=e.defineComponent({__name:"CommandLoading",props:{loading:{type:Boolean}},setup(a){return(t,n)=>a.loading?(e.openBlock(),e.createElementBlock("div",W,[e.renderSlot(t.$slots,"default",{},()=>[n[0]||(n[0]=e.createElementVNode("span",null,"Loading...",-1))])])):e.createCommentVNode("",!0)}}),Z={"data-cmdk-group":"",role:"group"},ee={key:0,"data-cmdk-group-heading":"",role:"presentation"},te={"data-cmdk-group-items":"",role:"group"},M=e.defineComponent({__name:"CommandGroup",props:{heading:{},forceMount:{type:Boolean}},setup(a){return(t,n)=>(e.openBlock(),e.createElementBlock("div",Z,[a.heading?(e.openBlock(),e.createElementBlock("div",ee,e.toDisplayString(a.heading),1)):e.createCommentVNode("",!0),e.createElementVNode("div",te,[e.renderSlot(t.$slots,"default")])]))}});function oe(a,t){if(!t.trim())return[{text:a,highlighted:!1}];const n=a.toLowerCase(),d=t.toLowerCase(),s=[];let l=0;for(;l<a.length;){const u=n.indexOf(d,l);if(u===-1){s.push({text:a.slice(l),highlighted:!1});break}u>l&&s.push({text:a.slice(l,u),highlighted:!1}),s.push({text:a.slice(u,u+t.length),highlighted:!0}),l=u+t.length}return s}const ae=["id","aria-selected","aria-disabled","data-value"],ne={key:0,"data-cmdk-item-icon":""},le={"data-cmdk-item-label":""},re={key:0},ce={key:1},se={key:1,"data-cmdk-item-shortcut":""},x=e.defineComponent({__name:"CommandItem",props:{value:{},label:{default:void 0},keywords:{default:void 0},shortcut:{default:void 0},disabled:{type:Boolean,default:!1},forceMount:{type:Boolean,default:!1},icon:{type:[Object,Function],default:void 0},onSelect:{type:Function,default:void 0}},setup(a){const t=a,n=w(E,"CommandItem"),d=e.inject(O,()=>new Map),s=e.computed(()=>`cmdk-item-${t.value}`),l=e.computed(()=>({value:t.value,label:t.label,keywords:t.keywords,shortcut:t.shortcut,disabled:t.disabled,forceMount:t.forceMount,icon:t.icon,onSelect:t.onSelect})),u=e.computed(()=>t.icon?e.isVNode(t.icon)?()=>t.icon:t.icon:null),r=e.computed(()=>{const c=n.filteredItems.value[n.activeIndex.value];return(c==null?void 0:c.value)===t.value}),o=e.inject($,()=>{}),f=e.computed(()=>t.label||t.value),m=e.computed(()=>{const c=n.searchQuery.value;return c.trim()?oe(f.value,c):null});function _(){var c;t.disabled||((c=t.onSelect)==null||c.call(t,l.value),o(l.value))}return(c,C)=>(e.openBlock(),e.createElementBlock("div",{id:s.value,"data-cmdk-item":"",role:"option","aria-selected":r.value,"aria-disabled":a.disabled,"data-value":a.value,class:e.normalizeClass({active:r.value,disabled:a.disabled}),onClick:_,onPointerenter:C[0]||(C[0]=()=>{const g=e.unref(d)().get(a.value);g!==void 0&&(e.unref(n).activeIndex.value=g)})},[e.renderSlot(c.$slots,"default",{item:l.value,active:r.value},()=>[u.value?(e.openBlock(),e.createElementBlock("span",ne,[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(u.value)))])):e.createCommentVNode("",!0),e.createElementVNode("span",le,[m.value?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(m.value,(g,I)=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:I},[g.highlighted?(e.openBlock(),e.createElementBlock("mark",re,e.toDisplayString(g.text),1)):(e.openBlock(),e.createElementBlock("span",ce,e.toDisplayString(g.text),1))],64))),128)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(f.value),1)],64))]),a.shortcut?(e.openBlock(),e.createElementBlock("span",se,e.toDisplayString(a.shortcut),1)):e.createCommentVNode("",!0)])],42,ae))}}),ie={"data-cmdk-separator":"",role:"separator"},F=e.defineComponent({__name:"CommandSeparator",props:{alwaysRender:{type:Boolean}},setup(a){return(t,n)=>(e.openBlock(),e.createElementBlock("div",ie))}}),de={"data-cmdk-list":"",role:"listbox"},ue={"aria-live":"polite","aria-atomic":"true",class:"sr-only"},T=e.defineComponent({__name:"CommandList",props:{alwaysRenderSeparator:{type:Boolean}},setup(a){const t=w(E,"CommandList"),n=w(K,"CommandList");return(d,s)=>(e.openBlock(),e.createElementBlock("div",de,[e.createElementVNode("div",ue,[e.unref(t).searchQuery.value&&e.unref(t).filteredItems.value.length===0?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[e.createTextVNode("No results found")],64)):e.unref(n)()?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode("Loading")],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:2},[e.createTextVNode(e.toDisplayString(e.unref(t).filteredItems.value.length)+" items",1)],64))]),e.createVNode(L),e.createVNode(V,{loading:e.unref(n)()},null,8,["loading"]),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(t).groupedItems.value,(l,u)=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:l.heading||"__ungrouped__"},[e.createVNode(M,{heading:l.heading},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l.items,r=>(e.openBlock(),e.createBlock(x,{key:r.value,value:r.value,label:r.label,keywords:r.keywords,shortcut:r.shortcut,disabled:r.disabled,icon:r.icon,"on-select":r.onSelect},null,8,["value","label","keywords","shortcut","disabled","icon","on-select"]))),128))]),_:2},1032,["heading"]),a.alwaysRenderSeparator||u!==e.unref(t).groupedItems.value.length-1?(e.openBlock(),e.createBlock(F,{key:0})):e.createCommentVNode("",!0)],64))),128))]))}}),me=["aria-label"],fe={"data-cmdk-dialog-wrapper":""},pe={"data-cmdk-dialog-header":""},he={"data-cmdk-dialog-body":""},ke={key:0,"data-cmdk-dialog-footer":""},A=e.defineComponent({__name:"CommandDialog",props:{items:{default:()=>[]},container:{},visible:{type:Boolean,default:!1},searchQuery:{},placeholder:{default:"Type a command or search..."},filter:{},autoFocus:{type:Boolean,default:!0},closeOnSelect:{type:Boolean,default:!0},loading:{type:Boolean,default:!1},label:{},shouldFilter:{type:Boolean,default:!0},loop:{type:Boolean,default:!0},value:{}},emits:["update:visible","update:searchQuery","update:value","select"],setup(a,{emit:t}){const n=a,d=t,{state:s}=R({filter:n.filter,loading:n.loading,closeOnSelect:n.closeOnSelect,shouldFilter:n.shouldFilter,loop:n.loop,value:n.value},d),l=e.ref(null);e.watch(()=>n.items,o=>{s.items.value=o},{immediate:!0}),e.watch(()=>n.visible,o=>{s.visible.value=o},{immediate:!0}),e.watch(()=>n.searchQuery,o=>{o!==void 0&&(s.searchQuery.value=o)}),e.watch(s.searchQuery,o=>d("update:searchQuery",o)),e.watch(s.visible,async o=>{var f,m;d("update:visible",o),o&&(await e.nextTick(),(m=(f=l.value)==null?void 0:f.inputRef)==null||m.focus())});function u(o){o.target===o.currentTarget&&s.close()}function r(o){if(o.key==="Escape"&&(o.preventDefault(),s.close()),o.key==="Tab"){const m=o.currentTarget.querySelectorAll('input, button, [href], select, textarea, [tabindex]:not([tabindex="-1"])');if(m.length===0)return;const _=m[0],c=m[m.length-1];o.shiftKey?document.activeElement===_&&(o.preventDefault(),c.focus()):document.activeElement===c&&(o.preventDefault(),_.focus())}}return(o,f)=>(e.openBlock(),e.createBlock(e.Teleport,{to:a.container??"body"},[e.createVNode(e.Transition,{name:"cmdk-dialog"},{default:e.withCtx(()=>[e.unref(s).visible.value?(e.openBlock(),e.createElementBlock("div",{key:0,"data-cmdk-dialog":"",role:"dialog","aria-modal":"true","aria-label":n.label??"Command menu",onKeydown:r},[e.createElementVNode("div",{"data-cmdk-dialog-mask":"","aria-hidden":"true",onClick:u}),e.createElementVNode("div",fe,[e.createElementVNode("div",pe,[e.renderSlot(o.$slots,"header",{},()=>[e.createVNode(D,{ref_key:"commandInputRef",ref:l,placeholder:a.placeholder,"auto-focus":a.autoFocus},null,8,["placeholder","auto-focus"])])]),e.createElementVNode("div",he,[e.renderSlot(o.$slots,"body",{},()=>[e.createVNode(T)])]),o.$slots.footer?(e.openBlock(),e.createElementBlock("div",ke,[e.renderSlot(o.$slots,"footer")])):e.createCommentVNode("",!0)])],40,me)):e.createCommentVNode("",!0)]),_:3})],8,["to"]))}}),ye={Menu:P,Dialog:A,Input:D,List:T,Group:M,Item:x,Empty:L,Separator:F,Loading:V};k.Command=ye,k.CommandDialog=A,k.CommandEmpty=L,k.CommandGroup=M,k.CommandInput=D,k.CommandItem=x,k.CommandList=T,k.CommandLoading=V,k.CommandMenu=P,k.CommandSeparator=F,k.useCommandMenu=Q,Object.defineProperty(k,Symbol.toStringTag,{value:"Module"})}));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vue-command-kit",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "⌘K — Fast, composable, unstyled command menu for Vue 3",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"packageManager": "pnpm@11.1.2",
|
|
@@ -33,6 +33,12 @@
|
|
|
33
33
|
"preview": "vite preview",
|
|
34
34
|
"build:demo": "vite build --config vite.demo.config.ts",
|
|
35
35
|
"typecheck": "vue-tsc --noEmit",
|
|
36
|
+
"test": "vitest run",
|
|
37
|
+
"test:watch": "vitest",
|
|
38
|
+
"lint": "eslint . && prettier --check .",
|
|
39
|
+
"lint:fix": "eslint --fix . && prettier --write .",
|
|
40
|
+
"format": "prettier --write .",
|
|
41
|
+
"prepare": "husky",
|
|
36
42
|
"prepublishOnly": "pnpm run build"
|
|
37
43
|
},
|
|
38
44
|
"keywords": [
|
|
@@ -59,6 +65,15 @@
|
|
|
59
65
|
"engines": {
|
|
60
66
|
"node": ">=22.13"
|
|
61
67
|
},
|
|
68
|
+
"lint-staged": {
|
|
69
|
+
"*.{ts,vue}": [
|
|
70
|
+
"eslint --fix",
|
|
71
|
+
"prettier --write"
|
|
72
|
+
],
|
|
73
|
+
"*.{json,md}": [
|
|
74
|
+
"prettier --write"
|
|
75
|
+
]
|
|
76
|
+
},
|
|
62
77
|
"publishConfig": {
|
|
63
78
|
"access": "public",
|
|
64
79
|
"registry": "https://registry.npmjs.org"
|
|
@@ -67,14 +82,26 @@
|
|
|
67
82
|
"vue": "^3.4.0"
|
|
68
83
|
},
|
|
69
84
|
"devDependencies": {
|
|
85
|
+
"@eslint/js": "^10.0.1",
|
|
70
86
|
"@microsoft/api-extractor": "^7.58.7",
|
|
71
87
|
"@types/node": "^25.9.1",
|
|
72
88
|
"@vitejs/plugin-vue": "^5.0.0",
|
|
73
89
|
"@vue/shared": "^3.5.35",
|
|
90
|
+
"@vue/test-utils": "^2.4.10",
|
|
91
|
+
"eslint": "^10.4.1",
|
|
92
|
+
"eslint-config-prettier": "^10.1.8",
|
|
93
|
+
"eslint-plugin-vue": "^10.9.2",
|
|
94
|
+
"globals": "^17.6.0",
|
|
74
95
|
"highlight.js": "^11.11.1",
|
|
96
|
+
"husky": "^9.1.7",
|
|
97
|
+
"jsdom": "^29.1.1",
|
|
98
|
+
"lint-staged": "^17.0.7",
|
|
99
|
+
"prettier": "^3.8.3",
|
|
75
100
|
"typescript": "^5.7.0",
|
|
101
|
+
"typescript-eslint": "^8.60.1",
|
|
76
102
|
"vite": "^6.0.0",
|
|
77
103
|
"vite-plugin-dts": "^4.0.0",
|
|
104
|
+
"vitest": "^4.1.8",
|
|
78
105
|
"vue": "^3.5.0",
|
|
79
106
|
"vue-tsc": "^2.0.0"
|
|
80
107
|
}
|