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