primevue
Version:
[](https://opensource.org/licenses/MIT) [](https://badge.fury.io/js/primevue) [ • 2.54 kB
JavaScript
import{ObjectUtils as e}from"primevue/utils";import t from"primevue/ripple";import{resolveDirective as l,openBlock as i,createBlock as o,Fragment as a,renderList as n,withDirectives as s,withKeys as u,withModifiers as p,renderSlot as r,createVNode as d,toDisplayString as b}from"vue";var h={name:"SelectButton",emits:["update:modelValue","focus","blur"],props:{modelValue:null,options:Array,optionLabel:null,optionValue:null,optionDisabled:null,multiple:Boolean,disabled:Boolean,dataKey:null,ariaLabelledBy:null},methods:{getOptionLabel(t){return this.optionLabel?e.resolveFieldData(t,this.optionLabel):t},getOptionValue(t){return this.optionValue?e.resolveFieldData(t,this.optionValue):t},getOptionRenderKey(t){return this.dataKey?e.resolveFieldData(t,this.dataKey):this.getOptionLabel(t)},isOptionDisabled(t){return!!this.optionDisabled&&e.resolveFieldData(t,this.optionDisabled)},onOptionSelect(t,l){if(this.disabled||this.isOptionDisabled(l))return;let i,o=this.isSelected(l),a=this.getOptionValue(l);i=this.multiple?o?this.modelValue.filter((t=>!e.equals(t,a,this.equalityKey))):this.modelValue?[...this.modelValue,a]:[a]:a,this.$emit("update:modelValue",i)},isSelected(t){let l=!1,i=this.getOptionValue(t);if(this.multiple){if(this.modelValue)for(let t of this.modelValue)if(e.equals(t,i,this.equalityKey)){l=!0;break}}else l=e.equals(this.modelValue,i,this.equalityKey);return l},onFocus(e){this.$emit("focus",e)},onBlur(e){this.$emit("blur",e)},getButtonClass(e){return["p-button p-component",{"p-highlight":this.isSelected(e),"p-disabled":this.isOptionDisabled(e)}]}},computed:{equalityKey(){return this.optionValue?null:this.dataKey}},directives:{ripple:t}};const m={class:"p-selectbutton p-buttonset p-component",role:"group"},c={class:"p-button-label"};h.render=function(e,t,h,y,O,V){const f=l("ripple");return i(),o("div",m,[(i(!0),o(a,null,n(h.options,((l,a)=>s((i(),o("div",{key:V.getOptionRenderKey(l),"aria-label":V.getOptionLabel(l),role:"button","aria-pressed":V.isSelected(l),onClick:e=>V.onOptionSelect(e,l,a),onKeydown:[u(p((e=>V.onOptionSelect(e,l,a)),["prevent"]),["enter"]),u(p((e=>V.onOptionSelect(e,l)),["prevent"]),["space"])],tabindex:V.isOptionDisabled(l)?null:"0",onFocus:t[1]||(t[1]=e=>V.onFocus(e)),onBlur:t[2]||(t[2]=e=>V.onBlur(e)),"aria-labelledby":h.ariaLabelledBy,class:V.getButtonClass(l)},[r(e.$slots,"option",{option:l,index:a},(()=>[d("span",c,b(V.getOptionLabel(l)),1)]))],42,["aria-label","aria-pressed","onClick","onKeydown","tabindex","aria-labelledby"])),[[f]]))),128))])};export default h;