{"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":"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"}