UNPKG

vue-class-clsx

Version:

> A plugin that supports writing class modules in vuejs quickly and easily similar to classname and clsx for reactjs

2 lines (1 loc) 1.67 kB
import{useCssModule as s}from"vue";import e from"just-typeof";const t={cssModuleName:"$style",directiveName:"v-class-module",functionName:"vclsx"};let a=[];function o({value:s}){switch(e(s)){case"string":a.push(s);break;case"array":c({args:[...s]});break;case"object":{const e=function({value:s}){const e=[];return Object.keys(s).forEach((function(t,a){s[t]&&e.push(t)})),e}({value:s});a=a.concat(e);break}case"number":break;case"function":a=[]}}function c({args:s=[]}={}){s.map((function(s){o({value:s})}))}function n({args:s=[]}={}){return a=[],c({args:[s]}),a}const{cssModuleName:r}=t;let i=[],l={};function u(...e){return l=r?s(r):s(),i=n({args:[e]}),i.map((s=>l[s]?l[s]:"")).join(" ").replace(/\,/g," ").trim()}const{cssModuleName:m}=t;let p,f={};function d({el:s,rawClasses:e,props:t}){let a=e;"string"==typeof a&&(a=[a]),p=n({args:[a]});let o=function({rawClasses:s,moduleClasses:e}){return s.map((s=>e[s])).filter((s=>s))}({rawClasses:p,moduleClasses:f});if(t?.class){let s=t.class;"string"==typeof s&&(s=s.split(" ")),o=o.concat(s)}s.classList.remove(...s.classList),s.classList.add(...o)}const v={beforeMount(s,e,t){f=t?.dirs[0]?.instance?.$options?.__cssModules[m]||{},d({el:s,rawClasses:e.value,props:t.props})},updated(s,e,t){f=t?.dirs[0]?.instance?.$options?.__cssModules[m],d({el:s,rawClasses:e.value,props:t.props})}};function N(s){return function({cssModuleName:s,directiveName:e,functionName:a}){s?.trim()&&(t.cssModuleName=s),e?.trim()&&(t.directiveName=e.replace("v-","")),a?.trim()&&(t.functionName=a)}(s),{install(s){s.config.globalProperties[t.functionName]=u,s.directive(t.directiveName,v)}}}const g=u;export{N as createVclsx,g as vclsxComponent};