{"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/composables/usePopover/index.ts"],"sourcesContent":["import {\n  type ComponentPublicInstance,\n  computed,\n  type ComputedRef,\n  inject,\n  markRaw,\n  type MaybeRef,\n  onScopeDispose,\n  ref,\n  type Ref,\n} from 'vue'\nimport {orchestratorRegistryKey, type OrchestratorStoreObject} from '../../utils/keys'\nimport type {\n  ComponentController,\n  PopoverOrchestratorArrayValue,\n  PopoverOrchestratorCreateParamBase,\n  TooltipOrchestratorArrayValue,\n  TooltipOrchestratorCreateParamBase,\n} from '../../types'\nimport {BPopover, BTooltip} from '../../components'\nimport {buildController, getOrchestratorControllerId} from '../orchestratorShared'\n\nexport const usePopover = () => {\n  const orchestratorRegistry = inject(orchestratorRegistryKey, null)\n  if (!orchestratorRegistry)\n    throw new Error(\n      'usePopover() must be called within setup(), and BApp, useRegistry or plugin must be installed/provided.'\n    )\n  const {store, _isOrchestratorInstalled} = orchestratorRegistry\n\n  /**\n   * Create a popover or tooltip\n   * @param obj The popover or tooltip props\n   * @param tooltip If true, create a tooltip, otherwise create a popover\n   * @returns {PromiseWithController<typeof BPopover | typeof BTooltip, PopoverOrchestratorCreateParam>} A split promise/controller object\n   */\n  // Uses `function` declarations (rather than generic arrow functions assigned to consts) so\n  // that TypeScript preserves per-call generic inference when these are returned as part of\n  // `usePopover()`'s inferred return object.\n  function create<\n    T extends PopoverOrchestratorCreateParamBase = PopoverOrchestratorCreateParamBase,\n  >(\n    obj: MaybeRef<T>,\n    tooltip?: false\n  ): ComponentController<typeof BPopover, Ref<PopoverOrchestratorArrayValue>>\n  function create<\n    T extends TooltipOrchestratorCreateParamBase = TooltipOrchestratorCreateParamBase,\n  >(\n    obj: MaybeRef<T>,\n    tooltip: true\n  ): ComponentController<typeof BTooltip, Ref<TooltipOrchestratorArrayValue>>\n  function create(\n    obj: MaybeRef<PopoverOrchestratorCreateParamBase | TooltipOrchestratorCreateParamBase>,\n    tooltip = false\n  ) {\n    if (!_isOrchestratorInstalled.value)\n      throw new Error('The BApp component must be mounted to use the popover controller')\n\n    const comp = markRaw(tooltip ? BTooltip : BPopover)\n    const resolvedProps = ref(obj)\n    const type = tooltip ? 'tooltip' : 'popover'\n    const pickedStore = computed(() => store.value[type])\n    const {htmlAttributeId, storeId} = getOrchestratorControllerId(resolvedProps.value.id)\n\n    const {controller, resolve} = buildController<\n      typeof BPopover | typeof BTooltip,\n      ComputedRef<OrchestratorStoreObject['popover'] | OrchestratorStoreObject['tooltip']>\n    >(storeId, pickedStore)\n\n    const value = computed<PopoverOrchestratorArrayValue>({\n      get: () => {\n        const {component = comp, options, slots, ...props} = resolvedProps.value\n\n        return {\n          component,\n          options,\n          slots,\n          id: storeId,\n          fns: {\n            resolve,\n            setRef: (v: ComponentPublicInstance) => {\n              controller.ref = v\n            },\n            destroy: controller.destroy,\n          },\n          props: {\n            ...props,\n            id: htmlAttributeId,\n          },\n        }\n      },\n      set: (v) => {\n        resolvedProps.value = {\n          ...resolvedProps.value,\n          ...v.props,\n        }\n      },\n    })\n\n    pickedStore.value.set(storeId, value)\n\n    onScopeDispose(async () => {\n      await controller[Symbol.asyncDispose]()\n    }, true)\n\n    return controller\n  }\n\n  function tooltip<\n    T extends TooltipOrchestratorCreateParamBase = TooltipOrchestratorCreateParamBase,\n  >(obj: MaybeRef<T>) {\n    return create(obj, true)\n  }\n\n  function popover<\n    T extends PopoverOrchestratorCreateParamBase = PopoverOrchestratorCreateParamBase,\n  >(obj: MaybeRef<T>) {\n    return create(obj, false)\n  }\n\n  return {\n    _isOrchestratorInstalled,\n    create,\n    popover,\n    tooltip,\n    store,\n  }\n}\n"],"mappings":";;;;;;AAsBA,IAAa,mBAAmB;CAC9B,MAAM,uBAAuB,OAAO,yBAAyB,IAAI;CACjE,IAAI,CAAC,sBACH,MAAM,IAAI,MACR,yGACF;CACF,MAAM,EAAC,OAAO,6BAA4B;CAuB1C,SAAS,OACP,KACA,UAAU,OACV;EACA,IAAI,CAAC,yBAAyB,OAC5B,MAAM,IAAI,MAAM,kEAAkE;EAEpF,MAAM,OAAO,QAAQ,UAAU,mBAAW,gBAAQ;EAClD,MAAM,gBAAgB,IAAI,GAAG;EAC7B,MAAM,OAAO,UAAU,YAAY;EACnC,MAAM,cAAc,eAAe,MAAM,MAAM,KAAK;EACpD,MAAM,EAAC,iBAAiB,YAAW,4BAA4B,cAAc,MAAM,EAAE;EAErF,MAAM,EAAC,YAAY,YAAW,gBAG5B,SAAS,WAAW;EAEtB,MAAM,QAAQ,SAAwC;GACpD,WAAW;IACT,MAAM,EAAC,YAAY,MAAM,SAAS,OAAO,GAAG,UAAS,cAAc;IAEnE,OAAO;KACL;KACA;KACA;KACA,IAAI;KACJ,KAAK;MACH;MACA,SAAS,MAA+B;OACtC,WAAW,MAAM;MACnB;MACA,SAAS,WAAW;KACtB;KACA,OAAO;MACL,GAAG;MACH,IAAI;KACN;IACF;GACF;GACA,MAAM,MAAM;IACV,cAAc,QAAQ;KACpB,GAAG,cAAc;KACjB,GAAG,EAAE;IACP;GACF;EACF,CAAC;EAED,YAAY,MAAM,IAAI,SAAS,KAAK;EAEpC,eAAe,YAAY;GACzB,MAAM,WAAW,OAAO,aAAa,CAAC;EACxC,GAAG,IAAI;EAEP,OAAO;CACT;CAEA,SAAS,QAEP,KAAkB;EAClB,OAAO,OAAO,KAAK,IAAI;CACzB;CAEA,SAAS,QAEP,KAAkB;EAClB,OAAO,OAAO,KAAK,KAAK;CAC1B;CAEA,OAAO;EACL;EACA;EACA;EACA;EACA;CACF;AACF"}