@dialpad/dialtone
Version:
Dialpad's Dialtone design system monorepo
4 lines (3 loc) • 5.96 kB
JavaScript
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const a=require("./combobox-loading-list.cjs"),g=require("./combobox-empty-list.cjs"),l=require("../../common/utils/index.cjs"),e=require("vue"),u=require("../../_plugin-vue_export-helper-BRilXfQE.cjs"),m=require("../../common/mixins/keyboard-list-navigation.cjs"),p=require("./combobox-constants.cjs"),y={compatConfig:{MODE:3},name:"DtCombobox",components:{ComboboxLoadingList:a.default,ComboboxEmptyList:g.default},mixins:[m.default({indexKey:"highlightIndex",idKey:"highlightId",listElementKey:"getListElement",afterHighlightMethod:"afterHighlight",beginningOfListMethod:"beginningOfListMethod",endOfListMethod:"endOfListMethod",activeItemKey:"activeItemEl"})],props:{label:{type:String,required:!0},labelVisible:{type:Boolean,default:!0},size:{type:String,default:null,validator:i=>Object.values(p.COMBOBOX_LABEL_SIZES).includes(i)},description:{type:String,default:""},listId:{type:String,default(){return l.getUniqueString()}},onBeginningOfList:{type:Function,default:null},onEndOfList:{type:Function,default:null},showList:{type:Boolean,default:!1},listRenderedOutside:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},emptyList:{type:Boolean,default:!1},emptyStateMessage:{type:String,default:""},emptyStateClass:{type:[String,Object,Array],default:""},clickOnSelect:{type:Boolean,default:!1}},emits:["select","escape","highlight","opened"],data(){return{outsideRenderedListRef:null,hasSlotContent:l.hasSlotContent}},computed:{inputProps(){return{label:this.label,labelVisible:this.labelVisible,size:this.size,description:this.description,role:"combobox","aria-label":this.label,"aria-expanded":this.showList.toString(),"aria-owns":this.listId,"aria-haspopup":"listbox","aria-activedescendant":this.activeItemId,"aria-controls":this.listId}},listProps(){return{role:"listbox",id:this.listId,class:"d-ps-relative","aria-label":this.label}},beginningOfListMethod(){return this.onBeginningOfList||this.jumpToEnd},endOfListMethod(){return this.onEndOfList||this.jumpToBeginning},activeItemId(){if(!(!this.showList||this.highlightIndex<0||this.loading))return this.highlightId},activeItemEl(){return this.highlightId?this.getListElement().querySelector("#"+this.highlightId):""}},watch:{showList(i){this.listRenderedOutside||(this.setInitialHighlightIndex(),this.$emit("opened",i)),!i&&this.outsideRenderedListRef&&(this.outsideRenderedListRef.removeEventListener("mousemove",this.onMouseHighlight),this.outsideRenderedListRef=null)},loading(){this.$nextTick(()=>{this.setInitialHighlightIndex()})},$props:{deep:!0,immediate:!0,handler(){this.validateEmptyListProps()}}},created(){this.validateEmptyListProps()},methods:{onMouseHighlight(i){if(this.loading)return;const t=i.target.closest("li");t&&this.highlightId!==t.id&&this.setHighlightId(t.id)},getListElement(){var i;return this.outsideRenderedListRef??((i=this.$refs.listWrapper)==null?void 0:i.querySelector(`#${this.listId}`))},clearHighlightIndex(){this.showList&&this.setHighlightIndex(-1)},afterHighlight(){this.loading||this.$emit("highlight",this.highlightIndex)},onEnterKey(){var i;this.loading||this.emptyList||this.highlightIndex>=0&&(this.$emit("select",this.highlightIndex),this.clickOnSelect&&((i=this.activeItemEl)==null||i.click()))},onEscapeKey(){this.$emit("escape")},onOpen(i,t){var n;this.outsideRenderedListRef=t,(n=this.outsideRenderedListRef)==null||n.addEventListener("mousemove",this.onMouseHighlight),this.$emit("opened",i),i&&this.setInitialHighlightIndex()},onKeyValidation(i,t){!this.showList||!this.getListElement()||this[t](i)},setInitialHighlightIndex(){this.showList&&this.$nextTick(()=>{this.setHighlightIndex(this.loading?-1:0)})},validateEmptyListProps(){this.$slots.emptyListItem||this.emptyList&&!this.emptyStateMessage&&console.error(`Invalid props: you must pass both props emptyList and emptyStateMessage to show the
empty message.`)}}},f={"data-qa":"dt-combobox-input-wrapper"};function c(i,t,n,L,r,s){const d=e.resolveComponent("combobox-loading-list"),h=e.resolveComponent("combobox-empty-list");return e.openBlock(),e.createElementBlock("div",{onKeydown:[t[3]||(t[3]=e.withKeys(e.withModifiers(o=>s.onKeyValidation(o,"onEscapeKey"),["stop"]),["esc"])),t[4]||(t[4]=e.withKeys(e.withModifiers(o=>s.onKeyValidation(o,"onEnterKey"),["exact"]),["enter"])),t[5]||(t[5]=e.withKeys(e.withModifiers(o=>s.onKeyValidation(o,"onUpKey"),["stop","prevent"]),["up"])),t[6]||(t[6]=e.withKeys(e.withModifiers(o=>s.onKeyValidation(o,"onDownKey"),["stop","prevent"]),["down"])),t[7]||(t[7]=e.withKeys(e.withModifiers(o=>s.onKeyValidation(o,"onHomeKey"),["stop","prevent"]),["home"])),t[8]||(t[8]=e.withKeys(e.withModifiers(o=>s.onKeyValidation(o,"onEndKey"),["stop","prevent"]),["end"]))]},[e.createElementVNode("div",f,[e.renderSlot(i.$slots,"input",{inputProps:s.inputProps})]),n.showList?(e.openBlock(),e.createElementBlock("div",{key:0,ref:"listWrapper","data-qa":"dt-combobox-list-wrapper",onMouseleave:t[0]||(t[0]=(...o)=>s.clearHighlightIndex&&s.clearHighlightIndex(...o)),onFocusout:t[1]||(t[1]=(...o)=>s.clearHighlightIndex&&s.clearHighlightIndex(...o)),onMousemoveCapture:t[2]||(t[2]=(...o)=>s.onMouseHighlight&&s.onMouseHighlight(...o))},[n.loading&&!n.listRenderedOutside?(e.openBlock(),e.createBlock(d,e.normalizeProps(e.mergeProps({key:0},s.listProps)),null,16)):n.emptyList&&(n.emptyStateMessage||r.hasSlotContent(i.$slots.emptyListItem))&&!n.listRenderedOutside?(e.openBlock(),e.createBlock(h,e.mergeProps({key:1},s.listProps,{message:n.emptyStateMessage,"item-class":n.emptyStateClass}),{default:e.withCtx(()=>[e.renderSlot(i.$slots,"emptyListItem")]),_:3},16,["message","item-class"])):e.renderSlot(i.$slots,"list",{key:2,listProps:s.listProps,opened:s.onOpen,clearHighlightIndex:s.clearHighlightIndex})],544)):e.createCommentVNode("",!0)],32)}const b=u._(y,[["render",c]]);exports.default=b;
//# sourceMappingURL=combobox.cjs.map