vexip-ui
Version:
A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good
3 lines (2 loc) • 5.03 kB
JavaScript
"use strict";const e=require("vue");require("../icon/index.cjs");require("../renderer/index.cjs");require("../form/index.cjs");const a=require("@vexip-ui/config"),E=require("@vexip-ui/utils"),q=require("./props.cjs"),T=require("../form/helper.cjs"),s=require("../renderer/renderer.cjs"),c=require("../icon/icon.cjs"),P=["id","aria-checked","aria-disabled","aria-labelledby"],$=["checked","disabled","name"],F=e.defineComponent({name:"Switch",__name:"switch",props:q.switchProps,emits:["update:value"],setup(m,{expose:b,emit:v}){const{idFor:d,labelId:f,state:g,disabled:C,loading:h,size:y,validateField:V,getFieldValue:N,setFieldValue:k}=T.useFieldStore(()=>{var r;return(r=u.value)==null?void 0:r.focus()}),x=m,n=a.useProps("switch",x,{size:a.createSizeProp(y),state:a.createStateProp(g),value:{default:()=>N(),static:!0},disabled:()=>C.value,openColor:"",closeColor:"",loading:()=>h.value,loadingIcon:a.createIconProp(),loadingEffect:null,openIcon:a.createIconProp(),closeIcon:a.createIconProp(),openText:"",closeText:"",onBeforeChange:{default:null,isFunc:!0},rectangle:!1,name:{default:"",static:!0},slots:()=>({})}),S=v,o=a.useNameHelper("switch"),i=a.useIcons(),l=e.ref(n.value),u=e.ref(),w=e.computed(()=>[o.b(),o.bs("vars"),{[o.bm("inherit")]:n.inherit,[o.bm("open")]:l.value,[o.bm(n.size)]:n.size!=="default",[o.bm(n.state)]:n.state!=="default",[o.bm("disabled")]:n.disabled,[o.bm("loading")]:n.loading,[o.bm("rectangle")]:n.rectangle}]),z=e.computed(()=>({backgroundColor:l.value?n.openColor:n.closeColor})),B=e.computed(()=>({color:l.value?n.openColor:n.closeColor})),p=e.computed(()=>n.disabled||n.loading);e.watch(()=>n.value,r=>{l.value=r}),b({idFor:d,labelId:f,currentValue:l,input:u,focus:r=>{var t;return(t=u.value)==null?void 0:t.focus(r)},blur:()=>{var r;return(r=u.value)==null?void 0:r.blur()}});async function I(r=!l.value){if(r===l.value)return;let t=!0;typeof n.onBeforeChange=="function"&&(t=n.onBeforeChange(r),E.isPromise(t)&&(t=await t)),t!==!1&&(l.value=r,S("update:value",r),k(r),a.emitEvent(n.onChange,r),V())}return(r,t)=>(e.openBlock(),e.createElementBlock("label",{id:e.unref(d),class:e.normalizeClass(w.value),role:"switch","aria-checked":l.value,"aria-disabled":p.value,"aria-labelledby":e.unref(f),style:e.normalizeStyle(z.value)},[e.createElementVNode("input",{ref_key:"input",ref:u,type:"checkbox",class:e.normalizeClass(e.unref(o).be("input")),checked:l.value,disabled:p.value,name:e.unref(n).name,onSubmit:t[0]||(t[0]=e.withModifiers(()=>{},["prevent"])),onChange:t[1]||(t[1]=_=>I()),onClick:t[2]||(t[2]=e.withModifiers(()=>{},["stop"]))},null,42,$),e.createElementVNode("span",{class:e.normalizeClass(e.unref(o).be("placeholder")),"aria-hidden":""},[e.createElementVNode("span",{class:e.normalizeClass(e.unref(o).be("open-text"))},[e.renderSlot(r.$slots,"open",{},()=>[e.createVNode(e.unref(s),{renderer:e.unref(n).slots.open},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(n).openText),1)]),_:1},8,["renderer"])])],2),e.createElementVNode("span",{class:e.normalizeClass(e.unref(o).be("close-text"))},[e.renderSlot(r.$slots,"close",{},()=>[e.createVNode(e.unref(s),{renderer:e.unref(n).slots.open},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(n).closeText),1)]),_:1},8,["renderer"])])],2)],2),e.createElementVNode("span",{class:e.normalizeClass(e.unref(o).be("signal")),style:e.normalizeStyle(B.value)},[e.unref(n).loading?e.renderSlot(r.$slots,"loading",{key:0},()=>[e.createVNode(e.unref(s),{renderer:e.unref(n).slots.loading},{default:e.withCtx(()=>[e.createVNode(e.unref(c),e.mergeProps(e.unref(i).loading,{effect:e.unref(n).loadingEffect||e.unref(i).loading.effect,icon:e.unref(n).loadingIcon||e.unref(i).loading.icon,label:"loading"}),null,16,["effect","icon"])]),_:1},8,["renderer"])]):e.renderSlot(r.$slots,"icon",{key:1,value:l.value},()=>[e.createVNode(e.unref(s),{renderer:e.unref(n).slots.icon,data:{value:l.value}},{default:e.withCtx(()=>[l.value&&e.unref(n).openIcon?(e.openBlock(),e.createBlock(e.unref(c),{key:0,icon:e.unref(n).openIcon},null,8,["icon"])):!l.value&&e.unref(n).closeIcon?(e.openBlock(),e.createBlock(e.unref(c),{key:1,icon:e.unref(n).closeIcon},null,8,["icon"])):e.createCommentVNode("",!0)]),_:1},8,["renderer","data"])])],6),e.createElementVNode("span",{class:e.normalizeClass(e.unref(o).be("label"))},[l.value?(e.openBlock(),e.createElementBlock("span",{key:0,class:e.normalizeClass(e.unref(o).be("open-text"))},[e.renderSlot(r.$slots,"open",{},()=>[e.createVNode(e.unref(s),{renderer:e.unref(n).slots.open},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(n).openText),1)]),_:1},8,["renderer"])])],2)):(e.openBlock(),e.createElementBlock("span",{key:1,class:e.normalizeClass(e.unref(o).be("close-text"))},[e.renderSlot(r.$slots,"close",{},()=>[e.createVNode(e.unref(s),{renderer:e.unref(n).slots.open},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(e.unref(n).closeText),1)]),_:1},8,["renderer"])])],2))],2)],14,P))}});module.exports=F;
//# sourceMappingURL=switch.vue2.cjs.map