{"version":3,"file":"use-modal.mjs","sources":["../../../../../../packages/components/modal/src/use-modal.ts"],"sourcesContent":["import {\r\n  computed,\r\n  getCurrentInstance,\r\n  nextTick,\r\n  onMounted,\r\n  ref,\r\n  watch,\r\n} from 'vue'\r\nimport { isClient, useTimeoutFn } from '@vueuse/core'\r\n\r\nimport {\r\n  useId,\r\n  useLockscreen,\r\n  useZIndex\r\n} from '@sgui-plus/hooks'\r\nimport { UPDATE_MODEL_EVENT } from '@sgui-plus/utils/constants'\r\nimport { isNumber } from '@vueuse/core'\r\n\r\nimport { createMinimize, removeMinimize } from './minimize'\r\nimport type { CSSProperties, Ref, SetupContext } from 'vue'\r\nimport type { ModalEmits, ModalProps } from './modal'\r\nimport { debugWarn } from '@sgui-plus/utils'\r\n\r\nexport const useModal = (\r\n  props: ModalProps,\r\n  targetRef: Ref<HTMLElement | undefined>\r\n) => {\r\n  const instance = getCurrentInstance()!\r\n  const emit = instance.emit as SetupContext<ModalEmits>['emit']\r\n  const { nextZIndex } = useZIndex()\r\n\r\n  let lastPosition = ''\r\n  const titleId = useId()\r\n  const bodyId = useId()\r\n  const visible = ref(false)\r\n  const rendered = ref(false) // when desctroyOnClose is true, we initialize it as false vise versa\r\n  const zIndex = ref(props.zIndex || nextZIndex())\r\n  const isMax = ref(false)\r\n  const isFull = ref(false)\r\n  const isMini = ref(false)\r\n\r\n  let openTimer: (() => void) | undefined = undefined\r\n  let closeTimer: (() => void) | undefined = undefined\r\n\r\n  const normalizeWidth = computed(() =>\r\n    isNumber(props.width) ? `${props.width}px` : props.width\r\n  )\r\n\r\n  const normalizeHeight = computed(() =>\r\n    isNumber(props.height) ? `${props.height}px` : props.height\r\n  )\r\n\r\n  const style = computed<CSSProperties>(() => {\r\n    const style: CSSProperties = {}\r\n    const varPrefix = `--sg-modal`\r\n    if (!isMax.value && !isFull.value) {\r\n      if (props.top) {\r\n        style[`${varPrefix}-margin-top`] = props.top\r\n      }\r\n      if (props.left) {\r\n        style[`${varPrefix}-margin-left`] = props.left\r\n      }\r\n      if (props.width) {\r\n        style[`${varPrefix}-width`] = normalizeWidth.value\r\n      }\r\n      if (props.height) {\r\n        style[`${varPrefix}-height`] = normalizeHeight.value\r\n      }\r\n    }\r\n    return style\r\n  })\r\n\r\n  function afterEnter() {\r\n    emit('open')\r\n  }\r\n\r\n  function afterLeave() {\r\n    emit('hidden')\r\n    emit(UPDATE_MODEL_EVENT, false)\r\n    if (props.destroyOnClose) {\r\n      rendered.value = false\r\n    }\r\n  }\r\n\r\n  function beforeLeave() {\r\n    // emit('cancel')\r\n  }\r\n\r\n  function open() {\r\n    closeTimer?.()\r\n    openTimer?.()\r\n\r\n    if (props.openDelay && props.openDelay > 0) {\r\n      ;({ stop: openTimer } = useTimeoutFn(() => doOpen(), props.openDelay))\r\n    } else {\r\n      doOpen()\r\n    }\r\n  }\r\n\r\n  function close() {\r\n    openTimer?.()\r\n    closeTimer?.()\r\n\r\n    if (props.closeDelay && props.closeDelay > 0) {\r\n      ;({ stop: closeTimer } = useTimeoutFn(() => doClose(), props.closeDelay))\r\n    } else {\r\n      doClose()\r\n    }\r\n  }\r\n\r\n  function handleOpen() {\r\n    open()\r\n    rendered.value = true // enables lazy rendering\r\n    zIndex.value = props.zIndex ? zIndex.value++ : nextZIndex()\r\n    nextTick(() => {\r\n      if (targetRef.value) {\r\n        targetRef.value.scrollTop = 0\r\n      }\r\n    })\r\n  }\r\n\r\n  function handleClose() {\r\n    if (props.beforeCancel) {\r\n      Promise.resolve(props.beforeCancel()).then((shouldCancel?: boolean) => {\r\n        if (shouldCancel === false) {\r\n          return\r\n        }\r\n\r\n        close()\r\n      }).catch((err) => {\r\n        debugWarn('SgModal', err)\r\n      })\r\n    } else {\r\n      close()\r\n    }\r\n    emit('cancel')\r\n  }\r\n\r\n  function handleConfirm() {\r\n    emit('ok')\r\n  }\r\n\r\n  function doOpen() {\r\n    if (!isClient) return\r\n    visible.value = true\r\n  }\r\n\r\n  function doClose() {\r\n    visible.value = false\r\n  }\r\n\r\n  if (props.lockScroll) {\r\n    useLockscreen(visible)\r\n  }\r\n\r\n  function onFocusoutPrevented(event: CustomEvent) {\r\n    if (event.detail?.focusReason === 'pointer') {\r\n      event.preventDefault()\r\n    }\r\n  }\r\n\r\n  function onCloseRequested() {\r\n    if (props.closeOnPressEscape) {\r\n      handleClose()\r\n    }\r\n  }\r\n\r\n  watch(\r\n    () => props.modelValue,\r\n    (val) => {\r\n      if (val) {\r\n        // 若当前弹窗已最小化，隐藏对应最小化状态框\r\n        if (isMini.value) {\r\n          removeMinimize(bodyId.value)\r\n          doOpen()\r\n        } else {\r\n          handleOpen()\r\n        }\r\n      } else {\r\n        // this.$el.removeEventListener('scroll', this.updatePopper\r\n        if (visible.value) {\r\n          close()\r\n        }\r\n      }\r\n    }\r\n  )\r\n\r\n  /**\r\n   * 监听窗口最大化的变动\r\n   */\r\n  watch(\r\n    () => isMax.value,\r\n    (val) => {\r\n      if (!targetRef.value) return\r\n      emit('maximize', val)\r\n      if (val) {\r\n        lastPosition = targetRef.value.style.transform\r\n        targetRef.value.style.transform = ''\r\n      } else {\r\n        targetRef.value.style.transform = lastPosition\r\n      }\r\n    }\r\n  )\r\n\r\n  /**\r\n   * 监听窗口最小化的变动\r\n   */\r\n  watch(\r\n    () => isMini.value,\r\n    (val) => {\r\n      if (!targetRef.value) return\r\n      emit('minimize', val)\r\n      if (val) {\r\n        doClose()\r\n        createMinimize({\r\n          id: bodyId.value,\r\n          title: props.title,\r\n          closable: props.closable,\r\n          onRestore: () => {\r\n            doOpen()\r\n          },\r\n          onClose: () => {\r\n            handleClose()\r\n          },\r\n          onHide: () => {\r\n            isMini.value = false\r\n          }\r\n        })\r\n      }\r\n    }\r\n  )\r\n\r\n  onMounted(() => {\r\n    if (props.modelValue) {\r\n      visible.value = true\r\n      rendered.value = true // enables lazy rendering\r\n      open()\r\n    }\r\n  })\r\n\r\n  return {\r\n    afterEnter,\r\n    afterLeave,\r\n    beforeLeave,\r\n    handleClose,\r\n    handleOpen,\r\n    handleConfirm,\r\n    close,\r\n    onFocusoutPrevented,\r\n    onCloseRequested,\r\n    titleId,\r\n    bodyId,\r\n    style,\r\n    rendered,\r\n    visible,\r\n    zIndex,\r\n    isMax,\r\n    isFull,\r\n    isMini\r\n  }\r\n}\r\n"],"names":[],"mappings":"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"}