{"version":3,"file":"useVisibleStatus.mjs","sources":["../../../../../../../packages/vue-components/vc-trigger/src/Popup/useVisibleStatus.ts"],"sourcesContent":["import type { Ref } from 'vue';\nimport { raf } from '@antdv/utils';\nimport { onBeforeUnmount, onMounted, shallowRef, watch } from 'vue';\n\n/**\n * Popup should follow the steps for each component work correctly:\n * measure - check for the value stretch size\n * align - let component align the position\n * aligned - re-align again in case additional className changed the size\n * afterAlign - choice next step is trigger motion or finished\n * beforeMotion - should reset motion to invisible so that CSSMotion can do normal motion\n * motion - play the motion\n * stable - everything is done\n */\ntype PopupStatus = null | 'measure' | 'align' | 'aligned' | 'motion' | 'stable';\n\ntype Func = () => void;\n\nconst StatusQueue: PopupStatus[] = ['measure', 'align', null, 'motion'];\n\nexport default (\n  visible: Ref<boolean>,\n  doMeasure: Func,\n): [Ref<PopupStatus>, (callback?: () => void) => void] => {\n  const status = shallowRef<PopupStatus>(null);\n  const rafRef = shallowRef<number>();\n  const destroyRef = shallowRef(false);\n  function setStatus(nextStatus: PopupStatus) {\n    if (!destroyRef.value)\n      status.value = nextStatus;\n  }\n\n  function cancelRaf() {\n    raf.cancel(rafRef.value);\n  }\n\n  function goNextStatus(callback?: () => void) {\n    cancelRaf();\n    rafRef.value = raf(() => {\n      // Only align should be manually trigger\n      let newStatus = status.value;\n      switch (status.value) {\n        case 'align':\n          newStatus = 'motion';\n          break;\n        case 'motion':\n          newStatus = 'stable';\n          break;\n        default:\n      }\n      setStatus(newStatus);\n\n      callback?.();\n    });\n  }\n\n  watch(\n    visible,\n    () => {\n      setStatus('measure');\n    },\n    { immediate: true, flush: 'post' },\n  );\n  onMounted(() => {\n    // Go next status\n    watch(\n      status,\n      () => {\n        switch (status.value) {\n          case 'measure':\n            doMeasure();\n            break;\n          default:\n        }\n\n        if (status.value) {\n          rafRef.value = raf(async () => {\n            const index = StatusQueue.indexOf(status.value);\n            const nextStatus = StatusQueue[index + 1];\n            if (nextStatus && index !== -1)\n              setStatus(nextStatus);\n          });\n        }\n      },\n      { immediate: true, flush: 'post' },\n    );\n  });\n\n  onBeforeUnmount(() => {\n    destroyRef.value = true;\n    cancelRaf();\n  });\n\n  return [status, goNextStatus];\n};\n"],"names":[],"mappings":";;;;AAkBA,MAAM,WAA6B,GAAA,CAAC,SAAW,EAAA,OAAA,EAAS,MAAM,QAAQ,CAAA,CAAA;AAEtE,uBAAe,CACb,SACA,SACwD,KAAA;AACxD,EAAM,MAAA,MAAA,GAAS,WAAwB,IAAI,CAAA,CAAA;AAC3C,EAAA,MAAM,SAAS,UAAmB,EAAA,CAAA;AAClC,EAAM,MAAA,UAAA,GAAa,WAAW,KAAK,CAAA,CAAA;AACnC,EAAA,SAAS,UAAU,UAAyB,EAAA;AAC1C,IAAA,IAAI,CAAC,UAAW,CAAA,KAAA;AACd,MAAA,MAAA,CAAO,KAAQ,GAAA,UAAA,CAAA;AAAA,GACnB;AAEA,EAAA,SAAS,SAAY,GAAA;AACnB,IAAI,GAAA,CAAA,MAAA,CAAO,OAAO,KAAK,CAAA,CAAA;AAAA,GACzB;AAEA,EAAA,SAAS,aAAa,QAAuB,EAAA;AAC3C,IAAU,SAAA,EAAA,CAAA;AACV,IAAO,MAAA,CAAA,KAAA,GAAQ,IAAI,MAAM;AAEvB,MAAA,IAAI,YAAY,MAAO,CAAA,KAAA,CAAA;AACvB,MAAA,QAAQ,OAAO,KAAO;AAAA,QACpB,KAAK,OAAA;AACH,UAAY,SAAA,GAAA,QAAA,CAAA;AACZ,UAAA,MAAA;AAAA,QACF,KAAK,QAAA;AACH,UAAY,SAAA,GAAA,QAAA,CAAA;AACZ,UAAA,MAAA;AAAA,QACF,QAAA;AAAA,OACF;AACA,MAAA,SAAA,CAAU,SAAS,CAAA,CAAA;AAEnB,MAAA,QAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,QAAA,EAAA,CAAA;AAAA,KACD,CAAA,CAAA;AAAA,GACH;AAEA,EAAA,KAAA;AAAA,IACE,OAAA;AAAA,IACA,MAAM;AACJ,MAAA,SAAA,CAAU,SAAS,CAAA,CAAA;AAAA,KACrB;AAAA,IACA,EAAE,SAAA,EAAW,IAAM,EAAA,KAAA,EAAO,MAAO,EAAA;AAAA,GACnC,CAAA;AACA,EAAA,SAAA,CAAU,MAAM;AAEd,IAAA,KAAA;AAAA,MACE,MAAA;AAAA,MACA,MAAM;AACJ,QAAA,QAAQ,OAAO,KAAO;AAAA,UACpB,KAAK,SAAA;AACH,YAAU,SAAA,EAAA,CAAA;AACV,YAAA,MAAA;AAAA,UACF,QAAA;AAAA,SACF;AAEA,QAAA,IAAI,OAAO,KAAO,EAAA;AAChB,UAAO,MAAA,CAAA,KAAA,GAAQ,IAAI,YAAY;AAC7B,YAAA,MAAM,KAAQ,GAAA,WAAA,CAAY,OAAQ,CAAA,MAAA,CAAO,KAAK,CAAA,CAAA;AAC9C,YAAM,MAAA,UAAA,GAAa,WAAY,CAAA,KAAA,GAAQ,CAAC,CAAA,CAAA;AACxC,YAAA,IAAI,cAAc,KAAU,KAAA,CAAA,CAAA;AAC1B,cAAA,SAAA,CAAU,UAAU,CAAA,CAAA;AAAA,WACvB,CAAA,CAAA;AAAA,SACH;AAAA,OACF;AAAA,MACA,EAAE,SAAA,EAAW,IAAM,EAAA,KAAA,EAAO,MAAO,EAAA;AAAA,KACnC,CAAA;AAAA,GACD,CAAA,CAAA;AAED,EAAA,eAAA,CAAgB,MAAM;AACpB,IAAA,UAAA,CAAW,KAAQ,GAAA,IAAA,CAAA;AACnB,IAAU,SAAA,EAAA,CAAA;AAAA,GACX,CAAA,CAAA;AAED,EAAO,OAAA,CAAC,QAAQ,YAAY,CAAA,CAAA;AAC9B,CAAA;;;;"}