{"version":3,"file":"use-popup-manager.mjs","sources":["../../../../packages/hooks/use-popup-manager.ts"],"sourcesContent":["import type { Ref } from 'vue'\nimport { onMounted, onBeforeUnmount, readonly, ref, watch } from 'vue'\n\nexport type PopupType = 'popup' | 'dialog' | 'message'\n\nconst POPUP_BASE_Z_INDEX = 1000\nconst MESSAGE_BASE_Z_INDEX = 3000\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":["visible"],"mappings":";;AAKA,MAAM,kBAAqB,GAAA,GAAA,CAAA;AAC3B,MAAM,oBAAuB,GAAA,GAAA,CAAA;AAC7B,MAAM,YAAe,GAAA,CAAA,CAAA;AAErB,MAAM,YAAa,CAAA;AAAA,EAAnB,WAAA,GAAA;AACE,IAAA,IAAA,CAAQ,UAAa,GAAA;AAAA,MACnB,KAAA,sBAAW,GAAY,EAAA;AAAA,MACvB,MAAA,sBAAY,GAAY,EAAA;AAAA,MACxB,OAAA,sBAAa,GAAY,EAAA;AAAA,KAC3B,CAAA;AAEA,IAAQ,IAAA,CAAA,aAAA,GAAgB,CAAC,IAAoB,KAAA;AAC3C,MAAA,MAAM,UACJ,IAAS,KAAA,SAAA,GACL,MAAM,IAAK,CAAA,IAAA,CAAK,WAAW,OAAO,CAAA,CAAE,KAAS,IAAA,oBAAA,GAC7C,MAAM,IAAK,CAAA,IAAA,CAAK,WAAW,KAAK,CAAA,CAAE,KAAS,IAAA,kBAAA,CAAA;AACjD,MAAA,OAAO,OAAU,GAAA,YAAA,CAAA;AAAA,KACnB,CAAA;AAEA,IAAO,IAAA,CAAA,GAAA,GAAM,CAAC,IAAoB,KAAA;AAChC,MAAM,MAAA,MAAA,GAAS,IAAK,CAAA,aAAA,CAAc,IAAI,CAAA,CAAA;AACtC,MAAA,IAAA,CAAK,UAAW,CAAA,IAAI,CAAE,CAAA,GAAA,CAAI,MAAM,CAAA,CAAA;AAChC,MAAA,IAAI,SAAS,QAAU,EAAA;AACrB,QAAK,IAAA,CAAA,UAAA,CAAW,KAAM,CAAA,GAAA,CAAI,MAAM,CAAA,CAAA;AAAA,OAClC;AACA,MAAO,OAAA,MAAA,CAAA;AAAA,KACT,CAAA;AAEA,IAAO,IAAA,CAAA,MAAA,GAAS,CAAC,MAAA,EAAgB,IAAoB,KAAA;AACnD,MAAA,IAAA,CAAK,UAAW,CAAA,IAAI,CAAE,CAAA,MAAA,CAAO,MAAM,CAAA,CAAA;AACnC,MAAA,IAAI,SAAS,QAAU,EAAA;AACrB,QAAK,IAAA,CAAA,UAAA,CAAW,KAAM,CAAA,MAAA,CAAO,MAAM,CAAA,CAAA;AAAA,OACrC;AAAA,KACF,CAAA;AAEA,IAAO,IAAA,CAAA,YAAA,GAAe,CAAC,MAAmB,KAAA;AACxC,MAAA,IAAI,IAAK,CAAA,UAAA,CAAW,MAAO,CAAA,IAAA,GAAO,CAAG,EAAA;AACnC,QAAA,OAAO,WAAW,KAAM,CAAA,IAAA,CAAK,KAAK,UAAW,CAAA,MAAM,EAAE,GAAI,EAAA,CAAA;AAAA,OAC3D;AACA,MAAO,OAAA,IAAA,CAAA;AAAA,KACT,CAAA;AAAA,GAAA;AACF,CAAA;AAEA,MAAM,YAAA,GAAe,IAAI,YAAa,EAAA,CAAA;AAEtC,SAAwB,gBACtB,IACA,EAAA;AAAA,EACE,OAAA;AAAA,EACA,YAAA;AACF,CAAA,GAGI,EACJ,EAAA;AACA,EAAM,MAAA,MAAA,GAAS,IAAI,CAAC,CAAA,CAAA;AAEpB,EAAA,MAAM,OAAO,MAAM;AACjB,IAAO,MAAA,CAAA,KAAA,GAAQ,YAAa,CAAA,GAAA,CAAI,IAAI,CAAA,CAAA;AAAA,GACtC,CAAA;AAEA,EAAA,MAAM,QAAQ,MAAM;AAClB,IAAa,YAAA,CAAA,MAAA,CAAO,MAAO,CAAA,KAAA,EAAO,IAAI,CAAA,CAAA;AAAA,GACxC,CAAA;AAEA,EAAA,MAAM,eAAe,MAAM;AACzB,IAAA,IAAI,SAAS,QAAU,EAAA;AACrB,MAAO,OAAA,YAAA,CAAa,YAAa,CAAA,MAAA,CAAO,KAAK,CAAA,CAAA;AAAA,KAC/C;AACA,IAAO,OAAA,KAAA,CAAA;AAAA,GACT,CAAA;AAEA,EAAA,KAAA;AAAA,IACE,MAAM,OAAS,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,OAAA,CAAA,KAAA;AAAA,IACf,CAACA,QAAY,KAAA;AACX,MAAA,IAAIA,QAAS,EAAA;AACX,QAAK,IAAA,EAAA,CAAA;AAAA,OACA,MAAA;AACL,QAAM,KAAA,EAAA,CAAA;AAAA,OACR;AAAA,KACF;AAAA,IACA;AAAA,MACE,SAAW,EAAA,IAAA;AAAA,KACb;AAAA,GACF,CAAA;AAEA,EAAA,IAAI,YAAc,EAAA;AAChB,IAAA,SAAA,CAAU,MAAM;AACd,MAAK,IAAA,EAAA,CAAA;AAAA,KACN,CAAA,CAAA;AAED,IAAA,eAAA,CAAgB,MAAM;AACpB,MAAM,KAAA,EAAA,CAAA;AAAA,KACP,CAAA,CAAA;AAAA,GACH;AAEA,EAAO,OAAA;AAAA,IACL,MAAA,EAAQ,SAAS,MAAM,CAAA;AAAA,IACvB,IAAA;AAAA,IACA,KAAA;AAAA,IACA,YAAA;AAAA,GACF,CAAA;AACF;;;;"}