{"version":3,"file":"modal.vue2.mjs","sources":["../../../components/modal/modal.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Button } from '@/components/button'\nimport { Icon } from '@/components/icon'\nimport { Masker } from '@/components/masker'\nimport { Renderer } from '@/components/renderer'\nimport { ResizeObserver } from '@/components/resize-observer'\n\nimport { computed, nextTick, reactive, ref, shallowReadonly, toRef, watch } from 'vue'\n\nimport {\n  createSizeProp,\n  emitEvent,\n  useIcons,\n  useLocale,\n  useNameHelper,\n  useProps\n} from '@vexip-ui/config'\nimport { useMoving } from '@vexip-ui/hooks'\nimport { getGlobalCount, isNull, isPromise, isValidNumber, toNumber } from '@vexip-ui/utils'\nimport { modalProps, positionProp } from './props'\n\nimport type { MaskerExposed } from '@/components/masker'\nimport type { ModalSlots } from './symbol'\n\ndefineOptions({ name: 'Modal' })\n\nconst nh = useNameHelper('modal')\n\nconst _props = defineProps(modalProps)\nconst props = useProps('modal', _props, {\n  locale: null,\n  transfer: false,\n  active: {\n    default: false,\n    static: true\n  },\n  width: positionProp,\n  height: positionProp,\n  top: positionProp,\n  left: positionProp,\n  right: positionProp,\n  bottom: positionProp,\n  title: '',\n  closable: true,\n  inner: false,\n  maskClose: true,\n  modalClass: null,\n  modalStyle: null,\n  noFooter: false,\n  hideMask: false,\n  draggable: false,\n  resizable: false,\n  onBeforeClose: {\n    default: null,\n    isFunc: true\n  },\n  loading: false,\n  minWidth: 150,\n  minHeight: 120,\n  transitionName: () => nh.ns('ease'),\n  confirmText: null,\n  cancelText: null,\n  autoRemove: false,\n  confirmType: 'primary',\n  cancelType: 'default',\n  actionSize: createSizeProp('small'),\n  undivided: false,\n  xOffset: 0,\n  yOffset: 0,\n  disableEsc: false,\n  slots: () => ({})\n})\n\nconst emit = defineEmits(['update:active'])\n\nconst slots = defineSlots<ModalSlots>()\n\nconst locale = useLocale('modal', toRef(props, 'locale'))\nconst icons = useIcons()\n\nfunction isSpecified(value?: string | number) {\n  return !isNull(value) && value !== 'auto'\n}\n\nfunction normalizeStyle(value?: string | number) {\n  return isValidNumber(value, true)\n    ? `${toNumber(value)}px`\n    : isNull(value)\n      ? 'auto'\n      : String(value)\n}\n\nconst currentActive = ref(props.active)\nconst rect = reactive({\n  top: normalizeStyle(props.top),\n  right: normalizeStyle(props.right),\n  bottom: normalizeStyle(props.bottom),\n  left: normalizeStyle(props.left),\n  width: normalizeStyle(props.width),\n  height: normalizeStyle(props.height)\n})\nconst maskerRect = reactive({ width: 0, height: 0 })\nconst modalRect = reactive({ width: 0, height: 0 })\n\nconst idIndex = `${getGlobalCount()}`\nconst transformed = ref(false)\n\nconst masker = ref<MaskerExposed>()\nconst wrapper = ref<HTMLElement>()\nconst footer = ref<HTMLElement>()\n\nconst uselessTop = computed(() => {\n  return props.top === 'auto' && isSpecified(props.bottom) && isSpecified(props.height)\n})\nconst uselessLeft = computed(() => {\n  return props.left === 'auto' && isSpecified(props.right) && isSpecified(props.width)\n})\n\nconst { target: header, moving: dragging } = useMoving({\n  capture: false,\n  onStart: (state, event) => {\n    if (!wrapper.value || !props.draggable || event.button > 0) {\n      return false\n    }\n\n    transferRect(false)\n\n    transformed.value = true\n    state.xStart = parseFloat(rect.left)\n    state.yStart = parseFloat(rect.top)\n\n    emitEvent(props.onDragStart, {\n      top: state.yStart,\n      left: state.xStart\n    })\n  },\n  onMove: state => {\n    rect.left = `${state.xEnd}px`\n    rect.top = `${state.yEnd}px`\n\n    emitEvent(props.onDragMove, {\n      top: state.yEnd,\n      left: state.xEnd\n    })\n  },\n  onEnd: state => {\n    emitEvent(props.onDragEnd, {\n      top: state.yEnd,\n      left: state.xEnd\n    })\n  }\n})\n\nconst { target: resizer, moving: resizing } = useMoving({\n  onStart: (state, event) => {\n    if (!wrapper.value || !props.resizable || event.button > 0) {\n      return false\n    }\n\n    transferRect()\n\n    let minHeight = 32\n\n    if (header.value) {\n      minHeight += header.value.offsetHeight\n    }\n\n    if (footer.value) {\n      minHeight += footer.value.offsetHeight\n    }\n\n    transformed.value = true\n    state.xStart = parseFloat(rect.width)\n    state.yStart = parseFloat(rect.height)\n    state.minHeight = Math.max(minHeight, props.minHeight)\n\n    emitEvent(props.onResizeStart, {\n      width: state.xStart,\n      height: state.yStart\n    })\n  },\n  onMove: state => {\n    const width = Math.max(props.minWidth, state.xEnd, 32)\n    const height = Math.max(state.minHeight as number, state.yEnd)\n\n    rect.width = `${width}px`\n    rect.height = `${height}px`\n\n    emitEvent(props.onResizeMove, { width, height })\n  },\n  onEnd: state => {\n    const width = Math.max(props.minWidth, state.xEnd, 32)\n    const height = Math.max(state.minHeight as number, state.yEnd)\n\n    emitEvent(props.onResizeEnd, { width, height })\n  }\n})\n\n// const shouldParse = computed(() => !props.draggable && !props.resizable)\nconst className = computed(() => {\n  return [\n    nh.b(),\n    nh.bs('vars'),\n    {\n      [nh.bm('inherit')]: props.inherit,\n      [nh.bm('inner')]: props.inner,\n      [nh.bm('draggable')]: props.draggable,\n      [nh.bm('resizable')]: props.resizable,\n      [nh.bm('undivided')]: props.undivided\n    }\n  ]\n})\nconst wrapperClass = computed(() => {\n  return [\n    nh.be('wrapper'),\n    {\n      [nh.bem('wrapper', 'closable')]: props.closable,\n      [nh.bem('wrapper', 'dragging')]: dragging.value,\n      [nh.bem('wrapper', 'resizing')]: resizing.value\n    },\n    props.modalClass\n  ]\n})\nconst transform = computed(() => {\n  const transforms: string[] = []\n\n  if (props.xOffset) {\n    transforms.push(`translateX(${normalizeStyle(props.xOffset)})`)\n  }\n\n  if (props.yOffset) {\n    transforms.push(`translateY(${normalizeStyle(props.yOffset)})`)\n  }\n\n  if (transforms.length) {\n    transforms.push('translateZ(0)')\n  }\n\n  return transforms.length ? transforms.join(' ') : undefined\n})\nconst wrapperStyle = computed(() => {\n  return [\n    props.modalStyle,\n    {\n      ...rect,\n      height: rect.height !== 'auto' ? rect.height : undefined,\n      transform: transform.value\n    }\n  ]\n})\nconst transformOrigin = computed(() => {\n  const origin = { x: '50%', y: '50%' }\n\n  if (transformed.value) {\n    origin.x = `${parseFloat(rect.left) + 0.5 * modalRect.width}px`\n    origin.y = `${parseFloat(rect.top) + 0.5 * modalRect.height}px`\n  } else {\n    if (uselessTop.value) {\n      origin.y = `calc(100% - ${parseFloat(rect.bottom) + 0.5 * parseFloat(rect.height)}px)`\n    } else if (isSpecified(props.top)) {\n      const top = parseFloat(rect.top)\n\n      if (isSpecified(props.height)) {\n        origin.y = `${top + 0.5 * parseFloat(rect.height)}px`\n      } else if (isSpecified(props.bottom)) {\n        const bottom = parseFloat(rect.bottom)\n        const height = maskerRect.height - top - bottom\n\n        origin.y = `${top + 0.5 * height}px`\n      } else {\n        origin.y = `${parseFloat(rect.top) + 0.5 * modalRect.height}px`\n      }\n    }\n\n    if (uselessLeft.value) {\n      origin.x = `calc(100% - ${parseFloat(rect.right) + 0.5 * parseFloat(rect.width)}px)`\n    } else if (isSpecified(props.left)) {\n      const left = parseFloat(rect.left)\n\n      if (isSpecified(props.width)) {\n        origin.x = `${left + 0.5 * parseFloat(rect.width)}px`\n      } else if (isSpecified(props.right)) {\n        const right = parseFloat(rect.right)\n        const width = maskerRect.width - left - right\n\n        origin.x = `${left + 0.5 * width}px`\n      } else {\n        origin.x = `${parseFloat(rect.left) + 0.5 * modalRect.width}px`\n      }\n    }\n  }\n\n  return `${origin.x} ${origin.y}`\n})\nconst hasHeader = computed(() => {\n  return !!(slots.header || slots.title || props.title || props.slots.header || props.slots.title)\n})\nconst titleId = computed(() => `${nh.bs(idIndex)}__title`)\nconst bodyId = computed(() => `${nh.bs(idIndex)}__body`)\n\nfor (const style of Object.keys(rect) as Array<keyof typeof rect>) {\n  watch(\n    () => props[style],\n    value => {\n      rect[style] = normalizeStyle(value)\n    }\n  )\n}\n\nwatch(\n  () => props.active,\n  value => {\n    currentActive.value = value\n  }\n)\nwatch(currentActive, value => {\n  props.hideMask && value && handleResize()\n})\nwatch([() => props.top, () => props.bottom, () => props.height], () => {\n  currentActive.value && nextTick(computeTop)\n})\nwatch([() => props.left, () => props.right, () => props.width], () => {\n  currentActive.value && nextTick(computeLeft)\n})\n\nconst handleResize = () => {\n  if (currentActive.value && !transformed.value) {\n    nextTick(() => {\n      computeTop()\n      computeLeft()\n    })\n  }\n\n  if (masker.value?.wrapper) {\n    maskerRect.width = masker.value.wrapper.offsetWidth\n    maskerRect.height = masker.value.wrapper.offsetHeight\n  }\n}\n\ndefineExpose({\n  dragging,\n  resizing,\n  titleId,\n  bodyId,\n  wrapper,\n  header,\n  footer,\n  resizer,\n  handleResize,\n  handleConfirm,\n  handleCancel,\n  handleClose\n})\n\nconst slotParams = shallowReadonly(\n  reactive({\n    dragging,\n    resizing,\n    handleResize,\n    handleConfirm,\n    handleCancel,\n    handleClose\n  })\n)\n\nfunction setActive(active: boolean) {\n  if (currentActive.value === active) return\n\n  currentActive.value = active\n\n  emit('update:active', active)\n  emitEvent(props.onToggle, active)\n}\n\nfunction findPositionalParent() {\n  if (!wrapper.value) return document.body\n\n  let parentElement = wrapper.value.parentElement as HTMLElement\n\n  while (parentElement && parentElement !== document.body) {\n    if (getComputedStyle(parentElement).position !== 'static') {\n      return parentElement\n    }\n\n    parentElement = parentElement.parentElement as HTMLElement\n  }\n\n  return parentElement\n}\n\nfunction computeTop() {\n  if (!wrapper.value || props.top !== 'auto' || uselessTop.value) return\n\n  const currentHeight = wrapper.value.offsetHeight\n\n  if (props.inner) {\n    rect.top = `${(findPositionalParent().offsetHeight - currentHeight) / 2}px`\n  } else {\n    rect.top = `${(window.innerHeight - currentHeight) / 2 - 20}px`\n  }\n}\n\nfunction computeLeft() {\n  if (!wrapper.value || props.left !== 'auto' || uselessLeft.value) return\n\n  const currentWidth = wrapper.value.offsetWidth\n\n  if (props.inner) {\n    rect.left = `${(findPositionalParent().offsetWidth - currentWidth) / 2}px`\n  } else {\n    rect.left = `${(window.innerWidth - currentWidth) / 2}px`\n  }\n}\n\nfunction transferRect(withSize = true) {\n  if (!wrapper.value) return\n\n  const { offsetWidth, offsetHeight, offsetTop, offsetLeft } = wrapper.value\n\n  // If user is using top/bottom or right/left to specify size,\n  // here need to force transfer to use offset size\n  if (\n    !withSize &&\n    ((!uselessTop.value && props.bottom !== 'auto') ||\n      (!uselessLeft.value && props.right !== 'auto'))\n  ) {\n    withSize = true\n  }\n\n  Object.assign(\n    rect,\n    {\n      top: `${offsetTop}px`,\n      right: 'auto',\n      bottom: 'auto',\n      left: `${offsetLeft}px`\n    },\n    withSize\n      ? {\n          width: `${offsetWidth}px`,\n          height: `${offsetHeight}px`\n        }\n      : {}\n  )\n}\n\nfunction handleConfirm() {\n  handleClose(true)\n  emitEvent(props.onConfirm)\n}\n\nfunction handleCancel() {\n  handleClose(false)\n  emitEvent(props.onCancel)\n}\n\nasync function handleClose(isConfirm = false) {\n  let result: unknown = true\n\n  if (typeof props.onBeforeClose === 'function') {\n    result = props.onBeforeClose(isConfirm)\n\n    if (isPromise(result)) {\n      result = await result\n    }\n  }\n\n  if (result !== false) {\n    await nextTick(() => {\n      setActive(false)\n      emitEvent(props.onClose)\n    })\n  }\n\n  return result\n}\n\nfunction handleShow() {\n  emitEvent(props.onShow)\n}\n\nfunction handleHide() {\n  emitEvent(props.onHide)\n}\n\nfunction handleMaskClose() {\n  if (props.maskClose) {\n    return handleClose(false)\n  }\n}\n\nfunction handleModalResize(entry: ResizeObserverEntry) {\n  const box = entry.borderBoxSize?.[0]\n\n  if (box) {\n    modalRect.width = box.inlineSize\n    modalRect.height = box.blockSize\n  } else {\n    modalRect.width = entry.contentRect.width\n    modalRect.height = entry.contentRect.height\n  }\n}\n</script>\n\n<template>\n  <Masker\n    ref=\"masker\"\n    v-model:active=\"currentActive\"\n    :inherit=\"props.inherit\"\n    :class=\"className\"\n    :inner=\"props.inner\"\n    :transition-name=\"props.transitionName\"\n    :closable=\"props.maskClose\"\n    :disabled=\"props.hideMask\"\n    :on-before-close=\"handleMaskClose\"\n    :transfer=\"props.transfer\"\n    :auto-remove=\"props.autoRemove\"\n    :disable-esc=\"props.disableEsc\"\n    @show=\"handleShow\"\n    @hide=\"handleHide\"\n    @resize=\"handleResize\"\n  >\n    <template #default=\"{ show }\">\n      <section v-show=\"show\" :class=\"nh.be('transform')\" :style=\"{ transformOrigin }\">\n        <ResizeObserver @resize=\"handleModalResize\">\n          <div\n            ref=\"wrapper\"\n            :class=\"wrapperClass\"\n            role=\"dialog\"\n            :style=\"wrapperStyle\"\n            :aria-modal=\"show ? 'true' : undefined\"\n            :aria-labelledby=\"titleId\"\n            :aria-describedby=\"bodyId\"\n          >\n            <div v-if=\"hasHeader\" ref=\"header\" :class=\"nh.be('header')\">\n              <slot name=\"header\" v-bind=\"slotParams\">\n                <Renderer :renderer=\"props.slots.header\" :data=\"slotParams\">\n                  <div :id=\"titleId\" :class=\"nh.be('title')\">\n                    <slot name=\"title\" v-bind=\"slotParams\">\n                      <Renderer :renderer=\"props.slots.title\" :data=\"slotParams\">\n                        {{ props.title }}\n                      </Renderer>\n                    </slot>\n                  </div>\n                  <button\n                    v-if=\"props.closable\"\n                    type=\"button\"\n                    :class=\"nh.be('close')\"\n                    @pointerdown.stop\n                    @mousedown.stop\n                    @touchstart.stop\n                    @click=\"handleClose(false)\"\n                  >\n                    <slot name=\"close\" v-bind=\"slotParams\">\n                      <Renderer :renderer=\"props.slots.close\" :data=\"slotParams\">\n                        <Icon\n                          v-bind=\"icons.close\"\n                          :scale=\"+(icons.close.scale || 1) * 1.2\"\n                          label=\"close\"\n                        ></Icon>\n                      </Renderer>\n                    </slot>\n                  </button>\n                </Renderer>\n              </slot>\n            </div>\n            <div\n              :id=\"bodyId\"\n              :class=\"nh.be('content')\"\n              :style=\"{\n                overflow: resizing ? 'hidden' : undefined\n              }\"\n            >\n              <slot v-bind=\"slotParams\">\n                <Renderer :renderer=\"props.slots.default\" :data=\"slotParams\"></Renderer>\n              </slot>\n            </div>\n            <div v-if=\"!props.noFooter\" ref=\"footer\" :class=\"nh.be('footer')\">\n              <slot name=\"footer\" v-bind=\"slotParams\">\n                <Renderer :renderer=\"props.slots.footer\" :data=\"slotParams\">\n                  <Button\n                    :class=\"[nh.be('button'), nh.bem('button', 'cancel')]\"\n                    inherit\n                    text\n                    :type=\"props.cancelType\"\n                    :size=\"props.actionSize\"\n                    @click=\"handleCancel\"\n                  >\n                    {{ props.cancelText || locale.cancel }}\n                  </Button>\n                  <Button\n                    :class=\"[nh.be('button'), nh.bem('button', 'confirm')]\"\n                    inherit\n                    :type=\"props.confirmType\"\n                    :size=\"props.actionSize\"\n                    :loading=\"props.loading\"\n                    @click=\"handleConfirm\"\n                  >\n                    {{ props.confirmText || locale.confirm }}\n                  </Button>\n                </Renderer>\n              </slot>\n            </div>\n            <div v-if=\"props.resizable\" ref=\"resizer\" :class=\"nh.be('resizer')\"></div>\n          </div>\n        </ResizeObserver>\n      </section>\n    </template>\n  </Masker>\n</template>\n"],"names":["nh","useNameHelper","props","useProps","__props","positionProp","createSizeProp","emit","__emit","slots","_useSlots","locale","useLocale","toRef","icons","useIcons","isSpecified","value","isNull","normalizeStyle","isValidNumber","toNumber","currentActive","ref","rect","reactive","maskerRect","modalRect","idIndex","getGlobalCount","transformed","masker","wrapper","footer","uselessTop","computed","uselessLeft","header","dragging","useMoving","state","event","transferRect","emitEvent","resizer","resizing","minHeight","width","height","className","wrapperClass","transform","transforms","wrapperStyle","transformOrigin","origin","top","bottom","left","right","hasHeader","titleId","bodyId","style","watch","handleResize","nextTick","computeTop","computeLeft","_a","__expose","handleConfirm","handleCancel","handleClose","slotParams","shallowReadonly","setActive","active","findPositionalParent","parentElement","currentHeight","currentWidth","withSize","offsetWidth","offsetHeight","offsetTop","offsetLeft","isConfirm","result","isPromise","handleShow","handleHide","handleMaskClose","handleModalResize","entry","box"],"mappings":"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"}