UNPKG

vexip-ui

Version:

A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good

1 lines 12.4 kB
{"version":3,"file":"index.cjs","sources":["../../../components/message/index.ts"],"sourcesContent":["import { createApp, createVNode, markRaw, render } from 'vue'\n\nimport Component from './message.vue'\nimport { proxyExposed, unrefElement } from '@vexip-ui/hooks'\nimport { destroyObject, isClient, isNull, noop, toNumber } from '@vexip-ui/utils'\n\nimport type { App, MaybeRef } from 'vue'\nimport type { MaybeInstance } from '@vexip-ui/hooks'\nimport type {\n Key,\n MessageConfig,\n MessageInstance,\n MessageOptions,\n MessagePlacement,\n MessageType,\n} from './symbol'\n\nexport type { MessageConfig, MessageType, MessagePlacement, MessageOptions }\n\ntype FuzzyOptions = string | MessageOptions\ntype ManagerOptions = { duration?: number } & MessageConfig & Record<string, unknown>\n\ninterface AipMethod {\n (options: MessageOptions): () => void,\n (content: string, duration?: number): () => void,\n /** @internal */\n (options: FuzzyOptions, duration?: number): () => void,\n}\n\nconst placementWhiteList: MessagePlacement[] = ['top', 'bottom']\n\nlet count = 1\n\nfunction getKey() {\n return `message-${count++}`\n}\n\nexport class MessageManager {\n name: string\n defaults: Record<string, unknown>\n\n open: AipMethod\n primary: AipMethod\n info: AipMethod\n success: AipMethod\n warning: AipMethod\n error: AipMethod\n\n private _mountedApp: App<unknown> | null\n private _instance: MessageInstance | null\n private _innerApp: App<unknown> | null\n private _container: HTMLElement | null\n private _wrapper: HTMLElement | SVGElement | null\n private _mountedEl: HTMLElement | null\n private _installed: boolean\n private _configRecord: MessageConfig | null\n\n constructor(options: ManagerOptions = {}) {\n options = {\n ...options,\n duration: options.duration ? toNumber(options.duration) : 3000,\n }\n\n this._mountedApp = null\n this._instance = null\n this._innerApp = null\n this._container = null\n this._wrapper = null\n this._mountedEl = null\n this._installed = false\n this._configRecord = null\n this.name = 'Message'\n this.defaults = {}\n\n this.config(options)\n\n this.open = (content: FuzzyOptions, duration?: number) => {\n return this._open(null, content, duration)\n }\n\n this.primary = (content: FuzzyOptions, duration?: number) => {\n return this._open('primary', content, duration)\n }\n\n this.info = (content: FuzzyOptions, duration?: number) => {\n return this._open('info', content, duration)\n }\n\n this.success = (content: FuzzyOptions, duration?: number) => {\n return this._open('success', content, duration)\n }\n\n this.warning = (content: FuzzyOptions, duration?: number) => {\n return this._open('warning', content, duration)\n }\n\n this.error = (content: FuzzyOptions, duration?: number) => {\n return this._open('error', content, duration)\n }\n }\n\n judge(state: boolean, success: string, error: string, duration?: number): void\n judge(state: boolean, success: MessageOptions, error: string, duration?: number): void\n judge(state: boolean, success: string, error: MessageOptions, duration?: number): void\n judge(state: boolean, success: MessageOptions, error: MessageOptions): void\n judge(\n state: boolean,\n success: string | MessageOptions,\n error: string | MessageOptions,\n duration?: number,\n ) {\n if (state) {\n this.success(success, duration)\n } else {\n this.error(error, duration)\n }\n }\n\n close(key: Key) {\n if (isNull(key)) {\n this.clear()\n } else {\n this._getInstance()?.remove(key)\n }\n }\n\n config({ placement, startOffset, itemGap, ...others }: MessageConfig & MessageOptions) {\n this._configRecord = { placement, startOffset, itemGap }\n this.defaults = { ...this.defaults, ...others }\n\n if (this._installed) {\n const instance = this._getInstance()\n\n if (instance) {\n if (placement) {\n instance.config({\n placement: placementWhiteList.includes(placement) ? placement : placementWhiteList[0],\n })\n }\n\n instance.config({ startOffset, itemGap })\n }\n }\n }\n\n clone() {\n const manager = new MessageManager(this.defaults)\n\n manager._mountedApp = this._mountedApp\n manager._configRecord = this._configRecord\n manager._installed = this._installed\n\n return manager\n }\n\n clear() {\n this._getInstance()?.clear()\n }\n\n destroy() {\n this._mountedEl && this._wrapper?.removeChild(this._mountedEl)\n this._innerApp?.unmount()\n this._container && render(null, this._container)\n destroyObject(this)\n }\n\n isDestroyed() {\n return false\n }\n\n install(app: App, options: ManagerOptions & { property?: string } = {}) {\n const { property, ...others } = options\n\n this._mountedApp = app\n this._installed = true\n this.config(others)\n\n if (property || !app.config.globalProperties.$message) {\n app.config.globalProperties[property || '$message'] = this\n }\n }\n\n transferTo(target: MaybeRef<string | MaybeInstance>) {\n if (!isClient) return\n\n const el = unrefElement(target)\n\n if (el) {\n this._wrapper = el\n\n if (this._instance) {\n this._mountedEl && this._wrapper.appendChild(this._mountedEl)\n } else {\n this._getInstance()\n }\n }\n }\n\n private _getInstance() {\n if (!this._instance && isClient) {\n if (!this._mountedApp) {\n console.warn('[vexip-ui:Message]: App missing, the plugin maybe not installed.')\n\n this._container = document.createElement('div')\n this._innerApp = createApp(Component)\n this._instance = this._innerApp.mount(this._container) as MessageInstance\n } else {\n const vnode = createVNode(Component, null, null)\n\n this._container = document.createElement('div')\n vnode.appContext = this._mountedApp._context\n\n render(vnode, this._container)\n\n this._instance = proxyExposed<MessageInstance>(vnode)\n }\n\n this._mountedEl = this._container.firstElementChild as HTMLElement\n ;(this._wrapper || document.body).appendChild(this._mountedEl)\n }\n\n return this._instance\n }\n\n private _open(type: null | MessageType, content: FuzzyOptions, _duration?: number) {\n if (!isClient) {\n return noop\n }\n\n const options = typeof content === 'string' ? { content, duration: _duration } : content\n\n const key = options.key ?? getKey()\n const message = this._getInstance()!\n\n let timer: ReturnType<typeof setTimeout>\n\n const userCloseFn = options.onClose\n const onClose = () => {\n clearTimeout(timer)\n\n if (typeof userCloseFn === 'function') {\n return userCloseFn()\n }\n }\n\n const userEnterFn = options.onEnter\n const onEnter = () => {\n if (options.liveOnEnter) {\n clearTimeout(timer)\n }\n\n if (typeof userEnterFn === 'function') {\n return userEnterFn()\n }\n }\n\n const userLeaveFn = options.onLeave\n const onLeave = () => {\n if (options.liveOnEnter) {\n clearTimeout(timer)\n setDelayClose()\n }\n\n if (typeof userLeaveFn === 'function') {\n return userLeaveFn()\n }\n }\n\n const item: MessageOptions = {\n ...this.defaults,\n ...options,\n key,\n type: type ?? options.type,\n onClose,\n onEnter,\n onLeave,\n }\n\n if (item.icon && typeof item.icon !== 'function') {\n item.icon = markRaw(item.icon)\n }\n\n message.add(item)\n setDelayClose()\n\n function setDelayClose() {\n const duration = typeof item.duration === 'number' ? item.duration : 3000\n\n if (duration >= 500) {\n timer = setTimeout(() => {\n message.remove(key)\n }, duration)\n }\n }\n\n return () => {\n clearTimeout(timer)\n message.remove(key)\n }\n }\n}\n\nexport const Message = new MessageManager()\n"],"names":["placementWhiteList","count","getKey","MessageManager","options","__publicField","toNumber","content","duration","state","success","error","key","isNull","_a","placement","startOffset","itemGap","others","instance","manager","_b","render","destroyObject","app","property","target","isClient","el","unrefElement","createApp","Component","vnode","createVNode","proxyExposed","type","_duration","noop","message","timer","userCloseFn","onClose","userEnterFn","onEnter","userLeaveFn","onLeave","setDelayClose","item","markRaw","Message"],"mappings":"wYA6BMA,EAAyC,CAAC,MAAO,QAAQ,EAE/D,IAAIC,EAAQ,EAEZ,SAASC,GAAS,CAChB,MAAO,WAAWD,GAAO,EAC3B,CAEO,MAAME,CAAe,CAoB1B,YAAYC,EAA0B,GAAI,CAnB1CC,EAAA,aACAA,EAAA,iBAEAA,EAAA,aACAA,EAAA,gBACAA,EAAA,aACAA,EAAA,gBACAA,EAAA,gBACAA,EAAA,cAEQA,EAAA,oBACAA,EAAA,kBACAA,EAAA,kBACAA,EAAA,mBACAA,EAAA,iBACAA,EAAA,mBACAA,EAAA,mBACAA,EAAA,sBAGID,EAAA,CACR,GAAGA,EACH,SAAUA,EAAQ,SAAWE,EAAS,SAAAF,EAAQ,QAAQ,EAAI,GAC5D,EAEA,KAAK,YAAc,KACnB,KAAK,UAAY,KACjB,KAAK,UAAY,KACjB,KAAK,WAAa,KAClB,KAAK,SAAW,KAChB,KAAK,WAAa,KAClB,KAAK,WAAa,GAClB,KAAK,cAAgB,KACrB,KAAK,KAAO,UACZ,KAAK,SAAW,CAAC,EAEjB,KAAK,OAAOA,CAAO,EAEd,KAAA,KAAO,CAACG,EAAuBC,IAC3B,KAAK,MAAM,KAAMD,EAASC,CAAQ,EAGtC,KAAA,QAAU,CAACD,EAAuBC,IAC9B,KAAK,MAAM,UAAWD,EAASC,CAAQ,EAG3C,KAAA,KAAO,CAACD,EAAuBC,IAC3B,KAAK,MAAM,OAAQD,EAASC,CAAQ,EAGxC,KAAA,QAAU,CAACD,EAAuBC,IAC9B,KAAK,MAAM,UAAWD,EAASC,CAAQ,EAG3C,KAAA,QAAU,CAACD,EAAuBC,IAC9B,KAAK,MAAM,UAAWD,EAASC,CAAQ,EAG3C,KAAA,MAAQ,CAACD,EAAuBC,IAC5B,KAAK,MAAM,QAASD,EAASC,CAAQ,CAC9C,CAOF,MACEC,EACAC,EACAC,EACAH,EACA,CACIC,EACG,KAAA,QAAQC,EAASF,CAAQ,EAEzB,KAAA,MAAMG,EAAOH,CAAQ,CAC5B,CAGF,MAAMI,EAAU,OACVC,EAAAA,OAAOD,CAAG,EACZ,KAAK,MAAM,GAENE,EAAA,KAAA,aAAA,IAAA,MAAAA,EAAgB,OAAOF,EAC9B,CAGF,OAAO,CAAE,UAAAG,EAAW,YAAAC,EAAa,QAAAC,EAAS,GAAGC,GAA0C,CAIrF,GAHA,KAAK,cAAgB,CAAE,UAAAH,EAAW,YAAAC,EAAa,QAAAC,CAAQ,EACvD,KAAK,SAAW,CAAE,GAAG,KAAK,SAAU,GAAGC,CAAO,EAE1C,KAAK,WAAY,CACb,MAAAC,EAAW,KAAK,aAAa,EAE/BA,IACEJ,GACFI,EAAS,OAAO,CACd,UAAWnB,EAAmB,SAASe,CAAS,EAAIA,EAAYf,EAAmB,CAAC,CAAA,CACrF,EAGHmB,EAAS,OAAO,CAAE,YAAAH,EAAa,QAAAC,CAAA,CAAS,EAC1C,CACF,CAGF,OAAQ,CACN,MAAMG,EAAU,IAAIjB,EAAe,KAAK,QAAQ,EAEhD,OAAAiB,EAAQ,YAAc,KAAK,YAC3BA,EAAQ,cAAgB,KAAK,cAC7BA,EAAQ,WAAa,KAAK,WAEnBA,CAAA,CAGT,OAAQ,QACDN,EAAA,KAAA,iBAAA,MAAAA,EAAgB,OAAM,CAG7B,SAAU,SACR,KAAK,cAAcA,EAAA,KAAK,WAAL,MAAAA,EAAe,YAAY,KAAK,cACnDO,EAAA,KAAK,YAAL,MAAAA,EAAgB,UAChB,KAAK,YAAcC,EAAAA,OAAO,KAAM,KAAK,UAAU,EAC/CC,EAAAA,cAAc,IAAI,CAAA,CAGpB,aAAc,CACL,MAAA,EAAA,CAGT,QAAQC,EAAUpB,EAAkD,GAAI,CACtE,KAAM,CAAE,SAAAqB,EAAU,GAAGP,CAAA,EAAWd,EAEhC,KAAK,YAAcoB,EACnB,KAAK,WAAa,GAClB,KAAK,OAAON,CAAM,GAEdO,GAAY,CAACD,EAAI,OAAO,iBAAiB,YAC3CA,EAAI,OAAO,iBAAiBC,GAAY,UAAU,EAAI,KACxD,CAGF,WAAWC,EAA0C,CACnD,GAAI,CAACC,EAAAA,SAAU,OAET,MAAAC,EAAKC,eAAaH,CAAM,EAE1BE,IACF,KAAK,SAAWA,EAEZ,KAAK,UACP,KAAK,YAAc,KAAK,SAAS,YAAY,KAAK,UAAU,EAE5D,KAAK,aAAa,EAEtB,CAGM,cAAe,CACjB,GAAA,CAAC,KAAK,WAAaD,WAAU,CAC3B,GAAA,CAAC,KAAK,YACR,QAAQ,KAAK,kEAAkE,EAE1E,KAAA,WAAa,SAAS,cAAc,KAAK,EACzC,KAAA,UAAYG,YAAUC,CAAS,EACpC,KAAK,UAAY,KAAK,UAAU,MAAM,KAAK,UAAU,MAChD,CACL,MAAMC,EAAQC,EAAA,YAAYF,EAAW,KAAM,IAAI,EAE1C,KAAA,WAAa,SAAS,cAAc,KAAK,EACxCC,EAAA,WAAa,KAAK,YAAY,SAE7BV,SAAAU,EAAO,KAAK,UAAU,EAExB,KAAA,UAAYE,eAA8BF,CAAK,CAAA,CAGjD,KAAA,WAAa,KAAK,WAAW,mBAChC,KAAK,UAAY,SAAS,MAAM,YAAY,KAAK,UAAU,CAAA,CAG/D,OAAO,KAAK,SAAA,CAGN,MAAMG,EAA0B5B,EAAuB6B,EAAoB,CACjF,GAAI,CAACT,EAAAA,SACI,OAAAU,EAAA,KAGH,MAAAjC,EAAU,OAAOG,GAAY,SAAW,CAAE,QAAAA,EAAS,SAAU6B,GAAc7B,EAE3EK,EAAMR,EAAQ,KAAOF,EAAO,EAC5BoC,EAAU,KAAK,aAAa,EAE9B,IAAAC,EAEJ,MAAMC,EAAcpC,EAAQ,QACtBqC,EAAU,IAAM,CAGhB,GAFJ,aAAaF,CAAK,EAEd,OAAOC,GAAgB,WACzB,OAAOA,EAAY,CAEvB,EAEME,EAActC,EAAQ,QACtBuC,EAAU,IAAM,CAKhB,GAJAvC,EAAQ,aACV,aAAamC,CAAK,EAGhB,OAAOG,GAAgB,WACzB,OAAOA,EAAY,CAEvB,EAEME,EAAcxC,EAAQ,QACtByC,EAAU,IAAM,CAMhB,GALAzC,EAAQ,cACV,aAAamC,CAAK,EACJO,EAAA,GAGZ,OAAOF,GAAgB,WACzB,OAAOA,EAAY,CAEvB,EAEMG,EAAuB,CAC3B,GAAG,KAAK,SACR,GAAG3C,EACH,IAAAQ,EACA,KAAMuB,GAAQ/B,EAAQ,KACtB,QAAAqC,EACA,QAAAE,EACA,QAAAE,CACF,EAEIE,EAAK,MAAQ,OAAOA,EAAK,MAAS,aAC/BA,EAAA,KAAOC,UAAQD,EAAK,IAAI,GAG/BT,EAAQ,IAAIS,CAAI,EACFD,EAAA,EAEd,SAASA,GAAgB,CACvB,MAAMtC,EAAW,OAAOuC,EAAK,UAAa,SAAWA,EAAK,SAAW,IAEjEvC,GAAY,MACd+B,EAAQ,WAAW,IAAM,CACvBD,EAAQ,OAAO1B,CAAG,GACjBJ,CAAQ,EACb,CAGF,MAAO,IAAM,CACX,aAAa+B,CAAK,EAClBD,EAAQ,OAAO1B,CAAG,CACpB,CAAA,CAEJ,CAEa,MAAAqC,EAAU,IAAI9C"}