{"version":3,"file":"index.mjs","sources":["../../../../src/composables/useModalController/index.ts"],"sourcesContent":["import {\n  type ComponentInternalInstance,\n  computed,\n  getCurrentInstance,\n  inject,\n  ref,\n  toValue,\n} from 'vue'\nimport {modalControllerPluginKey} from '../../utils/keys'\nimport type {\n  ControllerKey,\n  PromiseWithModal,\n  PromiseWithModalBoolean,\n} from '../../types/ComponentOrchestratorTypes'\nimport {useSharedModalStack} from '../../composables/useModalManager'\n\nexport const useModalController = () => {\n  const noopPromise = () => {\n    // eslint-disable-next-line no-console\n    console.warn(\n      'useModalController() was called outside of the setup() function! or the plugin is not provided.'\n    )\n    return Promise.resolve(null) as unknown as PromiseWithModal\n  }\n  const modalControllerPlugin = inject(modalControllerPluginKey, {\n    modals: ref(new Map()),\n    _isOrchestratorInstalled: ref(false),\n    create: noopPromise,\n    show: noopPromise as () => PromiseWithModalBoolean,\n    confirm: noopPromise as () => PromiseWithModalBoolean,\n  })\n  if (modalControllerPlugin.create === noopPromise) {\n    throw Error(\n      'useModalController() was called outside of the setup() function! or the plugin is not provided.'\n    )\n  }\n\n  const {lastStack, stack, registry} = useSharedModalStack()\n  const hide = (trigger?: string, id?: ControllerKey) => {\n    if (id === undefined) {\n      if (id === undefined && lastStack?.value) {\n        lastStack?.value.exposed?.hide(trigger)\n      }\n    } else {\n      const stackModal = stack?.value.find((modal) => modal.exposed?.id === id)\n      if (stackModal) {\n        stackModal.exposed?.hide(trigger)\n        return\n      }\n      const modal = modalControllerPlugin.modals.value.get(id)\n      if (modal) {\n        modal.modelValue = false\n        modal['onUpdate:modelValue']?.(false)\n      } else {\n        stack?.value.forEach((modal) => {\n          if (modal.exposed?.id === id) {\n            modal.exposed?.hide(trigger, true)\n          }\n        })\n      }\n    }\n  }\n\n  const hideAll = (trigger?: string) => {\n    stack?.value.forEach((modal) => {\n      modal.exposed?.hide(trigger, true)\n    })\n  }\n\n  const get = (id: ControllerKey) => {\n    if (modalControllerPlugin.modals.value.get(id)) {\n      const modal = modalControllerPlugin.modals.value.get(id)\n      return {\n        modal,\n        show() {\n          modal?.promise.value.show()\n        },\n        hide(trigger?: string) {\n          modal?.promise.value.hide(trigger)\n        },\n      }\n    }\n    if (registry?.value) {\n      for (const [, modal] of registry?.value.entries() ?? []) {\n        if (toValue(modal.exposed?.id) === id) {\n          return {\n            modal,\n            show() {\n              modal.exposed?.show()\n            },\n            hide(trigger?: string) {\n              modal.exposed?.hide(trigger, true)\n            },\n          }\n        }\n      }\n    }\n    return null\n  }\n\n  const instance = getCurrentInstance()\n  const current = () => {\n    const findBModal = (component: ComponentInternalInstance): ComponentInternalInstance | null => {\n      if (!component.parent) {\n        return null\n      }\n      if (component.parent.type.__name === 'BModal') {\n        return component.parent\n      }\n      return findBModal(component.parent)\n    }\n    if (!instance) {\n      return null\n    }\n    const modalComponent = computed(() => findBModal(instance))\n    const modal = computed(() => modalComponent.value?.proxy)\n    return {\n      show() {\n        modalComponent.value?.exposed?.show()\n      },\n      hide(trigger?: string) {\n        modalComponent.value?.exposed?.hide(trigger, true)\n      },\n      modal,\n    }\n  }\n\n  return {\n    hide,\n    hideAll,\n    get,\n    current,\n    ...modalControllerPlugin,\n    // Todo: Supports listening events globally in the future\n  }\n}\n"],"names":["modal","_a"],"mappings":"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"}