{"version":3,"file":"index.mjs","sources":["../../../../../../packages/hooks/use-parent/index.ts"],"sourcesContent":["import { computed, getCurrentInstance, inject, onUnmounted, ref } from 'vue'\n\nimport type {\n  ComponentInternalInstance,\n  ComponentPublicInstance,\n  InjectionKey,\n} from 'vue'\n\ntype ParentProvide<T> = T & {\n  link(child: ComponentInternalInstance): void\n  unlink(child: ComponentInternalInstance): void\n  children: ComponentPublicInstance[]\n  internalChildren: ComponentInternalInstance[]\n}\n\nexport function useParent<T>(\n  key: InjectionKey<ParentProvide<T>>,\n  noLinkParent = false\n) {\n  const parent = inject(key, null)\n\n  if (parent && !noLinkParent) {\n    const instance = getCurrentInstance()!\n    const { link, unlink, internalChildren } = parent\n\n    link(instance)\n    onUnmounted(() => unlink(instance))\n\n    const index = computed(() => internalChildren.indexOf(instance))\n\n    return {\n      parent,\n      index,\n    }\n  }\n\n  return {\n    parent: null,\n    index: ref(-1),\n  }\n}\n"],"names":[],"mappings":";;AAegB,SAAA,SAAA,CACd,GACA,EAAA,YAAA,GAAe,KACf,EAAA;AACA,EAAM,MAAA,MAAA,GAAS,MAAO,CAAA,GAAA,EAAK,IAAI,CAAA,CAAA;AAE/B,EAAI,IAAA,MAAA,IAAU,CAAC,YAAc,EAAA;AAC3B,IAAA,MAAM,WAAW,kBAAmB,EAAA,CAAA;AACpC,IAAA,MAAM,EAAE,IAAA,EAAM,MAAQ,EAAA,gBAAA,EAAqB,GAAA,MAAA,CAAA;AAE3C,IAAA,IAAA,CAAK,QAAQ,CAAA,CAAA;AACb,IAAY,WAAA,CAAA,MAAM,MAAO,CAAA,QAAQ,CAAC,CAAA,CAAA;AAElC,IAAA,MAAM,QAAQ,QAAS,CAAA,MAAM,gBAAiB,CAAA,OAAA,CAAQ,QAAQ,CAAC,CAAA,CAAA;AAE/D,IAAO,OAAA;AAAA,MACL,MAAA;AAAA,MACA,KAAA;AAAA,KACF,CAAA;AAAA,GACF;AAEA,EAAO,OAAA;AAAA,IACL,MAAQ,EAAA,IAAA;AAAA,IACR,KAAA,EAAO,IAAI,CAAE,CAAA,CAAA;AAAA,GACf,CAAA;AACF;;;;"}