{"version":3,"file":"usePopupManager.mjs","sources":["../../../components/hooks/usePopupManager.ts"],"sourcesContent":["// https://github.dev/arco-design/arco-design-vue\nimport { onMounted, onBeforeUnmount, readonly, Ref, ref, watch } from 'vue';\nexport type PopupType = 'popup' | 'dialog' | 'message';\n\nconst POPUP_BASE_Z_INDEX = 1000;\nconst MESSAGE_BASE_Z_INDEX = 5000;\nconst Z_INDEX_STEP = 1;\n\nclass PopupManager {\n  private popupStack = {\n    popup: new Set<number>(),\n    dialog: new Set<number>(),\n    message: new Set<number>(),\n  };\n\n  private getNextZIndex = (type: PopupType) => {\n    const current =\n      type === 'message'\n        ? Array.from(this.popupStack.message).pop() || MESSAGE_BASE_Z_INDEX\n        : Array.from(this.popupStack.popup).pop() || POPUP_BASE_Z_INDEX;\n    return current + Z_INDEX_STEP;\n  };\n\n  public add = (type: PopupType) => {\n    const zIndex = this.getNextZIndex(type);\n    this.popupStack[type].add(zIndex);\n    if (type === 'dialog') {\n      this.popupStack.popup.add(zIndex);\n    }\n    return zIndex;\n  };\n\n  public delete = (zIndex: number, type: PopupType) => {\n    this.popupStack[type].delete(zIndex);\n    if (type === 'dialog') {\n      this.popupStack.popup.delete(zIndex);\n    }\n  };\n\n  public isLastDialog = (zIndex: number) => {\n    if (this.popupStack.dialog.size > 1) {\n      return zIndex === Array.from(this.popupStack.dialog).pop();\n    }\n    return true;\n  };\n}\n\nconst popupManager = new PopupManager();\n\nexport default function usePopupManager(\n  type: PopupType,\n  {\n    visible,\n    runOnMounted,\n  }: {\n    visible?: Ref<boolean>;\n    runOnMounted?: boolean;\n  } = {},\n) {\n  const zIndex = ref(0);\n\n  const open = () => {\n    zIndex.value = popupManager.add(type);\n  };\n\n  const close = () => {\n    popupManager.delete(zIndex.value, type);\n  };\n\n  const isLastDialog = () => {\n    if (type === 'dialog') {\n      return popupManager.isLastDialog(zIndex.value);\n    }\n    return false;\n  };\n\n  watch(\n    () => visible?.value,\n    (visible) => {\n      if (visible) {\n        open();\n      } else {\n        close();\n      }\n    },\n    {\n      immediate: true,\n    },\n  );\n\n  if (runOnMounted) {\n    onMounted(() => {\n      open();\n    });\n\n    onBeforeUnmount(() => {\n      close();\n    });\n  }\n\n  return {\n    zIndex: readonly(zIndex),\n    open,\n    close,\n    isLastDialog,\n  };\n}\n"],"names":["POPUP_BASE_Z_INDEX","MESSAGE_BASE_Z_INDEX","Z_INDEX_STEP","PopupManager","_createClass","_this","_classCallCheck","_defineProperty","popup","Set","dialog","message","type","current","Array","from","popupStack","pop","zIndex","getNextZIndex","add","size","popupManager","usePopupManager","_ref","arguments","length","undefined","visible","runOnMounted","ref","open","value","close","isLastDialog","watch","immediate","onMounted","onBeforeUnmount","readonly"],"mappings":"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"}