vexip-ui
Version:
A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good
3 lines (2 loc) • 3.89 kB
JavaScript
"use strict";var b=Object.defineProperty;var M=(u,e,t)=>e in u?b(u,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):u[e]=t;var i=(u,e,t)=>M(u,typeof e!="symbol"?e+"":e,t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("vue");require("./message.vue.cjs");const y=require("@vexip-ui/hooks"),c=require("@vexip-ui/utils"),E=require("./message.vue2.cjs"),v=["top","bottom"];let T=1;function I(){return`message-${T++}`}class h{constructor(e={}){i(this,"name");i(this,"defaults");i(this,"open");i(this,"primary");i(this,"info");i(this,"success");i(this,"warning");i(this,"error");i(this,"_mountedApp");i(this,"_instance");i(this,"_innerApp");i(this,"_container");i(this,"_wrapper");i(this,"_mountedEl");i(this,"_installed");i(this,"_configRecord");e={...e,duration:e.duration?c.toNumber(e.duration):3e3},this._mountedApp=null,this._instance=null,this._innerApp=null,this._container=null,this._wrapper=null,this._mountedEl=null,this._installed=!1,this._configRecord=null,this.name="Message",this.defaults={},this.config(e),this.open=(t,n)=>this._open(null,t,n),this.primary=(t,n)=>this._open("primary",t,n),this.info=(t,n)=>this._open("info",t,n),this.success=(t,n)=>this._open("success",t,n),this.warning=(t,n)=>this._open("warning",t,n),this.error=(t,n)=>this._open("error",t,n)}judge(e,t,n,s){e?this.success(t,s):this.error(n,s)}close(e){var t;c.isNull(e)?this.clear():(t=this._getInstance())==null||t.remove(e)}config({placement:e,startOffset:t,itemGap:n,...s}){if(this._configRecord={placement:e,startOffset:t,itemGap:n},this.defaults={...this.defaults,...s},this._installed){const r=this._getInstance();r&&(e&&r.config({placement:v.includes(e)?e:v[0]}),r.config({startOffset:t,itemGap:n}))}}clone(){const e=new h(this.defaults);return e._mountedApp=this._mountedApp,e._configRecord=this._configRecord,e._installed=this._installed,e}clear(){var e;(e=this._getInstance())==null||e.clear()}destroy(){var e,t;this._mountedEl&&((e=this._wrapper)==null||e.removeChild(this._mountedEl)),(t=this._innerApp)==null||t.unmount(),this._container&&a.render(null,this._container),c.destroyObject(this)}isDestroyed(){return!1}install(e,t={}){const{property:n,...s}=t;this._mountedApp=e,this._installed=!0,this.config(s),(n||!e.config.globalProperties.$message)&&(e.config.globalProperties[n||"$message"]=this)}transferTo(e){if(!c.isClient)return;const t=y.unrefElement(e);t&&(this._wrapper=t,this._instance?this._mountedEl&&this._wrapper.appendChild(this._mountedEl):this._getInstance())}_getInstance(){if(!this._instance&&c.isClient){if(!this._mountedApp)console.warn("[vexip-ui:Message]: App missing, the plugin maybe not installed."),this._container=document.createElement("div"),this._innerApp=a.createApp(E),this._instance=this._innerApp.mount(this._container);else{const e=a.createVNode(E,null,null);this._container=document.createElement("div"),e.appContext=this._mountedApp._context,a.render(e,this._container),this._instance=y.proxyExposed(e)}this._mountedEl=this._container.firstElementChild,(this._wrapper||document.body).appendChild(this._mountedEl)}return this._instance}_open(e,t,n){if(!c.isClient)return c.noop;const s=typeof t=="string"?{content:t,duration:n}:t,r=s.key??I(),_=this._getInstance();let l;const p=s.onClose,A=()=>{if(clearTimeout(l),typeof p=="function")return p()},d=s.onEnter,w=()=>{if(s.liveOnEnter&&clearTimeout(l),typeof d=="function")return d()},f=s.onLeave,C=()=>{if(s.liveOnEnter&&(clearTimeout(l),m()),typeof f=="function")return f()},o={...this.defaults,...s,key:r,type:e??s.type,onClose:A,onEnter:w,onLeave:C};o.icon&&typeof o.icon!="function"&&(o.icon=a.markRaw(o.icon)),_.add(o),m();function m(){const g=typeof o.duration=="number"?o.duration:3e3;g>=500&&(l=setTimeout(()=>{_.remove(r)},g))}return()=>{clearTimeout(l),_.remove(r)}}}const R=new h;exports.Message=R;exports.MessageManager=h;
//# sourceMappingURL=index.cjs.map