{"version":3,"file":"use-modeless-dialog.mjs","sources":["../../../../../../packages/components/modeless-dialog/src/use-modeless-dialog.ts"],"sourcesContent":["import { ref, watch, onMounted, getCurrentInstance, computed } from 'vue'\nimport { useZIndex } from 'hongluan-ui'\nimport html2canvas from 'html2canvas'\nimport { useTimeoutFn } from '@vueuse/core'\nimport isServer from '@hongluan-business-ui/utils/isServer'\nimport { useRestoreActive } from '@hongluan-business-ui/utils/use-restore-active'\nimport { ModelessDialogManager } from './manager'\n\nimport type { Ref } from 'vue'\nimport type { ModelessDialogProps } from './modeless-dialog'\n\nexport const CLOSE_EVENT = 'close'\nexport const OPEN_EVENT = 'open'\nexport const CLOSED_EVENT = 'closed'\nexport const OPENED_EVENT = 'opened'\nexport const COLLAPSE_EVENT = 'collapse'\nexport const MAX_EVENT = 'maximize'\nexport const UPDATE_MODEL_EVENT = 'update:modelValue'\n\nexport const useDialog = (\n  props: ModelessDialogProps,\n  targetRef: Ref<HTMLElement | undefined>,\n) => {\n  const { nextZIndex } = useZIndex()\n  const visible = ref(false)\n  const shown = ref(true)\n  const closed = ref(false)\n  const maximize = ref(false)\n  const collapse = ref(false)\n  const zIndex = ref(props.zIndex || nextZIndex())\n\n  const innerClass = computed(() => {\n    const clazz: Record<string, boolean> = {}\n    if(maximize.value) {\n      clazz.fullscreen = maximize.value\n    }\n    if(collapse.value) {\n      clazz.collapsed = collapse.value\n    }\n    return clazz\n  })\n\n  let stopOpenTimer: (() => void) | undefined = undefined\n  let stopCloseTimer: (() => void) | undefined = undefined\n\n  const { emit } = getCurrentInstance()\n\n  function afterEnter() {\n    emit(OPENED_EVENT)\n  }\n\n  function afterLeave() {\n    emit(CLOSED_EVENT)\n    emit(UPDATE_MODEL_EVENT, false)\n  }\n\n  function beforeLeave() {\n    emit(CLOSE_EVENT)\n  }\n\n  function open() {\n    stopCloseTimer?.()\n    stopOpenTimer?.()\n    if (props.openDelay && props.openDelay > 0) {\n      ({ stop: stopOpenTimer } = useTimeoutFn(() => doOpen(), props.openDelay))\n    } else {\n      doOpen()\n    }\n  }\n\n  function close() {\n    // if (this.willClose && !this.willClose()) return;\n    stopOpenTimer?.()\n    stopCloseTimer?.()\n\n    if (props.closeDelay && props.closeDelay > 0) {\n      ({ stop: stopCloseTimer } = useTimeoutFn(() => doClose(), props.closeDelay))\n    } else {\n      doClose()\n    }\n  }\n\n  function hide(shouldCancel: boolean) {\n    if (shouldCancel) return\n    closed.value = true\n    visible.value = false\n  }\n\n  function handleClose() {\n    if (props.beforeClose) {\n      props.beforeClose(hide)\n    } else {\n      close()\n    }\n  }\n\n  function doOpen() {\n    if (isServer) {\n      return\n    }\n    visible.value = true\n  }\n\n  function doClose() {\n    visible.value = false\n    emit('destroy')\n  }\n\n  function handleCollapse() {\n    if (props.showCollapse) {\n      collapseDialog()\n    }\n  }\n  function collapseDialog(collapsable?: boolean) {\n    let p: Promise<void>\n    if (props.useDock && props.snapshot === true) {\n      p = html2canvas(targetRef.value).then(canvas => {\n        ModelessDialogManager.get(props.id).snapshot = { type: 'image', url: canvas.toDataURL('image/png') }\n      })\n    } else {\n      p = Promise.resolve()\n    }\n    p.finally(() => {\n      if (props.useDock) {\n        shown.value = !shown.value\n      } else {\n        collapse.value = collapsable ?? !collapse.value\n      }\n      emit(COLLAPSE_EVENT, props.useDock ? shown.value : collapse.value)\n      ModelessDialogManager.triggerEvent(COLLAPSE_EVENT, props.id)\n    })\n  }\n\n  function handleMaximize() {\n    if (props.showMaximize) {\n      maximizeDialog()\n    }\n  }\n  function maximizeDialog() {\n    maximize.value = !maximize.value\n    emit(MAX_EVENT, collapse.value)\n  }\n\n  useRestoreActive(visible)\n\n  watch(() => props.modelValue, val => {\n    if (val) {\n      closed.value = false\n      open()\n      emit(OPEN_EVENT)\n      zIndex.value = props.zIndex ? Number(zIndex.value) + 1 : nextZIndex()\n    } else {\n      if (visible.value) {\n        close()\n      }\n    }\n  })\n\n  onMounted(() => {\n    if (props.modelValue) {\n      visible.value = true\n      open()\n    }\n  })\n\n  return {\n    afterEnter,\n    afterLeave,\n    beforeLeave,\n    handleClose,\n    handleCollapse,\n    collapseDialog,\n    handleMaximize,\n    maximizeDialog,\n    closed,\n    shown,\n    visible,\n    collapse,\n    maximize,\n    zIndex,\n    innerClass,\n  }\n}\n"],"names":[],"mappings":";;;;;;;;AAOY,MAAC,WAAW,GAAG,QAAQ;AACvB,MAAC,UAAU,GAAG,OAAO;AACrB,MAAC,YAAY,GAAG,SAAS;AACzB,MAAC,YAAY,GAAG,SAAS;AACzB,MAAC,cAAc,GAAG,WAAW;AAC7B,MAAC,SAAS,GAAG,WAAW;AACxB,MAAC,kBAAkB,GAAG,oBAAoB;AAC1C,MAAC,SAAS,GAAG,CAAC,KAAK,EAAE,SAAS,KAAK;AAC/C,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,SAAS,EAAE,CAAC;AACrC,EAAE,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;AAC7B,EAAE,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;AAC1B,EAAE,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;AAC5B,EAAE,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;AAC9B,EAAE,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;AAC9B,EAAE,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,UAAU,EAAE,CAAC,CAAC;AACnD,EAAE,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM;AACpC,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;AACrB,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE;AACxB,MAAM,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC;AACxC,KAAK;AACL,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE;AACxB,MAAM,KAAK,CAAC,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC;AACvC,KAAK;AACL,IAAI,OAAO,KAAK,CAAC;AACjB,GAAG,CAAC,CAAC;AACL,EAAE,IAAI,aAAa,GAAG,KAAK,CAAC,CAAC;AAC7B,EAAE,IAAI,cAAc,GAAG,KAAK,CAAC,CAAC;AAC9B,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,kBAAkB,EAAE,CAAC;AACxC,EAAE,SAAS,UAAU,GAAG;AACxB,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC;AACvB,GAAG;AACH,EAAE,SAAS,UAAU,GAAG;AACxB,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC;AACvB,IAAI,IAAI,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;AACpC,GAAG;AACH,EAAE,SAAS,WAAW,GAAG;AACzB,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC;AACtB,GAAG;AACH,EAAE,SAAS,IAAI,GAAG;AAClB,IAAI,cAAc,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,cAAc,EAAE,CAAC;AACvD,IAAI,aAAa,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,aAAa,EAAE,CAAC;AACrD,IAAI,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,GAAG,CAAC,EAAE;AAChD,MAAM,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,YAAY,CAAC,MAAM,MAAM,EAAE,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE;AAChF,KAAK,MAAM;AACX,MAAM,MAAM,EAAE,CAAC;AACf,KAAK;AACL,GAAG;AACH,EAAE,SAAS,KAAK,GAAG;AACnB,IAAI,aAAa,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,aAAa,EAAE,CAAC;AACrD,IAAI,cAAc,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,cAAc,EAAE,CAAC;AACvD,IAAI,IAAI,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,GAAG,CAAC,EAAE;AAClD,MAAM,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,YAAY,CAAC,MAAM,OAAO,EAAE,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE;AACnF,KAAK,MAAM;AACX,MAAM,OAAO,EAAE,CAAC;AAChB,KAAK;AACL,GAAG;AACH,EAAE,SAAS,IAAI,CAAC,YAAY,EAAE;AAC9B,IAAI,IAAI,YAAY;AACpB,MAAM,OAAO;AACb,IAAI,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;AACxB,IAAI,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;AAC1B,GAAG;AACH,EAAE,SAAS,WAAW,GAAG;AACzB,IAAI,IAAI,KAAK,CAAC,WAAW,EAAE;AAC3B,MAAM,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAC9B,KAAK,MAAM;AACX,MAAM,KAAK,EAAE,CAAC;AACd,KAAK;AACL,GAAG;AACH,EAAE,SAAS,MAAM,GAAG;AACpB,IAAI,IAAI,QAAQ,EAAE;AAClB,MAAM,OAAO;AACb,KAAK;AACL,IAAI,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;AACzB,GAAG;AACH,EAAE,SAAS,OAAO,GAAG;AACrB,IAAI,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;AAC1B,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;AACpB,GAAG;AACH,EAAE,SAAS,cAAc,GAAG;AAC5B,IAAI,IAAI,KAAK,CAAC,YAAY,EAAE;AAC5B,MAAM,cAAc,EAAE,CAAC;AACvB,KAAK;AACL,GAAG;AACH,EAAE,SAAS,cAAc,CAAC,WAAW,EAAE;AACvC,IAAI,IAAI,CAAC,CAAC;AACV,IAAI,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,EAAE;AAClD,MAAM,CAAC,GAAG,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK;AACxD,QAAQ,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,QAAQ,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC;AAC7G,OAAO,CAAC,CAAC;AACT,KAAK,MAAM;AACX,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;AAC5B,KAAK;AACL,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM;AACpB,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE;AACzB,QAAQ,KAAK,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;AACnC,OAAO,MAAM;AACb,QAAQ,QAAQ,CAAC,KAAK,GAAG,WAAW,IAAI,IAAI,GAAG,WAAW,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC7E,OAAO;AACP,MAAM,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzE,MAAM,qBAAqB,CAAC,YAAY,CAAC,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;AACnE,KAAK,CAAC,CAAC;AACP,GAAG;AACH,EAAE,SAAS,cAAc,GAAG;AAC5B,IAAI,IAAI,KAAK,CAAC,YAAY,EAAE;AAC5B,MAAM,cAAc,EAAE,CAAC;AACvB,KAAK;AACL,GAAG;AACH,EAAE,SAAS,cAAc,GAAG;AAC5B,IAAI,QAAQ,CAAC,KAAK,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;AACrC,IAAI,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;AACpC,GAAG;AACH,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAC5B,EAAE,KAAK,CAAC,MAAM,KAAK,CAAC,UAAU,EAAE,CAAC,GAAG,KAAK;AACzC,IAAI,IAAI,GAAG,EAAE;AACb,MAAM,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;AAC3B,MAAM,IAAI,EAAE,CAAC;AACb,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC;AACvB,MAAM,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,UAAU,EAAE,CAAC;AAC5E,KAAK,MAAM;AACX,MAAM,IAAI,OAAO,CAAC,KAAK,EAAE;AACzB,QAAQ,KAAK,EAAE,CAAC;AAChB,OAAO;AACP,KAAK;AACL,GAAG,CAAC,CAAC;AACL,EAAE,SAAS,CAAC,MAAM;AAClB,IAAI,IAAI,KAAK,CAAC,UAAU,EAAE;AAC1B,MAAM,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;AAC3B,MAAM,IAAI,EAAE,CAAC;AACb,KAAK;AACL,GAAG,CAAC,CAAC;AACL,EAAE,OAAO;AACT,IAAI,UAAU;AACd,IAAI,UAAU;AACd,IAAI,WAAW;AACf,IAAI,WAAW;AACf,IAAI,cAAc;AAClB,IAAI,cAAc;AAClB,IAAI,cAAc;AAClB,IAAI,cAAc;AAClB,IAAI,MAAM;AACV,IAAI,KAAK;AACT,IAAI,OAAO;AACX,IAAI,QAAQ;AACZ,IAAI,QAAQ;AACZ,IAAI,MAAM;AACV,IAAI,UAAU;AACd,GAAG,CAAC;AACJ;;;;"}