vexip-ui
Version:
A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good
1 lines • 14.6 kB
Source Map (JSON)
{"version":3,"file":"confirm.vue2.cjs","sources":["../../../components/confirm/confirm.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Button } from '@/components/button'\nimport { Icon } from '@/components/icon'\nimport { Modal } from '@/components/modal'\nimport { Renderer } from '@/components/renderer'\n\nimport { nextTick, onMounted, reactive, ref, toRef } from 'vue'\n\nimport { useIcons, useLocale, useNameHelper, useProps } from '@vexip-ui/config'\nimport { isFunction, isPromise } from '@vexip-ui/utils'\nimport { confirmProps } from './props'\n\nimport type { ConfirmButtonType, ConfirmOptions, ConfirmRenderFn, ConfirmState } from './symbol'\n\nconst positionValidator = (value: string | number) => {\n return value === 'auto' || !Number.isNaN(parseFloat(value as string))\n}\nconst positionProp = {\n default: 'auto',\n validator: positionValidator,\n}\n\nconst confirmButtonTypes = Object.freeze<ConfirmButtonType[]>([\n 'default',\n 'primary',\n 'info',\n 'success',\n 'warning',\n 'error',\n])\n\ndefineOptions({ name: 'Confirm' })\n\nconst _props = defineProps(confirmProps)\nconst props = useProps('confirm', _props, {\n locale: null,\n width: {\n default: 420,\n validator: positionValidator,\n },\n height: positionProp,\n top: positionProp,\n left: positionProp,\n right: positionProp,\n bottom: positionProp,\n maskClose: false,\n confirmType: {\n default: 'primary',\n validator: value => confirmButtonTypes.includes(value),\n },\n cancelType: {\n default: 'default',\n validator: value => confirmButtonTypes.includes(value),\n },\n confirmText: null,\n cancelText: null,\n icon: {\n isFunc: true,\n default: false,\n },\n className: null,\n style: null,\n renderer: {\n default: null,\n isFunc: true,\n static: true,\n },\n iconProps: () => ({}),\n closable: false,\n parseHtml: false,\n contentAlign: 'left',\n actionsAlign: 'right',\n cancelable: true,\n xOffset: 0,\n yOffset: 0,\n})\n\nconst nh = useNameHelper('confirm')\nconst icons = useIcons()\nconst locale = useLocale('confirm', toRef(props, 'locale'))\n\nconst commonProps = [\n 'className',\n 'style',\n 'icon',\n 'iconProps',\n 'maskClose',\n 'confirmType',\n 'cancelType',\n 'confirmText',\n 'cancelText',\n 'parseHtml',\n 'closable',\n 'contentAlign',\n 'actionsAlign',\n 'cancelable',\n 'width',\n 'height',\n 'top',\n 'right',\n 'bottom',\n 'left',\n 'xOffset',\n 'yOffset',\n] as const\n\nconst state = reactive<ConfirmState>({\n ...commonProps.reduce((prev, current) => ((prev[current] = props[current]), prev), {} as any),\n visible: false,\n loading: false,\n title: '',\n content: '',\n raw: {},\n})\n\nconst rendererR = ref<ConfirmRenderFn | null>(props.renderer)\n\nlet beforeConfirmR: (() => unknown) | null = null\n\nlet onConfirm: (() => void) | null = null\nlet onCancel: (() => void) | null = null\n\nconst mountedPromise = new Promise<void>(resolve => {\n onMounted(() => {\n nextTick(resolve)\n })\n})\n\ndefineExpose({ state, openConfirm, closeConfirm: handleCancel, handleReset })\n\nasync function openConfirm(options: ConfirmOptions) {\n await mountedPromise\n\n return await new Promise<boolean>(resolve => {\n for (const prop of commonProps) {\n ;(state as any)[prop] = options[prop] ?? props[prop]\n }\n\n state.title = options.title ?? ''\n state.content = options.content ?? ''\n\n state.raw = options\n\n rendererR.value = isFunction(options.renderer) ? options.renderer : props.renderer\n beforeConfirmR = isFunction(options.onBeforeConfirm) ? options.onBeforeConfirm : null\n\n if (isFunction(rendererR.value)) {\n const render = rendererR.value\n\n rendererR.value = () => render(state, handleConfirm, handleCancel)\n }\n\n state.visible = true\n onConfirm = () => {\n resolve(true)\n beforeConfirmR = null\n }\n onCancel = () => {\n resolve(false)\n beforeConfirmR = null\n }\n })\n}\n\nasync function handleConfirm() {\n state.loading = true\n\n if (isFunction(beforeConfirmR)) {\n let result = beforeConfirmR()\n\n if (isPromise(result)) {\n result = await result\n }\n\n if (result === false) {\n state.loading = false\n\n return\n }\n }\n\n state.visible = false\n state.loading = false\n\n if (isFunction(onConfirm)) {\n onConfirm()\n onConfirm = null\n }\n}\n\nfunction handleCancel() {\n state.visible = false\n\n if (isFunction(onCancel)) {\n onCancel()\n onCancel = null\n }\n}\n\nfunction handleReset() {\n for (const prop of commonProps) {\n ;(state as any)[prop] = props[prop]\n }\n\n state.visible = false\n state.loading = false\n state.title = ''\n state.content = ''\n\n state.raw = {}\n\n rendererR.value = props.renderer\n}\n</script>\n\n<template>\n <!-- eslint-disable vue/no-v-html -->\n <div :class=\"[nh.b(), nh.bs('vars')]\">\n <Modal\n no-footer\n :auto-remove=\"false\"\n :transfer=\"false\"\n :closable=\"false\"\n :active=\"state.visible\"\n :modal-class=\"state.className\"\n :modal-style=\"state.style\"\n :width=\"state.width\"\n :height=\"state.height\"\n :top=\"state.top\"\n :left=\"state.left\"\n :right=\"state.right\"\n :bottom=\"state.bottom\"\n :x-offset=\"state.xOffset\"\n :y-offset=\"state.yOffset\"\n :mask-close=\"state.maskClose\"\n @hide=\"handleReset\"\n >\n <Renderer v-if=\"isFunction(rendererR)\" :renderer=\"rendererR\"></Renderer>\n <template v-else>\n <div v-if=\"state.title\" :class=\"nh.be('header')\">\n <div :class=\"nh.be('title')\">\n <Renderer v-if=\"typeof state.title === 'function'\" :renderer=\"state.title\"></Renderer>\n <template v-else>\n {{ state.title }}\n </template>\n </div>\n <button\n v-if=\"state.closable\"\n type=\"button\"\n :class=\"nh.be('close')\"\n @mousedown.stop\n @click=\"handleCancel\"\n >\n <slot name=\"close\">\n <Icon\n v-bind=\"icons.close\"\n :scale=\"+(icons.close.scale || 1) * 1.2\"\n label=\"close\"\n ></Icon>\n </slot>\n </button>\n </div>\n <div\n :class=\"[\n nh.be('body'),\n nh.bem('body', state.contentAlign),\n !state.title && nh.bem('body', 'no-title')\n ]\"\n >\n <div v-if=\"state.icon !== false\" :class=\"nh.be('icon')\">\n <Icon\n v-if=\"typeof state.icon !== 'boolean'\"\n v-bind=\"state.iconProps\"\n :icon=\"state.icon\"\n ></Icon>\n <Icon\n v-else\n :scale=\"2.2\"\n v-bind=\"{\n ...(state.cancelable ? icons.question : icons.warning),\n ...state.iconProps\n }\"\n :icon=\"(state.cancelable ? icons.question : icons.warning).icon\"\n ></Icon>\n </div>\n <Renderer v-if=\"typeof state.content === 'function'\" :renderer=\"state.content\"></Renderer>\n <template v-else>\n <div v-if=\"state.parseHtml\" :class=\"nh.be('content')\" v-html=\"state.content\"></div>\n <div v-else :class=\"nh.be('content')\">\n {{ state.content }}\n </div>\n </template>\n </div>\n <div :class=\"[nh.be('footer'), nh.bem('footer', state.actionsAlign)]\">\n <Button\n v-if=\"state.cancelable\"\n :class=\"[nh.be('button'), nh.bem('button', 'cancel')]\"\n inherit\n no-pulse\n :type=\"state.cancelType\"\n @click=\"handleCancel\"\n >\n {{ state.cancelText || locale.cancel }}\n </Button>\n <Button\n :class=\"[nh.be('button'), nh.bem('button', 'confirm')]\"\n inherit\n no-pulse\n :type=\"state.confirmType\"\n :loading=\"state.loading\"\n @click=\"handleConfirm\"\n >\n {{ state.confirmText || locale.confirm }}\n </Button>\n </div>\n </template>\n </Modal>\n </div>\n</template>\n"],"names":["positionValidator","value","positionProp","confirmButtonTypes","_props","__props","props","useProps","nh","useNameHelper","icons","useIcons","locale","useLocale","toRef","commonProps","state","reactive","prev","current","rendererR","ref","beforeConfirmR","onConfirm","onCancel","mountedPromise","resolve","onMounted","nextTick","__expose","openConfirm","handleCancel","handleReset","options","prop","isFunction","render","handleConfirm","result","isPromise","_createElementBlock","_unref","_createVNode","Modal","_createBlock","Renderer","_Fragment","_normalizeClass","_createElementVNode","_createTextVNode","_toDisplayString","_renderSlot","_ctx","Icon","_mergeProps","_openBlock","Button"],"mappings":"qdAcM,MAAAA,EAAqBC,GAClBA,IAAU,QAAU,CAAC,OAAO,MAAM,WAAWA,CAAe,CAAC,EAEhEC,EAAe,CACnB,QAAS,OACT,UAAWF,CACb,EAEMG,EAAqB,OAAO,OAA4B,CAC5D,UACA,UACA,OACA,UACA,UACA,OAAA,CACD,EAIKC,EAASC,EACTC,EAAQC,EAAAA,SAAS,UAAWH,EAAQ,CACxC,OAAQ,KACR,MAAO,CACL,QAAS,IACT,UAAWJ,CACb,EACA,OAAQE,EACR,IAAKA,EACL,KAAMA,EACN,MAAOA,EACP,OAAQA,EACR,UAAW,GACX,YAAa,CACX,QAAS,UACT,UAAWD,GAASE,EAAmB,SAASF,CAAK,CACvD,EACA,WAAY,CACV,QAAS,UACT,UAAWA,GAASE,EAAmB,SAASF,CAAK,CACvD,EACA,YAAa,KACb,WAAY,KACZ,KAAM,CACJ,OAAQ,GACR,QAAS,EACX,EACA,UAAW,KACX,MAAO,KACP,SAAU,CACR,QAAS,KACT,OAAQ,GACR,OAAQ,EACV,EACA,UAAW,KAAO,CAAA,GAClB,SAAU,GACV,UAAW,GACX,aAAc,OACd,aAAc,QACd,WAAY,GACZ,QAAS,EACT,QAAS,CAAA,CACV,EAEKO,EAAKC,gBAAc,SAAS,EAC5BC,EAAQC,EAAAA,SAAS,EACjBC,EAASC,EAAAA,UAAU,UAAWC,EAAAA,MAAMR,EAAO,QAAQ,CAAC,EAEpDS,EAAc,CAClB,YACA,QACA,OACA,YACA,YACA,cACA,aACA,cACA,aACA,YACA,WACA,eACA,eACA,aACA,QACA,SACA,MACA,QACA,SACA,OACA,UACA,SACF,EAEMC,EAAQC,EAAAA,SAAuB,CACnC,GAAGF,EAAY,OAAO,CAACG,EAAMC,KAAcD,EAAKC,CAAO,EAAIb,EAAMa,CAAO,EAAID,GAAO,CAAA,CAAS,EAC5F,QAAS,GACT,QAAS,GACT,MAAO,GACP,QAAS,GACT,IAAK,CAAA,CAAC,CACP,EAEKE,EAAYC,EAAAA,IAA4Bf,EAAM,QAAQ,EAE5D,IAAIgB,EAAyC,KAEzCC,EAAiC,KACjCC,EAAgC,KAE9B,MAAAC,EAAiB,IAAI,QAAyBC,GAAA,CAClDC,EAAAA,UAAU,IAAM,CACdC,EAAAA,SAASF,CAAO,CAAA,CACjB,CAAA,CACF,EAEDG,EAAa,CAAE,MAAAb,EAAO,YAAAc,EAAa,aAAcC,EAAc,YAAAC,EAAa,EAE5E,eAAeF,EAAYG,EAAyB,CAC5C,aAAAR,EAEC,MAAM,IAAI,QAA4BC,GAAA,CAC3C,UAAWQ,KAAQnB,EACfC,EAAckB,CAAI,EAAID,EAAQC,CAAI,GAAK5B,EAAM4B,CAAI,EAWjD,GARElB,EAAA,MAAQiB,EAAQ,OAAS,GACzBjB,EAAA,QAAUiB,EAAQ,SAAW,GAEnCjB,EAAM,IAAMiB,EAEZb,EAAU,MAAQe,EAAAA,WAAWF,EAAQ,QAAQ,EAAIA,EAAQ,SAAW3B,EAAM,SAC1EgB,EAAiBa,EAAW,WAAAF,EAAQ,eAAe,EAAIA,EAAQ,gBAAkB,KAE7EE,EAAA,WAAWf,EAAU,KAAK,EAAG,CAC/B,MAAMgB,EAAShB,EAAU,MAEzBA,EAAU,MAAQ,IAAMgB,EAAOpB,EAAOqB,EAAeN,CAAY,CAAA,CAGnEf,EAAM,QAAU,GAChBO,EAAY,IAAM,CAChBG,EAAQ,EAAI,EACKJ,EAAA,IACnB,EACAE,EAAW,IAAM,CACfE,EAAQ,EAAK,EACIJ,EAAA,IACnB,CAAA,CACD,CAAA,CAGH,eAAee,GAAgB,CAGzB,GAFJrB,EAAM,QAAU,GAEZmB,EAAAA,WAAWb,CAAc,EAAG,CAC9B,IAAIgB,EAAShB,EAAe,EAM5B,GAJIiB,EAAAA,UAAUD,CAAM,IAClBA,EAAS,MAAMA,GAGbA,IAAW,GAAO,CACpBtB,EAAM,QAAU,GAEhB,MAAA,CACF,CAGFA,EAAM,QAAU,GAChBA,EAAM,QAAU,GAEZmB,EAAAA,WAAWZ,CAAS,IACZA,EAAA,EACEA,EAAA,KACd,CAGF,SAASQ,GAAe,CACtBf,EAAM,QAAU,GAEZmB,EAAAA,WAAWX,CAAQ,IACZA,EAAA,EACEA,EAAA,KACb,CAGF,SAASQ,GAAc,CACrB,UAAWE,KAAQnB,EACfC,EAAckB,CAAI,EAAI5B,EAAM4B,CAAI,EAGpClB,EAAM,QAAU,GAChBA,EAAM,QAAU,GAChBA,EAAM,MAAQ,GACdA,EAAM,QAAU,GAEhBA,EAAM,IAAM,CAAC,EAEbI,EAAU,MAAQd,EAAM,QAAA,6BAMxBkC,EAAA,mBAoGM,MAAA,CApGA,wBAAQC,EAAA,MAAEjC,CAAA,EAAC,IAAKiC,EAAAA,MAAAjC,CAAA,EAAG,GAAE,MAAA,CAAA,CAAA,CAAA,GACzBkC,cAkGQD,EAAAA,MAAAE,EAAAA,KAAA,EAAA,CAjGN,YAAA,GACC,cAAa,GACb,SAAU,GACV,SAAU,GACV,OAAQ3B,EAAM,QACd,cAAaA,EAAM,UACnB,cAAaA,EAAM,MACnB,MAAOA,EAAM,MACb,OAAQA,EAAM,OACd,IAAKA,EAAM,IACX,KAAMA,EAAM,KACZ,MAAOA,EAAM,MACb,OAAQA,EAAM,OACd,WAAUA,EAAM,QAChB,WAAUA,EAAM,QAChB,aAAYA,EAAM,UAClB,OAAMgB,CAAA,qBAEP,IAAwE,CAAxDS,QAAAN,EAAAA,UAAA,EAAWf,EAAS,KAAA,iBAApCwB,EAAA,YAAwEH,QAAAI,CAAA,EAAA,OAAhC,SAAUzB,EAAS,4CAC3DoB,EAAAA,mBA6EWM,EAAA,SAAA,CAAA,IAAA,GAAA,CA5EE9B,EAAM,qBAAjBwB,EAAAA,mBAsBM,MAAA,OAtBmB,MAAKO,EAAE,eAAAN,EAAA,MAAEjC,CAAA,EAAC,GAAE,QAAA,CAAA,CAAA,GACnCwC,EAAAA,mBAKM,MAAA,CALA,MAAKD,EAAE,eAAAN,EAAA,MAAEjC,CAAA,EAAC,GAAE,OAAA,CAAA,CAAA,GACO,OAAAQ,EAAM,OAAK,wBAAlC,EAAA4B,cAAsFH,EAAAA,MAAAI,CAAA,EAAA,OAAlC,SAAU7B,EAAM,4CACpEwB,EAAAA,mBAEWM,EAAA,SAAA,CAAA,IAAA,GAAA,CADNG,EAAAA,gBAAAC,EAAA,gBAAAlC,EAAM,KAAK,EAAA,CAAA,YAIVA,EAAM,wBADdwB,EAAAA,mBAcS,SAAA,OAZP,KAAK,SACJ,MAAKO,EAAE,eAAAN,EAAA,MAAEjC,CAAA,EAAC,GAAE,OAAA,CAAA,EACZ,wCAAD,IAAe,CAAA,EAAA,CAAA,MAAA,CAAA,GACd,QAAOuB,CAAA,GAERoB,EAAAA,WAMOC,oBANP,IAMO,CALLV,EAAA,YAIQD,QAJRY,CAAA,EAAAC,aACUb,QAGF/B,CAAA,EAHQ,MAAK,CAClB,MAAS,EAAA+B,EAAAA,MAAA/B,CAAA,EAAM,MAAM,OAAK,GAAA,IAC3B,MAAM,kGAKdsC,EAAAA,mBA8BM,MAAA,CA7BH,MAAKD,EAAAA,eAAA,CAAgBN,EAAAA,MAAAjC,CAAA,EAAG,GAAE,MAAA,EAAsBiC,QAAAjC,CAAA,EAAG,IAAY,OAAAQ,EAAM,YAAY,EAAgB,CAAAA,EAAM,OAASyB,EAAA,MAAAjC,CAAA,EAAG,IAAG,OAAA,UAAA,MAM5GQ,EAAM,OAAI,kBAArBwB,EAAAA,mBAeM,MAAA,OAf4B,MAAKO,EAAE,eAAAN,EAAA,MAAEjC,CAAA,EAAC,GAAE,MAAA,CAAA,CAAA,GAE7B,OAAAQ,EAAM,MAAI,WADzBuC,EAAAA,YAAAX,EAIQ,YAAAH,EAAA,MAJRY,CAAA,EAAAC,EAAAA,WAIQ,CAFE,IAAA,CAAA,EAAAtC,EAAM,UAAS,CACtB,KAAMA,EAAM,2BAEfuC,YAAA,EAAAX,cAQQH,EAAAA,SARRa,EAAAA,WAQQ,OANL,MAAO,GAAA,MACsBtC,EAAM,WAAayB,QAAA/B,CAAA,EAAM,SAAW+B,EAAAA,MAAK/B,CAAA,EAAC,QAA6B,GAAAM,EAAM,SAAA,GAI1G,MAAOA,EAAM,WAAayB,QAAA/B,CAAA,EAAM,SAAW+B,EAAA,MAAA/B,CAAA,EAAM,SAAS,2DAGxC,OAAAM,EAAM,SAAO,wBAApC,EAAA4B,cAA0FH,EAAAA,MAAAI,CAAA,EAAA,OAApC,SAAU7B,EAAM,8CACtEwB,EAAAA,mBAKWM,EAAA,SAAA,CAAA,IAAA,GAAA,CAJE9B,EAAM,yBAAjBwB,EAAAA,mBAAmF,MAAA,OAAtD,MAAKO,EAAE,eAAAN,EAAA,MAAEjC,CAAA,EAAC,GAAE,SAAA,CAAA,EAAa,UAAQQ,EAAM,OAAA,6BACpEwB,qBAEM,MAAA,OAFO,MAAKO,EAAE,eAAAN,EAAA,MAAEjC,CAAA,EAAC,GAAE,SAAA,CAAA,CACpB,EAAA0C,kBAAAlC,EAAM,OAAO,EAAA,CAAA,aAItBgC,EAAAA,mBAqBM,MAAA,CArBA,MAAKD,EAAA,eAAA,CAAGN,EAAAA,MAAEjC,CAAA,EAAC,GAAE,QAAA,EAAYiC,EAAAA,MAAEjC,CAAA,EAAC,IAAG,SAAWQ,EAAM,YAAY,CAAA,CAAA,CAAA,GAExDA,EAAM,0BADd4B,EAAAA,YASSH,EAAAA,MAAAe,CAAA,EAAA,OAPN,wBAAQf,EAAE,MAAAjC,CAAA,EAAC,GAAc,QAAA,EAAAiC,EAAA,MAAAjC,CAAA,EAAG,IAAG,SAAA,QAAA,CAAA,CAAA,EAChC,QAAA,GACA,WAAA,GACC,KAAMQ,EAAM,WACZ,QAAOe,CAAA,qBAER,IAAuC,CAApCkB,kBAAAC,EAAAA,gBAAAlC,EAAM,YAAcyB,QAAA7B,CAAA,EAAO,MAAM,EAAA,CAAA,CAAA,yDAEtC8B,cASSD,EAAAA,MAAAe,CAAA,EAAA,CARN,wBAAQf,EAAE,MAAAjC,CAAA,EAAC,GAAc,QAAA,EAAAiC,EAAA,MAAAjC,CAAA,EAAG,IAAG,SAAA,SAAA,CAAA,CAAA,EAChC,QAAA,GACA,WAAA,GACC,KAAMQ,EAAM,YACZ,QAASA,EAAM,QACf,QAAOqB,CAAA,qBAER,IAAyC,CAAtCY,kBAAAC,EAAAA,gBAAAlC,EAAM,aAAeyB,QAAA7B,CAAA,EAAO,OAAO,EAAA,CAAA,CAAA"}